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