diff --git a/epicardium/ble/filetransfer.c b/epicardium/ble/filetransfer.c index 2e46d47faf52144e0edeaa7a5ca9063ff31ee102..875b070cbf12fb78e084b500b0cdfc9585bac2f5 100644 --- a/epicardium/ble/filetransfer.c +++ b/epicardium/ble/filetransfer.c @@ -237,8 +237,11 @@ static int bleFileCreateOrOpen(char *filepath) { char *path; char *fileName = NULL; + char filecreate[100]; int ret; + filecreate[0] = 0; + while (true) { path = strtok(filepath, "/"); filepath = NULL; @@ -250,14 +253,23 @@ static int bleFileCreateOrOpen(char *filepath) return -EINVAL; if (fileName) { - ret = epic_file_mkdir(fileName); - if (ret) - return ret; + ret = epic_file_stat(filecreate, NULL); + if (ret) { + ret = epic_file_mkdir(filecreate); + if (ret) { + printf("mkdir failed: %s, ret: %i\n", + filecreate, + ret); + return ret; + } + } } fileName = path; + strncat(filecreate, "/", sizeof(filecreate) - 1); + strncat(filecreate, path, sizeof(filecreate) - 1); } - return epic_file_open(filepath, "w"); + return epic_file_open(filecreate, "w"); } static uint8_t bleFileOpen(dmConnId_t connId, uint8_t *pValue, uint16_t len)