home *** CD-ROM | disk | FTP | other *** search
/ Unix System Administration Handbook 1997 October / usah_oct97.iso / news / cnews.tar / relay / mkdirs.c < prev    next >
C/C++ Source or Header  |  1991-10-23  |  714b  |  38 lines

  1. /*
  2.  * mkdirs - make the directories implied by `name'
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <sys/types.h>
  8. #include <sys/stat.h>
  9. #include "libc.h"
  10. #include "news.h"
  11.  
  12. /*
  13.  * Given a/b/c/d, try to make any of a, a/b, a/b/c and a/b/c/d which are missing;
  14.  * stop on first failure.
  15.  * Returns success.
  16.  */
  17. boolean
  18. mkdirs(name, uid, gid)
  19. register char *name;
  20. int uid, gid;
  21. {
  22.     register char *cp;
  23.     register int isthere = YES;
  24.     struct stat stbuf;
  25.  
  26.     for (cp = name; isthere && *cp != '\0'; cp++)
  27.         if (*cp == FNDELIM) {
  28.             *cp = '\0';
  29.             isthere = stat(name, &stbuf) >= 0;
  30.             if (!isthere) {
  31.                 isthere = mkdir(name, 0777) >= 0;
  32.                 (void) chown(name, uid, gid);
  33.             }
  34.             *cp = FNDELIM;
  35.         }
  36.     return isthere;
  37. }
  38.