|
|
1.1.1.2 ! root 1: /* Copyright (C) 2004 TrueCrypt Foundation 1.1 root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.