1 |
kusanagi |
1.1 |
/** @file |
2 |
kusanagi |
2.0 |
* $Source: /home/cvsmanager/yoda/event/DirectoryStructure.c,v $ |
3 |
kusanagi |
4.4 |
* $Id: DirectoryStructure.c,v 4.0 2005/03/06 04:33:01 kusanagi Exp $ |
4 |
kusanagi |
2.0 |
* $Author: kusanagi $ |
5 |
kusanagi |
1.1 |
* |
6 |
|
|
* Implementation of the CreateDirectoryStructure function. |
7 |
|
|
*/ |
8 |
|
|
|
9 |
|
|
#include <sys/stat.h> |
10 |
|
|
#include <sys/types.h> |
11 |
|
|
#include <string.h> |
12 |
|
|
#include <stdlib.h> |
13 |
|
|
#include <stdio.h> |
14 |
|
|
|
15 |
|
|
#include "DirectoryStructure.h" |
16 |
|
|
|
17 |
|
|
/** |
18 |
|
|
* Create all directories that are needed to create a certain file name. |
19 |
|
|
* @param FileName file name with the path. |
20 |
|
|
* @retval 0 everything was OK. |
21 |
|
|
* @retval -1 an error occurred, errno is set accordingly. |
22 |
|
|
*/ |
23 |
|
|
int CreateDirectoryStructure(const char *FileName) { |
24 |
|
|
const char *pathend; |
25 |
|
|
char *path = malloc(strlen(FileName) + 1); |
26 |
|
|
struct stat buf; |
27 |
|
|
|
28 |
|
|
for (pathend = FileName+1; pathend != NULL; |
29 |
|
|
pathend = strchr(pathend+1, '/')) { |
30 |
|
|
strncpy(path, FileName, (pathend - FileName)); |
31 |
|
|
path[pathend - FileName] = '\0'; |
32 |
|
|
if (stat(path, &buf) != 0) { |
33 |
|
|
if (mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) != 0) { |
34 |
|
|
return -1; |
35 |
|
|
} |
36 |
|
|
} |
37 |
|
|
} |
38 |
|
|
return 0; |
39 |
|
|
} |
40 |
|
|
|