| 1 | kusanagi | 1.1 | /** @file | 
| 2 | kusanagi | 2.0 | * $Source: /home/cvsmanager/yoda/event/DirectoryStructure.c,v $ | 
| 3 | kusanagi | 5.0 | * $Id: DirectoryStructure.c,v 4.4 2005/05/28 10:44:09 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 |  |  |  |