AcessNative - Fixing Fixing Fixing
[tpg/acess2.git] / Kernel / system.c
index df9ac41..5450883 100644 (file)
@@ -23,7 +23,7 @@ typedef struct
 }      tConfigFile;
 typedef struct
 {
-       char    *Name;          // Name
+       const char      *Name;          // Name
         int    MinArgs;        // Minimum number of arguments
         int    MaxArgs;        // Maximum number of arguments
        Uint    IntArgs;        // Bitmap of arguments that should be treated as integers
@@ -35,7 +35,7 @@ typedef struct
 extern void    Arch_LoadBootModules(void);
 extern int     Modules_LoadBuiltins(void);
 extern void    Modules_SetBuiltinParams(char *Name, char *ArgString);
-extern void    Debug_SetKTerminal(char *File);
+extern void    Debug_SetKTerminal(const char *File);
 
 // === PROTOTYPES ===
 void   System_Init(char *Commandline);
@@ -64,7 +64,7 @@ const tConfigCommand  caConfigCommands[] = {
 #define NUM_CONFIG_COMMANDS    (sizeof(caConfigCommands)/sizeof(caConfigCommands[0]))
 
 // === GLOBALS ===
-char   *gsConfigScript = "/Acess/Conf/BootConf.cfg";
+const char     *gsConfigScript = "/Acess/Conf/BootConf.cfg";
 char   *argv[32];
  int   argc;
 
@@ -221,7 +221,8 @@ void System_ParseVFS(char *Arg)
 }
 
 /**
- * \biref Parse a module argument string
+ * \brief Parse a module argument string
+ * \param Arg  Argument string
  */
 void System_ParseModuleArgs(char *Arg)
 {
@@ -337,7 +338,8 @@ void System_ExecuteScript(void)
                if(line->Parts[0][0] == ':')    continue;       // Ignore labels
                
                // Prescan and eliminate variables
-               for( j = 1; j < line->nParts; j++ ) {
+               for( j = 1; j < line->nParts; j++ )
+               {
                        Log_Debug("Config", "Arg #%i is '%s'", j, line->Parts[j]);
                        bReplaced[j] = 0;
                        if( line->Parts[j][0] != '$' )  continue;
@@ -355,13 +357,16 @@ void System_ExecuteScript(void)
                        bReplaced[j] = 1;
                }
                
+               // Find the command name
                for( j = 0; j < NUM_CONFIG_COMMANDS; j++ )
                {
                        Uint    args[N_MAX_ARGS];
+                       
                        if(strcmp(line->Parts[0], caConfigCommands[j].Name) != 0)       continue;
                        
                        Log_Debug("Config", "Command '%s', %i args passed", line->Parts[0], line->nParts-1);
                        
+                       // Check against minimum argument count
                        if( line->nParts - 1 < caConfigCommands[j].MinArgs ) {
                                Log_Warning("Config",
                                        "Configuration command '%s' requires at least %i arguments, %i given",
@@ -370,6 +375,7 @@ void System_ExecuteScript(void)
                                break;
                        }
                        
+                       // Check for extra arguments
                        if( line->nParts - 1 > caConfigCommands[j].MaxArgs ) {
                                Log_Warning("Config",
                                        "Configuration command '%s' takes at most %i arguments, %i given",
@@ -378,10 +384,12 @@ void System_ExecuteScript(void)
                                break;
                        }
                        
+                       // Fill in defaults
                        for( k = caConfigCommands[j].MaxArgs-1; k > line->nParts - 1; k-- ) {
                                args[k] = caConfigCommands[j].OptDefaults[k];
                        }
                        
+                       // Convert arguments to integers
                        for( k = line->nParts-1; k--; )
                        {
                                if( caConfigCommands[j].IntArgs & (1 << k) ) {
@@ -547,6 +555,7 @@ tConfigFile *System_Int_ParseFile(char *FileData)
                start = ptr;
                
                ret->Lines[i].nParts = 0;
+               ret->Lines[i].Parts = NULL;
                
                // Count parts
                for(;;)
@@ -639,6 +648,12 @@ tConfigFile        *System_Int_ParseFile(char *FileData)
                }
        }
        
+       if( i < ret->nLines ) {
+               ret->Lines[i].nParts = 0;
+               ret->Lines[i].Parts = NULL;
+               Log_Log("System", "Cleaning up final empty line");
+       }
+       
        LEAVE('p', ret);
        return ret;
 }

UCC git Repository :: git.ucc.asn.au