Files
2024-02-19 00:24:47 -05:00

88 lines
1.5 KiB
C

#ifdef LIBC
#include <ansidecl.h>
#endif
#ifndef lint
#ifndef NOID
static char elsieid[] = "@(#)emkdir.c 8.20";
#endif /* !defined NOID */
#endif /* !defined lint */
#ifndef emkdir
/*LINTLIBRARY*/
#include "private.h"
extern char * imalloc P((int n));
extern void ifree P((char * p));
static char *
quoted(name)
register const char * name;
{
register char * result;
register char * cp;
register int c;
if (name == NULL)
name = "";
result = imalloc(4 * strlen(name) + 3);
if (result == NULL)
return NULL;
cp = result;
#ifdef unix
*cp++ = '\'';
while ((c = *name++) != '\0')
if (c == '\'') {
*cp++ = c;
*cp++ = '\\';
*cp++ = c;
*cp++ = c;
} else *cp++ = c;
*cp++ = '\'';
#else /* !defined unix */
while ((c = *name++) != '\0')
if (c == '/')
*cp++ = '\\';
else *cp++ = c;
#endif /* !defined unix */
*cp = '\0';
return result;
}
int
emkdir(name, mode)
const char * name;
const int mode;
{
register int result;
register const char * format;
register char * command;
register char * qname;
if ((qname = quoted(name)) == NULL)
return -1;
#ifdef unix
format = "mkdir 2>&- %s && chmod 2>&- %o %s";
#else /* !defined unix */
format = "mkdir %s";
#endif /* !defined unix */
command = imalloc(strlen(format) + 2 * strlen(qname) + 20 + 1);
if (command == NULL) {
ifree(qname);
return -1;
}
(void) sprintf(command, format, qname, mode, qname);
ifree(qname);
result = system(command);
ifree(command);
return (result == 0) ? 0 : -1;
}
/*
** UNIX is a registered trademark of AT&T.
*/
#endif /* !defined emkdir */