* Remove more strlcat calls

* Safer manual char assignment in database_info.c
This commit is contained in:
libretroadmin 2023-06-20 17:43:33 +02:00
parent bdc398d79f
commit 458fe7a761
5 changed files with 411 additions and 390 deletions

View file

@ -5096,12 +5096,12 @@ bool config_save_file(const char *path)
snprintf(formatted_number, sizeof(formatted_number), "%u", i + 1); snprintf(formatted_number, sizeof(formatted_number), "%u", i + 1);
strlcpy(cfg, "input_device_p", sizeof(cfg)); _len = strlcpy(cfg, "input_device_p", sizeof(cfg));
strlcat(cfg, formatted_number, sizeof(cfg)); strlcpy(cfg + _len, formatted_number, sizeof(cfg) - _len);
config_set_int(conf, cfg, settings->uints.input_device[i]); config_set_int(conf, cfg, settings->uints.input_device[i]);
strlcpy(cfg, "input_player", sizeof(cfg)); _len = strlcpy(cfg, "input_player", sizeof(cfg));
_len = strlcat(cfg, formatted_number, sizeof(cfg)); _len += strlcpy(cfg + _len, formatted_number, sizeof(cfg) - _len);
strlcpy(cfg + _len, "_mouse_index", sizeof(cfg) - _len); strlcpy(cfg + _len, "_mouse_index", sizeof(cfg) - _len);
config_set_int(conf, cfg, settings->uints.input_mouse_index[i]); config_set_int(conf, cfg, settings->uints.input_mouse_index[i]);
@ -5417,8 +5417,8 @@ int8_t config_save_overrides(enum override_type type, void *data, bool remove)
RARCH_DBG("[Overrides]: %s = \"%u\"\n", cfg, overrides->uints.input_device[i]); RARCH_DBG("[Overrides]: %s = \"%u\"\n", cfg, overrides->uints.input_device[i]);
} }
strlcpy(cfg, "input_player", sizeof(cfg)); _len = strlcpy(cfg, "input_player", sizeof(cfg));
_len = strlcat(cfg, formatted_number, sizeof(cfg)); _len += strlcpy(cfg + _len, formatted_number, sizeof(cfg) - _len);
if (settings->uints.input_mouse_index[i] if (settings->uints.input_mouse_index[i]
!= overrides->uints.input_mouse_index[i]) != overrides->uints.input_mouse_index[i])

View file

