[CRT]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 16 Dec 2012 16:38:36 +0000 (16:38 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 16 Dec 2012 16:38:36 +0000 (16:38 +0000)
Fix / silence a number of warnings/errors detected with VS-analyze

svn path=/trunk/; revision=57928

18 files changed:
reactos/lib/sdk/crt/include/internal/mingw-w64/internal.h
reactos/lib/sdk/crt/include/internal/rterror.h
reactos/lib/sdk/crt/include/internal/wine/msvcrt.h
reactos/lib/sdk/crt/mbstring/mbclen.c
reactos/lib/sdk/crt/mbstring/mbstrlen.c
reactos/lib/sdk/crt/stdio/popen.c
reactos/lib/sdk/crt/stdio/stat64.c
reactos/lib/sdk/crt/stdlib/getenv.c
reactos/lib/sdk/crt/string/_mbstrnlen.c
reactos/lib/sdk/crt/string/mbstowcs_s.c
reactos/lib/sdk/crt/string/scanf.h
reactos/lib/sdk/crt/string/splitp.c
reactos/lib/sdk/crt/string/strtoi64.c
reactos/lib/sdk/crt/string/wcstombs_s.c
reactos/lib/sdk/crt/time/ctime.c
reactos/lib/sdk/crt/time/strftime.c
reactos/lib/sdk/crt/time/timezone.c
reactos/lib/sdk/crt/wine/undname.c

index 5983a7c..5d5f936 100644 (file)
@@ -139,7 +139,7 @@ extern char ** __MINGW_IMP_SYMBOL(_wcmdln);
 /*  __CRTIMP extern wchar_t *_wcmdln; */
 #endif
 
-  _CRTIMP void __cdecl _amsg_exit(int);
+  _CRTIMP __declspec(noreturn) void __cdecl _amsg_exit(int);
 
   int __CRTDECL _setargv(void);
   int __CRTDECL __setargv(void);
index be6fe32..63b914a 100644 (file)
@@ -25,7 +25,7 @@
 #define _RT_STDIOINIT   15  /* not enough space for stdio 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 */
 void _dosmaperr(unsigned long oserrcode);
index c771f83..72a29c3 100644 (file)
@@ -31,7 +31,7 @@ extern int __mb_cur_max;
 extern const unsigned short _ctype [257];
 
 void __cdecl _purecall(void);
-void __cdecl _amsg_exit(int errnum);
+__declspec(noreturn) void __cdecl _amsg_exit(int errnum);
 
 extern char **_environ;
 extern wchar_t **_wenviron;
index 364c6e9..c13c8f4 100644 (file)
@@ -34,7 +34,7 @@ int mblen( const char *str, size_t 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;
 }
index 9b32466..6a41dcf 100644 (file)
@@ -30,7 +30,7 @@ size_t _mbstrlen( const char *str )
     /* FIXME: According to the documentation we are supposed to test for
      * multi-byte character validity. Whatever that means
      */
-    str += isleadbyte(*str) ? 2 : 1;
+    str += isleadbyte((unsigned char)*str) ? 2 : 1;
     len++;
   }
   return len;
index 10a7303..74f2f0f 100644 (file)
@@ -109,6 +109,7 @@ FILE *_tpopen (const _TCHAR *cm, const _TCHAR *md) /* program name, pipe mode */
     }
 
     CloseHandle(ProcessInformation.hThread);
