]> git.ipfire.org Git - thirdparty/sarg.git/blobdiff - util.c
Rewrite the function to format numbers with a suffix KMGT
[thirdparty/sarg.git] / util.c
diff --git a/util.c b/util.c
index e3a5dd6d23809067270c1b25843fdb1d928caadb..895337fe9f2081cae53d453ff54ea43ab2c09292 100644 (file)
--- a/util.c
+++ b/util.c
@@ -602,52 +602,53 @@ char *fixnum(long long int value, int n)
                numlen = strlen(num);
                if(numlen <= 3)
                        strcpy(abbrev,num);
-               else if(numlen == 4 || numlen == 7 || numlen == 10 || numlen == 13) {
-                       memcpy(abbrev,num,1);
-                       abbrev[1]='.';
-                       strncpy(abbrev+2,num+1,2);
+               else if (numlen%3 == 1) {
+                       abbrev[0]=num[0];
+                       abbrev[1]=(UseComma) ? ',' : '.';
+                       abbrev[2]=num[1];
+                       abbrev[3]=num[2];
                        abbrev[4]='\0';
-                       if(!n) return(abbrev);
-                       if(numlen == 4)
-                               strcat(abbrev,"K");
-                       else if(numlen == 7)
-                               strcat(abbrev,"M");
-                       else if(numlen == 10)
-                               strcat(abbrev,"G");
-                       else if(numlen == 13)
-                               strcat(abbrev,"T");
                }
-               else if(numlen == 5 || numlen == 8 || numlen == 11 || numlen == 14) {
-                       memcpy(abbrev,num,2);
-                       abbrev[2]='.';
-                       strncpy(abbrev+3,num+2,2);
+               else if (numlen%3 == 2) {
+                       abbrev[0]=num[0];
+                       abbrev[1]=num[1];
+                       abbrev[2]=(UseComma) ? ',' : '.';
+                       abbrev[3]=num[2];
+                       abbrev[4]=num[3];
                        abbrev[5]='\0';
-                       if(!n) return(abbrev);
-                       if(numlen == 5)
-                               strcat(abbrev,"K");
-                       else if(numlen == 8)
-                               strcat(abbrev,"M");
-                       else if(numlen == 11)
-                               strcat(abbrev,"G");
-                       else if(numlen == 14)
-                               strcat(abbrev,"T");
                }
-               else if(numlen == 6 || numlen == 9 || numlen == 12 || numlen == 15) {
-                       memcpy(abbrev,num,3);
-                       abbrev[3]='.';
-                       strncpy(abbrev+4,num+3,2);
+               else if (numlen%3 == 0) {
+                       abbrev[0]=num[0];
+                       abbrev[1]=num[1];
+                       abbrev[2]=num[2];
+                       abbrev[3]=(UseComma) ? ',' : '.';
+                       abbrev[4]=num[3];
+                       abbrev[5]=num[4];
                        abbrev[6]='\0';
-                       if(!n) return(abbrev);
-                       if(numlen == 6)
+               }
+               if (n) {
+                       if (numlen <= 3) {
+                               //no prefix
+                       }
+                       else if (numlen <= 6)
                                strcat(abbrev,"K");
-                       else if(numlen == 9)
+                       else if (numlen <= 9)
                                strcat(abbrev,"M");
-                       else if(numlen == 12)
+                       else if (numlen <= 12)
                                strcat(abbrev,"G");
-                       else if(numlen == 15)
+                       else if (numlen <= 15)
                                strcat(abbrev,"T");
+                       else if (numlen >= 18)
+                               strcat(abbrev,"P");
+                       else if (numlen <= 21)
+                               strcat(abbrev,"E");
+                       else if (numlen <= 24)
+                               strcat(abbrev,"Z");
+                       else if (numlen <= 27)
+                               strcat(abbrev,"Y");
+                       else
+                               strcat(abbrev,"???");
                }
-
                return(abbrev);
        }