You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
671 B
C
36 lines
671 B
C
#include "dir.h"
|
|
|
|
#include <sys/stat.h>
|
|
#include <libgen.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
void mkdir_p_inside( char* buffer, int mode )
|
|
{
|
|
if( !*buffer || buffer[1] == '/' ) { return; }
|
|
|
|
struct stat s = {0};
|
|
dirname(buffer);
|
|
if( -1 == stat(buffer,&s) ) {
|
|
mkdir_p_inside( buffer, mode );
|
|
}
|
|
|
|
buffer[strlen(buffer)] = '/';
|
|
mkdir( buffer, mode );
|
|
}
|
|
void mkdir_p( char* buffer, int mode )
|
|
{
|
|
char* copy = strdup(buffer);
|
|
mkdir_p_inside(copy,mode);
|
|
free(copy);
|
|
}
|
|
void util_dir_create_containing( const char* buffer, int mode )
|
|
{
|
|
int size = strlen(buffer);
|
|
char buffer2[size+1];
|
|
strncpy( buffer2, buffer, size+1 );
|
|
|
|
mkdir_p(dirname(buffer2), 0640 );
|
|
}
|
|
|