mirror of
https://github.com/kerberos-io/openalpr-base.git
synced 2025-10-06 21:22:49 +08:00
Added makepath function to support
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user