diff --git a/CMakeLists.txt b/CMakeLists.txt index 6db14ee..486ec42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,9 +4,11 @@ project(mediafire-tools) add_library(mfapi SHARED mfapi/mfconn.c mfapi/file.c mfapi/folder.c mfapi/apicalls/file_get_info.c mfapi/apicalls/user_get_info.c mfapi/apicalls/file_get_links.c mfapi/apicalls/user_session.c mfapi/apicalls/folder_get_info.c mfapi/apicalls/folder_create.c mfapi/apicalls/folder_get_content.c) +set_target_properties(mfapi PROPERTIES COMPILE_FLAGS "-Wall -Wextra -Werror") add_library(mfutils SHARED utils/http.c utils/json.c utils/strings.c utils/stringv.c) +set_target_properties(mfutils PROPERTIES COMPILE_FLAGS "-Wall -Wextra -Werror") add_executable(mfshell mfshell/main.c mfshell/mfshell.c mfshell/commands/auth.c mfshell/commands/chdir.c mfshell/commands/debug.c mfshell/commands/file.c mfshell/commands/get.c mfshell/commands/help.c mfshell/commands/host.c mfshell/commands/lcd.c mfshell/commands/links.c mfshell/commands/list.c mfshell/commands/lpwd.c mfshell/commands/mkdir.c mfshell/commands/pwd.c mfshell/commands/whoami.c) - +set_target_properties(mfshell PROPERTIES COMPILE_FLAGS "-Wall -Wextra -Werror") target_link_libraries(mfshell curl ssl crypto jansson mfapi mfutils) diff --git a/mfapi/apicalls/file_get_info.c b/mfapi/apicalls/file_get_info.c index 54398a9..6ce46cc 100644 --- a/mfapi/apicalls/file_get_info.c +++ b/mfapi/apicalls/file_get_info.c @@ -70,7 +70,6 @@ _decode_file_get_info(http_t *conn, void *data) json_t *quickkey; json_t *file_hash; json_t *file_name; - json_t *file_folder; int retval = 0; file_t *file; diff --git a/mfapi/apicalls/folder_get_content.c b/mfapi/apicalls/folder_get_content.c index 34140fb..d7a2fca 100644 --- a/mfapi/apicalls/folder_get_content.c +++ b/mfapi/apicalls/folder_get_content.c @@ -43,7 +43,6 @@ mfconn_api_folder_get_content(mfconn_t *mfconn, int mode, folder_t *folder_curr) { char *api_call; int retval; - char *rx_buffer; char *content_type; if(mfconn == NULL) return -1; @@ -96,6 +95,9 @@ _decode_folder_get_content_folders(http_t *conn, void *user_ptr) int array_sz; int i = 0; + if (user_ptr != NULL) + return -1; + root = http_parse_buf_json(conn, 0, &error); /*json_t *result = json_object_by_path(root, "response/action"); @@ -154,6 +156,9 @@ _decode_folder_get_content_files(http_t *conn, void *user_ptr) int array_sz; int i = 0; + if (user_ptr != NULL) + return -1; + root = http_parse_buf_json(conn, 0, &error); node = json_object_by_path(root,"response/folder_content"); diff --git a/mfapi/apicalls/user_get_info.c b/mfapi/apicalls/user_get_info.c index c3cd9e3..e998787 100644 --- a/mfapi/apicalls/user_get_info.c +++ b/mfapi/apicalls/user_get_info.c @@ -63,6 +63,9 @@ _decode_user_get_info(http_t *conn, void *data) json_t *first_name; json_t *last_name; + if (data != NULL) + return -1; + root = http_parse_buf_json(conn, 0, &error); node = json_object_by_path(root,"response/user_info"); diff --git a/mfapi/mfconn.c b/mfapi/mfconn.c index 0f77e06..727b6ae 100644 --- a/mfapi/mfconn.c +++ b/mfapi/mfconn.c @@ -87,7 +87,7 @@ mfconn_create_user_signature(mfconn_t *mfconn, char *username, char *password, { char *signature_raw; unsigned char signature_enc[20]; // sha1 is 160 bits - unsigned char signature_hex[41]; + char signature_hex[41]; int i; if(mfconn == NULL) return NULL; @@ -114,7 +114,7 @@ mfconn_create_call_signature(mfconn_t *mfconn,char *url,char *args) { char *signature_raw; unsigned char signature_enc[16]; // md5 is 128 bits - unsigned char signature_hex[33]; + char signature_hex[33]; char *api; int i; @@ -156,7 +156,6 @@ mfconn_create_signed_get(mfconn_t *mfconn,int ssl,char *api,char *fmt,...) char *call_hash; char *session_token; int bytes_to_alloc; - int api_request_len; int api_args_len; int api_len; va_list ap; diff --git a/mfshell/commands/auth.c b/mfshell/commands/auth.c index 5469f37..1c5f0fe 100644 --- a/mfshell/commands/auth.c +++ b/mfshell/commands/auth.c @@ -36,7 +36,6 @@ _get_passwd_from_user(void); int mfshell_cmd_auth(mfshell_t *mfshell, int argc, char **argv) { - int retval; char *username; char *password; diff --git a/mfshell/commands/debug.c b/mfshell/commands/debug.c index b417258..ef7eacc 100644 --- a/mfshell/commands/debug.c +++ b/mfshell/commands/debug.c @@ -30,6 +30,7 @@ int mfshell_cmd_debug(mfshell_t *mfshell, int argc, char **argv) { + (void)argv; if (argc != 1) { fprintf(stderr, "Invalid number of arguments\n"); return -1; diff --git a/mfshell/commands/file.c b/mfshell/commands/file.c index c52cbbe..8851ac3 100644 --- a/mfshell/commands/file.c +++ b/mfshell/commands/file.c @@ -52,6 +52,9 @@ mfshell_cmd_file(mfshell_t *mfshell, int argc, char **argv) file = file_alloc(); retval = mfconn_api_file_get_info(mfshell->mfconn,file,(char*)quickkey); + if (retval != 0) { + fprintf(stderr, "api call unsuccessful\n"); + } mfconn_update_secret_key(mfshell->mfconn); quickkey = file_get_key(file); diff --git a/mfshell/commands/get.c b/mfshell/commands/get.c index 12abf32..0a716a9 100644 --- a/mfshell/commands/get.c +++ b/mfshell/commands/get.c @@ -80,9 +80,9 @@ mfshell_cmd_get(mfshell_t *mfshell, int argc, char **argv) getcwd(mfshell->local_working_dir,PATH_MAX); } - retval = file_download_direct(file, mfshell->local_working_dir); + bytes_read = file_download_direct(file, mfshell->local_working_dir); - if(retval != -1) + if(bytes_read != -1) printf("\r Downloaded %zd bytes OK!\n\r",bytes_read); else printf("\r\n Download FAILED!\n\r"); diff --git a/mfshell/commands/help.c b/mfshell/commands/help.c index 4158481..6709cd9 100644 --- a/mfshell/commands/help.c +++ b/mfshell/commands/help.c @@ -28,6 +28,12 @@ int mfshell_cmd_help(mfshell_t *mfshell, int argc, char **argv) { + (void)argv; + if (argc != 1) { + fprintf(stderr, "Invalid number of arguments\n"); + return -1; + } + printf( " arguments:\n\r" " \n\r" @@ -35,8 +41,8 @@ mfshell_cmd_help(mfshell_t *mfshell, int argc, char **argv) printf("\n\r"); - int column1_width = 0; - int column2_width = 0; + unsigned int column1_width = 0; + unsigned int column2_width = 0; _cmd_t* curr_cmd; for (curr_cmd = mfshell->commands; curr_cmd->name != NULL; curr_cmd++) { diff --git a/mfshell/commands/links.c b/mfshell/commands/links.c index e3a9964..e1af7d6 100644 --- a/mfshell/commands/links.c +++ b/mfshell/commands/links.c @@ -53,6 +53,9 @@ mfshell_cmd_links(mfshell_t *mfshell, int argc, char **argv) file = file_alloc(); retval = mfconn_api_file_get_links(mfshell->mfconn,file,(char*)quickkey); + if (retval != 0) { + fprintf(stderr, "api call unsuccessful\n"); + } mfconn_update_secret_key(mfshell->mfconn); share_link = file_get_share_link(file); diff --git a/mfshell/commands/list.c b/mfshell/commands/list.c index 6933e5a..fbeb590 100644 --- a/mfshell/commands/list.c +++ b/mfshell/commands/list.c @@ -29,6 +29,7 @@ int mfshell_cmd_list(mfshell_t *mfshell, int argc, char **argv) { + (void)argv; int retval; const char *folder_curr; diff --git a/mfshell/commands/lpwd.c b/mfshell/commands/lpwd.c index 9a3a832..bd8bff5 100644 --- a/mfshell/commands/lpwd.c +++ b/mfshell/commands/lpwd.c @@ -29,6 +29,7 @@ int mfshell_cmd_lpwd(mfshell_t *mfshell, int argc, char **argv) { + (void)argv; if(mfshell == NULL) return -1; if (argc != 1) { diff --git a/mfshell/commands/pwd.c b/mfshell/commands/pwd.c index 162ae8f..bc13109 100644 --- a/mfshell/commands/pwd.c +++ b/mfshell/commands/pwd.c @@ -29,6 +29,7 @@ int mfshell_cmd_pwd(mfshell_t *mfshell, int argc, char **argv) { + (void)argv; const char *folder_name; char *folder_name_tmp = NULL; diff --git a/mfshell/commands/whoami.c b/mfshell/commands/whoami.c index d01399c..2f5565e 100644 --- a/mfshell/commands/whoami.c +++ b/mfshell/commands/whoami.c @@ -29,6 +29,7 @@ int mfshell_cmd_whoami(mfshell_t *mfshell, int argc, char **argv) { + (void)argv; int retval; if (argc != 1) { diff --git a/mfshell/main.c b/mfshell/main.c index 2850484..07a1bf4 100644 --- a/mfshell/main.c +++ b/mfshell/main.c @@ -35,7 +35,7 @@ mfshell_run(mfshell_t *mfshell); static void mfshell_parse_commands(mfshell_t *mfshell, char *command); -void print_help(mfshell_t *mfshell, char *cmd) +void print_help(char *cmd) { fprintf(stderr, "A shell to access a MediaFire account.\n"); fprintf(stderr, "\n"); @@ -62,7 +62,7 @@ void print_help(mfshell_t *mfshell, char *cmd) fprintf(stderr, "\n"); } -void parse_argv(mfshell_t *mfshell, int argc, char **argv, char **username, +void parse_argv(int argc, char **argv, char **username, char **password, char **server, char **command) { static struct option long_options[] = { @@ -94,7 +94,7 @@ void parse_argv(mfshell_t *mfshell, int argc, char **argv, char **username, *server = strdup(optarg); break; case 'h': - print_help(mfshell, argv[0]); + print_help(argv[0]); exit(0); case 'v': exit(0); @@ -125,12 +125,10 @@ int main(int argc,char **argv) char *username = NULL; char *password = NULL; char *command = NULL; - size_t len; - int retval; SSL_library_init(); - parse_argv(mfshell, argc, argv, &username, &password, &server, &command); + parse_argv(argc, argv, &username, &password, &server, &command); mfshell = mfshell_create(35860, "2c6dq0gb2sr8rgsue5a347lzpjnaay46yjazjcjg",server); @@ -156,6 +154,15 @@ mfshell_parse_commands(mfshell_t *mfshell, char *command) while ((next = strsep(&command, ";")) != NULL) { // FIXME: handle non-zero return value of wordexp ret = wordexp(next, &p, WRDE_SHOWERR | WRDE_UNDEF); + if (ret != 0) { + switch (ret) { + case WRDE_BADCHAR: fprintf(stderr, "wordexp: WRDE_BADCHAR\n"); break; + case WRDE_BADVAL: fprintf(stderr, "wordexp: WRDE_BADVAL\n"); break; + case WRDE_CMDSUB: fprintf(stderr, "wordexp: WRDE_CMDSUB\n"); break; + case WRDE_NOSPACE: fprintf(stderr, "wordexp: WRDE_NOSPACE\n"); break; + case WRDE_SYNTAX: fprintf(stderr, "wordexp: WRDE_SYNTAX\n"); break; + } + } if (p.we_wordc < 1) { fprintf(stderr, "Need more than zero arguments\n"); exit(1); diff --git a/mfshell/mfshell.c b/mfshell/mfshell.c index 3ccc291..398b579 100644 --- a/mfshell/mfshell.c +++ b/mfshell/mfshell.c @@ -101,6 +101,7 @@ mfshell_exec(mfshell_t *mfshell, int argc, char **argv) return curr_cmd->handler(mfshell, argc, argv); } } + return -1; } int @@ -114,6 +115,15 @@ mfshell_exec_shell_command(mfshell_t *mfshell,char *command) // FIXME: handle non-zero return value of wordexp retval = wordexp(command, &p, WRDE_SHOWERR | WRDE_UNDEF); + if (retval != 0) { + switch (retval) { + case WRDE_BADCHAR: fprintf(stderr, "wordexp: WRDE_BADCHAR\n"); break; + case WRDE_BADVAL: fprintf(stderr, "wordexp: WRDE_BADVAL\n"); break; + case WRDE_CMDSUB: fprintf(stderr, "wordexp: WRDE_CMDSUB\n"); break; + case WRDE_NOSPACE: fprintf(stderr, "wordexp: WRDE_NOSPACE\n"); break; + case WRDE_SYNTAX: fprintf(stderr, "wordexp: WRDE_SYNTAX\n"); break; + } + } if (p.we_wordc < 1) return 0; diff --git a/utils/http.c b/utils/http.c index 6d3574b..bae78c7 100644 --- a/utils/http.c +++ b/utils/http.c @@ -133,15 +133,14 @@ http_get_buf(http_t *conn, const char *url, int (*data_handler)(http_t *conn, vo static size_t http_read_buf_cb(char *data, size_t size, size_t nmemb, void *user_ptr) { - http_t *conn; size_t data_len; if (user_ptr == NULL) return 0; - conn = (http_t*)user_ptr; data_len = size*nmemb; if (data_len > 0) { + fwrite(data, size, nmemb, stderr); fprintf(stderr, "Not implemented"); exit(1); } @@ -225,9 +224,11 @@ http_write_file_cb(char *data, size_t size, size_t nmemb, void *user_ptr) fwrite(data, size, nmemb, conn->stream); fprintf(stderr, "\r %.0f / %.0f", conn->dl_now, conn->dl_len); + + return size*nmemb; } -int +/*int http_post_file(http_t *conn, const char *url, const char *post_args, FILE *fd) { -} +}*/ diff --git a/utils/strings.c b/utils/strings.c index 5eea852..7e965c3 100644 --- a/utils/strings.c +++ b/utils/strings.c @@ -75,7 +75,7 @@ strdup_join(char *string1,char *string2) char* -strdup_subst(char *string,char *token,char *subst,int max) +strdup_subst(char *string,char *token,char *subst, unsigned int max) { size_t string_len = 0; size_t subst_len = 0; diff --git a/utils/strings.h b/utils/strings.h index 1dded1b..850f8d8 100644 --- a/utils/strings.h +++ b/utils/strings.h @@ -26,7 +26,7 @@ char* strdup_printf(char* fmt, ...); char* strdup_join(char *string1,char *string2); -char* strdup_subst(char *string,char *str_old,char *str_new,int max); +char* strdup_subst(char *string,char *str_old,char *str_new, unsigned int max); void string_chomp(char *string); diff --git a/utils/stringv.c b/utils/stringv.c index a42eb66..bd8ec84 100644 --- a/utils/stringv.c +++ b/utils/stringv.c @@ -133,7 +133,7 @@ stringv_split(char *string,char *token,int limit) char *curr = NULL; char *next = NULL; int count = 0; - int len; + unsigned int len; size_t copy_len = 0; if(string == NULL) return (char**)NULL;