home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / glibc-1.06 / time / emkdir.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-05-15  |  1.5 KB  |  84 lines

  1. #ifndef lint
  2. #ifndef NOID
  3. static char    elsieid[] = "@(#)emkdir.c    8.20";
  4. #endif /* !defined NOID */
  5. #endif /* !defined lint */
  6.  
  7. #ifndef emkdir
  8.  
  9. /*LINTLIBRARY*/
  10.  
  11. #include "private.h"
  12.  
  13. extern char *    imalloc P((int n));
  14. extern void    ifree P((char * p));
  15.  
  16. static char *
  17. quoted(name)
  18. register const char *    name;
  19. {
  20.     register char *    result;
  21.     register char *    cp;
  22.     register int    c;
  23.  
  24.     if (name == NULL)
  25.         name = "";
  26.     result = imalloc(4 * strlen(name) + 3);
  27.     if (result == NULL)
  28.         return NULL;
  29.     cp = result;
  30. #ifdef unix
  31.     *cp++ = '\'';
  32.     while ((c = *name++) != '\0')
  33.         if (c == '\'') {
  34.             *cp++ = c;
  35.             *cp++ = '\\';
  36.             *cp++ = c;
  37.             *cp++ = c;
  38.         } else    *cp++ = c;
  39.     *cp++ = '\'';
  40. #else /* !defined unix */
  41.     while ((c = *name++) != '\0')
  42.         if (c == '/')
  43.             *cp++ = '\\';
  44.         else    *cp++ = c;
  45. #endif /* !defined unix */
  46.     *cp = '\0';
  47.     return result;
  48. }
  49.  
  50. int
  51. emkdir(name, mode)
  52. const char *    name;
  53. const int    mode;
  54. {
  55.     register int        result;
  56.     register const char *    format;
  57.     register char *        command;
  58.     register char *        qname;
  59.  
  60.     if ((qname = quoted(name)) == NULL)
  61.         return -1;
  62. #ifdef unix
  63.     format = "mkdir 2>&- %s && chmod 2>&- %o %s";
  64. #else /* !defined unix */
  65.     format = "mkdir %s";
  66. #endif /* !defined unix */
  67.     command = imalloc(strlen(format) + 2 * strlen(qname) + 20 + 1);
  68.     if (command == NULL) {
  69.         ifree(qname);
  70.         return -1;
  71.     }
  72.     (void) sprintf(command, format, qname, mode, qname);
  73.     ifree(qname);
  74.     result = system(command);
  75.     ifree(command);
  76.     return (result == 0) ? 0 : -1;
  77. }
  78.  
  79. /*
  80. ** UNIX is a registered trademark of AT&T.
  81. */
  82.  
  83. #endif /* !defined emkdir */
  84.