Author: idra
Date: 2006-09-04 19:53:30 +0000 (Mon, 04 Sep 2006)
New Revision: 18049

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=18049

Log:

Backport SAMBA_4_0 snprintf changes


Modified:
   branches/SAMBA_3_0/source/lib/snprintf.c


Changeset:
Modified: branches/SAMBA_3_0/source/lib/snprintf.c
===================================================================
--- branches/SAMBA_3_0/source/lib/snprintf.c    2006-09-04 19:50:30 UTC (rev 
18048)
+++ branches/SAMBA_3_0/source/lib/snprintf.c    2006-09-04 19:53:30 UTC (rev 
18049)
@@ -197,6 +197,7 @@
 #define DP_C_LONG    3
 #define DP_C_LDOUBLE 4
 #define DP_C_LLONG   5
+#define DP_C_SIZET   6
 
 /* Chunk types */
 #define CNK_FMT_STR 0
@@ -467,6 +468,10 @@
                                cnk->cflags = DP_C_LDOUBLE;
                                ch = *format++;
                                break;
+                       case 'z':
+                               cnk->cflags = DP_C_SIZET;
+                               ch = *format++;
+                               break;
                        default:
                                break;
                        }
@@ -575,6 +580,8 @@
                                cnk->value = va_arg (args, long int);
                        else if (cnk->cflags == DP_C_LLONG)
                                cnk->value = va_arg (args, LLONG);
+                       else if (cnk->cflags == DP_C_SIZET)
+                               cnk->value = va_arg (args, ssize_t);
                        else
                                cnk->value = va_arg (args, int);
 
@@ -592,6 +599,8 @@
                                cnk->value = (unsigned long int)va_arg (args, 
unsigned long int);
                        else if (cnk->cflags == DP_C_LLONG)
                                cnk->value = (LLONG)va_arg (args, unsigned 
LLONG);
+                       else if (cnk->cflags == DP_C_SIZET)
+                               cnk->value = (size_t)va_arg (args, size_t);
                        else
                                cnk->value = (unsigned int)va_arg (args, 
unsigned int);
 
@@ -644,6 +653,8 @@
                                cnk->pnum = va_arg (args, long int *);
                        else if (cnk->cflags == DP_C_LLONG)
                                cnk->pnum = va_arg (args, LLONG *);
+                       else if (cnk->cflags == DP_C_SIZET)
+                               cnk->pnum = va_arg (args, ssize_t *);
                        else
                                cnk->pnum = va_arg (args, int *);
 
@@ -725,6 +736,8 @@
                                *((long int *)(cnk->pnum)) = (long int)currlen;
                        else if (cnk->cflags == DP_C_LLONG)
                                *((LLONG *)(cnk->pnum)) = (LLONG)currlen;
+                       else if (cnk->cflags == DP_C_SIZET)
+                               *((ssize_t *)(cnk->pnum)) = (ssize_t)currlen;
                        else
                                *((int *)(cnk->pnum)) = (int)currlen;
                        break;
@@ -1260,6 +1273,7 @@
 #ifdef TEST_SNPRINTF
 
  int sprintf(char *str,const char *fmt,...);
