annotate libnumdb/readbin.c @ 43:5995660dcbac

sip-rx-test, sip-udp-dump: fix bind error handling
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 04 Sep 2022 21:38:02 -0800
parents ffd48df829a7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This library module contains the code that reads /var/gsm/number-db.bin,
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * as well as definitions of global variables into which the booty is read.
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 */
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <sys/types.h>
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <sys/stat.h>
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdio.h>
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdint.h>
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdlib.h>
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <syslog.h>
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include "../include/number_db_file.h"
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 char numdb_pathname[] = "/var/gsm/number-db.bin";
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 struct stat numdb_file_stat;
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 struct numdb_file_hdr numdb_hdr;
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 uint64_t *numdb_owned_numbers;
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 struct short_number_map *numdb_short_numbers;
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 read_number_db()
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 {
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 FILE *inf;
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 inf = fopen(numdb_pathname, "r");
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 if (!inf) {
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 syslog(LOG_CRIT, "open %s: %m", numdb_pathname);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 return(-1);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 }
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 fstat(fileno(inf), &numdb_file_stat);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 if (!S_ISREG(numdb_file_stat.st_mode)) {
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 syslog(LOG_CRIT, "invalid %s: not a regular file",
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 numdb_pathname);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 fclose(inf);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 return(-1);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 }
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 if (fread(&numdb_hdr, sizeof numdb_hdr, 1, inf) != 1) {
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 read_err: syslog(LOG_CRIT, "error reading from %s: %m", numdb_pathname);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 fclose(inf);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 return(-1);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 }
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 if (numdb_hdr.owned_number_count) {
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 numdb_owned_numbers = malloc(numdb_hdr.owned_number_count *
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 sizeof(uint64_t));
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 if (!numdb_owned_numbers) {
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 syslog(LOG_CRIT, "malloc for owned number db: %m");
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 fclose(inf);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 return(-1);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 }
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 if (fread(numdb_owned_numbers, sizeof(uint64_t),
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 numdb_hdr.owned_number_count, inf) !=
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 numdb_hdr.owned_number_count)
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 goto read_err;
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 }
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 if (numdb_hdr.short_number_count) {
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 numdb_short_numbers = malloc(numdb_hdr.short_number_count *
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 sizeof(struct short_number_map));
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 if (!numdb_short_numbers) {
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 syslog(LOG_CRIT, "malloc for short number db: %m");
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 fclose(inf);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 return(-1);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 }
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 if (fread(numdb_short_numbers, sizeof(struct short_number_map),
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 numdb_hdr.short_number_count, inf) !=
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 numdb_hdr.short_number_count)
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 goto read_err;
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 }
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 fclose(inf);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 return(0);
ffd48df829a7 beginning of libnumdb: reading the binary file
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 }