helpers.cpp: port safe_mkdir() from martii

Origin commit data
------------------
Commit: 57267a28aa
Author: vanhofen <vanhofen@gmx.de>
Date: 2013-11-22 (Fri, 22 Nov 2013)

Origin message was:
------------------
- helpers.cpp: port safe_mkdir() from martii
This commit is contained in:
vanhofen
2013-11-22 12:35:20 +01:00
parent 5efc09d8dc
commit ba6a667595
3 changed files with 29 additions and 18 deletions

View File

@@ -494,17 +494,17 @@ _remount:
if(!res) { if(!res) {
snprintf(cmd, sizeof(cmd), "%s/movies", dst); snprintf(cmd, sizeof(cmd), "%s/movies", dst);
safe_mkdir((char *) cmd); safe_mkdir(cmd);
snprintf(cmd, sizeof(cmd), "%s/pictures", dst); snprintf(cmd, sizeof(cmd), "%s/pictures", dst);
safe_mkdir((char *) cmd); safe_mkdir(cmd);
snprintf(cmd, sizeof(cmd), "%s/epg", dst); snprintf(cmd, sizeof(cmd), "%s/epg", dst);
safe_mkdir((char *) cmd); safe_mkdir(cmd);
snprintf(cmd, sizeof(cmd), "%s/music", dst); snprintf(cmd, sizeof(cmd), "%s/music", dst);
safe_mkdir((char *) cmd); safe_mkdir(cmd);
snprintf(cmd, sizeof(cmd), "%s/logos", dst); snprintf(cmd, sizeof(cmd), "%s/logos", dst);
safe_mkdir((char *) cmd); safe_mkdir(cmd);
snprintf(cmd, sizeof(cmd), "%s/plugins", dst); snprintf(cmd, sizeof(cmd), "%s/plugins", dst);
safe_mkdir((char *) cmd); safe_mkdir(cmd);
sync(); sync();
} }
_return: _return:

View File

@@ -190,19 +190,28 @@ FILE* my_popen( pid_t& pid, const char *cmdstring, const char *type)
return(fp); return(fp);
} }
int safe_mkdir(char * path) int safe_mkdir(const char * path)
{ {
struct statfs s; struct statfs s;
int ret = 0; size_t l = strlen(path);
if(!strncmp(path, "/hdd", 4)) { char d[l + 3];
ret = statfs("/hdd", &s); strncpy(d, path, l);
if((ret != 0) || (s.f_type == 0x72b6))
ret = -1; // skip trailing slashes
else while (l > 0 && d[l - 1] == '/')
mkdir(path, 0755); l--;
} else // find last slash
mkdir(path, 0755); while (l > 0 && d[l - 1] != '/')
return ret; l--;
if (!l)
return -1;
// append a single dot
d[l++] = '.';
d[l] = 0;
if(statfs(d, &s) || (s.f_type == 0x72b6 /* jffs2 */))
return -1;
return mkdir(path, 0755);
} }
/* function used to check is this dir writable, i.e. not flash, for record etc */ /* function used to check is this dir writable, i.e. not flash, for record etc */

View File

@@ -30,7 +30,9 @@ int my_system(const char * cmd);
int my_system(int argc, const char *arg, ...); /* argc is number of arguments including command */ int my_system(int argc, const char *arg, ...); /* argc is number of arguments including command */
FILE* my_popen( pid_t& pid, const char *cmdstring, const char *type); FILE* my_popen( pid_t& pid, const char *cmdstring, const char *type);
int safe_mkdir(char * path);
int safe_mkdir(const char * path);
inline int safe_mkdir(std::string path) { return safe_mkdir(path.c_str()); }
off_t file_size(const char *filename); off_t file_size(const char *filename);
bool file_exists(const char *filename); bool file_exists(const char *filename);
void wakeup_hdd(const char *hdd_dir); void wakeup_hdd(const char *hdd_dir);