+ int printf(const char *fmt,...);
 
  int main (void)
 {
@@ -1329,15 +1343,20 @@
        int fail = 0;
        int num = 0;
        int l1, l2;
+       char *ss_fmt[] = {
+               "%zd",
+               "%zu",
+               NULL
+       };
+       size_t ss_nums[] = {134, 91340, 123456789, 0203, 1234567890, 0};
 
        printf ("Testing snprintf format codes against system sprintf...\n");
 
        for (x = 0; fp_fmt[x] ; x++) {
                for (y = 0; fp_nums[y] != 0 ; y++) {
                        buf1[0] = buf2[0] = '\0';
-                       l1 = snprintf(NULL, 0, fp_fmt[x], fp_nums[y]);
-                       l2 = sprintf(buf1, fp_fmt[x], fp_nums[y]);
-                       sprintf (buf2, fp_fmt[x], fp_nums[y]);
+                       l1 = snprintf(buf1, sizeof(buf1), fp_fmt[x], 
fp_nums[y]);
+                       l2 = sprintf (buf2, fp_fmt[x], fp_nums[y]);
                        buf1[1023] = buf2[1023] = '\0';
                        if (strcmp (buf1, buf2) || (l1 != l2)) {
                                printf("snprintf doesn't match Format: 
%s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", 
@@ -1351,9 +1370,8 @@
        for (x = 0; int_fmt[x] ; x++) {
                for (y = 0; int_nums[y] != 0 ; y++) {
                        buf1[0] = buf2[0] = '\0';
-                       l1 = snprintf(NULL, 0, int_fmt[x], int_nums[y]);
-                       l2 = sprintf(buf1, int_fmt[x], int_nums[y]);
-                       sprintf (buf2, int_fmt[x], int_nums[y]);
+                       l1 = snprintf(buf1, sizeof(buf1), int_fmt[x], 
int_nums[y]);
+                       l2 = sprintf (buf2, int_fmt[x], int_nums[y]);
                        buf1[1023] = buf2[1023] = '\0';
                        if (strcmp (buf1, buf2) || (l1 != l2)) {
                                printf("snprintf doesn't match Format: 
%s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", 
@@ -1367,9 +1385,8 @@
        for (x = 0; str_fmt[x] ; x++) {
                for (y = 0; str_vals[y] != 0 ; y++) {
                        buf1[0] = buf2[0] = '\0';
-                       l1 = snprintf(NULL, 0, str_fmt[x], str_vals[y]);
-                       l2 = sprintf(buf1, str_fmt[x], str_vals[y]);
-                       sprintf (buf2, str_fmt[x], str_vals[y]);
+                       l1 = snprintf(buf1, sizeof(buf1), str_fmt[x], 
str_vals[y]);
+                       l2 = sprintf (buf2, str_fmt[x], str_vals[y]);
                        buf1[1023] = buf2[1023] = '\0';
                        if (strcmp (buf1, buf2) || (l1 != l2)) {
                                printf("snprintf doesn't match Format: 
%s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", 
@@ -1384,9 +1401,8 @@
        for (x = 0; ll_fmt[x] ; x++) {
                for (y = 0; ll_nums[y] != 0 ; y++) {
                        buf1[0] = buf2[0] = '\0';
-                       l1 = snprintf(NULL, 0, ll_fmt[x], ll_nums[y]);
-                       l2 = sprintf(buf1, ll_fmt[x], ll_nums[y]);
-                       sprintf (buf2, ll_fmt[x], ll_nums[y]);
+                       l1 = snprintf(buf1, sizeof(buf1), ll_fmt[x], 
ll_nums[y]);
+                       l2 = sprintf (buf2, ll_fmt[x], ll_nums[y]);
                        buf1[1023] = buf2[1023] = '\0';
                        if (strcmp (buf1, buf2) || (l1 != l2)) {
                                printf("snprintf doesn't match Format: 
%s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", 
@@ -1433,6 +1449,21 @@
                                "%4$*1$d %2$s %3$*1$.*1$f", l1, buf1, l2, buf2);
                fail++;
        }
+
+       for (x = 0; ss_fmt[x] ; x++) {
+               for (y = 0; ss_nums[y] != 0 ; y++) {
+                       buf1[0] = buf2[0] = '\0';
+                       l1 = snprintf(buf1, sizeof(buf1), ss_fmt[x], 
ss_nums[y]);
+                       l2 = sprintf (buf2, ss_fmt[x], ss_nums[y]);
+                       buf1[1023] = buf2[1023] = '\0';
+                       if (strcmp (buf1, buf2) || (l1 != l2)) {
+                               printf("snprintf doesn't match Format: 
%s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", 
+                                      ss_fmt[x], l1, buf1, l2, buf2);
+                               fail++;
+                       }
+                       num++;
+               }
+       }
 #if 0
        buf1[0] = buf2[0] = '\0';
        l1 = snprintf(buf1, sizeof(buf1), "%lld", (LLONG)1234567890);

Reply via email to