+    CloseHandle(ProcessInformation.hProcess);
 
     if ( *md == 'r' )
     {
index 7005f3a..55e5c8f 100644 (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
                 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 */
   else
     buf->st_dev = buf->st_rdev = _getdrive() - 1;
index 4136d43..b674bbb 100644 (file)
  */
 char *getenv(const char *name)
 {
-   char **environ;
+   char **env;
    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,'=');
       if (pos && ((unsigned int)(pos - str) == length) && !_strnicmp(str, name, length))
          return pos + 1;
@@ -34,12 +34,12 @@ char *getenv(const char *name)
  */
 wchar_t *_wgetenv(const wchar_t *name)
 {
-   wchar_t **environ;
+   wchar_t **env;
    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'=');
       if (pos && ((unsigned int)(pos - str) == length) && !_wcsnicmp(str, name, length))
          return pos + 1;
index 5a856a3..8e4d650 100644 (file)
@@ -10,6 +10,7 @@
 #include <mbctype.h>
 #include <specstrings.h>
 
+_Success_(return>0)
 _Check_return_
 _CRTIMP
 size_t
index 06ca4d4..450612b 100644 (file)
@@ -9,8 +9,9 @@
 #include <precomp.h>
 #include <mbstring.h>
 
-_CRTIMP
+_Success_(return!=EINVAL)
 _Check_return_opt_
+_CRTIMP
 errno_t
 __cdecl
 mbstowcs_s(
index 3edf0ea..f364c8c 100644 (file)
@@ -37,8 +37,8 @@
 #define _CHAR_ char
 #define _EOF_ EOF
 #define _EOF_RET EOF
-#define _ISSPACE_(c) isspace(c)
-#define _ISDIGIT_(c) isdigit(c)
+#define _ISSPACE_(c) isspace((unsigned char)(c))
+#define _ISDIGIT_(c) isdigit((unsigned char)(c))
 #define _WIDE2SUPPORTED_(c) c /* FIXME: convert wide char to char */
 #define _CHAR2SUPPORTED_(c) c /* No conversion needed (char to char) */
 #define _CHAR2DIGIT_(c, base) char2digit((c), (base))
index 9195c2e..7500c92 100644 (file)
@@ -32,6 +32,8 @@ void _tsplitpath(const _TCHAR* path, _TCHAR* drive, _TCHAR* dir, _TCHAR* fname,
     }
 #endif
 
+    _Analysis_assume_(path != 0);
+
 #if WINVER == 0x600
     /* Skip '\\?\' prefix */
     if ((path[0] == '\\') && (path[1] == '\\') &&
index 59e8c29..4c744ae 100644 (file)
@@ -7,7 +7,7 @@ _strtoi64(const char *nptr, char **endptr, int base)
     BOOL negative = FALSE;
     __int64 ret = 0;
 
-   while(isspace(*nptr)) nptr++;
+   while(isspace((unsigned char)*nptr)) nptr++;
 
     if(*nptr == '-') {
         negative = TRUE;
@@ -31,7 +31,7 @@ _strtoi64(const char *nptr, char **endptr, int base)
         char cur = tolower(*nptr);
         int v;
 
-        if(isdigit(cur)) {
+        if(isdigit((unsigned char)cur)) {
             if(cur >= '0'+base)
                 break;
             v = cur-'0';
index 910c370..ff39c2e 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <precomp.h>
 
+_Success_(return!=EINVAL)
 _Check_return_wat_
 _CRTIMP
 errno_t
index 3b93ba1..aace70b 100644 (file)
@@ -7,13 +7,12 @@
  */
 #define MINGW_HAS_SECURE_API 1
 
+#include <errno.h>
 #define RC_INVOKED 1 // to prevent inline functions
 #include <tchar.h>
 #include <time.h>
 #include "bitsfixup.h"
 
-#define EINVAL -1
-
 /* Doesn't really exist, but we need it here */
 _CRTIMP errno_t __cdecl localtime_s(struct tm *_Tm,const time_t *_Time);
 
index 996b0fc..8cb28b0 100644 (file)
@@ -2,8 +2,8 @@
  * COPYRIGHT:   LGPL, See LGPL.txt in the top level directory
  * PROJECT:     ReactOS CRT library
  * FILE:        lib/sdk/crt/time/strftime.c
- * PURPOSE:     
- * PROGRAMER:   
+ * PURPOSE:
+ * PROGRAMER:
  */
 #include <precomp.h>
 
@@ -258,7 +258,7 @@ size_t CDECL _Strftime(char *str, size_t max, const char *format,
             else
                 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))
                 return 0;
             break;
index ed03dcd..27b1b65 100644 (file)
@@ -219,31 +219,33 @@ _tzset(void)
  */
 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:
-        timezone = tz_name;
+        str_timezone = tz_name;
         break;
+
     case 1:
-        timezone = tz_dst_name;
+        str_timezone = tz_dst_name;
         break;
+
     default:
         *_errno() = EINVAL;
         return EINVAL;
     }
 
-    if(!ret || (!buf && bufsize > 0) || (buf && !bufsize))
+    if (!ret || (!buf && (bufsize > 0)) || (buf && !bufsize))
     {
         *_errno() = EINVAL;
         return EINVAL;
     }
 
-    *ret = strlen(timezone)+1;
+    *ret = strlen(str_timezone) + 1;
     if(!buf && !bufsize)
         return 0;
 
-    strcpy(buf, timezone);
+    strncpy(buf, str_timezone, bufsize);
     return 0;
 }
index fd6bf28..71956f6 100644 (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--)
         {
             c = '>';
-            if (i < a->start) c = '-';
-            else if (i >= a->num) c = '}';
+            if ((unsigned)i < a->start) 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 */
             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;
         break;
     case 'P': /* Pointer */
-        if (isdigit(*sym->current))
+        if (isdigit((unsigned char)*sym->current))
        {
             /* FIXME: P6 = Function pointer, others who knows.. */
             if (*sym->current++ == '6')