1 /*
2 Copyright (C) 2012-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: itacomp.ctr
12 */
13
14
15 #include <libdk3c/dk3all.h>
16 #include <itadmin/itadmin.h>
17 #include <libdk3c/dk3unused.h>
18
19
20
21
22
23
24
25 /** @file itacomp.c Comparison functions.
26 This module provides comparison functions for the sorted
27 containers.
28 */
29
30
31
32 /** Correct comparison result.
33 @param v Direct result from string comparison.
34 @return -1, 0, or 1.
35 */
36 static
37 int
itadmin_comp_correct(int v)38 itadmin_comp_correct(int v)
39 {
40 int back;
41 back = v;
42 if(v < -1) back = -1;
43 if(v > 1) back = 1;
44 return back;
45 }
46
47
48
49 int
itadmin_comp_user(void const * l,void const * r,int cr)50 itadmin_comp_user(void const *l, void const *r, int cr)
51 {
52 itadmin_user const *pl;
53 itadmin_user const *pr;
54 char const *sn;
55 int back = 0;
56 if(l) {
57 if(r) {
58 pl = (itadmin_user const *)l;
59 switch(cr) {
60 case 1: {
61 sn = (char const *)r;
62 if(pl->us) {
63 back = itadmin_comp_correct(dk3str_c8_cmp(pl->us, sn));
64 } else {
65 back = -1;
66 }
67 } break;
68 case 2: {
69 pr = (itadmin_user const *)r;
70 if(pl->na) {
71 if(pr->na) {
72 back = itadmin_comp_correct(dk3str_c8_cmp(pl->na, pr->na));
73 } else { back = 1; }
74 } else {
75 if(pr->na) { back = -1; }
76 }
77 if(back == 0) {
78 if(pl->sn) {
79 if(pr->sn) {
80 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
81 } else { back = 1; }
82 } else {
83 if(pr->sn) { back = -1; }
84 }
85 }
86 if(back == 0) {
87 if(pl->tt) {
88 if(pr->tt) {
89 back = itadmin_comp_correct(dk3str_c8_cmp(pl->tt, pr->tt));
90 } else { back = 1; }
91 } else {
92 if(pr->tt) { back = -1; }
93 }
94 }
95 if(back == 0) {
96 if(pl->us) {
97 if(pr->us) {
98 back = itadmin_comp_correct(dk3str_c8_cmp(pl->us, pr->us));
99 } else { back = 1; }
100 } else {
101 if(pr->us) { back = -1; }
102 }
103 }
104 } break;
105 default: {
106 pr = (itadmin_user *)r;
107 if(pl->us) {
108 if(pr->us) {
109 back = itadmin_comp_correct(dk3str_c8_cmp(pl->us, pr->us));
110 } else { back = 1; }
111 } else {
112 if(pr->us) { back = -1; }
113 }
114 } break;
115 }
116 } else { back = 1; }
117 } else {
118 if(r) { back = -1; }
119 }
120 return back;
121 }
122
123
124
125 int
itadmin_comp_building(void const * l,void const * r,int cr)126 itadmin_comp_building(void const *l, void const *r, int cr)
127 {
128 itadmin_building const *pl;
129 itadmin_building const *pr;
130 int back = 0;
131 if(l) {
132 if(r) {
133 pl = (itadmin_building const *)l;
134 switch(cr) {
135 case 1: {
136 if(pl->s) {
137 back = itadmin_comp_correct(dk3str_c8_cmp(pl->s, (char const *)r));
138 } else { back = -1; }
139 } break;
140 default: {
141 pr = (itadmin_building const *)r;
142 if(pl->s) {
143 if(pr->s) {
144 back = itadmin_comp_correct(dk3str_c8_cmp(pl->s, pr->s));
145 } else { back = 1; }
146 } else {
147 if(pr->s) { back = -1; }
148 }
149 } break;
150 }
151 } else { back = 1; }
152 } else {
153 if(r) { back = -1; }
154 }
155 return back;
156 }
157
158
159
160 int
itadmin_comp_speed(void const * l,void const * r,int cr)161 itadmin_comp_speed(void const *l, void const *r, int cr)
162 {
163 itadmin_speed const *pl;
164 itadmin_speed const *pr;
165 int back = 0;
166 if(l) {
167 if(r) {
168 pl = (itadmin_speed const *)l;
169 switch(cr) {
170 case 1: {
171 if(pl->s) {
172 back = itadmin_comp_correct(dk3str_c8_cmp(pl->s, (char const *)r));
173 } else { back = -1; }
174 } break;
175 default: {
176 pr = (itadmin_speed const *)r;
177 if(pl->s) {
178 if(pr->s) {
179 back = itadmin_comp_correct(dk3str_c8_cmp(pl->s, pr->s));
180 } else { back = 1; }
181 } else {
182 if(pr->s) { back = -1; }
183 }
184 } break;
185 }
186 } else { back = 1; }
187 } else {
188 if(r) { back = -1; }
189 }
190 return back;
191 }
192
193
194
195 int
itadmin_comp_vlan(void const * l,void const * r,int cr)196 itadmin_comp_vlan(void const *l, void const *r, int cr)
197 {
198 itadmin_vlan const *pl;
199 itadmin_vlan const *pr;
200 int back = 0;
201 if(l) {
202 if(r) {
203 pl = (itadmin_vlan const *)l;
204 switch(cr) {
205 case 1: {
206 if(pl->s) {
207 back = itadmin_comp_correct(dk3str_c8_cmp(pl->s, (char const *)r));
208 } else { back = -1; }
209 } break;
210 default: {
211 pr = (itadmin_vlan const *)r;
212 if(pl->s) {
213 if(pr->s) {
214 back = itadmin_comp_correct(dk3str_c8_cmp(pl->s, pr->s));
215 } else { back = 1; }
216 } else {
217 if(pr->s) { back = -1; }
218 }
219 } break;
220 }
221 } else { back = 1; }
222 } else {
223 if(r) { back = -1; }
224 }
225 return back;
226 }
227
228
229
230 int
itadmin_comp_connect(void const * l,void const * r,int cr)231 itadmin_comp_connect(void const *l, void const *r, int cr)
232 {
233 itadmin_connect const *pl;
234 itadmin_connect const *pr;
235 int back = 0;
236 if(l) {
237 if(r) {
238 pl = (itadmin_connect const *)l;
239 switch(cr) {
240 case 1: {
241 if(pl->s) {
242 back = itadmin_comp_correct(dk3str_c8_cmp(pl->s, (char const *)r));
243 } else { back = -1; }
244 } break;
245 default: {
246 pr = (itadmin_connect const *)r;
247 if(pl->s) {
248 if(pr->s) {
249 back = itadmin_comp_correct(dk3str_c8_cmp(pl->s, pr->s));
250 } else { back = 1; }
251 } else {
252 if(pr->s) { back = -1; }
253 }
254 } break;
255 }
256 } else { back = 1; }
257 } else {
258 if(r) { back = -1; }
259 }
260 return back;
261 }
262
263
264
265 int
itadmin_comp_network(void const * l,void const * r,int cr)266 itadmin_comp_network(void const *l, void const *r, int cr)
267 {
268 itadmin_network const *pl;
269 itadmin_network const *pr;
270 unsigned long const *ul;
271 int back = 0;
272 if(l) {
273 if(r) {
274 pl = (itadmin_network const *)l;
275 switch(cr) {
276 case 1: {
277 ul = (unsigned long const *)r;
278 if(((pl->ip4) & (pl->ma4)) > ((*ul) & (pl->ma4))) {
279 back = 1;
280 } else {
281 if(((pl->ip4) & (pl->ma4)) < ((*ul) & (pl->ma4))) {
282 back = -1;
283 }
284 }
285 } break;
286 default: {
287 pr = (itadmin_network const *)r;
288 if(pl->ip4 > pr->ip4) {
289 back = 1;
290 } else {
291 if(pl->ip4 < pr->ip4) {
292 back = -1;
293 }
294 }
295 } break;
296 }
297 } else { back = 1; }
298 } else {
299 if(r) { back = -1; }
300 }
301 return back;
302 }
303
304
305
306 int
itadmin_comp_netgroup(void const * l,void const * r,int cr)307 itadmin_comp_netgroup(void const *l, void const *r, int cr)
308 {
309 itadmin_netgroup const *pl;
310 itadmin_netgroup const *pr;
311 int back = 0;
312 if(l) {
313 if(r) {
314 pl = (itadmin_netgroup const *)l;
315 switch(cr) {
316 case 1: {
317 if(pl->sn) {
318 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, (char const *)r));
319 } else { back = -1; }
320 } break;
321 default: {
322 pr = (itadmin_netgroup const *)r;
323 if(pl->sn) {
324 if(pr->sn) {
325 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
326 } else { back = 1; }
327 } else {
328 if(pr->sn) { back = -1; }
329 }
330 } break;
331 }
332 } else { back = 1; }
333 } else {
334 if(r) { back = -1; }
335 }
336 return back;
337 }
338
339
340
341 int
itadmin_comp_dhcp_class(void const * l,void const * r,int cr)342 itadmin_comp_dhcp_class(void const *l, void const *r, int cr)
343 {
344 itadmin_dhcp_class const *pl;
345 itadmin_dhcp_class const *pr;
346 int back = 0;
347 if(l) {
348 if(r) {
349 pl = (itadmin_dhcp_class const *)l;
350 switch(cr) {
351 case 1: {
352 if(pl->sn) {
353 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, (char const *)r));
354 } else { back = -1; }
355 } break;
356 default: {
357 pr = (itadmin_dhcp_class const *)r;
358 if(pl->sn) {
359 if(pr->sn) {
360 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
361 } else { back = 1; }
362 } else {
363 if(pr->sn) { back = -1; }
364 }
365 } break;
366 }
367 } else { back = 1; }
368 } else {
369 if(r) { back = -1; }
370 }
371 return back;
372 }
373
374
375
376 int
itadmin_comp_dhcp_pool(void const * l,void const * r,int cr)377 itadmin_comp_dhcp_pool(void const *l, void const *r, int cr)
378 {
379 itadmin_dhcp_pool const *pl;
380 itadmin_dhcp_pool const *pr;
381 unsigned long const *ul;
382 int back = 0;
383 if(l) {
384 if(r) {
385 pl = (itadmin_dhcp_pool const *)l;
386 switch(cr) {
387 case 1: {
388 ul = (unsigned long const *)r;
389 if(pl->ip4s > *ul) {
390 back = 1;
391 } else {
392 if(pl->ip4e < *ul) {
393 back = -1;
394 }
395 }
396 } break;
397 default: {
398 pr = (itadmin_dhcp_pool const *)r;
399 if(pl->ip4s > pr->ip4s) {
400 back = 1;
401 } else {
402 if(pl->ip4s < pr->ip4s) {
403 back = -1;
404 }
405 }
406 } break;
407 }
408 } else { back = 1; }
409 } else {
410 if(r) { back = -1; }
411 }
412 return back;
413 }
414
415
416
417 int
itadmin_comp_dhcp_group(void const * l,void const * r,int cr)418 itadmin_comp_dhcp_group(void const *l, void const *r, int cr)
419 {
420 itadmin_dhcp_group const *pl;
421 itadmin_dhcp_group const *pr;
422 int back = 0;
423 if(l) {
424 if(r) {
425 pl = (itadmin_dhcp_group const *)l;
426 switch(cr) {
427 case 1: {
428 if(pl->sn) {
429 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, (char const *)r));
430 } else { back = -1; }
431 } break;
432 default: {
433 pr = (itadmin_dhcp_group const *)r;
434 if(pl->sn) {
435 if(pr->sn) {
436 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
437 } else { back = 1; }
438 } else {
439 if(pr->sn) { back = -1; }
440 }
441 } break;
442 }
443 } else { back = 1; }
444 } else {
445 if(r) { back = -1; }
446 }
447 return back;
448 }
449
450
451
452 int
itadmin_comp_host(void const * l,void const * r,int cr)453 itadmin_comp_host(void const *l, void const *r, int cr)
454 {
455 itadmin_host const *pl;
456 itadmin_host const *pr;
457 unsigned long const *ul;
458 int back = 0;
459 if(l) {
460 if(r) {
461 pl = (itadmin_host const *)l;
462 switch(cr) {
463 case 3: {
464 ul = (unsigned long const *)r;
465 if(pl->ipv4 > *ul) {
466 back = 1;
467 } else {
468 if(pl->ipv4 < *ul) {
469 back = -1;
470 }
471 }
472 } break;
473 case 2: {
474 pr = (itadmin_host const *)r;
475 if(pl->ipv4 > pr->ipv4) {
476 back = 1;
477 } else {
478 if(pl->ipv4 < pr->ipv4) {
479 back = -1;
480 }
481 }
482 } break;
483 case 1: {
484 if(pl->sn) {
485 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, (char const *)r));
486 } else { back = -1; }
487 } break;
488 default: {
489 pr = (itadmin_host const *)r;
490 if(pl->sn) {
491 if(pr->sn) {
492 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
493 } else { back = 1; }
494 } else {
495 if(pr->sn) { back = -1; }
496 }
497 } break;
498 }
499 } else { back = 1; }
500 } else {
501 if(r) { back = -1; }
502 }
503 return back;
504 }
505
506
507
508 int
itadmin_comp_swman(void const * l,void const * r,int cr)509 itadmin_comp_swman(void const *l, void const *r, int cr)
510 {
511 itadmin_swman const *pl;
512 itadmin_swman const *pr;
513 int back = 0;
514 if(l) {
515 if(r) {
516 pl = (itadmin_swman const *)l;
517 switch(cr) {
518 case 2: {
519 pr = (itadmin_swman const *)r;
520 if(pl->ln) {
521 if(pr->ln) {
522 back = itadmin_comp_correct(dk3str_c8_cmp(pl->ln, pr->ln));
523 } else { back = 1; }
524 } else {
525 if(pr->ln) { back = -1; }
526 }
527 if(back == 0) {
528 if(pl->sn) {
529 if(pr->sn) {
530 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
531 } else { back = 1; }
532 } else {
533 if(pr->sn) { back = -1; }
534 }
535 }
536 } break;
537 case 1: {
538 if(pl->sn) {
539 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, (char const *)r));
540 } else { back = -1; }
541 } break;
542 default: {
543 pr = (itadmin_swman const *)r;
544 if(pl->sn) {
545 if(pr->sn) {
546 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
547 } else { back = 1; }
548 } else {
549 if(pr->sn) { back = -1; }
550 }
551 } break;
552 }
553 } else { back = 1; }
554 } else {
555 if(r) { back = -1; }
556 }
557 return back;
558 }
559
560
561
562 int
itadmin_comp_swprod(void const * l,void const * r,int cr)563 itadmin_comp_swprod(void const *l, void const *r, int cr)
564 {
565 itadmin_swprod const *pl;
566 itadmin_swprod const *pr;
567 int back = 0;
568 if(l) {
569 if(r) {
570 pl = (itadmin_swprod const *)l;
571 switch(cr) {
572 case 2: {
573 pr = (itadmin_swprod const *)r;
574 back = itadmin_comp_swman((void *)(pl->mn), (void *)(pr->mn), 2);
575 if(back == 0) {
576 if(pl->ln) {
577 if(pr->ln) {
578 back = itadmin_comp_correct(dk3str_c8_cmp(pl->ln, pr->ln));
579 } else { back = 1; }
580 } else {
581 if(pr->ln) { back = -1; }
582 }
583 }
584 if(back == 0) {
585 if(pl->sn) {
586 if(pr->sn) {
587 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
588 } else { back = 1; }
589 } else {
590 if(pr->sn) { back = -1; }
591 }
592 }
593 } break;
594 case 1: {
595 if(pl->sn) {
596 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, (char const *)r));
597 } else { back = -1; }
598 } break;
599 default: {
600 pr = (itadmin_swprod const *)r;
601 if(pl->sn) {
602 if(pr->sn) {
603 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
604 } else { back = 1; }
605 } else {
606 if(pr->sn) { back = -1; }
607 }
608 } break;
609 }
610 } else { back = 1; }
611 } else {
612 if(r) { back = -1; }
613 }
614 return back;
615 }
616
617
618
619 int
itadmin_comp_lictype(void const * l,void const * r,int cr)620 itadmin_comp_lictype(void const *l, void const *r, int cr)
621 {
622 itadmin_lictype const *pl;
623 itadmin_lictype const *pr;
624 int back = 0;
625 if(l) {
626 if(r) {
627 pl = (itadmin_lictype const *)l;
628 switch(cr) {
629 case 2: {
630 pr = (itadmin_lictype const *)r;
631 if(pl->ln) {
632 if(pr->ln) {
633 back = itadmin_comp_correct(dk3str_c8_cmp(pl->ln, pr->ln));
634 } else { back = 1; }
635 } else {
636 if(pr->ln) { back = -1; }
637 }
638 if(back == 0) {
639 if(pl->num > pr->num) {
640 back = 1;
641 } else {
642 if(pl->num < pr->num) {
643 back = -1;
644 }
645 }
646 }
647 } break;
648 case 1: {
649 if(pl->sn) {
650 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, (char const *)r));
651 } else { back = -1; }
652 } break;
653 default: {
654 pr = (itadmin_lictype const *)r;
655 if(pl->sn) {
656 if(pr->sn) {
657 back = itadmin_comp_correct(dk3str_c8_cmp(pl->sn, pr->sn));
658 } else { back = 1; }
659 } else {
660 if(pr->sn) { back = -1; }
661 }
662 } break;
663 }
664 } else { back = 1; }
665 } else {
666 if(r) { back = -1; }
667 }
668 return back;
669 }
670
671
672
673 int
itadmin_comp_license(void const * l,void const * r,int cr)674 itadmin_comp_license(void const *l, void const *r, int cr)
675 {
676 itadmin_license const *pl;
677 itadmin_license const *pr;
678 unsigned long const *ulp;
679 int back = 0;
680 if(l) {
681 if(r) {
682 pl = (itadmin_license const *)l;
683 pr = (itadmin_license const *)r;
684 ulp = (unsigned long const *)r;
685 switch(cr) {
686 case 2: {
687 back = itadmin_comp_swprod((void *)(pl->prod),(void *)(pr->prod),2);
688 if(back == 0) {
689 back = itadmin_comp_lictype((void const *)(pl->ltype), (void const *)(pr->ltype), 2);
690 }
691 if(back == 0) {
692 back = itadmin_comp_user((void const *)(pl->owner), (void const *)(pr->owner), 2);
693 }
694 if(back == 0) {
695 back = itadmin_comp_host((void const *)(pl->host), (void const *)(pr->host), 0);
696 }
697 if(back == 0) {
698 back = itadmin_comp_license(l, r, 0);
699 }
700 } break;
701 case 1: {
702 if(pl->pk > (*ulp)) {
703 back = 1;
704 } else {
705 if(pl->pk < (*ulp)) {
706 back = -1;
707 }
708 }
709 } break;
710 default: {
711 if(pl->pk > pr->pk) {
712 back = 1;
713 } else {
714 if(pl->pk < pr->pk) {
715 back = -1;
716 }
717 }
718 } break;
719 }
720 } else { back = 1; }
721 } else {
722 if(r) { back = -1; }
723 }
724 return back;
725 }
726
727
728
729 int
itadmin_comp_dhcp_ginw(void const * l,void const * r,int cr)730 itadmin_comp_dhcp_ginw(void const *l, void const *r, int cr)
731 {
732 itadmin_dhcp_ginw const *pl;
733 itadmin_dhcp_ginw const *pr;
734 int back = 0;
735 if(l) {
736 if(r) {
737 pl = (itadmin_dhcp_ginw const *)l;
738 switch(cr) {
739 case 1: {
740 if(pl->gr) {
741 if((pl->gr)->sn) {
742 back = dk3str_c8_cmp((pl->gr)->sn, (char const *)r);
743 back = itadmin_comp_correct(back);
744 } else back = -1;
745 } else back = -1;
746 } break;
747 default: {
748 pr = (itadmin_dhcp_ginw const *)r;
749 if(pl->gr) {
750 if(pr->gr) {
751 if((pl->gr)->sn) {
752 if((pr->gr)->sn) {
753 back = dk3str_c8_cmp((pl->gr)->sn, (pr->gr)->sn);
754 back = itadmin_comp_correct(back);
755 } else back = 1;
756 } else {
757 if((pr->gr)->sn) back = -1;
758 }
759 } else back = 1;
760 } else {
761 if(pr->gr) back = -1;
762 }
763 } break;
764 }
765 } else back = 1;
766 } else {
767 if(r) back = -1;
768 }
769 return back;
770 }
771
772
773
774 int
itadmin_comp_date(itadmin_date const * l,itadmin_date const * r)775 itadmin_comp_date(itadmin_date const *l, itadmin_date const *r)
776 {
777 int back = 0;
778 if(l) {
779 if(r) {
780 if(l->y > r->y) back = 1;
781 else {
782 if(l->y < r->y) back = -1;
783 }
784 if(back == 0) {
785 if(l->m > r->m) back = 1;
786 else {
787 if(l->m < r->m) back = -1;
788 }
789 }
790 if(back == 0) {
791 if(l->d > r->d) back = 1;
792 else {
793 if(l->d < r->d) back = -1;
794 }
795 }
796 } else back = 1;
797 } else {
798 if(r) back = -1;
799 }
800 return back;
801 }
802
803
804
805 int
itadmin_comp_dhcp_option(void const * l,void const * r,int DK3_ARG_UNUSED (cr))806 itadmin_comp_dhcp_option(void const *l, void const *r, int DK3_ARG_UNUSED(cr) )
807 {
808 itadmin_dhcp_option const *pl;
809 itadmin_dhcp_option const *pr;
810 int back = 0;
811
812 DK3_UNUSED_ARG(cr)
813 if(l) {
814 if(r) {
815 pl = (itadmin_dhcp_option const *)l;
816 pr = (itadmin_dhcp_option const *)r;
817 if(pl->pk > pr->pk) {
818 back = 1;
819 } else {
820 if(pl->pk < pr->pk) {
821 back = -1;
822 }
823 }
824 if(back == 0) {
825 if(pl->k) {
826 if(pr->k) {
827 back = dk3str_c8_cmp(pl->k, pr->k);
828 back = itadmin_comp_correct(back);
829 } else back = 1;
830 } else {
831 if(pr->k) back = -1;
832 }
833 }
834 } else back = 1;
835 } else {
836 if(r) back = -1;
837 }
838 return back;
839 }
840
841
842
843 int
itadmin_comp_string(void const * l,void const * r,int cr)844 itadmin_comp_string(void const *l, void const *r, int cr)
845 {
846 int back = 0;
847 if(l) {
848 if(r) {
849 switch(cr) {
850 case 1: {
851 back = itadmin_comp_correct(
852 dk3str_c8_casecmp((char const *)l, (char const *)r)
853 );
854 } break;
855 default: {
856 back = itadmin_comp_correct(
857 dk3str_c8_cmp((char const *)l, (char const *)r)
858 );
859 } break;
860 }
861 } else back = 1;
862 } else {
863 if(r) back = -1;
864 }
865 return back;
866 }
867
868