FreeCalypso > hg > themwi-system-sw
comparison libnumdb2/readbin.c @ 233:60f6e561bfb8
libnumdb2: start with readbin.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 14 Aug 2023 13:10:38 -0800 |
parents | libnumdb/readbin.c@ffd48df829a7 |
children |
comparison
equal
deleted
inserted
replaced
232:78c6e30f5234 | 233:60f6e561bfb8 |
---|---|
1 /* | |
2 * This library module contains the code that reads /var/gsm/number-db2.bin, | |
3 * as well as definitions of global variables into which the booty is read. | |
4 */ | |
5 | |
6 #include <sys/types.h> | |
7 #include <sys/stat.h> | |
8 #include <stdio.h> | |
9 #include <stdint.h> | |
10 #include <stdlib.h> | |
11 #include <syslog.h> | |
12 #include "../include/number_db_v2.h" | |
13 | |
14 char numdb_pathname[] = "/var/gsm/number-db2.bin"; | |
15 struct stat numdb_file_stat; | |
16 struct numdb_file_hdr numdb_hdr; | |
17 struct owned_number_rec *numdb_owned_numbers; | |
18 struct short_number_rec *numdb_short_numbers; | |
19 | |
20 read_number_db() | |
21 { | |
22 FILE *inf; | |
23 | |
24 inf = fopen(numdb_pathname, "r"); | |
25 if (!inf) { | |
26 syslog(LOG_CRIT, "open %s: %m", numdb_pathname); | |
27 return(-1); | |
28 } | |
29 fstat(fileno(inf), &numdb_file_stat); | |
30 if (!S_ISREG(numdb_file_stat.st_mode)) { | |
31 syslog(LOG_CRIT, "invalid %s: not a regular file", | |
32 numdb_pathname); | |
33 fclose(inf); | |
34 return(-1); | |
35 } | |
36 if (fread(&numdb_hdr, sizeof numdb_hdr, 1, inf) != 1) { | |
37 read_err: syslog(LOG_CRIT, "error reading from %s: %m", numdb_pathname); | |
38 fclose(inf); | |
39 return(-1); | |
40 } | |
41 if (numdb_hdr.owned_number_count) { | |
42 numdb_owned_numbers = malloc(numdb_hdr.owned_number_count * | |
43 sizeof(struct owned_number_rec)); | |
44 if (!numdb_owned_numbers) { | |
45 syslog(LOG_CRIT, "malloc for owned number db: %m"); | |
46 fclose(inf); | |
47 return(-1); | |
48 } | |
49 if (fread(numdb_owned_numbers, sizeof(struct owned_number_rec), | |
50 numdb_hdr.owned_number_count, inf) != | |
51 numdb_hdr.owned_number_count) | |
52 goto read_err; | |
53 } | |
54 if (numdb_hdr.short_number_count) { | |
55 numdb_short_numbers = malloc(numdb_hdr.short_number_count * | |
56 sizeof(struct short_number_rec)); | |
57 if (!numdb_short_numbers) { | |
58 syslog(LOG_CRIT, "malloc for short number db: %m"); | |
59 fclose(inf); | |
60 return(-1); | |
61 } | |
62 if (fread(numdb_short_numbers, sizeof(struct short_number_rec), | |
63 numdb_hdr.short_number_count, inf) != | |
64 numdb_hdr.short_number_count) | |
65 goto read_err; | |
66 } | |
67 fclose(inf); | |
68 return(0); | |
69 } |