Convert to strlcpy/strlcat. More sane.

This commit is contained in:
Themaister 2011-04-03 22:29:36 +02:00
parent 6b8eea6363
commit ad55829890
3 changed files with 44 additions and 42 deletions

5
file.c
View File

@ -24,6 +24,7 @@
#include "dynamic.h" #include "dynamic.h"
#include "movie.h" #include "movie.h"
#include "ups.h" #include "ups.h"
#include "strl.h"
#ifdef _WIN32 #ifdef _WIN32
#include <io.h> #include <io.h>
@ -537,8 +538,8 @@ char** dir_list_new(const char *dir, const char *ext)
wchar_t wchar_buf[MAX_PATH + 1]; wchar_t wchar_buf[MAX_PATH + 1];
char utf8_buf[MAX_PATH + 3]; char utf8_buf[MAX_PATH + 3];
strncpy(utf8_buf, dir, MAX_PATH); strlcpy(utf8_buf, dir, sizeof(utf8_buf));
strcat(utf8_buf, "/*"); strlcat(utf8_buf, "/*", sizeof(utf8_buf));
utf8_buf[MAX_PATH + 2] = '\0'; utf8_buf[MAX_PATH + 2] = '\0';
int ret = MultiByteToWideChar(CP_UTF8, 0, utf8_buf, strlen(utf8_buf), wchar_buf, MAX_PATH); int ret = MultiByteToWideChar(CP_UTF8, 0, utf8_buf, strlen(utf8_buf), wchar_buf, MAX_PATH);

View File

@ -18,7 +18,7 @@
#include "general.h" #include "general.h"
#include "conf/config_file.h" #include "conf/config_file.h"
#include <assert.h> #include <assert.h>
#include <string.h> #include "strl.h"
#include "config.def.h" #include "config.def.h"
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
@ -94,11 +94,11 @@ static void set_defaults(void)
} }
if (def_video) if (def_video)
strncpy(g_settings.video.driver, def_video, sizeof(g_settings.video.driver) - 1); strlcpy(g_settings.video.driver, def_video, sizeof(g_settings.video.driver));
if (def_audio) if (def_audio)
strncpy(g_settings.audio.driver, def_audio, sizeof(g_settings.audio.driver) - 1); strlcpy(g_settings.audio.driver, def_audio, sizeof(g_settings.audio.driver));
if (def_input) if (def_input)
strncpy(g_settings.input.driver, def_input, sizeof(g_settings.input.driver) - 1); strlcpy(g_settings.input.driver, def_input, sizeof(g_settings.input.driver));
g_settings.video.xscale = xscale; g_settings.video.xscale = xscale;
g_settings.video.yscale = yscale; g_settings.video.yscale = yscale;
@ -129,7 +129,7 @@ static void set_defaults(void)
g_settings.audio.in_rate = in_rate; g_settings.audio.in_rate = in_rate;
g_settings.audio.rate_step = audio_rate_step; g_settings.audio.rate_step = audio_rate_step;
if (audio_device) if (audio_device)
strncpy(g_settings.audio.device, audio_device, sizeof(g_settings.audio.device)); strlcpy(g_settings.audio.device, audio_device, sizeof(g_settings.audio.device));
g_settings.audio.latency = out_latency; g_settings.audio.latency = out_latency;
g_settings.audio.sync = audio_sync; g_settings.audio.sync = audio_sync;
@ -244,7 +244,7 @@ static config_file_t *open_default_config_file(void)
#define CONFIG_GET_STRING(var, key) do { \ #define CONFIG_GET_STRING(var, key) do { \
if (config_get_string(conf, key, &tmp_str)) \ if (config_get_string(conf, key, &tmp_str)) \
{ \ { \
strncpy(g_settings.var, tmp_str, sizeof(g_settings.var) - 1); \ strlcpy(g_settings.var, tmp_str, sizeof(g_settings.var)); \
free(tmp_str); \ free(tmp_str); \
} \ } \
} while(0) } while(0)

69
ssnes.c
View File

