]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Add ll length modifier to archive_string_vsprintf 2639/head
authorTobias Stoeckmann <tobias@stoeckmann.org>
Sun, 25 May 2025 12:26:25 +0000 (14:26 +0200)
committerTobias Stoeckmann <tobias@stoeckmann.org>
Sun, 25 May 2025 12:27:46 +0000 (14:27 +0200)
Some error messages already use the ll length modifier, which results
in raw formatter output, i.e. "%lld" instead of a number.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
libarchive/archive_string_sprintf.c

index c785e12bdf6d3baab2d31016da91a3873c60b569..1c5910e0b2d350c0ca7eb5efa75c18b76203aecc 100644 (file)
@@ -116,8 +116,14 @@ archive_string_vsprintf(struct archive_string *as, const char *fmt,
 
                long_flag = '\0';
                switch(*p) {
-               case 'j':
                case 'l':
+                       if (p[1] == 'l') {
+                               long_flag = 'L';
+                               p += 2;
+                               break;
+                       }
+                       __LA_FALLTHROUGH;
+               case 'j':
                case 'z':
                        long_flag = *p;
                        p++;
@@ -136,6 +142,7 @@ archive_string_vsprintf(struct archive_string *as, const char *fmt,
                        switch(long_flag) {
                        case 'j': s = va_arg(ap, intmax_t); break;
                        case 'l': s = va_arg(ap, long); break;
+                       case 'L': s = va_arg(ap, long long); break;
                        case 'z': s = va_arg(ap, ssize_t); break;
                        default:  s = va_arg(ap, int); break;
                        }
@@ -144,6 +151,7 @@ archive_string_vsprintf(struct archive_string *as, const char *fmt,
                case 's':
                        switch(long_flag) {
                        case 'l':
+                       case 'L':
                                pw = va_arg(ap, wchar_t *);
                                if (pw == NULL)
                                        pw = L"(null)";
@@ -172,6 +180,7 @@ archive_string_vsprintf(struct archive_string *as, const char *fmt,
                        switch(long_flag) {
                        case 'j': u = va_arg(ap, uintmax_t); break;
                        case 'l': u = va_arg(ap, unsigned long); break;
+                       case 'L': u = va_arg(ap, unsigned long long); break;
                        case 'z': u = va_arg(ap, size_t); break;
                        default:  u = va_arg(ap, unsigned int); break;
                        }