Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utcs!mnetor!seismo!elsie!ado From: ado@elsie.UUCP Newsgroups: net.unix-wizards Subject: Re: so who has mkdir and rmdir for system V Message-ID: <6179@elsie.UUCP> Date: Sat, 12-Jul-86 18:37:55 EDT Article-I.D.: elsie.6179 Posted: Sat Jul 12 18:37:55 1986 Date-Received: Sat, 12-Jul-86 23:12:04 EDT References: <1885@brl-smoke.ARPA> Organization: NIH-LEC, Bethesda, MD Lines: 50 Summary: idiot proofing In article <1885@brl-smoke.ARPA>, gwyn@BRL.ARPA (VLD/VMB) writes: > int > mkdir( dirname ) > char *dirname; > { > ... > (void) strcat( strcpy( buf, "mkdir 2>/dev/null " ), dirname ); > retval = system( buf ); /* assuming your system() works right */ > ... The above can use a bit of idiot proofing--especially against meta characters in dirname. Below is the version of "mkdir" that went out with the time zone stuff. # /*LINTLIBRARY*/ #include "stdio.h" #ifdef OJBECTID static char sccsid[] = "@(#)mkdir.c 7.2"; #endif extern FILE * popen(); mkdir(name) char * name; { register FILE * fp; register int c; register int oops; if ((fp = popen("sh", "w")) == NULL) return -1; (void) fputs("mkdir 2>&- '", fp); if (name != NULL) while ((c = *name++) != '\0') if (c == '\'') (void) fputs("'\\''", fp); else (void) fputc(c, fp); (void) fputs("'\n", fp); oops = ferror(fp); return (pclose(fp) == 0 && !oops) ? 0 : -1; } -- UNIX and System V are an AT&T Bell Laboratories (or AT&T registered) trademarks. -- UUCP: ..decvax!seismo!elsie!ado ARPA: elsie!ado@seismo.ARPA DEC, VAX, Elsie & Ado are Digital, Borden & Ampex trademarks.