More fixes for the SDL_scanf code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
diff --git a/src/stdlib/SDL_string.c b/src/stdlib/SDL_string.c
index 4368994..2b36584 100644
--- a/src/stdlib/SDL_string.c
+++ b/src/stdlib/SDL_string.c
@@ -803,7 +803,7 @@ SDL_strtol(const char *string, char **endp, int base)
return strtol(string, endp, base);
#else
size_t len;
- long value;
+ long value = 0;
if (!base) {
if ((SDL_strlen(string) > 2) && (SDL_strncmp(string, "0x", 2) == 0)) {
@@ -828,7 +828,7 @@ SDL_strtoul(const char *string, char **endp, int base)
return strtoul(string, endp, base);
#else
size_t len;
- unsigned long value;
+ unsigned long value = 0;
if (!base) {
if ((SDL_strlen(string) > 2) && (SDL_strncmp(string, "0x", 2) == 0)) {
@@ -853,7 +853,7 @@ SDL_strtoll(const char *string, char **endp, int base)
return strtoll(string, endp, base);
#else
size_t len;
- Sint64 value;
+ Sint64 value = 0;
if (!base) {
if ((SDL_strlen(string) > 2) && (SDL_strncmp(string, "0x", 2) == 0)) {
@@ -878,7 +878,7 @@ SDL_strtoull(const char *string, char **endp, int base)
return strtoull(string, endp, base);
#else
size_t len;
- Uint64 value;
+ Uint64 value = 0;
if (!base) {
if ((SDL_strlen(string) > 2) && (SDL_strncmp(string, "0x", 2) == 0)) {
@@ -903,7 +903,7 @@ SDL_strtod(const char *string, char **endp)
return strtod(string, endp);
#else
size_t len;
- double value;
+ double value = 0.0;
len = SDL_ScanFloat(string, &value);
if (endp) {
@@ -1128,8 +1128,9 @@ SDL_vsscanf(const char *text, const char *fmt, va_list ap)
case 'd':
if (inttype == DO_LONGLONG) {
Sint64 value;
- text += SDL_ScanLongLong(text, radix, &value);
- if (!suppress) {
+ advance = SDL_ScanLongLong(text, radix, &value);
+ text += advance;
+ if (advance && !suppress) {
Sint64 *valuep = va_arg(ap, Sint64 *);
*valuep = value;
++retval;