Path: blob/main/archivers/lha/files/patch-util.c
16147 views
--- src/util.c.orig 2000-10-04 14:57:38 UTC1+++ src/util.c2@@ -28,10 +28,10 @@ copyfile(f1, f2, size, crc_flg) /* retur3* append */4{5unsigned short xsize;6- char *buf;7+ unsigned char *buf;8long rsize = 0;910- if ((buf = (char *) malloc(BUFFERSIZE)) == NULL)11+ if ((buf = (unsigned char *) malloc(BUFFERSIZE)) == NULL)12fatal_error("virtual memory exhausted.\n");13crc = 0;14if ((crc_flg == 2 || crc_flg) && text_mode)15@@ -100,9 +100,7 @@ encode_stored_crc(ifp, ofp, size, origin16erreturns *filename */17/* ------------------------------------------------------------------------ */18unsigned char *19-convdelim(path, delim)20- unsigned char *path;21- unsigned char delim;22+convdelim(unsigned char *path, unsigned char delim)23{24unsigned char c;25unsigned char *p;26@@ -276,21 +274,27 @@ rmdir(path)27char *path;28{29int stat, rtn = 0;30- char *cmdname;31- if ((cmdname = (char *) malloc(strlen(RMDIRPATH) + 1 + strlen(path) + 1))32- == 0)33+ pid_t child;34+35+36+ /* XXX thomas: shell meta chars in path could exec commands */37+ /* therefore we should avoid using system() */38+ if ((child = fork()) < 0)39+ return (-1); /* fork error */40+ else if (child) { /* parent process */41+ while (child != wait(&stat)) /* ignore signals */42+ continue;43+ }44+ else { /* child process */45+ execl(RMDIRPATH, "rmdir", path, (char *) 0);46+ /* never come here except execl is error */47return (-1);48- strcpy(cmdname, RMDIRPATH);49- *(cmdname + strlen(RMDIRPATH)) = ' ';50- strcpy(cmdname + strlen(RMDIRPATH) + 1, path);51- if ((stat = system(cmdname)) < 0)52- rtn = -1; /* fork or exec error */53- else if (stat) { /* RMDIR command error */54- errno = EIO;55- rtn = -1;56}57- free(cmdname);58- return (rtn);59+ if (stat != 0) {60+ errno = EIO; /* cannot get error num. */61+ return (-1);62+ }63+ return (0);64}6566/* ------------------------------------------------------------------------ */676869