spek-utils.cc (724B)
1 #include <assert.h> 2 #include <limits.h> 3 #include <stdlib.h> 4 5 #include "spek-utils.h" 6 7 int spek_vercmp(const char *a, const char *b) 8 { 9 assert(a && b); 10 11 if (!*a && !*b) { 12 return 0; 13 } 14 if (!*a) { 15 return -1; 16 } 17 if (!*b) { 18 return 1; 19 } 20 21 char *i, *j; 22 while(1) { 23 i = j = NULL; 24 long x = strtol(a, &i, 10); 25 long y = strtol(b, &j, 10); 26 27 if (x < y) { 28 return -1; 29 } 30 if (x > y) { 31 return 1; 32 } 33 34 if (!*i && !*j) { 35 return 0; 36 } 37 if (!*i) { 38 return -1; 39 } 40 if (!*j) { 41 return 1; 42 } 43 44 a = i + 1; 45 b = j + 1; 46 } 47 }