Define simple configuration on INI files.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

string.c 1.5 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "string.h"
  2. typedef bool INI_ConfigLoadParamsStringValidator(const char*);
  3. void INI_ConfigEnsureValidString(INI_ConfigItem* item, const char* buffer) {
  4. if (item->validator) {
  5. INI_ConfigLoadParamsStringValidator* validator = item->validator;
  6. if (validator(buffer)) {
  7. memcpy(item->dest, buffer, item->type.size);
  8. return;
  9. }
  10. memcpy(item->dest, item->default_value, item->type.size);
  11. return;
  12. }
  13. memcpy(item->dest, buffer, item->type.size);
  14. }
  15. void INI_ConfigLoadString(INI_ConfigItem* item, const char* config_path) {
  16. char buffer[item->type.size];
  17. ini_gets(item->section, item->key, item->default_value, buffer, (int32_t) item->type.size, config_path);
  18. INI_ConfigEnsureValidString(item, buffer);
  19. }
  20. INI_ConfigSaveItemResult INI_ConfigSaveString(INI_ConfigItem* item, const char* config_path) {
  21. const char* dest = (const char*) item->dest;
  22. if (item->validator) {
  23. INI_ConfigLoadParamsStringValidator* validator = item->validator;
  24. if (!validator(dest)) {
  25. dest = (const char*) item->default_value;
  26. }
  27. }
  28. if (!ini_puts(item->section, item->key, dest, config_path)) {
  29. return INI_CONFIG_SAVE_ITEM_ERROR;
  30. }
  31. return INI_CONFIG_SAVE_ITEM_OK;
  32. }
  33. void INI_ConfigOverrideString(INI_ConfigItem* item, uint8_t argc, const char* argv[]) {
  34. if (!item->cmdline_option) {
  35. return;
  36. }
  37. const char* cmdline_buffer;
  38. if ((cmdline_buffer = INI_ConfigGetCommandlineOption(argc, argv, item->cmdline_option))) {
  39. INI_ConfigEnsureValidString(item, cmdline_buffer);
  40. }
  41. }