win32: get_path(): fix undefined behavior

MSWindows-specific code in get_path() declared a stack array
(exedir[]) in an inner scope, then kept a reference to the array
beyond the end of the that scope. Fix. This caused visible breakage
with GCC 4.7.
This commit is contained in:
Martin Herkt 2012-04-28 17:37:01 +02:00 committed by Uoti Urpala
parent 66e0426907
commit f64a4e9931
1 changed files with 5 additions and 3 deletions

8
path.c
View File

@ -55,6 +55,9 @@ char *get_path(const char *filename){
static char *config_dir = "/mplayer";
#else
static char *config_dir = "/.mplayer";
#endif
#if defined(__MINGW32__) || defined(__CYGWIN__)
char exedir[260];
#endif
int len;
#ifdef CONFIG_MACOSX_BUNDLE
@ -73,9 +76,8 @@ char *get_path(const char *filename){
/* Hack to get fonts etc. loaded outside of Cygwin environment. */
{
int i,imax=0;
char exedir[260];
GetModuleFileNameA(NULL, exedir, 260);
for (i=0; i< strlen(exedir); i++)
len = (int)GetModuleFileNameA(NULL, exedir, 260);
for (i=0; i < len; i++)
if (exedir[i] =='\\')
{exedir[i]='/'; imax=i;}
exedir[imax]='\0';