From 18db8742ddc5a09795ed10da74f7223bff0c8e5b Mon Sep 17 00:00:00 2001 From: josch Date: Wed, 24 Sep 2014 09:34:56 +0200 Subject: [PATCH] remove "myfiles" as a moniker for the root. Use NULL or empty string instead --- mfapi/apicalls.h | 6 ++--- mfapi/apicalls/folder_create.c | 14 +++++------- mfapi/apicalls/folder_get_content.c | 15 ++++++------- mfapi/apicalls/folder_get_info.c | 27 ++++++++++++---------- mfapi/folder.c | 35 +++++++++++++++++------------ mfshell/commands/chdir.c | 33 ++++++++++++--------------- mfshell/commands/list.c | 8 ------- mfshell/commands/mkdir.c | 13 ++--------- mfshell/mfshell.c | 6 +++-- 9 files changed, 71 insertions(+), 86 deletions(-) diff --git a/mfapi/apicalls.h b/mfapi/apicalls.h index 0c947d1..8bf5a70 100644 --- a/mfapi/apicalls.h +++ b/mfapi/apicalls.h @@ -32,14 +32,14 @@ int mfconn_api_file_get_info(mfconn * conn, mffile * file, int mfconn_api_file_get_links(mfconn * conn, mffile * file, char *quickkey); -int mfconn_api_folder_create(mfconn * conn, char *parent, - char *name); +int mfconn_api_folder_create(mfconn * conn, const char *parent, + const char *name); long mfconn_api_folder_get_content(mfconn * conn, int mode, mffolder * folder_curr); int mfconn_api_folder_get_info(mfconn * conn, mffolder * folder, - char *folderkey); + const char *folderkey); int mfconn_api_user_get_info(mfconn * conn); diff --git a/mfapi/apicalls/folder_create.c b/mfapi/apicalls/folder_create.c index f288fc3..8744946 100644 --- a/mfapi/apicalls/folder_create.c +++ b/mfapi/apicalls/folder_create.c @@ -25,7 +25,7 @@ #include "../mfconn.h" #include "../apicalls.h" // IWYU pragma: keep -int mfconn_api_folder_create(mfconn * conn, char *parent, char *name) +int mfconn_api_folder_create(mfconn * conn, const char *parent, const char *name) { const char *api_call; int retval; @@ -39,19 +39,15 @@ int mfconn_api_folder_create(mfconn * conn, char *parent, char *name) if (strlen(name) < 1) return -1; - // key must either be 11 chars or "myfiles" - if (parent != NULL) { - if (strlen(parent) != 13) { - // if it is myfiles, set paret to NULL - if (strcmp(parent, "myfiles") == 0) - parent = NULL; - } + // key must either be 13 chars or NULL + if (parent != NULL && strlen(parent) != 13) { + return -1; } if (parent != NULL) { api_call = mfconn_create_signed_get(conn, 0, "folder/create.php", - "?parent_key=%s" "&foldername=%s" + "?parent_key=%s&foldername=%s" "&response_format=json", parent, name); } else { api_call = diff --git a/mfapi/apicalls/folder_get_content.c b/mfapi/apicalls/folder_get_content.c index fef52f1..63496e4 100644 --- a/mfapi/apicalls/folder_get_content.c +++ b/mfapi/apicalls/folder_get_content.c @@ -51,18 +51,17 @@ mfconn_api_folder_get_content(mfconn * conn, int mode, mffolder * folder_curr) folderkey = folder_get_key(folder_curr); if (folderkey == NULL) { - fprintf(stderr, "folder_get_key NULL\n"); - return 0; - } - /*if (folderkey[0] == '\0') { - fprintf(stderr, "folder_get_key '\\0'\n"); - return 0; - } */ - api_call = mfconn_create_signed_get(conn, 0, "folder/get_content.php", + api_call = mfconn_create_signed_get(conn, 0, "folder/get_content.php", + "?content_type=%s" + "&response_format=json", + content_type); + } else { + api_call = mfconn_create_signed_get(conn, 0, "folder/get_content.php", "?folder_key=%s" "&content_type=%s" "&response_format=json", folderkey, content_type); + } http = http_create(); if (mode == 0) diff --git a/mfapi/apicalls/folder_get_info.c b/mfapi/apicalls/folder_get_info.c index e0576da..04cbb0c 100644 --- a/mfapi/apicalls/folder_get_info.c +++ b/mfapi/apicalls/folder_get_info.c @@ -31,7 +31,7 @@ static int _decode_folder_get_info(mfhttp * conn, void *data); int -mfconn_api_folder_get_info(mfconn * conn, mffolder * folder, char *folderkey) +mfconn_api_folder_get_info(mfconn * conn, mffolder * folder, const char *folderkey) { const char *api_call; int retval; @@ -42,18 +42,21 @@ mfconn_api_folder_get_info(mfconn * conn, mffolder * folder, char *folderkey) if (folder == NULL) return -1; - if (folderkey == NULL) - return -1; - // key must either be 11 chars or "myfiles" - if (strlen(folderkey) != 13) { - if (strcmp(folderkey, "myfiles") == 0) - return -1; + // key must either be 13 chars or NULL + if (folderkey != NULL && strlen(folderkey) != 13) { + return -1; } - api_call = mfconn_create_signed_get(conn, 0, "folder/get_info.php", - "?folder_key=%s&response_format=json", - folderkey); + if (folderkey == NULL) { + api_call = mfconn_create_signed_get(conn, 0, "folder/get_info.php", + "?response_format=json"); + } else { + api_call = mfconn_create_signed_get(conn, 0, "folder/get_info.php", + "?folder_key=%s" + "&response_format=json", + folderkey); + } http = http_create(); retval = http_get_buf(http, api_call, _decode_folder_get_info, folder); @@ -96,9 +99,9 @@ static int _decode_folder_get_info(mfhttp * conn, void *data) if (parent_folder != NULL) { folder_set_parent(folder, json_string_value(parent_folder)); } - // infer that the parent folder must be "myfiles" root + // infer that the parent folder must be root if (parent_folder == NULL && folderkey != NULL) - folder_set_parent(folder, "myfiles"); + folder_set_parent(folder, NULL); if (folderkey == NULL) retval = -1; diff --git a/mfapi/folder.c b/mfapi/folder.c index 1e4ab25..d19d2c5 100644 --- a/mfapi/folder.c +++ b/mfapi/folder.c @@ -55,14 +55,16 @@ int folder_set_key(mffolder * folder, const char *key) { if (folder == NULL) return -1; - if (key == NULL) - return -1; - if (strlen(key) != 13) - return -1; + if (key == NULL) { + memset(folder->folderkey, 0, sizeof(folder->folderkey)); + } else { + if (strlen(key) != 13) + return -1; - memset(folder->folderkey, 0, sizeof(folder->folderkey)); - strncpy(folder->folderkey, key, sizeof(folder->folderkey) - 1); + memset(folder->folderkey, 0, sizeof(folder->folderkey)); + strncpy(folder->folderkey, key, sizeof(folder->folderkey) - 1); + } return 0; } @@ -72,23 +74,28 @@ const char *folder_get_key(mffolder * folder) if (folder == NULL) return NULL; - return folder->folderkey; + if (folder->folderkey[0] == '\0') { + return NULL; + } else { + return folder->folderkey; + } } int folder_set_parent(mffolder * folder, const char *parent_key) { if (folder == NULL) return -1; - if (parent_key == NULL) - return -1; - if (strlen(parent_key) != 13) { - if (strcmp(parent_key, "myfiles") != 0) + if (parent_key == NULL) { + memset(folder->parent, 0, sizeof(folder->parent)); + } else { + if (strlen(parent_key) != 13) { return -1; - } + } - memset(folder->parent, 0, sizeof(folder->parent)); - strncpy(folder->parent, parent_key, sizeof(folder->parent) - 1); + memset(folder->parent, 0, sizeof(folder->parent)); + strncpy(folder->parent, parent_key, sizeof(folder->parent) - 1); + } return 0; } diff --git a/mfshell/commands/chdir.c b/mfshell/commands/chdir.c index b6e96fd..10fc157 100644 --- a/mfshell/commands/chdir.c +++ b/mfshell/commands/chdir.c @@ -37,19 +37,18 @@ int mfshell_cmd_chdir(mfshell * mfshell, int argc, char *const argv[]) if (mfshell == NULL) return -1; - if (argc != 2) { - fprintf(stderr, "Invalid number of arguments\n"); - return -1; + switch (argc) { + case 1: + folderkey = NULL; + break; + case 2: + folderkey = argv[1]; + break; + default: + fprintf(stderr, "Invalid number of arguments\n"); + return -1; } - folderkey = argv[1]; - if (folderkey == NULL) - return -1; - - // change to root - if (strcmp(folderkey, "/") == 0) - folderkey = "myfiles"; - // user wants to navigate up a level if (strcmp(folderkey, "..") == 0) { // do several sanity checks to see if we're already at the root @@ -57,8 +56,6 @@ int mfshell_cmd_chdir(mfshell * mfshell, int argc, char *const argv[]) if (folder_curr == NULL) return 0; - if (strcmp(folder_curr, "myfiles") == 0) - return 0; folder_parent = folder_get_parent(mfshell->folder_curr); @@ -69,17 +66,15 @@ int mfshell_cmd_chdir(mfshell * mfshell, int argc, char *const argv[]) folderkey = folder_parent; } // check the lenght of the key - if (strlen(folderkey) != 13) { - // as a folder moniker, "myfiles" is an exception - if (strcmp(folderkey, "myfiles") != 0) - return -1; + if (folderkey != NULL && strlen(folderkey) != 13) { + return -1; } // create a new folder object to store the results folder_new = folder_alloc(); // navigate to root is a special case - if (strcmp(folderkey, "myfiles") == 0) { - folder_set_key(folder_new, "myfiles"); + if (folderkey == NULL) { + folder_set_key(folder_new, NULL); retval = 0; } else { retval = mfconn_api_folder_get_info(mfshell->conn, diff --git a/mfshell/commands/list.c b/mfshell/commands/list.c index 1949bc7..c8a47af 100644 --- a/mfshell/commands/list.c +++ b/mfshell/commands/list.c @@ -41,14 +41,6 @@ int mfshell_cmd_list(mfshell * mfshell, int argc, char *const argv[]) folder_curr = folder_get_key(mfshell->folder_curr); - // safety check... this should never happen - if (folder_curr == NULL) - folder_set_key(mfshell->folder_curr, "myfiles"); - - // safety check... this should never happen - if (folder_curr[0] == '\0') - folder_set_key(mfshell->folder_curr, "myfiles"); - // first folders retval = mfconn_api_folder_get_content(mfshell->conn, 0, mfshell->folder_curr); diff --git a/mfshell/commands/mkdir.c b/mfshell/commands/mkdir.c index 0c57868..cdd6139 100644 --- a/mfshell/commands/mkdir.c +++ b/mfshell/commands/mkdir.c @@ -45,19 +45,10 @@ int mfshell_cmd_mkdir(mfshell * mfshell, int argc, char *const argv[]) folder_curr = folder_get_key(mfshell->folder_curr); - // safety check... this should never happen - if (folder_curr == NULL) - folder_set_key(mfshell->folder_curr, "myfiles"); - - // safety check... this should never happen - if (folder_curr[0] == '\0') - folder_set_key(mfshell->folder_curr, "myfiles"); - folder_curr = folder_get_key(mfshell->folder_curr); - retval = - mfconn_api_folder_create(mfshell->conn, (char *)folder_curr, - (char *)name); + retval = mfconn_api_folder_create(mfshell->conn, folder_curr, + (char *)name); mfconn_update_secret_key(mfshell->conn); return retval; diff --git a/mfshell/mfshell.c b/mfshell/mfshell.c index a02ddb6..9fff605 100644 --- a/mfshell/mfshell.c +++ b/mfshell/mfshell.c @@ -35,7 +35,7 @@ struct mfcmd commands[] = { {"whoami", "", "show basic user info", mfshell_cmd_whoami}, {"ls", "", "show contents of active folder", mfshell_cmd_list}, - {"cd", "[folderkey]", "change active folder", mfshell_cmd_chdir}, + {"cd", "", "change active folder (default: root)", mfshell_cmd_chdir}, {"pwd", "", "show the active folder", mfshell_cmd_pwd}, {"lpwd", "", "show the local working directory", mfshell_cmd_lpwd}, @@ -43,6 +43,7 @@ struct mfcmd commands[] = { mfshell_cmd_lcd}, {"mkdir", "[folder name]", "create a new folder", mfshell_cmd_mkdir}, {"file", "[quickkey]", "show file information", mfshell_cmd_file}, + {"folder", "", "show folder information (default:root)", mfshell_cmd_folder}, {"links", "[quickkey]", "show access urls for the file", mfshell_cmd_links}, {"get", "[quickkey]", "download a file", mfshell_cmd_get}, @@ -79,7 +80,8 @@ mfshell *mfshell_create(int app_id, char *app_key, char *server) // object to track folder location shell->folder_curr = folder_alloc(); - folder_set_key(shell->folder_curr, "myfiles"); + // set current folder to root + folder_set_key(shell->folder_curr, NULL); // shell commands shell->commands = commands;