diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2022-11-30 12:19:09 +0000 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2022-12-04 10:46:02 -0500 |
commit | 4ff97ae07c9b7beed4c8c9bf965e2ba679d05a20 (patch) | |
tree | 0da71115777e19d64138c2221afa15d99a96c440 | |
parent | 08aa09e15d11f260f8c0fc6c10cb38b83e369d33 (diff) | |
download | rockbox-4ff97ae07c9b7beed4c8c9bf965e2ba679d05a20.tar.gz rockbox-4ff97ae07c9b7beed4c8c9bf965e2ba679d05a20.zip |
settings: More settings ID to pointer conversions
Convert cfg_int_to_string(), cfg_to_string(), settings_write_config().
Change-Id: Icb72d2ff874cf90ffe5fe14878aece0a53f6bd18
-rw-r--r-- | apps/gui/option_select.c | 4 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 2 | ||||
-rw-r--r-- | apps/settings.c | 81 | ||||
-rw-r--r-- | apps/settings.h | 4 |
4 files changed, 39 insertions, 52 deletions
diff --git a/apps/gui/option_select.c b/apps/gui/option_select.c index 4687367fba..afd97e418b 100644 --- a/apps/gui/option_select.c +++ b/apps/gui/option_select.c | |||
@@ -117,7 +117,6 @@ const char *option_get_valuestring(const struct settings_list *setting, | |||
117 | { | 117 | { |
118 | if (setting->flags & F_CHOICETALKS) | 118 | if (setting->flags & F_CHOICETALKS) |
119 | { | 119 | { |
120 | int setting_id; | ||
121 | const struct choice_setting *info = setting->choice_setting; | 120 | const struct choice_setting *info = setting->choice_setting; |
122 | if (info->talks[(int)temp_var] < LANG_LAST_INDEX_IN_ARRAY) | 121 | if (info->talks[(int)temp_var] < LANG_LAST_INDEX_IN_ARRAY) |
123 | { | 122 | { |
@@ -125,8 +124,7 @@ const char *option_get_valuestring(const struct settings_list *setting, | |||
125 | } | 124 | } |
126 | else | 125 | else |
127 | { | 126 | { |
128 | find_setting(setting->setting, &setting_id); | 127 | cfg_int_to_string(setting, (int)temp_var, buffer, buf_len); |
129 | cfg_int_to_string(setting_id, (int)temp_var, buffer, buf_len); | ||
130 | } | 128 | } |
131 | } | 129 | } |
132 | else | 130 | else |
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index 874eff3809..39f1e3b4db 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c | |||
@@ -1442,7 +1442,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
1442 | goto gtv_ret_numeric_tag_info; | 1442 | goto gtv_ret_numeric_tag_info; |
1443 | } | 1443 | } |
1444 | } | 1444 | } |
1445 | cfg_to_string(token->value.i,buf,buf_size); | 1445 | cfg_to_string(s, buf, buf_size); |
1446 | numeric_buf = buf; | 1446 | numeric_buf = buf; |
1447 | goto gtv_ret_numeric_tag_info; | 1447 | goto gtv_ret_numeric_tag_info; |
1448 | } | 1448 | } |
diff --git a/apps/settings.c b/apps/settings.c index d8e4af1460..256c71267c 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -401,17 +401,16 @@ bool settings_load_config(const char* file, bool apply) | |||
401 | 401 | ||
402 | /** Writing to a config file and saving settings **/ | 402 | /** Writing to a config file and saving settings **/ |
403 | 403 | ||
404 | bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len) | 404 | bool cfg_int_to_string(const struct settings_list *setting, int val, char* buf, int buf_len) |
405 | { | 405 | { |
406 | int flags = settings[setting_id].flags; | 406 | const char* start = setting->cfg_vals; |
407 | const char* start = settings[setting_id].cfg_vals; | ||
408 | char* end = NULL; | 407 | char* end = NULL; |
409 | int count = 0; | 408 | int count = 0; |
410 | 409 | ||
411 | if ((flags&F_T_MASK)==F_T_INT && | 410 | if ((setting->flags & F_T_MASK) == F_T_INT && |
412 | flags&F_TABLE_SETTING) | 411 | (setting->flags & F_TABLE_SETTING)) |
413 | { | 412 | { |
414 | const int *value = settings[setting_id].table_setting->values; | 413 | const int *value = setting->table_setting->values; |
415 | while (start) | 414 | while (start) |
416 | { | 415 | { |
417 | end = strchr(start,','); | 416 | end = strchr(start,','); |
@@ -455,20 +454,19 @@ bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len) | |||
455 | return true; | 454 | return true; |
456 | } | 455 | } |
457 | 456 | ||
458 | bool cfg_to_string(int i/*setting_id*/, char* buf, int buf_len) | 457 | void cfg_to_string(const struct settings_list *setting, char* buf, int buf_len) |
459 | { | 458 | { |
460 | switch (settings[i].flags&F_T_MASK) | 459 | switch (setting->flags & F_T_MASK) |
461 | { | 460 | { |
462 | case F_T_CUSTOM: | 461 | case F_T_CUSTOM: |
463 | settings[i].custom_setting->write_to_cfg(settings[i].setting, | 462 | setting->custom_setting->write_to_cfg(setting->setting, buf, buf_len); |
464 | buf, buf_len); | ||
465 | break; | 463 | break; |
466 | case F_T_INT: | 464 | case F_T_INT: |
467 | case F_T_UINT: | 465 | case F_T_UINT: |
468 | #ifdef HAVE_LCD_COLOR | 466 | #ifdef HAVE_LCD_COLOR |
469 | if (settings[i].flags&F_RGB) | 467 | if (setting->flags & F_RGB) |
470 | { | 468 | { |
471 | int colour = *(int*)settings[i].setting; | 469 | int colour = *(int*)setting->setting; |
472 | snprintf(buf,buf_len,"%02x%02x%02x", | 470 | snprintf(buf,buf_len,"%02x%02x%02x", |
473 | (int)RGB_UNPACK_RED(colour), | 471 | (int)RGB_UNPACK_RED(colour), |
474 | (int)RGB_UNPACK_GREEN(colour), | 472 | (int)RGB_UNPACK_GREEN(colour), |
@@ -476,57 +474,50 @@ bool cfg_to_string(int i/*setting_id*/, char* buf, int buf_len) | |||
476 | } | 474 | } |
477 | else | 475 | else |
478 | #endif | 476 | #endif |
479 | if (settings[i].cfg_vals == NULL) | 477 | if (setting->cfg_vals == NULL) |
480 | { | 478 | { |
481 | snprintf(buf,buf_len,"%d",*(int*)settings[i].setting); | 479 | snprintf(buf, buf_len, "%d", *(int*)setting->setting); |
482 | } | 480 | } |
483 | else | 481 | else |
484 | { | 482 | { |
485 | if (cfg_int_to_string(i, *(int*)settings[i].setting, | 483 | if (!cfg_int_to_string(setting, *(int*)setting->setting, |
486 | buf, buf_len) == false) | 484 | buf, buf_len)) |
487 | { | 485 | snprintf(buf, buf_len, "%d", *(int*)setting->setting); |
488 | snprintf(buf,buf_len,"%d",*(int*)settings[i].setting); | ||
489 | } | ||
490 | else | ||
491 | return false; | ||
492 | } | 486 | } |
493 | break; | 487 | break; |
494 | case F_T_BOOL: | 488 | case F_T_BOOL: |
495 | cfg_int_to_string(i, | 489 | cfg_int_to_string(setting, *(bool*)setting->setting, buf, buf_len); |
496 | *(bool*)settings[i].setting==false?0:1, buf, buf_len); | ||
497 | break; | 490 | break; |
498 | case F_T_CHARPTR: | 491 | case F_T_CHARPTR: |
499 | case F_T_UCHARPTR: | 492 | case F_T_UCHARPTR: |
500 | if (((char*)settings[i].setting)[0] | 493 | { |
501 | && settings[i].filename_setting->prefix) | 494 | char *value = setting->setting; |
495 | const struct filename_setting *fs = setting->filename_setting; | ||
496 | if (value[0] && fs->prefix) | ||
502 | { | 497 | { |
503 | if (((char*)settings[i].setting)[0] == '-') | 498 | if (value[0] == '-') |
504 | { | 499 | { |
505 | buf[0] = '-'; | 500 | buf[0] = '-'; |
506 | buf[1] = '\0'; | 501 | buf[1] = '\0'; |
507 | } | 502 | } |
508 | else | 503 | else |
509 | { | 504 | { |
510 | snprintf(buf,buf_len,"%s%s%s", | 505 | snprintf(buf, buf_len, "%s%s%s", |
511 | settings[i].filename_setting->prefix, | 506 | fs->prefix, value, fs->suffix); |
512 | (char*)settings[i].setting, | ||
513 | settings[i].filename_setting->suffix); | ||
514 | } | 507 | } |
515 | } | 508 | } |
516 | else | 509 | else |
517 | { | 510 | { |
518 | int len = MIN(buf_len, settings[i].filename_setting->max_len); | 511 | strmemccpy(buf, value, buf_len); |
519 | strmemccpy(buf,(char*)settings[i].setting,len); | ||
520 | } | 512 | } |
521 | break; | 513 | break; |
514 | } | ||
522 | } /* switch () */ | 515 | } /* switch () */ |
523 | return true; | ||
524 | } | 516 | } |
525 | 517 | ||
526 | 518 | ||
527 | static bool is_changed(int setting_id) | 519 | static bool is_changed(const struct settings_list *setting) |
528 | { | 520 | { |
529 | const struct settings_list *setting = &settings[setting_id]; | ||
530 | switch (setting->flags&F_T_MASK) | 521 | switch (setting->flags&F_T_MASK) |
531 | { | 522 | { |
532 | case F_T_CUSTOM: | 523 | case F_T_CUSTOM: |
@@ -574,40 +565,38 @@ static bool settings_write_config(const char* filename, int options) | |||
574 | "http://www.rockbox.org\r\n\r\n", rbversion); | 565 | "http://www.rockbox.org\r\n\r\n", rbversion); |
575 | for(i=0; i<nb_settings; i++) | 566 | for(i=0; i<nb_settings; i++) |
576 | { | 567 | { |
577 | if (settings[i].cfg_name == NULL) | 568 | const struct settings_list *setting = &settings[i]; |
578 | continue; | 569 | if (!setting->cfg_name || (setting->flags & F_DEPRECATED)) |
579 | value[0] = '\0'; | ||
580 | if (settings[i].flags & F_DEPRECATED) | ||
581 | continue; | 570 | continue; |
582 | 571 | ||
583 | switch (options) | 572 | switch (options) |
584 | { | 573 | { |
585 | case SETTINGS_SAVE_CHANGED: | 574 | case SETTINGS_SAVE_CHANGED: |
586 | if (!is_changed(i)) | 575 | if (!is_changed(setting)) |
587 | continue; | 576 | continue; |
588 | break; | 577 | break; |
589 | case SETTINGS_SAVE_SOUND: | 578 | case SETTINGS_SAVE_SOUND: |
590 | if ((settings[i].flags&F_SOUNDSETTING) == 0) | 579 | if (!(setting->flags & F_SOUNDSETTING)) |
591 | continue; | 580 | continue; |
592 | break; | 581 | break; |
593 | case SETTINGS_SAVE_THEME: | 582 | case SETTINGS_SAVE_THEME: |
594 | if ((settings[i].flags&F_THEMESETTING) == 0) | 583 | if (!(setting->flags & F_THEMESETTING)) |
595 | continue; | 584 | continue; |
596 | break; | 585 | break; |
597 | #ifdef HAVE_RECORDING | 586 | #ifdef HAVE_RECORDING |
598 | case SETTINGS_SAVE_RECPRESETS: | 587 | case SETTINGS_SAVE_RECPRESETS: |
599 | if ((settings[i].flags&F_RECSETTING) == 0) | 588 | if (!(setting->flags & F_RECSETTING)) |
600 | continue; | 589 | continue; |
601 | break; | 590 | break; |
602 | #endif | 591 | #endif |
603 | case SETTINGS_SAVE_EQPRESET: | 592 | case SETTINGS_SAVE_EQPRESET: |
604 | if ((settings[i].flags&F_EQSETTING) == 0) | 593 | if (!(setting->flags & F_EQSETTING)) |
605 | continue; | 594 | continue; |
606 | break; | 595 | break; |
607 | } | 596 | } |
608 | 597 | ||
609 | cfg_to_string(i, value, MAX_PATH); | 598 | cfg_to_string(setting, value, MAX_PATH); |
610 | fdprintf(fd,"%s: %s\r\n",settings[i].cfg_name,value); | 599 | fdprintf(fd,"%s: %s\r\n",setting->cfg_name,value); |
611 | } /* for(...) */ | 600 | } /* for(...) */ |
612 | close(fd); | 601 | close(fd); |
613 | return true; | 602 | return true; |
diff --git a/apps/settings.h b/apps/settings.h index 5d1237b1a5..75a346e223 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -265,9 +265,9 @@ enum optiontype { INT, BOOL }; | |||
265 | 265 | ||
266 | const struct settings_list* find_setting(const void* variable, int *id); | 266 | const struct settings_list* find_setting(const void* variable, int *id); |
267 | const struct settings_list* find_setting_by_cfgname(const char* name, int *id); | 267 | const struct settings_list* find_setting_by_cfgname(const char* name, int *id); |
268 | bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len); | 268 | bool cfg_int_to_string(const struct settings_list *setting, int val, char* buf, int buf_len); |
269 | bool cfg_string_to_int(const struct settings_list *setting, int* out, const char* str); | 269 | bool cfg_string_to_int(const struct settings_list *setting, int* out, const char* str); |
270 | bool cfg_to_string(int setting_id, char* buf, int buf_len); | 270 | void cfg_to_string(const struct settings_list *setting, char* buf, int buf_len); |
271 | bool copy_filename_setting(char *buf, size_t buflen, const char *input, | 271 | bool copy_filename_setting(char *buf, size_t buflen, const char *input, |
272 | const struct filename_setting *fs); | 272 | const struct filename_setting *fs); |
273 | bool set_bool_options(const char* string, const bool* variable, | 273 | bool set_bool_options(const char* string, const bool* variable, |