mirror of
https://github.com/kerberos-io/openalpr-base.git
synced 2025-10-07 02:52:50 +08:00
Added makepath function to support
This commit is contained in:
@@ -141,4 +141,58 @@ namespace alpr
|
|||||||
return filename.substr(0, lastindex);
|
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);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
@@ -11,12 +11,14 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
namespace alpr
|
namespace alpr
|
||||||
{
|
{
|
||||||
@@ -36,6 +38,7 @@ namespace alpr
|
|||||||
|
|
||||||
bool stringCompare( const std::string &left, const std::string &right );
|
bool stringCompare( const std::string &left, const std::string &right );
|
||||||
|
|
||||||
|
bool makePath(const char* path, mode_t mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // FILESYSTEM_H
|
#endif // FILESYSTEM_H
|
||||||
|
Reference in New Issue
Block a user