add directory gnu
This commit is contained in:
87
gnu/glibc/glibc-1.03/time/emkdir.c
Normal file
87
gnu/glibc/glibc-1.03/time/emkdir.c
Normal file
@@ -0,0 +1,87 @@
|
||||
#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 */
|
||||
Reference in New Issue
Block a user