Annotation of truecrypt/setup/dir.c, revision 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.