Fix / silence a number of warnings/errors detected with VS-analyze

svn path=/trunk/; revision=57928
This commit is contained in:
Timo Kreuzer 2012-12-16 16:38:36 +00:00
parent b2be805a1e
commit 16641911b6
18 changed files with 39 additions and 32 deletions

View file

@ -139,7 +139,7 @@ extern char ** __MINGW_IMP_SYMBOL(_wcmdln);
/* __CRTIMP extern wchar_t *_wcmdln; */ /* __CRTIMP extern wchar_t *_wcmdln; */
#endif #endif
_CRTIMP void __cdecl _amsg_exit(int); _CRTIMP __declspec(noreturn) void __cdecl _amsg_exit(int);
int __CRTDECL _setargv(void); int __CRTDECL _setargv(void);
int __CRTDECL __setargv(void); int __CRTDECL __setargv(void);

View file

@ -25,7 +25,7 @@
#define _RT_STDIOINIT 15 /* not enough space for stdio initialization */ #define _RT_STDIOINIT 15 /* not enough space for stdio initialization */
#define _RT_LOWIOINIT 16 /* not enough space for lowio initialization */ #define _RT_LOWIOINIT 16 /* not enough space for lowio initialization */
void _amsg_exit (int errnum); __declspec(noreturn) void _amsg_exit (int errnum);
/* not in any other header */ /* not in any other header */
void _dosmaperr(unsigned long oserrcode); void _dosmaperr(unsigned long oserrcode);

View file

@ -31,7 +31,7 @@ extern int __mb_cur_max;
extern const unsigned short _ctype [257]; extern const unsigned short _ctype [257];
void __cdecl _purecall(void); void __cdecl _purecall(void);
void __cdecl _amsg_exit(int errnum); __declspec(noreturn) void __cdecl _amsg_exit(int errnum);
extern char **_environ; extern char **_environ;
extern wchar_t **_wenviron; extern wchar_t **_wenviron;

View file

@ -34,7 +34,7 @@ int mblen( const char *str, size_t size )
{ {
if (str && *str && size) if (str && *str && size)
{ {
return !isleadbyte(*str) ? 1 : (size>1 ? 2 : -1); return !isleadbyte((unsigned char)*str) ? 1 : (size>1 ? 2 : -1);
} }
return 0; return 0;
} }

View file

@ -30,7 +30,7 @@ size_t _mbstrlen( const char *str )
/* FIXME: According to the documentation we are supposed to test for /* FIXME: According to the documentation we are supposed to test for
* multi-byte character validity. Whatever that means * multi-byte character validity. Whatever that means
*/ */
str += isleadbyte(*str) ? 2 : 1; str += isleadbyte((unsigned char)*str) ? 2 : 1;
len++; len++;
} }
return len; return len;

View file

