Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 547 → Rev 548

/svarcom/trunk/command.c
63,26 → 63,50
/* check RMOD signature (would be overwritten in case of stack overflow */
static char msg[] = "!! MEMORY CORRUPTION ## DETECTED !!";
unsigned short far *rmodsig = MK_FP(rmodseg, 0x100 + 6);
unsigned char far *rmod = MK_FP(rmodseg, 0);
 
if (*rmodsig != 0x2019) {
msg[22] = '1';
outputnl(msg);
printf("rmodseg = %04X ; *rmodsig = %04X\r\n", rmodseg, *rmodsig);
return(1);
goto FAIL;
}
 
/* check last BUFFER byte */
if (BUFFER[sizeof(BUFFER) - 1] != 0xC7) {
msg[22] = '2';
outputnl(msg);
return(2);
goto FAIL;
}
 
/* check last cmdlinebuf byte */
if (cmdlinebuf[CMDLINE_MAXLEN] != 0xC7) {
msg[22] = '3';
outputnl(msg);
return(3);
goto FAIL;
}
/* all good */
 
/* check rmod exec buf */
if (rmod[RMOD_OFFSET_EXECPROG + 127] != 0) {
msg[22] = '4';
goto FAIL;
}
 
/* check rmod exec stdin buf */
if (rmod[RMOD_OFFSET_STDINFILE + 127] != 0) {
msg[22] = '5';
goto FAIL;
}
 
/* check rmod exec stdout buf */
if (rmod[RMOD_OFFSET_STDOUTFILE + 127] != 0) {
msg[22] = '6';
goto FAIL;
}
 
/* else all good */
return(0);
 
/* error handling */
FAIL:
outputnl(msg);
return(1);
}
 
 
421,8 → 445,7
/* special handling of batch files */
if ((ext != NULL) && (imatch(ext, "bat"))) {
/* copy truename of the bat file to rmod buff */
for (i = 0; cmdfile[i] != 0; i++) rmod->batfile[i] = cmdfile[i];
rmod->batfile[i] = 0;
_fstrcpy(rmod->batfile, cmdfile);
 
/* explode args of the bat file and store them in rmod buff */
cmd_explode(buff, cmdline, NULL);
437,28 → 460,21
}
 
/* copy full filename to execute, along with redirected files (if any) */
for (i = 0; cmdfile[i] != 0; i++) rmod_execprog[i] = cmdfile[i];
rmod_execprog[i++] = 0;
_fstrcpy(rmod_execprog, cmdfile);
 
/* copy stdin file if a redirection is needed */
if (redir->stdinfile) {
unsigned short far *farptr = MK_FP(rmod->rmodseg, RMOD_OFFSET_STDINFILE);
unsigned short t;
*farptr = i;
for (t = 0;; t++) {
rmod_execprog[i++] = redir->stdinfile[t];
if (redir->stdinfile[t] == 0) break;
}
char far *farptr = MK_FP(rmod->rmodseg, RMOD_OFFSET_STDINFILE);
_fstrcpy(farptr, redir->stdinfile);
}
 
/* same for stdout file */
if (redir->stdoutfile) {
unsigned short far *farptr = MK_FP(rmod->rmodseg, RMOD_OFFSET_STDOUTFILE);
unsigned short t;
*farptr = i;
for (t = 0;; t++) {
rmod_execprog[i++] = redir->stdoutfile[t];
if (redir->stdoutfile[t] == 0) break;
}
char far *farptr = MK_FP(rmod->rmodseg, RMOD_OFFSET_STDOUTFILE);
unsigned short far *farptr16 = MK_FP(rmod->rmodseg, RMOD_OFFSET_STDOUTAPP);
_fstrcpy(farptr, redir->stdoutfile);
/* openflag */
farptr = MK_FP(rmod->rmodseg, RMOD_OFFSET_STDOUTAPP);
*farptr = redir->stdout_openflag;
*farptr16 = redir->stdout_openflag;
}
 
/* copy cmdtail to rmod's PSP and compute its len */