From 6848961aa5f93a290917071ff3496e1d5026621b Mon Sep 17 00:00:00 2001 From: Nils Wallménius Date: Wed, 9 Apr 2008 15:25:17 +0000 Subject: Pass the buffer length to the list_get_name callback functions instead of using hardcoded MAX_PATH git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17049 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/chessbox/chessbox_pgn.c | 5 +++-- apps/plugins/lib/oldmenuapi.c | 5 +++-- apps/plugins/properties.c | 21 +++++++++++---------- apps/plugins/random_folder_advance_config.c | 4 ++-- apps/plugins/shortcuts/shortcuts_view.c | 10 +++++----- apps/plugins/text_editor.c | 15 ++++++++------- 6 files changed, 32 insertions(+), 28 deletions(-) (limited to 'apps/plugins') diff --git a/apps/plugins/chessbox/chessbox_pgn.c b/apps/plugins/chessbox/chessbox_pgn.c index 6d18986f95..94bda2eaaa 100644 --- a/apps/plugins/chessbox/chessbox_pgn.c +++ b/apps/plugins/chessbox/chessbox_pgn.c @@ -527,7 +527,8 @@ void coords_to_pgn(struct pgn_ply_node* ply){ } } -char * get_game_text(int selected_item, void *data, char *buffer){ +char * get_game_text(int selected_item, void *data, + char *buffer, size_t buffer_len){ int i; struct pgn_game_node *temp_node = (struct pgn_game_node *)data; char text_buffer[50]; @@ -541,7 +542,7 @@ char * get_game_text(int selected_item, void *data, char *buffer){ rb->snprintf(text_buffer, 50,"%s vs. %s (%s)", temp_node->white_player, temp_node->black_player, temp_node->game_date); - rb->strcpy(buffer, text_buffer); + rb->strncpy(buffer, text_buffer, buffer_len); return buffer; } diff --git a/apps/plugins/lib/oldmenuapi.c b/apps/plugins/lib/oldmenuapi.c index c21e55f5fc..27e4fdd49e 100644 --- a/apps/plugins/lib/oldmenuapi.c +++ b/apps/plugins/lib/oldmenuapi.c @@ -40,10 +40,11 @@ struct menu { static struct menu menus[MAX_MENUS]; static bool inuse[MAX_MENUS] = { false }; -static char * menu_get_itemname(int selected_item, void * data, char *buffer) +static char * menu_get_itemname(int selected_item, void * data, + char *buffer, size_t buffer_len) { + (void)buffer; (void)buffer_len; struct menu *local_menus=(struct menu *)data; - (void)buffer; return(local_menus->items[selected_item].desc); } diff --git a/apps/plugins/properties.c b/apps/plugins/properties.c index 8b1f6ee636..27805154b3 100644 --- a/apps/plugins/properties.c +++ b/apps/plugins/properties.c @@ -214,38 +214,39 @@ static bool dir_properties(char* selected_file) return true; } -char * get_props(int selected_item, void* data, char *buffer) +char * get_props(int selected_item, void* data, char *buffer, size_t buffer_len) { (void)data; switch(selected_item) { case 0: - rb->strcpy(buffer, str_dirname); + rb->strncpy(buffer, str_dirname, buffer_len); break; case 1: - rb->strcpy(buffer, its_a_dir ? str_dircount : str_filename); + rb->strncpy(buffer, its_a_dir ? str_dircount : str_filename, + buffer_len); break; case 2: - rb->strcpy(buffer, its_a_dir ? str_filecount : str_size); + rb->strncpy(buffer, its_a_dir ? str_filecount : str_size, buffer_len); break; case 3: - rb->strcpy(buffer, its_a_dir ? str_size : str_date); + rb->strncpy(buffer, its_a_dir ? str_size : str_date, buffer_len); break; case 4: - rb->strcpy(buffer, its_a_dir ? "" : str_time); + rb->strncpy(buffer, its_a_dir ? "" : str_time, buffer_len); break; case 5: - rb->strcpy(buffer, its_a_dir ? "" : str_artist); + rb->strncpy(buffer, its_a_dir ? "" : str_artist, buffer_len); break; case 6: - rb->strcpy(buffer, its_a_dir ? "" : str_title); + rb->strncpy(buffer, its_a_dir ? "" : str_title, buffer_len); break; case 7: - rb->strcpy(buffer, its_a_dir ? "" : str_album); + rb->strncpy(buffer, its_a_dir ? "" : str_album, buffer_len); break; default: - rb->strcpy(buffer, "ERROR"); + rb->strncpy(buffer, "ERROR", buffer_len); break; } return buffer; diff --git a/apps/plugins/random_folder_advance_config.c b/apps/plugins/random_folder_advance_config.c index af415073b3..2b5e16603b 100644 --- a/apps/plugins/random_folder_advance_config.c +++ b/apps/plugins/random_folder_advance_config.c @@ -254,10 +254,10 @@ void generate(void) rb->write(fd,&dirs_count,sizeof(int)); rb->close(fd); } -char *list_get_name_cb(int selected_item,void* data,char* buf) +char *list_get_name_cb(int selected_item, void* data, char* buf, size_t buf_len) { (void)data; - rb->strcpy(buf,list->folder[selected_item]); + rb->strncpy(buf, list->folder[selected_item], buf_len); return buf; } diff --git a/apps/plugins/shortcuts/shortcuts_view.c b/apps/plugins/shortcuts/shortcuts_view.c index 503db56d30..5e7d9c2b00 100644 --- a/apps/plugins/shortcuts/shortcuts_view.c +++ b/apps/plugins/shortcuts/shortcuts_view.c @@ -39,7 +39,8 @@ static bool usb_connected = false; enum sc_list_action_type draw_sc_list(struct gui_synclist gui_sc); /* Will be passed sc_file* as data */ -char* build_sc_list(int selected_item, void *data, char *buffer); +char* build_sc_list(int selected_item, void *data, + char *buffer, size_t buffer_len); /* Returns true iff we should leave the main loop */ bool list_sc(bool is_editable); @@ -91,17 +92,16 @@ enum sc_list_action_type draw_sc_list(struct gui_synclist gui_sc) } -char* build_sc_list(int selected_item, void *data, char *buffer) +char* build_sc_list(int selected_item, void *data, + char *buffer, size_t buffer_len) { - char text_buffer[MAX_PATH]; sc_file_t *file = (sc_file_t*)data; if (!is_valid_index(file, selected_item)) { return NULL; } sc_entry_t *entry = file->entries + selected_item; - rb->snprintf(text_buffer, sizeof(text_buffer), "%s", entry->disp); - rb->strcpy(buffer, text_buffer); + rb->snprintf(buffer, buffer_len, "%s", entry->disp); return buffer; } diff --git a/apps/plugins/text_editor.c b/apps/plugins/text_editor.c index 75bbccf820..5397260c0d 100644 --- a/apps/plugins/text_editor.c +++ b/apps/plugins/text_editor.c @@ -115,18 +115,19 @@ int _do_action(int action, char* str, int line) last_char_index = c; return 1; } -char *list_get_name_cb(int selected_item,void* data,char* buf) +char *list_get_name_cb(int selected_item, void* data, + char* buf, size_t buf_len) { char *b = &buffer[do_action(ACTION_GET,0,selected_item)]; (void)data; - if (rb->strlen(b) >= MAX_PATH) + if (rb->strlen(b) >= buf_len) { - char t = b[MAX_PATH-10]; - b[MAX_PATH-10] = '\0'; - rb->snprintf(buf,MAX_PATH,"%s ...",b); - b[MAX_PATH-10] = t; + char t = b[buf_len-10]; + b[buf_len-10] = '\0'; + rb->snprintf(buf , buf_len, "%s ...", b); + b[buf_len-10] = t; } - else rb->strcpy(buf,b); + else rb->strncpy(buf, b, buf_len); return buf; } char filename[MAX_PATH]; -- cgit v1.2.3