diff options
author | William Wilgus <wilgus.william@gmail.com> | 2025-02-03 01:05:21 -0500 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2025-02-03 01:23:49 -0500 |
commit | f55fe21f66180e8e94e42ccb55aa0421f0839303 (patch) | |
tree | e998aba77bbd787c9c422c8bf0715ed117e108e0 | |
parent | 9e61d53c7c81c60ea5800a835515ebe357a58e96 (diff) | |
download | rockbox-f55fe21f66.tar.gz rockbox-f55fe21f66.zip |
add itoa(), replace snprintf("%d") calls
we can save some space and still end up with a 20% faster function
Change-Id: Ia58900122944b8527ef01a673afe18ea794acb41
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 62 | ||||
-rw-r--r-- | apps/gui/statusbar.c | 4 | ||||
-rw-r--r-- | apps/screens.c | 8 | ||||
-rw-r--r-- | apps/settings.c | 2 | ||||
-rw-r--r-- | apps/settings_list.c | 2 | ||||
-rw-r--r-- | apps/tagcache.c | 13 | ||||
-rw-r--r-- | firmware/SOURCES | 1 | ||||
-rw-r--r-- | firmware/common/itoa.c | 45 | ||||
-rw-r--r-- | firmware/include/string-extra.h | 2 |
9 files changed, 98 insertions, 41 deletions
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index 9a47c317a6..87a6fd6717 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -256,7 +256,7 @@ const char *get_id3_token(struct wps_token *token, struct mp3entry *id3, if (id3->disc_string) return id3->disc_string; if (id3->discnum) { - snprintf(buf, buf_size, "%d", id3->discnum); + itoa(buf, buf_size, id3->discnum); return buf; } return NULL; @@ -264,7 +264,7 @@ const char *get_id3_token(struct wps_token *token, struct mp3entry *id3, if (id3->track_string) return id3->track_string; if (id3->tracknum) { - snprintf(buf, buf_size, "%d", id3->tracknum); + itoa(buf, buf_size, id3->tracknum); return buf; } return NULL; @@ -291,7 +291,7 @@ const char *get_id3_token(struct wps_token *token, struct mp3entry *id3, if( id3->year_string ) return id3->year_string; if (id3->year) { - snprintf(buf, buf_size, "%d", id3->year); + itoa(buf, buf_size, id3->year); return buf; } return NULL; @@ -299,7 +299,7 @@ const char *get_id3_token(struct wps_token *token, struct mp3entry *id3, return id3->comment; case SKIN_TOKEN_FILE_BITRATE: if(id3->bitrate) - snprintf(buf, buf_size, "%d", id3->bitrate); + itoa(buf, buf_size, id3->bitrate); else return "?"; return buf; @@ -360,12 +360,12 @@ const char *get_id3_token(struct wps_token *token, struct mp3entry *id3, return get_codectype(id3); case SKIN_TOKEN_FILE_FREQUENCY: - snprintf(buf, buf_size, "%ld", id3->frequency); + itoa(buf, buf_size, id3->frequency); return buf; case SKIN_TOKEN_FILE_FREQUENCY_KHZ: /* ignore remainders < 100, so 22050 Hz becomes just 22k */ if ((id3->frequency % 1000) < 100) - snprintf(buf, buf_size, "%ld", id3->frequency / 1000); + itoa(buf, buf_size, id3->frequency / 1000); else snprintf(buf, buf_size, "%ld.%lu", id3->frequency / 1000, @@ -374,24 +374,24 @@ const char *get_id3_token(struct wps_token *token, struct mp3entry *id3, case SKIN_TOKEN_FILE_VBR: return (id3->vbr) ? "(avg)" : NULL; case SKIN_TOKEN_FILE_SIZE: - snprintf(buf, buf_size, "%ld", id3->filesize / 1024); + itoa(buf, buf_size, id3->filesize / 1024); return buf; #ifdef HAVE_TAGCACHE case SKIN_TOKEN_DATABASE_PLAYCOUNT: if (intval) *intval = id3->playcount + 1; - snprintf(buf, buf_size, "%ld", id3->playcount); + itoa(buf, buf_size, id3->playcount); return buf; case SKIN_TOKEN_DATABASE_RATING: if (intval) *intval = id3->rating + 1; - snprintf(buf, buf_size, "%d", id3->rating); + itoa(buf, buf_size, id3->rating); return buf; case SKIN_TOKEN_DATABASE_AUTOSCORE: if (intval) *intval = id3->score + 1; - snprintf(buf, buf_size, "%d", id3->score); + itoa(buf, buf_size, id3->score); return buf; #endif @@ -473,7 +473,7 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, region_data->freq_step, buf, buf_size); #ifdef HAVE_RADIO_RSSI case SKIN_TOKEN_TUNER_RSSI: - snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI)); + itoa(buf, buf_size,tuner_get(RADIO_RSSI)); if (intval) { int val = tuner_get(RADIO_RSSI); @@ -490,10 +490,10 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, } return buf; case SKIN_TOKEN_TUNER_RSSI_MIN: - snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI_MIN)); + itoa(buf, buf_size,tuner_get(RADIO_RSSI_MIN)); return buf; case SKIN_TOKEN_TUNER_RSSI_MAX: - snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI_MAX)); + itoa(buf, buf_size,tuner_get(RADIO_RSSI_MAX)); return buf; #endif case SKIN_TOKEN_PRESET_NAME: @@ -515,11 +515,11 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, format_freq_MHz(radio_get_preset_freq(preset), region_data->freq_step, buf, buf_size); else - snprintf(buf, buf_size, "%d", preset + 1); + itoa(buf, buf_size, preset + 1); return buf; } case SKIN_TOKEN_PRESET_COUNT: - snprintf(buf, buf_size, "%d", radio_preset_count()); + itoa(buf, buf_size, radio_preset_count()); if (intval) *intval = radio_preset_count(); return buf; @@ -777,7 +777,7 @@ static const char* get_rtc_token_value(struct wps_token *token, case SKIN_TOKEN_RTC_12HOUR_CFG: - snprintf(buf, buf_size, "%d", global_settings.timeformat); + itoa(buf, buf_size, global_settings.timeformat); numeric_ret = global_settings.timeformat + 1; break; case SKIN_TOKEN_RTC_DAY_OF_MONTH: @@ -1110,14 +1110,14 @@ const char *get_token_value(struct gui_wps *gwps, case SKIN_TOKEN_PLAYLIST_ENTRIES: numeric_ret = playlist_amount(); - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; case SKIN_TOKEN_LIST_TITLE_TEXT: return sb_get_title(gwps->display->screen_type); case SKIN_TOKEN_LIST_TITLE_ICON: numeric_ret = sb_get_icon(gwps->display->screen_type); - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; case SKIN_TOKEN_LIST_ITEM_TEXT: @@ -1128,17 +1128,17 @@ const char *get_token_value(struct gui_wps *gwps, } case SKIN_TOKEN_LIST_ITEM_ROW: numeric_ret = skinlist_get_item_row() + 1; - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; case SKIN_TOKEN_LIST_ITEM_COLUMN: numeric_ret = skinlist_get_item_column() + 1; - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; case SKIN_TOKEN_LIST_ITEM_NUMBER: numeric_ret = skinlist_get_item_number() + 1; - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; case SKIN_TOKEN_LIST_ITEM_IS_SELECTED: @@ -1149,7 +1149,7 @@ const char *get_token_value(struct gui_wps *gwps, if (!li) return NULL; int icon = skinlist_get_item_icon(li->offset, li->wrap); numeric_ret = icon; - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; } @@ -1160,7 +1160,7 @@ const char *get_token_value(struct gui_wps *gwps, case SKIN_TOKEN_PLAYLIST_POSITION: numeric_ret = playlist_get_display_index()+offset; - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; @@ -1248,7 +1248,7 @@ const char *get_token_value(struct gui_wps *gwps, } if (l > -1) { - snprintf(buf, buf_size, "%d", l); + itoa(buf, buf_size, l); numeric_buf = buf; goto gtv_ret_numeric_tag_info; } else { @@ -1327,13 +1327,13 @@ const char *get_token_value(struct gui_wps *gwps, break; } - snprintf(buf, buf_size, "%d", numeric_ret-1); + itoa(buf, buf_size, numeric_ret-1); numeric_buf = buf; goto gtv_ret_numeric_tag_info; } case SKIN_TOKEN_REPEAT_MODE: - snprintf(buf, buf_size, "%d", global_settings.repeat_mode); + itoa(buf, buf_size, global_settings.repeat_mode); numeric_ret = global_settings.repeat_mode + 1; numeric_buf = buf; goto gtv_ret_numeric_tag_info; @@ -1354,7 +1354,7 @@ const char *get_token_value(struct gui_wps *gwps, left : right; val = peak_meter_scale_value(val, limit==1 ? MAX_PEAK : limit); numeric_ret = val; - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); data->peak_meter_enabled = true; numeric_buf = buf; goto gtv_ret_numeric_tag_info; @@ -1362,10 +1362,10 @@ const char *get_token_value(struct gui_wps *gwps, case SKIN_TOKEN_CROSSFADE: #ifdef HAVE_CROSSFADE - snprintf(buf, buf_size, "%d", global_settings.crossfade); + itoa(buf, buf_size, global_settings.crossfade); numeric_ret = global_settings.crossfade + 1; #else - snprintf(buf, buf_size, "%d", 0); + itoa(buf, buf_size, 0); #endif numeric_buf = buf; goto gtv_ret_numeric_tag_info; @@ -1753,7 +1753,7 @@ const char *get_token_value(struct gui_wps *gwps, { int curr_screen = get_current_activity(); numeric_ret = curr_screen; - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; } @@ -1767,7 +1767,7 @@ const char *get_token_value(struct gui_wps *gwps, char *skin_base = get_skin_buffer(data); struct skin_var* var = SKINOFFSETTOPTR(skin_base, token->value.data); numeric_ret = var->value; - snprintf(buf, buf_size, "%d", numeric_ret); + itoa(buf, buf_size, numeric_ret); numeric_buf = buf; goto gtv_ret_numeric_tag_info; } diff --git a/apps/gui/statusbar.c b/apps/gui/statusbar.c index 5f68ca1751..e289e19feb 100644 --- a/apps/gui/statusbar.c +++ b/apps/gui/statusbar.c @@ -18,12 +18,12 @@ * KIND, either express or implied. * ****************************************************************************/ - #include <stdio.h> #include "config.h" #include "font.h" #include "kernel.h" #include "string.h" /* for memcmp oO*/ +#include "string-extra.h" /* for itoa */ #include "sound.h" #include "settings.h" #include "viewport.h" @@ -611,7 +611,7 @@ static int write_bitmap_number(struct screen * display, int value, int x, int y) { char buf[12], *ptr; - snprintf(buf, sizeof(buf), "%d", value); + itoa(buf, sizeof(buf), value); for (ptr = buf; *ptr != '\0'; ptr++, x += BM_GLYPH_WIDTH) display->mono_bitmap(bitmap_glyphs_4x8[*ptr - '0'], x, y, diff --git a/apps/screens.c b/apps/screens.c index f1e487ee14..a00c853ca9 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -519,7 +519,7 @@ static const char * id3_get_or_speak_info(int selected_item, void* data, case LANG_TAGNAVI_ALL_TRACKS: if (info->track_ct <= 1) return NULL; - snprintf(buffer, buffer_len, "%d", info->track_ct); + itoa(buffer, buffer_len, info->track_ct); val = buffer; if(say_it) talk_number(info->track_ct, true); @@ -558,7 +558,7 @@ static const char * id3_get_or_speak_info(int selected_item, void* data, } else if (id3->discnum) { - snprintf(buffer, buffer_len, "%d", id3->discnum); + itoa(buffer, buffer_len, id3->discnum); val = buffer; if(say_it) talk_number(id3->discnum, true); @@ -573,7 +573,7 @@ static const char * id3_get_or_speak_info(int selected_item, void* data, } else if (id3->tracknum) { - snprintf(buffer, buffer_len, "%d", id3->tracknum); + itoa(buffer, buffer_len, id3->tracknum); val = buffer; if(say_it) talk_number(id3->tracknum, true); @@ -602,7 +602,7 @@ static const char * id3_get_or_speak_info(int selected_item, void* data, } else if (id3->year) { - snprintf(buffer, buffer_len, "%d", id3->year); + itoa(buffer, buffer_len, id3->year); val = buffer; if(say_it) talk_value(id3->year, UNIT_DATEYEAR, true); diff --git a/apps/settings.c b/apps/settings.c index 68020a2d13..0fb451f2c5 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -456,7 +456,7 @@ void cfg_to_string(const struct settings_list *setting, char* buf, int buf_len) break; /* we got a value */ } - snprintf(buf, buf_len, "%d", *(int*)setting->setting); + itoa(buf, buf_len, *(int*)setting->setting); break; case F_T_BOOL: cfg_int_to_string(setting, *(bool*)setting->setting, buf, buf_len); diff --git a/apps/settings_list.c b/apps/settings_list.c index 9d33500178..02b76f7611 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -806,7 +806,7 @@ static void volume_limit_load_from_cfg(void* var, char*value) static char* volume_limit_write_to_cfg(void* setting, char*buf, int buf_len) { int current = *(int*)setting; - snprintf(buf, buf_len, "%d", current); + itoa(buf, buf_len, current); return buf; } static bool volume_limit_is_changed(void* setting, void* defaultval) diff --git a/apps/tagcache.c b/apps/tagcache.c index b45d1b6983..5ee9ff4f9c 100644 --- a/apps/tagcache.c +++ b/apps/tagcache.c @@ -239,6 +239,15 @@ static const char * const tag_type_str[] = { #define logf_clauses logf #endif /* ndef LOGF_ENABLE */ +#if !defined(itoa) +char *itoa(char *buf, size_t bufsz, long int i) +{ + snprintf(buf, bufsz, "%ld", i); + return buf; +} +#endif + + /* Status information of the tagcache. */ static struct tagcache_stat tc_stat; @@ -1912,7 +1921,7 @@ static bool get_next(struct tagcache_search *tcs, bool is_numeric, char *buf, lo if (is_numeric) { - snprintf(buf, bufsz, "%ld", tcs->position); + itoa(buf, bufsz, tcs->position); tcs->result = buf; tcs->result_len = strlen(buf) + 1; return true; @@ -3982,7 +3991,7 @@ bool tagcache_create_changelog(struct tagcache_search *tcs) { if (TAGCACHE_IS_NUMERIC(j)) { - snprintf(temp, sizeof temp, "%d", (int)idx.tag_seek[j]); + itoa(temp, sizeof temp, (int)idx.tag_seek[j]); write_tag(clfd, tagcache_tag_to_str(j), temp); continue; } diff --git a/firmware/SOURCES b/firmware/SOURCES index 7a373f46cd..497ceb59ef 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -219,6 +219,7 @@ target/hosted/maemo/maemo-thread.c #ifndef BOOTLOADER chunk_alloc.c common/strptokspn.c +common/itoa.c common/ap_int.c #endif common/version.c diff --git a/firmware/common/itoa.c b/firmware/common/itoa.c new file mode 100644 index 0000000000..166b94e9d5 --- /dev/null +++ b/firmware/common/itoa.c @@ -0,0 +1,45 @@ +#include <stddef.h> +#include "string.h" +#include "strmemccpy.h" +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file was part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#define INT_DIGITS 19 /* enough for 64 bit integer */ + +char *itoa(char *buf, size_t bufsz, long int i) +{ + /* Room for INT_DIGITS digits, - and '\0' */ + static char intbuf[INT_DIGITS + 2]; + char *p = intbuf + INT_DIGITS + 1; /* points to terminating '\0' */ + if (i >= 0) { + do { + *--p = '0' + (i % 10); + i /= 10; + } while (i != 0); + } + else { /* i < 0 */ + do { + *--p = '0' - (i % 10); + i /= 10; + } while (i != 0); + *--p = '-'; + } + strmemccpy(buf, p, bufsz); + return buf; +} diff --git a/firmware/include/string-extra.h b/firmware/include/string-extra.h index 9572638e23..6f1fd948bc 100644 --- a/firmware/include/string-extra.h +++ b/firmware/include/string-extra.h @@ -70,4 +70,6 @@ static inline char * strmemcpy(char *dst, const char *src, size_t len) strmemdupa(__s, MIN(__n, __len)); }) #endif /* strndupa */ +char *itoa(char *buf, size_t bufsz, long int i); /* Not std */ + #endif /* STRING_EXTRA_H */ |