#include "utility.h" #include <stdio.h> #include <stdlib.h> #include <stddef.h> /*********** like malloc(), but will exit on error ********/ pvoid ctl_malloc(size_t size){ void *ptr = malloc(size); if(ptr == NULL){ ctl_die(CTL_MEMORY); } return ptr; } /********** like realloc(), but will exit on error ********/ pvoid ctl_realloc(pvoid ptr, size_t size){ ptr = realloc(ptr, size); if(ptr == NULL){ ctl_die(CTL_MEMORY); } return ptr; } /*********** like free(), but will return NULL ************/ pvoid ctl_free(pvoid ptr){ free(ptr); return NULL; } /********* print some message on STDERR and exit() ********/ void ctl_die(CtlErrorType e){ fprintf(stderr, "exit(%d): ", (int)e); switch(e){ case CTL_MEMORY: fprintf(stderr, "bad memory mananger\n"); break; } exit((int)e); } /****************** strcmp in lower letter ****************/ int ctl_strcmpL(pcchar a, pcchar b){ int i; char c1, c2; for(i = 0; a[i] != '\0' && b[i] != '\0'; i++){ if('A' <= a[i] && a[i] <= 'Z') c1 = a[i] - 'A' + 'a'; else c1 = a[i]; if('A' <= b[i] && b[i] <= 'Z') c2 = b[i] - 'A' + 'a'; else c2 = b[i]; if(c1 < c2) return -1; if(c1 > c2) return 1; } if(a[i] < b[i]) return -1; if(a[i] > b[i]) return 1; return 0; }