Browse Source

bug #3739: handle %lu, %li and %ld in SDL_SetError.

Ozkan Sezer 7 years ago
parent
commit
926d803f83
2 changed files with 27 additions and 0 deletions
  1. 26 0
      src/SDL_error.c
  2. 1 0
      src/SDL_error_c.h

+ 26 - 0
src/SDL_error.c

@@ -76,6 +76,16 @@ SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
             case 0:            /* Malformed format string.. */
                 --fmt;
                 break;
+            case 'l':
+                switch (*fmt++) {
+                case 0:        /* Malformed format string.. */
+                    --fmt;
+                    break;
+                case 'i': case 'd': case 'u':
+                    error->args[error->argc++].value_l = va_arg(ap, long);
+                    break;
+                }
+                break;
             case 'c':
             case 'i':
             case 'd':
@@ -219,6 +229,22 @@ SDL_GetErrorMsg(char *errstr, int maxlen)
                        && spot < (tmp + SDL_arraysize(tmp) - 2)) {
                     *spot++ = *fmt++;
                 }
+                if (*fmt == 'l') {
+                    *spot++ = *fmt++;
+                    *spot++ = *fmt++;
+                    *spot++ = '\0';
+                    switch (spot[-2]) {
+                    case 'i': case 'd': case 'u':
+                      len = SDL_snprintf(msg, maxlen, tmp,
+                                         error->args[argi++].value_l);
+                      if (len > 0) {
+                          msg += len;
+                          maxlen -= len;
+                      }
+                      break;
+                    }
+                    continue;
+                }
                 *spot++ = *fmt++;
                 *spot++ = '\0';
                 switch (spot[-2]) {

+ 1 - 0
src/SDL_error_c.h

@@ -51,6 +51,7 @@ typedef struct SDL_error
         unsigned char value_c;
 #endif
         int value_i;
+        long value_l;
         double value_f;
         char buf[ERR_MAX_STRLEN];
     } args[ERR_MAX_ARGS];