Added makepath function to support

This commit is contained in:
Matt Hill
2014-12-18 21:24:41 -05:00
parent 88a052cb1b
commit 3af631db23
2 changed files with 57 additions and 0 deletions

View File

@@ -141,4 +141,58 @@ namespace alpr
return filename.substr(0, lastindex);
}
static int makeDir(const char *path, mode_t mode)
{
struct stat st;
int status = 0;
if (stat(path, &st) != 0)
{
/* Directory does not exist. EEXIST for race condition */
if (mkdir(path, mode) != 0 && errno != EEXIST)
status = -1;
}
else if (!S_ISDIR(st.st_mode))
{
errno = ENOTDIR;
status = -1;
}
return(status);
}
/**
** makePath - ensure all directories in path exist
** Algorithm takes the pessimistic view and works top-down to ensure
** each directory in path exists, rather than optimistically creating
** the last element and working backwards.
*/
bool makePath(const char* path, mode_t mode)
{
char *pp;
char *sp;
int status;
char *copypath = strdup(path);
status = 0;
pp = copypath;
while (status == 0 && (sp = strchr(pp, '/')) != 0)
{
if (sp != pp)
{
/* Neither root nor double slash in path */
*sp = '\0';
status = makeDir(copypath, mode);
*sp = '/';
}
pp = sp + 1;
}
if (status == 0)
status = makeDir(path, mode);
free(copypath);
return (status);
}
}

View File

@@ -11,12 +11,14 @@
#include <unistd.h>
#endif
#include <stdlib.h>
#include <sys/stat.h>
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <errno.h>
namespace alpr
{
@@ -36,6 +38,7 @@ namespace alpr
bool stringCompare( const std::string &left, const std::string &right );
bool makePath(const char* path, mode_t mode);
}
#endif // FILESYSTEM_H