* Architecture Independent System Init
* system.c
*/
-#include <common.h>
+#define DEBUG 0
+#include <acess.h>
// === TYPES ===
typedef struct
{
int fp;
int fLen = 0;
- int i = 0;
+ int i;
char *fData;
tConfigFile *file;
tConfigLine *line;
}
// Create Directory
else if(strcmp(line->Parts[0], "mkdir") == 0) {
- if( line->nParts != 3 ) {
+ if( line->nParts != 2 ) {
Warning("Configuration command 'mkdir' requires 1 argument, %i given",
line->nParts-1);
continue;
}
// Spawn a process
else if(strcmp(line->Parts[0], "spawn") == 0) {
- if( line->nParts != 3 ) {
+ if( line->nParts != 2 ) {
Warning("Configuration command 'spawn' requires 1 argument, %i given",
line->nParts-1);
continue;
// Clean up after ourselves
for( i = 0; i < file->nLines; i++ ) {
+ if( file->Lines[i].nParts == 0 ) continue; // Skip blank
free( file->Lines[i].Parts );
}
free( file );
{
char *ptr;
char *start;
- int nLines = 0;
+ int nLines = 1;
int i, j;
tConfigFile *ret;
+ ENTER("pFileData", FileData);
+
// Prescan and count the number of lines
for(ptr = FileData; *ptr; ptr++)
{
continue;
}
- #if 0 // Don't handle windows style EOLs
- if(ptr[-1] == '\r')
- {
- if( &ptr[-1] == FileData ) {
- nLines ++;
- continue;
- }
- if(ptr[-2] == '\\') continue;
- }
- #endif
-
// Escaped EOL
if(ptr[-1] == '\\') continue;
nLines ++;
}
+ LOG("nLines = %i", nLines);
+
// Ok so we have `nLines` lines, now to allocate our return
ret = malloc( sizeof(tConfigFile) + sizeof(tConfigLine)*nLines );
ret->nLines = nLines;
for(;;)
{
// Read leading whitespace
- while( *ptr && (*ptr == '\t' || *ptr == ' ') ) ptr++;
+ while( *ptr == '\t' || *ptr == ' ' ) ptr++;
// End of line/file
- if( *ptr == '\0' || *ptr == '\n' ) break;
+ if( *ptr == '\0' || *ptr == '\n' ) {
+ if(*ptr == '\n') ptr ++;
+ break;
+ }
// Comment
- if( *ptr == '#' || *ptr == ';' ) break;
+ if( *ptr == '#' || *ptr == ';' ) {
+ while( *ptr && *ptr != '\n' ) ptr ++;
+ if(*ptr == '\n') ptr ++;
+ break;
+ }
ret->Lines[i].nParts ++;
// Quoted
continue;
}
// Unquoted
- while( *ptr && !(*ptr == '\t' || *ptr == ' ') )
+ while( *ptr && !(*ptr == '\t' || *ptr == ' ') && *ptr != '\n' )
ptr++;
}
+ LOG("ret->Lines[%i].nParts = %i", i, ret->Lines[i].nParts);
+
+ if( ret->Lines[i].nParts == 0 ) {
+ ret->Lines[i].Parts = NULL;
+ continue;
+ }
+
// Allocate part list
ret->Lines[i].Parts = malloc( sizeof(char*) * ret->Lines[i].nParts );
for( ptr = start, j = 0; ; j++ )
{
// Read leading whitespace
- while( *ptr && (*ptr == '\t' || *ptr == ' ') ) ptr++;
+ while( *ptr == '\t' || *ptr == ' ' ) ptr++;
// End of line/file
- if( *ptr == '\0' || *ptr == '\n' ) break;
+ if( *ptr == '\0' || *ptr == '\n' ) {
+ if(*ptr == '\n') ptr ++;
+ break;
+ }
// Comment
- if( *ptr == '#' || *ptr == ';' ) break;
-
+ if( *ptr == '#' || *ptr == ';' ) {
+ while( *ptr && *ptr != '\n' ) ptr ++;
+ if(*ptr == '\n') ptr ++;
+ break;
+ }
ret->Lines[i].Parts[j] = ptr;
}
// Unquoted
else {
- while( *ptr && !(*ptr == '\t' || *ptr == ' ') )
+ while( *ptr != '\t' && *ptr != ' ' && *ptr != '\n' )
ptr++;
}
// Break if we have reached NULL
- if( *ptr == '\0' ) break;
+ if( *ptr == '\0' ) {
+ LOG("ret->Lines[%i].Parts[%i] = '%s'", i, j, ret->Lines[i].Parts[j]);
+ break;
+ }
+ if( *ptr == '\n' ) {
+ *ptr = '\0';
+ LOG("ret->Lines[%i].Parts[%i] = '%s'", i, j, ret->Lines[i].Parts[j]);
+ ptr ++;
+ break;
+ }
*ptr = '\0'; // Cap off string
+ LOG("ret->Lines[%i].Parts[%i] = '%s'", i, j, ret->Lines[i].Parts[j]);
ptr ++; // And increment for the next round
}
}
+ LEAVE('p', ret);
return ret;
}