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

1.1.1.9   root        1: /*
1.1.1.11  root        2:  Legal Notice: Some portions of the source code contained in this file were
                      3:  derived from the source code of Encryption for the Masses 2.02a, which is
                      4:  Copyright (c) 1998-2000 Paul Le Roux and which is governed by the 'License
                      5:  Agreement for Encryption for the Masses'. Modifications and additions to
                      6:  the original source code (contained in this file) and all other portions of
                      7:  this file are Copyright (c) 2003-2008 TrueCrypt Foundation and are governed
1.1.1.15! root        8:  by the TrueCrypt License 2.8 the full text of which is contained in the
1.1.1.11  root        9:  file License.txt included in TrueCrypt binary and source code distribution
1.1.1.9   root       10:  packages. */
1.1       root       11: 
1.1.1.6   root       12: #include "Tcdefs.h"
1.1       root       13: 
1.1.1.6   root       14: #include <sys/types.h>
                     15: #include <sys/stat.h>
1.1       root       16: #include <direct.h>
                     17: #include <string.h>
                     18: #include <stdlib.h>
                     19: #include <errno.h>
                     20: 
1.1.1.6   root       21: #include "Dir.h"
1.1       root       22: 
                     23: /* create full directory tree. returns 0 for success, -1 if failure */
                     24: int
1.1.1.11  root       25: mkfulldir (char *oriPath, BOOL bCheckonly)
1.1       root       26: {
                     27:        struct _stat st;
                     28:        char *uniq_file;
1.1.1.11  root       29:        char path [TC_MAX_PATH];
                     30: 
                     31:        strcpy (path, oriPath);
1.1       root       32: 
                     33:        if (strlen (path) == 3 && path[1] == ':')
                     34:                goto is_root;   /* keep final slash in root if present */
                     35: 
                     36:        /* strip final forward or backslash if we have one! */
                     37:        uniq_file = strrchr (path, '\\');
                     38:        if (uniq_file && uniq_file[1] == '\0')
                     39:                uniq_file[0] = '\0';
                     40:        else
                     41:        {
                     42:                uniq_file = strrchr (path, '/');
                     43:                if (uniq_file && uniq_file[1] == '\0')
                     44:                        uniq_file[0] = '\0';
                     45:        }
                     46: 
                     47:       is_root:
1.1.1.6   root       48:        if (bCheckonly)
1.1       root       49:                return _stat (path, &st);
                     50: 
                     51:        if (_stat (path, &st))
                     52:                return mkfulldir_internal (path);
                     53:        else
                     54:                return 0;
                     55: }
                     56: 
                     57: 
                     58: int
                     59: mkfulldir_internal (char *path)
                     60: {
                     61:        char *token;
                     62:        struct _stat st;
                     63:        static char tokpath[_MAX_PATH];
                     64:        static char trail[_MAX_PATH];
                     65: 
                     66:        strcpy (tokpath, path);
                     67:        trail[0] = '\0';
                     68: 
                     69:        token = strtok (tokpath, "\\/");
                     70: 
                     71:        if (tokpath[0] == '\\' && tokpath[1] == '\\')
                     72:        {                       /* unc */
                     73:                trail[0] = tokpath[0];
                     74:                trail[1] = tokpath[1];
                     75:                trail[2] = '\0';
                     76:                strcat (trail, token);
                     77:                strcat (trail, "\\");
                     78:                token = strtok (NULL, "\\/");
                     79:                if (token)
                     80:                {               /* get share name */
                     81:                        strcat (trail, token);
                     82:                        strcat (trail, "\\");
                     83:                }
                     84:                token = strtok (NULL, "\\/");
                     85:        }
                     86: 
                     87:        if (tokpath[1] == ':')
                     88:        {                       /* drive letter */
                     89:                strcat (trail, tokpath);
                     90:                strcat (trail, "\\");
                     91:                token = strtok (NULL, "\\/");
                     92:        }
                     93: 
                     94:        while (token != NULL)
                     95:        {
                     96:                int x;
                     97:                strcat (trail, token);
                     98:                x = _mkdir (trail);
                     99:                strcat (trail, "\\");
                    100:                token = strtok (NULL, "\\/");
                    101:        }
                    102: 
                    103:        return _stat (path, &st);
                    104: }

unix.superglobalmegacorp.com

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