*
* Get base path of specific file.
* @param[in] filename Full file path.
- * @return base path
+ * @param[out] base_path Base path.
+ * @param[in] maxlen Size of base_path buffer.
+ * @return 0 if base path fit in base_path buffer, -1 if it did not.
*/
- static void get_base_path(const char* filename, char* base_path);
+ static int get_base_path(const char* filename, char* base_path, int maxlen);
};
#endif
// create folder if not exist.
char base_path[MAX_FILENAME_LEN] = {0};
- get_base_path(filename, base_path);
+ if (get_base_path(filename, base_path, MAX_FILENAME_LEN))
+ return SS_RET_INTERNAL_ERROR;
SLOGI("base_path %s.", base_path);
if (!is_folder_exists(base_path)) {
if (0 != create_folder(base_path)) {
SLOGI("[%s][%d] START", __FUNCTION__, __LINE__);
char base_p[MAX_FILENAME_LEN] = {0};
- get_base_path(folder, base_p);
+ if (get_base_path(folder, base_p, MAX_FILENAME_LEN))
+ return SS_RET_INTERNAL_ERROR;
if (!is_folder_exists(base_p)) {
if (0 != create_folder(base_p)) {
SLOGE("Failed to create folder %s.", base_p);
return (res != -1);
}
-void file_op::get_base_path(const char* filename, char* base_path) {
- for (int i = strlen(filename) - 1; i >= 0; --i) {
- if ('/' == filename[i]) {
- memcpy(base_path, filename, i);
- base_path[i] = '\0';
+int file_op::get_base_path(const char* filename, char* base_path, int maxlen) {
+ int slashpos;
+ for (slashpos = strlen(filename) - 1; slashpos >= 0; --slashpos) {
+ if ('/' == filename[slashpos])
break;
- }
}
+ if (slashpos < 0)
+ return 0;
+ if (slashpos >= maxlen)
+ return -1;
+
+ memcpy(base_path, filename, slashpos);
+ base_path[slashpos] = '\0';
+ return 0;
}