Introduction
Introduction Statistics Contact Development Disclaimer Help
strverscmp.c - noice - small file browser (mirror / fork from 2f30.org)
git clone git://git.codemadness.org/noice
Log
Files
Refs
README
LICENSE
---
strverscmp.c (979B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <ctype.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #include "util.h"
7
8 int
9 strverscmp(const char *str1, const char *str2)
10 {
11 size_t len1 = strlen(str1);
12 size_t len2 = strlen(str2);
13 size_t i1 = 0;
14 size_t i2 = 0;
15 for (; i1 < len1 && i2 < len2; i1++, i2++) {
16 unsigned char c1 = str1[i1];
17 unsigned char c2 = str2[i2];
18 if (isdigit(c1) && isdigit(c2)) {
19 unsigned long long int num1;
20 unsigned long long int num2;
21 char *end1;
22 char *end2;
23 num1 = strtoull(str1 + i1, &end1, 10);
24 num2 = strtoull(str2 + i2, &end2, 10);
25 DPRINTF_LLU(num1);
26 DPRINTF_LLU(num2);
27 if (num1 < num2)
28 return -1;
29 if (num1 > num2)
30 return 1;
31 i1 = end1 - str1 - 1;
32 i2 = end2 - str2 - 1;
33 if (i1 < i2)
34 return -1;
35 if (i1 > i2)
36 return 1;
37 } else {
38 if (c1 < c2)
39 return -1;
40 if (c1 > c2)
41 return 1;
42 }
43 }
44 if (len1 < len2)
45 return -1;
46 if (len1 > len2)
47 return 1;
48 return 0;
49 }
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.