@ -854,12 +854,12 @@ core_option_manager_t *core_option_manager_new_vars(
{ {
if (core_option_manager_parse_variable(opt, size, var, config_src)) if (core_option_manager_parse_variable(opt, size, var, config_src))
{ {
size_t _len = 0;
/* If variable is read correctly, add it to /* If variable is read correctly, add it to
* the map */ * the map */
char address[256]; char address[256];
address[ _len] = '#';
address[0] = '#'; address[++_len] = '\0';
address[1] = '\0';
/* Address string is normally: /* Address string is normally:
* <category_key><delim><tag><option_key> * <category_key><delim><tag><option_key>
@ -869,7 +869,7 @@ core_option_manager_t *core_option_manager_new_vars(
* so we could just set the address to * so we could just set the address to
* <option_key> - but for consistency with * <option_key> - but for consistency with
* 'modern' options, we apply the tag regardless */ * 'modern' options, we apply the tag regardless */
strlcat(address, var->key, sizeof(address)); strlcpy(address + _len, var->key, sizeof(address) - _len);
if (!nested_list_add_item(opt->option_map, if (!nested_list_add_item(opt->option_map,
address, NULL, (const void*)&opt->opts[size])) address, NULL, (const void*)&opt->opts[size]))

View file

@ -34,415 +34,415 @@ int database_info_build_query_enum(char *s, size_t len,
enum database_query_type type, enum database_query_type type,
const char *path) const char *path)
{ {
size_t pos = 0; size_t _len = 0;
switch (type) switch (type)
{ {
case DATABASE_QUERY_ENTRY: case DATABASE_QUERY_ENTRY:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'n'; s[++_len] = 'n';
s[3] = 'a'; s[++_len] = 'a';
s[4] = 'm'; s[++_len] = 'm';
s[5] = 'e'; s[++_len] = 'e';
s[6] = '\''; s[++_len] = '\'';
s[7] = ':'; s[++_len] = ':';
s[8] = '"'; s[++_len] = '"';
s[9] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_PUBLISHER: case DATABASE_QUERY_ENTRY_PUBLISHER:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'p'; s[++_len] = 'p';
s[3] = 'u'; s[++_len] = 'u';
s[4] = 'b'; s[++_len] = 'b';
s[5] = 'l'; s[++_len] = 'l';
s[6] = 'i'; s[++_len] = 'i';
s[7] = 's'; s[++_len] = 's';
s[8] = 'h'; s[++_len] = 'h';
s[9] = 'e'; s[++_len] = 'e';
s[10] = 'r'; s[++_len] = 'r';
s[11] = '\''; s[++_len] = '\'';
s[12] = ':'; s[++_len] = ':';
s[13] = '"'; s[++_len] = '"';
s[14] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_DEVELOPER: case DATABASE_QUERY_ENTRY_DEVELOPER:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'd'; s[++_len] = 'd';
s[3] = 'e'; s[++_len] = 'e';
s[4] = 'v'; s[++_len] = 'v';
s[5] = 'e'; s[++_len] = 'e';
s[6] = 'l'; s[++_len] = 'l';
s[7] = 'o'; s[++_len] = 'o';
s[8] = 'p'; s[++_len] = 'p';
s[9] = 'e'; s[++_len] = 'e';
s[10] = 'r'; s[++_len] = 'r';
s[11] = '\''; s[++_len] = '\'';
s[12] = ':'; s[++_len] = ':';
s[13] = 'g'; s[++_len] = 'g';
s[14] = 'l'; s[++_len] = 'l';
s[15] = 'o'; s[++_len] = 'o';
s[16] = 'b'; s[++_len] = 'b';
s[17] = '('; s[++_len] = '(';
s[18] = '\''; s[++_len] = '\'';
s[19] = '*'; s[++_len] = '*';
s[20] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '*'; s[ _len] = '*';
s[pos+1] = '\''; s[++_len] = '\'';
s[pos+2] = ')'; s[++_len] = ')';
s[pos+3] = '}'; s[++_len] = '}';
s[pos+4] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_ORIGIN: case DATABASE_QUERY_ENTRY_ORIGIN:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'o'; s[++_len] = 'o';
s[3] = 'r'; s[++_len] = 'r';
s[4] = 'i'; s[++_len] = 'i';
s[5] = 'g'; s[++_len] = 'g';
s[6] = 'i'; s[++_len] = 'i';
s[7] = 'n'; s[++_len] = 'n';
s[8] = '\''; s[++_len] = '\'';
s[9] = ':'; s[++_len] = ':';
s[10] = '"'; s[++_len] = '"';
s[11] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_FRANCHISE: case DATABASE_QUERY_ENTRY_FRANCHISE:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'f'; s[++_len] = 'f';
s[3] = 'r'; s[++_len] = 'r';
s[4] = 'a'; s[++_len] = 'a';
s[5] = 'n'; s[++_len] = 'n';
s[6] = 'c'; s[++_len] = 'c';
s[7] = 'h'; s[++_len] = 'h';
s[8] = 'i'; s[++_len] = 'i';
s[9] = 's'; s[++_len] = 's';
s[10] = 'e'; s[++_len] = 'e';
s[11] = '\''; s[++_len] = '\'';
s[12] = ':'; s[++_len] = ':';
s[13] = '"'; s[++_len] = '"';
s[14] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_RATING: case DATABASE_QUERY_ENTRY_RATING:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'e'; s[++_len] = 'e';
s[3] = 's'; s[++_len] = 's';
s[4] = 'r'; s[++_len] = 'r';
s[5] = 'b'; s[++_len] = 'b';
s[6] = '_'; s[++_len] = '_';
s[7] = 'r'; s[++_len] = 'r';
s[8] = 'a'; s[++_len] = 'a';
s[9] = 't'; s[++_len] = 't';
s[10] = 'i'; s[++_len] = 'i';
s[11] = 'n'; s[++_len] = 'n';
s[12] = 'g'; s[++_len] = 'g';
s[13] = '\''; s[++_len] = '\'';
s[14] = ':'; s[++_len] = ':';
s[15] = '"'; s[++_len] = '"';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_BBFC_RATING: case DATABASE_QUERY_ENTRY_BBFC_RATING:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'b'; s[++_len] = 'b';
s[3] = 'b'; s[++_len] = 'b';
s[4] = 'f'; s[++_len] = 'f';
s[5] = 'c'; s[++_len] = 'c';
s[6] = '_'; s[++_len] = '_';
s[7] = 'r'; s[++_len] = 'r';
s[8] = 'a'; s[++_len] = 'a';
s[9] = 't'; s[++_len] = 't';
s[10] = 'i'; s[++_len] = 'i';
s[11] = 'n'; s[++_len] = 'n';
s[12] = 'g'; s[++_len] = 'g';
s[13] = '\''; s[++_len] = '\'';
s[14] = ':'; s[++_len] = ':';
s[15] = '"'; s[++_len] = '"';
s[16] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[++_len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_ELSPA_RATING: case DATABASE_QUERY_ENTRY_ELSPA_RATING:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'e'; s[++_len] = 'e';
s[3] = 'l'; s[++_len] = 'l';
s[4] = 's'; s[++_len] = 's';
s[5] = 'p'; s[++_len] = 'p';
s[6] = 'a'; s[++_len] = 'a';
s[7] = '_'; s[++_len] = '_';
s[8] = 'r'; s[++_len] = 'r';
s[9] = 'a'; s[++_len] = 'a';
s[10] = 't'; s[++_len] = 't';
s[11] = 'i'; s[++_len] = 'i';
s[12] = 'n'; s[++_len] = 'n';
s[13] = 'g'; s[++_len] = 'g';
s[14] = '\''; s[++_len] = '\'';
s[15] = ':'; s[++_len] = ':';
s[16] = '"'; s[++_len] = '"';
s[17] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_ESRB_RATING: case DATABASE_QUERY_ENTRY_ESRB_RATING:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'e'; s[++_len] = 'e';
s[3] = 's'; s[++_len] = 's';
s[4] = 'r'; s[++_len] = 'r';
s[5] = 'b'; s[++_len] = 'b';
s[6] = '_'; s[++_len] = '_';
s[7] = 'r'; s[++_len] = 'r';
s[8] = 'a'; s[++_len] = 'a';
s[9 ] = 't'; s[++_len] = 't';
s[10] = 'i'; s[++_len] = 'i';
s[11] = 'n'; s[++_len] = 'n';
s[12] = 'g'; s[++_len] = 'g';
s[13] = '\''; s[++_len] = '\'';
s[14] = ':'; s[++_len] = ':';
s[15] = '"'; s[++_len] = '"';
s[16] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_PEGI_RATING: case DATABASE_QUERY_ENTRY_PEGI_RATING:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'p'; s[++_len] = 'p';
s[3] = 'e'; s[++_len] = 'e';
s[4] = 'g'; s[++_len] = 'g';
s[5] = 'i'; s[++_len] = 'i';
s[6] = '_'; s[++_len] = '_';
s[7] = 'r'; s[++_len] = 'r';
s[8] = 'a'; s[++_len] = 'a';
s[9] = 't'; s[++_len] = 't';
s[10] = 'i'; s[++_len] = 'i';
s[11] = 'n'; s[++_len] = 'n';
s[12] = 'g'; s[++_len] = 'g';
s[13] = '\''; s[++_len] = '\'';
s[14] = ':'; s[++_len] = ':';
s[15] = '"'; s[++_len] = '"';
s[16] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_CERO_RATING: case DATABASE_QUERY_ENTRY_CERO_RATING:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'c'; s[++_len] = 'c';
s[3] = 'e'; s[++_len] = 'e';
s[4] = 'r'; s[++_len] = 'r';
s[5] = 'o'; s[++_len] = 'o';
s[6] = '_'; s[++_len] = '_';
s[7] = 'r'; s[++_len] = 'r';
s[8] = 'a'; s[++_len] = 'a';
s[9] = 't'; s[++_len] = 't';
s[10] = 'i'; s[++_len] = 'i';
s[11] = 'n'; s[++_len] = 'n';
s[12] = 'g'; s[++_len] = 'g';
s[13] = '\''; s[++_len] = '\'';
s[14] = ':'; s[++_len] = ':';
s[15] = '"'; s[++_len] = '"';
s[16] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_ENHANCEMENT_HW: case DATABASE_QUERY_ENTRY_ENHANCEMENT_HW:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'e'; s[++_len] = 'e';
s[3] = 'n'; s[++_len] = 'n';
s[4] = 'h'; s[++_len] = 'h';
s[5] = 'a'; s[++_len] = 'a';
s[6] = 'n'; s[++_len] = 'n';
s[7] = 'c'; s[++_len] = 'c';
s[8] = 'e'; s[++_len] = 'e';
s[9] = 'm'; s[++_len] = 'm';
s[10] = 'e'; s[++_len] = 'e';
s[11] = 'n'; s[++_len] = 'n';
s[12] = 't'; s[++_len] = 't';
s[13] = '_'; s[++_len] = '_';
s[14] = 'h'; s[++_len] = 'h';
s[15] = 'w'; s[++_len] = 'w';
s[16] = '\''; s[++_len] = '\'';
s[17] = ':'; s[++_len] = ':';
s[18] = '"'; s[++_len] = '"';
s[19] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_RATING: case DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_RATING:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'e'; s[++_len] = 'e';
s[3] = 'd'; s[++_len] = 'd';
s[4] = 'g'; s[++_len] = 'g';
s[5] = 'e'; s[++_len] = 'e';
s[6] = '_'; s[++_len] = '_';
s[7] = 'r'; s[++_len] = 'r';
s[8] = 'a'; s[++_len] = 'a';
s[9] = 't'; s[++_len] = 't';
s[10] = 'i'; s[++_len] = 'i';
s[11] = 'n'; s[++_len] = 'n';
s[12] = 'g'; s[++_len] = 'g';
s[13] = '\''; s[++_len] = '\'';
s[14] = ':'; s[++_len] = ':';
s[15] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '}'; s[ _len] = '}';
s[pos+1] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_ISSUE: case DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_ISSUE:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'e'; s[++_len] = 'e';
s[3] = 'd'; s[++_len] = 'd';
s[4] = 'g'; s[++_len] = 'g';
s[5] = 'e'; s[++_len] = 'e';
s[6] = '_'; s[++_len] = '_';
s[7] = 'i'; s[++_len] = 'i';
s[8] = 's'; s[++_len] = 's';
s[9] = 's'; s[++_len] = 's';
s[10] = 'u'; s[++_len] = 'u';
s[11] = 'e'; s[++_len] = 'e';
s[12] = '\''; s[++_len] = '\'';
s[13] = ':'; s[++_len] = ':';
s[14] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '}'; s[ _len] = '}';
s[pos+1] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_FAMITSU_MAGAZINE_RATING: case DATABASE_QUERY_ENTRY_FAMITSU_MAGAZINE_RATING:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'f'; s[++_len] = 'f';
s[3] = 'a'; s[++_len] = 'a';
s[4] = 'm'; s[++_len] = 'm';
s[5] = 'i'; s[++_len] = 'i';
s[6] = 't'; s[++_len] = 't';
s[7] = 's'; s[++_len] = 's';
s[8] = 'u'; s[++_len] = 'u';
s[9] = '_'; s[++_len] = '_';
s[10] = 'r'; s[++_len] = 'r';
s[11] = 'a'; s[++_len] = 'a';
s[12] = 't'; s[++_len] = 't';
s[13] = 'i'; s[++_len] = 'i';
s[14] = 'n'; s[++_len] = 'n';
s[15] = 'g'; s[++_len] = 'g';
s[16] = '\''; s[++_len] = '\'';
s[17] = ':'; s[++_len] = ':';
s[18] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '}'; s[ _len] = '}';
s[pos+1] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_RELEASEDATE_MONTH: case DATABASE_QUERY_ENTRY_RELEASEDATE_MONTH:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'r'; s[++_len] = 'r';
s[3] = 'e'; s[++_len] = 'e';
s[4] = 'l'; s[++_len] = 'l';
s[5] = 'e'; s[++_len] = 'e';
s[6] = 'a'; s[++_len] = 'a';
s[7] = 's'; s[++_len] = 's';
s[8] = 'e'; s[++_len] = 'e';
s[9] = 'm'; s[++_len] = 'm';
s[10] = 'o'; s[++_len] = 'o';
s[11] = 'n'; s[++_len] = 'n';
s[12] = 't'; s[++_len] = 't';
s[13] = 'h'; s[++_len] = 'h';
s[14] = '\''; s[++_len] = '\'';
s[15] = ':'; s[++_len] = ':';
s[16] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '}'; s[ _len] = '}';
s[pos+1] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_RELEASEDATE_YEAR: case DATABASE_QUERY_ENTRY_RELEASEDATE_YEAR:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'r'; s[++_len] = 'r';
s[3] = 'e'; s[++_len] = 'e';
s[4] = 'l'; s[++_len] = 'l';
s[5] = 'e'; s[++_len] = 'e';
s[6] = 'a'; s[++_len] = 'a';
s[7] = 's'; s[++_len] = 's';
s[8] = 'e'; s[++_len] = 'e';
s[9] = 'y'; s[++_len] = 'y';
s[10] = 'e'; s[++_len] = 'e';
s[11] = 'a'; s[++_len] = 'a';
s[12] = 'r'; s[++_len] = 'r';
s[13] = '\''; s[++_len] = '\'';
s[14] = ':'; s[++_len] = ':';
s[15] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '}'; s[ _len] = '}';
s[pos+1] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_ENTRY_MAX_USERS: case DATABASE_QUERY_ENTRY_MAX_USERS:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = 'u'; s[++_len] = 'u';
s[3] = 's'; s[++_len] = 's';
s[4] = 'e'; s[++_len] = 'e';
s[5] = 'r'; s[++_len] = 'r';
s[6] = 's'; s[++_len] = 's';
s[7] = '\''; s[++_len] = '\'';
s[8] = ':'; s[++_len] = ':';
s[9] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '}'; s[ _len] = '}';
s[pos+1] = '\0'; s[++_len] = '\0';
break; break;
case DATABASE_QUERY_NONE: case DATABASE_QUERY_NONE:
s[0] = '{'; s[ _len] = '{';
s[1] = '\''; s[++_len] = '\'';
s[2] = '\''; s[++_len] = '\'';
s[3] = ':'; s[++_len] = ':';
s[4] = '\''; s[++_len] = '\'';
s[5] = ':'; s[++_len] = ':';
s[6] = '"'; s[++_len] = '"';
s[7] = '\0'; s[++_len] = '\0';
pos = strlcat(s, path, len); _len += strlcpy(s + _len, path, len - _len);
s[pos ] = '"'; s[ _len] = '"';
s[pos+1] = '}'; s[++_len] = '}';
s[pos+2] = '\0'; s[++_len] = '\0';
break; break;
} }

View file

@ -25,6 +25,7 @@ int get_process_id(void)
* Discord client as discord-<appid>:// */ * Discord client as discord-<appid>:// */
void Discord_Register(const char *applicationId, const char *command) void Discord_Register(const char *applicationId, const char *command)
{ {
size_t _len;
FILE* fp; FILE* fp;
int fileLen; int fileLen;
char xdgMimeCommand[1024]; char xdgMimeCommand[1024];
@ -61,21 +62,39 @@ void Discord_Register(const char *applicationId, const char *command)
return; return;
} }
snprintf(desktopFilename, sizeof(desktopFilename), "/discord-%s.desktop", applicationId); _len = strlcpy(desktopFilename,
"/discord-",
sizeof(desktopFilename));
_len += strlcpy(desktopFilename + _len,
applicationId,
sizeof(desktopFilename) - _len);
_len += strlcpy(desktopFilename + _len,
".desktop",
sizeof(desktopFilename) - _len);
snprintf(desktopFilePath, sizeof(desktopFilePath), "%s/.local", home); _len = strlcpy(desktopFilePath,
home,
sizeof(desktopFilePath));
_len += strlcpy(desktopFilePath + _len,
"/.local",
sizeof(desktopFilePath) - _len);
if (!path_mkdir(desktopFilePath)) if (!path_mkdir(desktopFilePath))
return; return;
strlcat(desktopFilePath, "/share", sizeof(desktopFilePath)); _len += strlcpy(desktopFilePath + _len,
"/share",
sizeof(desktopFilePath) - _len);
if (!path_mkdir(desktopFilePath)) if (!path_mkdir(desktopFilePath))
return; return;
strlcat(desktopFilePath, "/applications", sizeof(desktopFilePath)); _len += strlcpy(desktopFilePath + _len,
"/applications",
sizeof(desktopFilePath) - _len);
if (!path_mkdir(desktopFilePath)) if (!path_mkdir(desktopFilePath))
return; return;
strlcat(desktopFilePath, desktopFilename, sizeof(desktopFilePath)); _len += strlcpy(desktopFilePath + _len,
desktopFilename,
sizeof(desktopFilePath) - _len);
fp = fopen(desktopFilePath, "w"); if (!(fp = fopen(desktopFilePath, "w")))
if (!fp)
return; return;
fwrite(desktopFile, 1, fileLen, fp); fwrite(desktopFile, 1, fileLen, fp);
@ -93,6 +112,7 @@ void Discord_Register(const char *applicationId, const char *command)
void Discord_RegisterSteamGame(const char *applicationId, const char *steamId) void Discord_RegisterSteamGame(const char *applicationId, const char *steamId)
{ {
char command[256]; char command[256];
snprintf(command, sizeof(command), "xdg-open steam://rungameid/%s", steamId); size_t _len = strlcpy(command, "xdg-open steam://rungameid/", sizeof(command));
strlcpy(command + _len, steamId, sizeof(command) - _len);
Discord_Register(applicationId, command); Discord_Register(applicationId, command);
} }

View file

@ -1092,9 +1092,10 @@ extern "C" {
if (split.size >= 2) if (split.size >= 2)
{ {
strlcpy(lang_iso + _len, "_", sizeof(lang_iso) - _len); _len += strlcpy(lang_iso + _len, "_", sizeof(lang_iso) - _len);
strlcat(lang_iso, split.elems[split.size >= 3 ? 2 : 1].data, strlcpy(lang_iso + _len,
sizeof(lang_iso)); split.elems[split.size >= 3 ? 2 : 1].data,
sizeof(lang_iso) - _len);
} }
string_list_deinitialize(&split); string_list_deinitialize(&split);
return retroarch_get_language_from_iso(lang_iso); return retroarch_get_language_from_iso(lang_iso);