@ -31,6 +31,7 @@
#include "rewind.h" #include "rewind.h"
#include "movie.h" #include "movie.h"
#include "netplay.h" #include "netplay.h"
#include "strl.h"
#include <assert.h> #include <assert.h>
#ifdef HAVE_SRC #ifdef HAVE_SRC
#include <samplerate.h> #include <samplerate.h>
@ -220,22 +221,22 @@ static int16_t input_state(bool port, unsigned device, unsigned index, unsigned
return res; return res;
} }
static void fill_pathname(char *out_path, const char *in_path, const char *replace) static void fill_pathname(char *out_path, const char *in_path, const char *replace, size_t size)
{ {
char tmp_path[strlen(in_path) + 1]; char tmp_path[strlen(in_path) + 1];
strcpy(tmp_path, in_path); strlcpy(tmp_path, in_path, sizeof(tmp_path));
char *tok = NULL; char *tok = NULL;
tok = strrchr(tmp_path, '.'); tok = strrchr(tmp_path, '.');
if (tok != NULL) if (tok != NULL)
*tok = '\0'; *tok = '\0';
strcpy(out_path, tmp_path); assert(strlcpy(out_path, tmp_path, size) < size);
strcat(out_path, replace); assert(strlcat(out_path, replace, size) < size);
} }
static void fill_pathname_noext(char *out_path, const char *in_path, const char *replace) static void fill_pathname_noext(char *out_path, const char *in_path, const char *replace, size_t size)
{ {
strcpy(out_path, in_path); assert(strlcpy(out_path, in_path, size) < size);
strcat(out_path, replace); assert(strlcat(out_path, replace, size) < size);
} }
#ifdef _WIN32 #ifdef _WIN32
@ -326,7 +327,7 @@ static void set_basename(const char *path)
char *dst = strrchr(tmp, '.'); char *dst = strrchr(tmp, '.');
if (dst) if (dst)
*dst = '\0'; *dst = '\0';
strncpy(g_extern.basename, tmp, sizeof(g_extern.basename) - 1); strlcpy(g_extern.basename, tmp, sizeof(g_extern.basename));
} }
static void parse_input(int argc, char *argv[]) static void parse_input(int argc, char *argv[])
@ -412,37 +413,37 @@ static void parse_input(int argc, char *argv[])
break; break;
case 's': case 's':
strncpy(g_extern.savefile_name_srm, optarg, sizeof(g_extern.savefile_name_srm) - 1); strlcpy(g_extern.savefile_name_srm, optarg, sizeof(g_extern.savefile_name_srm));
g_extern.has_set_save_path = true; g_extern.has_set_save_path = true;
break; break;
case 'g': case 'g':
strncpy(g_extern.gb_rom_path, optarg, sizeof(g_extern.gb_rom_path) - 1); strlcpy(g_extern.gb_rom_path, optarg, sizeof(g_extern.gb_rom_path));
g_extern.game_type = SSNES_CART_SGB; g_extern.game_type = SSNES_CART_SGB;
break; break;
case 'b': case 'b':
strncpy(g_extern.bsx_rom_path, optarg, sizeof(g_extern.bsx_rom_path) - 1); strlcpy(g_extern.bsx_rom_path, optarg, sizeof(g_extern.bsx_rom_path));
g_extern.game_type = SSNES_CART_BSX; g_extern.game_type = SSNES_CART_BSX;
break; break;
case 'B': case 'B':
strncpy(g_extern.bsx_rom_path, optarg, sizeof(g_extern.bsx_rom_path) - 1); strlcpy(g_extern.bsx_rom_path, optarg, sizeof(g_extern.bsx_rom_path));
g_extern.game_type = SSNES_CART_BSX_SLOTTED; g_extern.game_type = SSNES_CART_BSX_SLOTTED;
break; break;
case 'Y': case 'Y':
strncpy(g_extern.sufami_rom_path[0], optarg, sizeof(g_extern.sufami_rom_path[0]) - 1); strlcpy(g_extern.sufami_rom_path[0], optarg, sizeof(g_extern.sufami_rom_path[0]));
g_extern.game_type = SSNES_CART_SUFAMI; g_extern.game_type = SSNES_CART_SUFAMI;
break; break;
case 'Z': case 'Z':
strncpy(g_extern.sufami_rom_path[1], optarg, sizeof(g_extern.sufami_rom_path[1]) - 1); strlcpy(g_extern.sufami_rom_path[1], optarg, sizeof(g_extern.sufami_rom_path[1]));
g_extern.game_type = SSNES_CART_SUFAMI; g_extern.game_type = SSNES_CART_SUFAMI;
break; break;
case 'S': case 'S':
strncpy(g_extern.savestate_name, optarg, sizeof(g_extern.savestate_name) - 1); strlcpy(g_extern.savestate_name, optarg, sizeof(g_extern.savestate_name));
g_extern.has_set_state_path = true; g_extern.has_set_state_path = true;
break; break;
@ -467,19 +468,19 @@ static void parse_input(int argc, char *argv[])
#ifdef HAVE_CONFIGFILE #ifdef HAVE_CONFIGFILE
case 'c': case 'c':
strncpy(g_extern.config_path, optarg, sizeof(g_extern.config_path) - 1); strlcpy(g_extern.config_path, optarg, sizeof(g_extern.config_path));
break; break;
#endif #endif
#ifdef HAVE_FFMPEG #ifdef HAVE_FFMPEG
case 'r': case 'r':
strncpy(g_extern.record_path, optarg, sizeof(g_extern.record_path) - 1); strlcpy(g_extern.record_path, optarg, sizeof(g_extern.record_path));
g_extern.recording = true; g_extern.recording = true;
break; break;
#endif #endif
case 'P': case 'P':
strncpy(g_extern.bsv_movie_path, optarg, sizeof(g_extern.bsv_movie_path) - 1); strlcpy(g_extern.bsv_movie_path, optarg, sizeof(g_extern.bsv_movie_path));
g_extern.bsv_movie_playback = true; g_extern.bsv_movie_playback = true;
break; break;
@ -489,7 +490,7 @@ static void parse_input(int argc, char *argv[])
case 'C': case 'C':
g_extern.netplay_enable = true; g_extern.netplay_enable = true;
strncpy(g_extern.netplay_server, optarg, sizeof(g_extern.netplay_server) - 1); strlcpy(g_extern.netplay_server, optarg, sizeof(g_extern.netplay_server));
break; break;
case 'F': case 'F':
@ -499,7 +500,7 @@ static void parse_input(int argc, char *argv[])
break; break;
case 'U': case 'U':
strncpy(g_extern.ups_name, optarg, sizeof(g_extern.ups_name) - 1); strlcpy(g_extern.ups_name, optarg, sizeof(g_extern.ups_name));
break; break;
case 0: case 0:
@ -536,9 +537,9 @@ static void parse_input(int argc, char *argv[])
} }
// strl* would be nice :D // strl* would be nice :D
if (!g_extern.has_set_save_path) if (!g_extern.has_set_save_path)
fill_pathname_noext(g_extern.savefile_name_srm, g_extern.basename, ".srm"); fill_pathname_noext(g_extern.savefile_name_srm, g_extern.basename, ".srm", sizeof(g_extern.savefile_name_srm));
if (!g_extern.has_set_state_path) if (!g_extern.has_set_state_path)
fill_pathname_noext(g_extern.savestate_name, g_extern.basename, ".state"); fill_pathname_noext(g_extern.savestate_name, g_extern.basename, ".state", sizeof(g_extern.savestate_name));
} }
else if (strlen(g_extern.savefile_name_srm) == 0) else if (strlen(g_extern.savefile_name_srm) == 0)
{ {
@ -857,37 +858,37 @@ static void fill_pathnames(void)
case SSNES_CART_BSX_SLOTTED: case SSNES_CART_BSX_SLOTTED:
// BSX PSRM // BSX PSRM
if (!g_extern.has_set_save_path) if (!g_extern.has_set_save_path)
fill_pathname(g_extern.savefile_name_srm, g_extern.bsx_rom_path, ".srm"); fill_pathname(g_extern.savefile_name_srm, g_extern.bsx_rom_path, ".srm", sizeof(g_extern.savefile_name_srm));
if (!g_extern.has_set_state_path) if (!g_extern.has_set_state_path)
fill_pathname(g_extern.savestate_name, g_extern.bsx_rom_path, ".state"); fill_pathname(g_extern.savestate_name, g_extern.bsx_rom_path, ".state", sizeof(g_extern.savestate_name));
fill_pathname(g_extern.savefile_name_psrm, g_extern.savefile_name_srm, ".psrm"); fill_pathname(g_extern.savefile_name_psrm, g_extern.savefile_name_srm, ".psrm", sizeof(g_extern.savefile_name_psrm));
break; break;
case SSNES_CART_SUFAMI: case SSNES_CART_SUFAMI:
// SUFAMI ARAM // SUFAMI ARAM
fill_pathname(g_extern.savefile_name_asrm, g_extern.savefile_name_srm, ".asrm"); fill_pathname(g_extern.savefile_name_asrm, g_extern.savefile_name_srm, ".asrm", sizeof(g_extern.savefile_name_asrm));
// SUFAMI BRAM // SUFAMI BRAM
fill_pathname(g_extern.savefile_name_bsrm, g_extern.savefile_name_srm, ".bsrm"); fill_pathname(g_extern.savefile_name_bsrm, g_extern.savefile_name_srm, ".bsrm", sizeof(g_extern.savefile_name_bsrm));
break; break;
case SSNES_CART_SGB: case SSNES_CART_SGB:
if (!g_extern.has_set_save_path) if (!g_extern.has_set_save_path)
fill_pathname(g_extern.savefile_name_srm, g_extern.gb_rom_path, ".srm"); fill_pathname(g_extern.savefile_name_srm, g_extern.gb_rom_path, ".srm", sizeof(g_extern.savefile_name_srm));
if (!g_extern.has_set_state_path) if (!g_extern.has_set_state_path)
fill_pathname(g_extern.savestate_name, g_extern.gb_rom_path, ".state"); fill_pathname(g_extern.savestate_name, g_extern.gb_rom_path, ".state", sizeof(g_extern.savestate_name));
fill_pathname(g_extern.savefile_name_rtc, g_extern.savefile_name_srm, ".rtc"); fill_pathname(g_extern.savefile_name_rtc, g_extern.savefile_name_srm, ".rtc", sizeof(g_extern.savefile_name_rtc));
break; break;
default: default:
// Infer .rtc save path from save ram path. // Infer .rtc save path from save ram path.
fill_pathname(g_extern.savefile_name_rtc, g_extern.savefile_name_srm, ".rtc"); fill_pathname(g_extern.savefile_name_rtc, g_extern.savefile_name_srm, ".rtc", sizeof(g_extern.savefile_name_rtc));
} }
if (!g_extern.bsv_movie_playback) if (!g_extern.bsv_movie_playback)
fill_pathname(g_extern.bsv_movie_path, g_extern.savefile_name_srm, ""); fill_pathname(g_extern.bsv_movie_path, g_extern.savefile_name_srm, "", sizeof(g_extern.bsv_movie_path));
if (!(*g_extern.ups_name) && *g_extern.basename) if (!(*g_extern.ups_name) && *g_extern.basename)
fill_pathname_noext(g_extern.ups_name, g_extern.basename, ".ups"); fill_pathname_noext(g_extern.ups_name, g_extern.basename, ".ups", sizeof(g_extern.ups_name));
} }
// Save or load state here. // Save or load state here.
@ -1194,7 +1195,7 @@ static void check_shader_dir(void)
{ {
const char *shader = g_extern.shader_dir.elems[g_extern.shader_dir.ptr]; const char *shader = g_extern.shader_dir.elems[g_extern.shader_dir.ptr];
strncpy(g_settings.video.bsnes_shader_path, shader, sizeof(g_settings.video.bsnes_shader_path) - 1); strlcpy(g_settings.video.bsnes_shader_path, shader, sizeof(g_settings.video.bsnes_shader_path));
g_settings.video.shader_type = SSNES_SHADER_BSNES; g_settings.video.shader_type = SSNES_SHADER_BSNES;
msg_queue_clear(g_extern.msg_queue); msg_queue_clear(g_extern.msg_queue);