Author: jpeach
Date: 2006-07-07 06:30:00 +0000 (Fri, 07 Jul 2006)
New Revision: 16859

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

Log:
Don't use LL for long long literals in str_conv_size().

Modified:
   trunk/source/lib/util_str.c


Changeset:
Modified: trunk/source/lib/util_str.c
===================================================================
--- trunk/source/lib/util_str.c 2006-07-07 06:05:26 UTC (rev 16858)
+++ trunk/source/lib/util_str.c 2006-07-07 06:30:00 UTC (rev 16859)
@@ -2339,19 +2339,33 @@
         }
 
         if (*end) {
+               SMB_OFF_T lval_orig = lval;
+
                 if (strwicmp(end, "K") == 0) {
-                        lval *= 1024ULL;
+                        lval *= (SMB_OFF_T)1024;
                 } else if (strwicmp(end, "M") == 0) {
-                        lval *= (1024ULL * 1024ULL);
+                        lval *= ((SMB_OFF_T)1024 * (SMB_OFF_T)1024);
                 } else if (strwicmp(end, "G") == 0) {
-                        lval *= (1024ULL * 1024ULL * 1024ULL);
+                        lval *= ((SMB_OFF_T)1024 * (SMB_OFF_T)1024 *
+                               (SMB_OFF_T)1024);
                 } else if (strwicmp(end, "T") == 0) {
-                        lval *= (1024ULL * 1024ULL * 1024ULL * 1024ULL);
+                        lval *= ((SMB_OFF_T)1024 * (SMB_OFF_T)1024 *
+                               (SMB_OFF_T)1024 * (SMB_OFF_T)1024);
                 } else if (strwicmp(end, "P") == 0) {
-                        lval *= (1024ULL * 1024ULL * 1024ULL * 1024ULL * 
1024ULL);
+                        lval *= ((SMB_OFF_T)1024 * (SMB_OFF_T)1024 *
+                               (SMB_OFF_T)1024 * (SMB_OFF_T)1024 *
+                               (SMB_OFF_T)1024);
                 } else {
                         return 0;
                 }
+
+               /* Primitive attempt to detect wrapping on platforms with
+                * 4-byte SMB_OFF_T. It's better to let the caller handle
+                * a failure than some random number.
+                */
+               if (lval_orig <= lval) {
+                       return 0;
+               }
         }
 
        return lval;

Reply via email to