@ -109,6 +109,7 @@ FILE *_tpopen (const _TCHAR *cm, const _TCHAR *md) /* program name, pipe mode */
} }
CloseHandle(ProcessInformation.hThread); CloseHandle(ProcessInformation.hThread);
CloseHandle(ProcessInformation.hProcess);
if ( *md == 'r' ) if ( *md == 'r' )
{ {

View file

@ -45,7 +45,7 @@ int CDECL _tstat64(const _TCHAR *path, struct __stat64 *buf)
Also a letter as first char isn't enough to be classified Also a letter as first char isn't enough to be classified
as a drive letter as a drive letter
*/ */
if (isalpha(*path)&& (*(path+1)==':')) if (isalpha((unsigned char)*path)&& (*(path+1)==':'))
buf->st_dev = buf->st_rdev = _totupper(*path) - 'A'; /* drive num */ buf->st_dev = buf->st_rdev = _totupper(*path) - 'A'; /* drive num */
else else
buf->st_dev = buf->st_rdev = _getdrive() - 1; buf->st_dev = buf->st_rdev = _getdrive() - 1;

View file

@ -16,12 +16,12 @@
*/ */
char *getenv(const char *name) char *getenv(const char *name)
{ {
char **environ; char **env;
size_t length = strlen(name); size_t length = strlen(name);
for (environ = *__p__environ(); *environ; environ++) for (env = *__p__environ(); *env; env++)
{ {
char *str = *environ; char *str = *env;
char *pos = strchr(str,'='); char *pos = strchr(str,'=');
if (pos && ((unsigned int)(pos - str) == length) && !_strnicmp(str, name, length)) if (pos && ((unsigned int)(pos - str) == length) && !_strnicmp(str, name, length))
return pos + 1; return pos + 1;
@ -34,12 +34,12 @@ char *getenv(const char *name)
*/ */
wchar_t *_wgetenv(const wchar_t *name) wchar_t *_wgetenv(const wchar_t *name)
{ {
wchar_t **environ; wchar_t **env;
size_t length = wcslen(name); size_t length = wcslen(name);
for (environ = *__p__wenviron(); *environ; environ++) for (env = *__p__wenviron(); *env; env++)
{ {
wchar_t *str = *environ; wchar_t *str = *env;
wchar_t *pos = wcschr(str, L'='); wchar_t *pos = wcschr(str, L'=');
if (pos && ((unsigned int)(pos - str) == length) && !_wcsnicmp(str, name, length)) if (pos && ((unsigned int)(pos - str) == length) && !_wcsnicmp(str, name, length))
return pos + 1; return pos + 1;

View file

@ -10,6 +10,7 @@
#include <mbctype.h> #include <mbctype.h>
#include <specstrings.h> #include <specstrings.h>
_Success_(return>0)
_Check_return_ _Check_return_
_CRTIMP _CRTIMP
size_t size_t

View file

@ -9,8 +9,9 @@
#include <precomp.h> #include <precomp.h>
#include <mbstring.h> #include <mbstring.h>
_CRTIMP _Success_(return!=EINVAL)
_Check_return_opt_ _Check_return_opt_
_CRTIMP
errno_t errno_t
__cdecl __cdecl
mbstowcs_s( mbstowcs_s(

View file

@ -37,8 +37,8 @@
#define _CHAR_ char #define _CHAR_ char
#define _EOF_ EOF #define _EOF_ EOF
#define _EOF_RET EOF #define _EOF_RET EOF
#define _ISSPACE_(c) isspace(c) #define _ISSPACE_(c) isspace((unsigned char)(c))
#define _ISDIGIT_(c) isdigit(c) #define _ISDIGIT_(c) isdigit((unsigned char)(c))
#define _WIDE2SUPPORTED_(c) c /* FIXME: convert wide char to char */ #define _WIDE2SUPPORTED_(c) c /* FIXME: convert wide char to char */
#define _CHAR2SUPPORTED_(c) c /* No conversion needed (char to char) */ #define _CHAR2SUPPORTED_(c) c /* No conversion needed (char to char) */
#define _CHAR2DIGIT_(c, base) char2digit((c), (base)) #define _CHAR2DIGIT_(c, base) char2digit((c), (base))

View file

@ -32,6 +32,8 @@ void _tsplitpath(const _TCHAR* path, _TCHAR* drive, _TCHAR* dir, _TCHAR* fname,
} }
#endif #endif
_Analysis_assume_(path != 0);
#if WINVER == 0x600 #if WINVER == 0x600
/* Skip '\\?\' prefix */ /* Skip '\\?\' prefix */
if ((path[0] == '\\') && (path[1] == '\\') && if ((path[0] == '\\') && (path[1] == '\\') &&

View file

@ -7,7 +7,7 @@ _strtoi64(const char *nptr, char **endptr, int base)
BOOL negative = FALSE; BOOL negative = FALSE;
__int64 ret = 0; __int64 ret = 0;
while(isspace(*nptr)) nptr++; while(isspace((unsigned char)*nptr)) nptr++;
if(*nptr == '-') { if(*nptr == '-') {
negative = TRUE; negative = TRUE;
@ -31,7 +31,7 @@ _strtoi64(const char *nptr, char **endptr, int base)
char cur = tolower(*nptr); char cur = tolower(*nptr);
int v; int v;
if(isdigit(cur)) { if(isdigit((unsigned char)cur)) {
if(cur >= '0'+base) if(cur >= '0'+base)
break; break;
v = cur-'0'; v = cur-'0';

View file

@ -8,6 +8,7 @@
#include <precomp.h> #include <precomp.h>
_Success_(return!=EINVAL)
_Check_return_wat_ _Check_return_wat_
_CRTIMP _CRTIMP
errno_t errno_t

View file

@ -7,13 +7,12 @@
*/ */
#define MINGW_HAS_SECURE_API 1 #define MINGW_HAS_SECURE_API 1
#include <errno.h>
#define RC_INVOKED 1 // to prevent inline functions #define RC_INVOKED 1 // to prevent inline functions
#include <tchar.h> #include <tchar.h>
#include <time.h> #include <time.h>
#include "bitsfixup.h" #include "bitsfixup.h"
#define EINVAL -1
/* Doesn't really exist, but we need it here */ /* Doesn't really exist, but we need it here */
_CRTIMP errno_t __cdecl localtime_s(struct tm *_Tm,const time_t *_Time); _CRTIMP errno_t __cdecl localtime_s(struct tm *_Tm,const time_t *_Time);

View file

@ -258,7 +258,7 @@ size_t CDECL _Strftime(char *str, size_t max, const char *format,
else else
tmp = mstm->tm_wday-1; tmp = mstm->tm_wday-1;
tmp = mstm->tm_yday/7 + (tmp<=mstm->tm_yday%7); tmp = mstm->tm_yday/7 + (tmp <= ((unsigned)mstm->tm_yday%7));
if(!strftime_int(str, &ret, max, tmp, alternate ? 0 : 2, 0, 53)) if(!strftime_int(str, &ret, max, tmp, alternate ? 0 : 2, 0, 53))
return 0; return 0;
break; break;

View file

@ -219,31 +219,33 @@ _tzset(void)
*/ */
int CDECL _get_tzname(size_t *ret, char *buf, size_t bufsize, int index) int CDECL _get_tzname(size_t *ret, char *buf, size_t bufsize, int index)
{ {
char *timezone; char *str_timezone;
switch (index) switch (index)
{ {
case 0: case 0:
timezone = tz_name; str_timezone = tz_name;
break; break;
case 1: case 1:
timezone = tz_dst_name; str_timezone = tz_dst_name;
break; break;
default: default:
*_errno() = EINVAL; *_errno() = EINVAL;
return EINVAL; return EINVAL;
} }
if(!ret || (!buf && bufsize > 0) || (buf && !bufsize)) if (!ret || (!buf && (bufsize > 0)) || (buf && !bufsize))
{ {
*_errno() = EINVAL; *_errno() = EINVAL;
return EINVAL; return EINVAL;
} }
*ret = strlen(timezone)+1; *ret = strlen(str_timezone) + 1;
if(!buf && !bufsize) if(!buf && !bufsize)
return 0; return 0;
strcpy(buf, timezone); strncpy(buf, str_timezone, bufsize);
return 0; return 0;
} }

View file

@ -216,8 +216,8 @@ static BOOL str_array_push(struct parsed_symbol* sym, const char* ptr, int len,
for (i = a->max - 1; i >= 0; i--) for (i = a->max - 1; i >= 0; i--)
{ {
c = '>'; c = '>';
if (i < a->start) c = '-'; if ((unsigned)i < a->start) c = '-';
else if (i >= a->num) c = '}'; else if ((unsigned)i >= a->num) c = '}';
/* This check is as useless as the unused-but-set gcc warning that we want to silence here */ /* This check is as useless as the unused-but-set gcc warning that we want to silence here */
if (c != 0) TRACE("%p\t%d%c %s\n", a, i, c, a->elts[i]); if (c != 0) TRACE("%p\t%d%c %s\n", a, i, c, a->elts[i]);
} }
@ -861,7 +861,7 @@ static BOOL demangle_datatype(struct parsed_symbol* sym, struct datatype_t* ct,
if (!get_modified_type(ct, sym, pmt_ref, in_args ? dt : 'P', in_args)) goto done; if (!get_modified_type(ct, sym, pmt_ref, in_args ? dt : 'P', in_args)) goto done;
break; break;
case 'P': /* Pointer */ case 'P': /* Pointer */
if (isdigit(*sym->current)) if (isdigit((unsigned char)*sym->current))
{ {
/* FIXME: P6 = Function pointer, others who knows.. */ /* FIXME: P6 = Function pointer, others who knows.. */
if (*sym->current++ == '6') if (*sym->current++ == '6')