]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:lib:util_tdb: Add format identifier for 64-bit integer pack/unpack
authorVinit Agnihotri <vagnihot@redhat.com>
Wed, 24 Sep 2025 06:19:15 +0000 (11:49 +0530)
committerAnoop C S <anoopcs@samba.org>
Wed, 12 Nov 2025 15:01:32 +0000 (15:01 +0000)
Signed-off-by: Vinit Agnihotri <vagnihot@redhat.com>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Anoop C S <anoopcs@samba.org>
source3/lib/util_tdb.c

index 3c7c1945f58c9a85b702cfed00b21522030e673e..f6fa1905ce1d3ecea3f02e73168b7e7286a92c2b 100644 (file)
@@ -39,6 +39,7 @@ static size_t tdb_pack_va(uint8_t *buf, int bufsize, const char *fmt, va_list ap
        uint8_t bt;
        uint16_t w;
        uint32_t d;
+       int64_t D;
        int i;
        void *p;
        int len = 0;
@@ -67,6 +68,12 @@ static size_t tdb_pack_va(uint8_t *buf, int bufsize, const char *fmt, va_list ap
                        if (bufsize && bufsize >= len)
                                SIVAL(buf, 0, d);
                        break;
+               case 'D': /* signed 64-bit integer*/
+                       len = 8;
+                       D = va_arg(ap, int64_t);
+                       if (bufsize && bufsize >= len)
+                               PUSH_LE_I64(buf, 0, D);
+                       break;
                case 'p': /* pointer */
                        len = 4;
                        p = va_arg(ap, void *);
@@ -140,6 +147,7 @@ int tdb_unpack(const uint8_t *buf, int in_bufsize, const char *fmt, ...)
        uint8_t *bt;
        uint16_t *w;
        uint32_t *d;
+       int64_t *D;
        size_t bufsize = in_bufsize;
        size_t len;
        uint32_t *i;
@@ -174,6 +182,13 @@ int tdb_unpack(const uint8_t *buf, int in_bufsize, const char *fmt, ...)
                                goto no_space;
                        *d = IVAL(buf, 0);
                        break;
+               case 'D': /* Signed 64-bit integer */
+                       len = 8;
+                       D = va_arg(ap, int64_t *);
+                       if (bufsize < len)
+                               goto no_space;
+                       *D = PULL_LE_I64(buf, 0);
+                       break;
                case 'p': /* pointer */
                        len = 4;
                        p = va_arg(ap, void **);