X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Finit_src%2Fmain.c;h=1cdf98b6e636aa075b4eaf606fb9903006d17f0f;hb=94d9540cae85d2f9e145fe4d2986e84b46bbd052;hp=3d9602821617d9b32c633002689a9c34b0676e03;hpb=bfb42102be5c178ce08b7861c11ee2694004413a;p=tpg%2Facess2.git diff --git a/Usermode/Applications/init_src/main.c b/Usermode/Applications/init_src/main.c index 3d960282..1cdf98b6 100644 --- a/Usermode/Applications/init_src/main.c +++ b/Usermode/Applications/init_src/main.c @@ -252,13 +252,12 @@ int ProcessInittab(const char *Path) goto lineError; } AddKTerminal(id, command); - free(command); } else if(strcmp(cmdbuf, "stty") == 0 ) { // stty [78][NOE][012][bB] char path_seg[32+1]; char modespec[4+6+1]; - if( fscanf(fp, "%32s %6s ", path_seg, modespec) != 2 ) { + if( fscanf(fp, "%32s %10s ", path_seg, modespec) != 2 ) { goto lineError; } char **command = ReadCommand(fp); @@ -271,8 +270,14 @@ int ProcessInittab(const char *Path) // - Runs a daemon (respawning) that logs to the specified files // - Will append a header whenever the daemon starts char *stdout_path = ReadQuotedString(fp); + if( !stdout_path ) + goto lineError; char *stderr_path = ReadQuotedString(fp); + if( !stderr_path ) + goto lineError; char **command = ReadCommand(fp); + if( !command ) + goto lineError; AddDaemon(stdout_path, stderr_path, command); } @@ -368,8 +373,9 @@ int AddSerialTerminal(const char *DevPathSegment, const char *ModeStr, char **Co int baud; // Parse mode string - if( sscanf(ModeStr, "%1[78]%1[NOE]%1[012]%*1[bB]%d", &dbit, &parity, &sbit, &baud) != 5 ) { + if( sscanf(ModeStr, "%1[78]%1[NOE]%1[012]%*1[bB]%d", &dbit, &parity, &sbit, &baud) != 4 ) { // Oops? + _SysDebug("Serial mode string is invalid ('%s')", ModeStr); return -1; } @@ -436,6 +442,11 @@ int SpawnSTerm(tInitProgram *Program) int in = _SysOpen(Program->TypeInfo.STerm.Path, OPENFLAG_READ); int out = _SysOpen(Program->TypeInfo.STerm.Path, OPENFLAG_WRITE); + if(in == -1 || out == -1 ) { + _SysDebug("Unable to open serial port '%s'", Program->TypeInfo.STerm.Path); + return -1; + } + #if 0 if( _SysIOCtl(in, 0, NULL) != DRV_TYPE_SERIAL ) { @@ -462,6 +473,13 @@ int SpawnDaemon(tInitProgram *Program) return -2; } + // Log spawn header + { + char buffer[101]; + size_t len = snprintf(buffer, 100, "[%i] init spawning '%s'\n", _SysTimestamp(), Program->Command); + _SysWrite(out, buffer, len); + } + return SpawnCommand(in, out, err, Program->Command); }