]> pd.if.org Git - zpackage/blob - src/vercmp.c
remove stray debug fprintf
[zpackage] / src / vercmp.c
1 #define _POSIX_C_SOURCE 2 
2
3 #include <stdlib.h>
4 #include <stdio.h>
5
6 #include <unistd.h>
7
8 #include "zpm.h"
9
10 /*
11  * -g greater than
12  * -l less than
13  * -e equal
14  * -L least : print least
15  * -G greatest : print greatest
16  * -q quiet: no print
17  */
18 int main(int ac, char *av[]) {
19         int cmp;
20         char *a = 0, *b = 0;
21         int print = 1;
22         int argn, opt = 0;
23         int inorder = 1, equal = 1;
24
25         char *greatest = 0;
26         char *least = 0;
27
28         while ((opt = getopt(ac, av, "qLG")) != -1) {
29                 switch (opt) {
30                         case 'q': print = 0; break;
31                         case 'G': print = 2; break;
32                         case 'L': print = 3; break;
33                         default:
34                                   exit(EXIT_FAILURE);
35                                   break;
36                 }
37         }
38
39         argn = optind;
40
41         if (ac > argn) {
42                 a = av[argn++];
43                 greatest = a;
44                 least = a;
45         }
46
47         while (ac > argn) {
48                 b = av[argn++];
49
50                 cmp = zpm_vercmp(a, b);
51                 switch (cmp) {
52                         case 0:
53                                 break;
54                         case -1:
55                                 equal = 0;
56                                 break;
57                         case 1:
58                                 equal = 0;
59                                 inorder = 0;
60                                 break;
61                         default:
62                                 break;
63                 }
64                 
65                 cmp = zpm_vercmp(b, greatest);
66                 if (cmp > 0) {
67                         greatest = b;
68                 }
69
70                 cmp = zpm_vercmp(b, least);
71                 if (cmp < 0) {
72                         least = b;
73                 }
74                 a = b;
75         }
76
77         if (equal) {
78                 cmp = 0;
79         } else if (inorder) {
80                 cmp = -1;
81         } else {
82                 cmp = 1;
83         }
84
85         switch (print) {
86                 case 1:
87                         printf("%d\n", cmp);
88                         break;
89                 case 2:
90                         if (greatest) printf("%s\n", greatest);
91                         break;
92                 case 3:
93                         if (least) printf("%s\n", least);
94                         break;
95                 default:
96                         break;
97         }
98
99         return cmp == -1 ? 2 : cmp;
100 }