FreeCalypso > hg > themwi-system-sw
view libnumdb2/readbin.c @ 244:db366c3b35f7
top Makefile: mncc changed to use libnumdb2
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 14 Aug 2023 19:14:08 -0800 |
parents | 60f6e561bfb8 |
children |
line wrap: on
line source
/* * This library module contains the code that reads /var/gsm/number-db2.bin, * as well as definitions of global variables into which the booty is read. */ #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <syslog.h> #include "../include/number_db_v2.h" char numdb_pathname[] = "/var/gsm/number-db2.bin"; struct stat numdb_file_stat; struct numdb_file_hdr numdb_hdr; struct owned_number_rec *numdb_owned_numbers; struct short_number_rec *numdb_short_numbers; read_number_db() { FILE *inf; inf = fopen(numdb_pathname, "r"); if (!inf) { syslog(LOG_CRIT, "open %s: %m", numdb_pathname); return(-1); } fstat(fileno(inf), &numdb_file_stat); if (!S_ISREG(numdb_file_stat.st_mode)) { syslog(LOG_CRIT, "invalid %s: not a regular file", numdb_pathname); fclose(inf); return(-1); } if (fread(&numdb_hdr, sizeof numdb_hdr, 1, inf) != 1) { read_err: syslog(LOG_CRIT, "error reading from %s: %m", numdb_pathname); fclose(inf); return(-1); } if (numdb_hdr.owned_number_count) { numdb_owned_numbers = malloc(numdb_hdr.owned_number_count * sizeof(struct owned_number_rec)); if (!numdb_owned_numbers) { syslog(LOG_CRIT, "malloc for owned number db: %m"); fclose(inf); return(-1); } if (fread(numdb_owned_numbers, sizeof(struct owned_number_rec), numdb_hdr.owned_number_count, inf) != numdb_hdr.owned_number_count) goto read_err; } if (numdb_hdr.short_number_count) { numdb_short_numbers = malloc(numdb_hdr.short_number_count * sizeof(struct short_number_rec)); if (!numdb_short_numbers) { syslog(LOG_CRIT, "malloc for short number db: %m"); fclose(inf); return(-1); } if (fread(numdb_short_numbers, sizeof(struct short_number_rec), numdb_hdr.short_number_count, inf) != numdb_hdr.short_number_count) goto read_err; } fclose(inf); return(0); }