Annotation of truecrypt/setup/dir.c, revision 1.1.1.1

1.1       root        1: /* Copyright (C) 2004 TrueCrypt Team, truecrypt.org
                      2:    This product uses components written by Paul Le Roux <[email protected]> */
                      3: 
                      4: #include "TCdefs.h"
                      5: 
                      6: #include <sys\types.h>
                      7: #include <sys\stat.h>
                      8: #include <direct.h>
                      9: #include <string.h>
                     10: #include <stdlib.h>
                     11: #include <errno.h>
                     12: 
                     13: #include "dir.h"
                     14: 
                     15: /* create full directory tree. returns 0 for success, -1 if failure */
                     16: int
                     17: mkfulldir (char *path, BOOL bCheckonly)
                     18: {
                     19:        struct _stat st;
                     20:        char *uniq_file;
                     21: 
                     22:        if (strlen (path) == 3 && path[1] == ':')
                     23:                goto is_root;   /* keep final slash in root if present */
                     24: 
                     25:        /* strip final forward or backslash if we have one! */
                     26:        uniq_file = strrchr (path, '\\');
                     27:        if (uniq_file && uniq_file[1] == '\0')
                     28:                uniq_file[0] = '\0';
                     29:        else
                     30:        {
                     31:                uniq_file = strrchr (path, '/');
                     32:                if (uniq_file && uniq_file[1] == '\0')
                     33:                        uniq_file[0] = '\0';
                     34:        }
                     35: 
                     36:       is_root:
                     37:        if (bCheckonly == TRUE)
                     38:                return _stat (path, &st);
                     39: 
                     40:        if (_stat (path, &st))
                     41:                return mkfulldir_internal (path);
                     42:        else
                     43:                return 0;
                     44: }
                     45: 
                     46: 
                     47: int
                     48: mkfulldir_internal (char *path)
                     49: {
                     50:        char *token;
                     51:        struct _stat st;
                     52:        static char tokpath[_MAX_PATH];
                     53:        static char trail[_MAX_PATH];
                     54: 
                     55:        strcpy (tokpath, path);
                     56:        trail[0] = '\0';
                     57: 
                     58:        token = strtok (tokpath, "\\/");
                     59: 
                     60:        if (tokpath[0] == '\\' && tokpath[1] == '\\')
                     61:        {                       /* unc */
                     62:                trail[0] = tokpath[0];
                     63:                trail[1] = tokpath[1];
                     64:                trail[2] = '\0';
                     65:                strcat (trail, token);
                     66:                strcat (trail, "\\");
                     67:                token = strtok (NULL, "\\/");
                     68:                if (token)
                     69:                {               /* get share name */
                     70:                        strcat (trail, token);
                     71:                        strcat (trail, "\\");
                     72:                }
                     73:                token = strtok (NULL, "\\/");
                     74:        }
                     75: 
                     76:        if (tokpath[1] == ':')
                     77:        {                       /* drive letter */
                     78:                strcat (trail, tokpath);
                     79:                strcat (trail, "\\");
                     80:                token = strtok (NULL, "\\/");
                     81:        }
                     82: 
                     83:        while (token != NULL)
                     84:        {
                     85:                int x;
                     86:                strcat (trail, token);
                     87:                x = _mkdir (trail);
                     88:                strcat (trail, "\\");
                     89:                token = strtok (NULL, "\\/");
                     90:        }
                     91: 
                     92:        return _stat (path, &st);
                     93: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.