make op/write.t work better under stdio by running the subtests
[p5sagit/p5-mst-13.2.git] / win32 / win32.c
index 3883757..b36a7b7 100644 (file)
@@ -1182,6 +1182,10 @@ win32_stat(const char *path, Stat_t *sbuf)
        /* FindFirstFile() and stat() are buggy with a trailing
         * backslash, so change it to a forward slash :-( */
        case '\\':
+           if (l >= sizeof(buffer)) {
+               errno = ENAMETOOLONG;
+               return -1;
+           }
            strncpy(buffer, path, l-1);
            buffer[l - 1] = '/';
            buffer[l] = '\0';
@@ -3154,7 +3158,7 @@ win32_chsize(int fd, Off_t size)
        do {
            count = extend >= sizeof(b) ? sizeof(b) : (size_t)extend;
            count = win32_write(fd, b, count);
-           if (count < 0) {
+           if ((int)count < 0) {
                retval = -1;
                break;
            }
@@ -4618,6 +4622,9 @@ XS(w32_GetOSVersion)
                 XSRETURN_EMPTY;
             }
        }
+       if (GIMME_V == G_SCALAR) {
+           XSRETURN_IV(osverw.dwPlatformId);
+       }
        W2AHELPER(osverw.szCSDVersion, szCSDVersion, sizeof(szCSDVersion));
        XPUSHs(newSVpvn(szCSDVersion, strlen(szCSDVersion)));
         osver.dwMajorVersion    = osverw.dwMajorVersion;
@@ -4638,6 +4645,9 @@ XS(w32_GetOSVersion)
                 XSRETURN_EMPTY;
             }
        }
+       if (GIMME_V == G_SCALAR) {
+           XSRETURN_IV(osver.dwPlatformId);
+       }
        XPUSHs(newSVpvn(osver.szCSDVersion, strlen(osver.szCSDVersion)));
     }
     XPUSHs(newSViv(osver.dwMajorVersion));