annotate utils/themwi-update-numdb.c @ 124:7e04d28fae8b

sip-in: default use-100rel to no BulkVS servers act badly when we send a reliable 180 Ringing response to an incoming call, even though they advertise 100rel support in the Supported header in the INVITE packet, and we probably won't be implementing 100rel for outbound because doing per-the-spec PRACK as a UAC is just too burdensome. Therefore, we need to consider 100rel extension as not-really-supported in themwi-system-sw.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 01 Oct 2022 15:54:50 -0800
parents 4ad5deafaa87
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This program reads (parses) ThemWi config file /var/gsm/number-db,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * generates the compiled binary form of this database, and then makes
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * it live via atomic rename.
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <ctype.h>
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdio.h>
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <stdint.h>
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdlib.h>
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <string.h>
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <strings.h>
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <unistd.h>
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include "../include/number_db_file.h"
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #define MAX_OWNED_NUMBERS 1000
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 #define MAX_SHORT_NUMBERS 1000
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 static uint64_t owned_number_buf[MAX_OWNED_NUMBERS];
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 static struct short_number_map short_number_buf[MAX_SHORT_NUMBERS];
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 static unsigned owned_number_count, short_number_count;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 static char *system_dir;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 static FILE *inf;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 static int lineno;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 static char linebuf[256], prefix[7];
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 static int prefix_allows_abbrev;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 static uint32_t prefix_int;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 enter_owned_number(numstr)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 char *numstr;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 if (owned_number_count >= MAX_OWNED_NUMBERS) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 fprintf(stderr, "error: MAX_OWNED_NUMBERS exceeded\n");
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 owned_number_buf[owned_number_count++] = strtoull(numstr, 0, 10);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 enter_short_number(numstr, prefix)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 char *numstr;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 uint32_t prefix;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 if (short_number_count >= MAX_SHORT_NUMBERS) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 fprintf(stderr, "error: MAX_SHORT_NUMBERS exceeded\n");
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 short_number_buf[short_number_count].short_code =
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 strtoul(numstr, 0, 10);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 short_number_buf[short_number_count].prefix = prefix;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 short_number_count++;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 handle_prefix_line(cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 char *cp;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 char *np;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 for (np = cp; *cp && !isspace(*cp); cp++)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 ;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 if (*cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 *cp++ = '\0';
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 if (grok_number_string(np, 1) != 6) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 "number-db line %d: prefix requires 6-digit argument\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 lineno);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 dehyphen_number_string(np, prefix);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 if (!is_nanp_valid_prefix(prefix)) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 "number-db line %d: prefix violates NANP rules\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 lineno);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 while (isspace(*cp))
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 cp++;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 if (*cp == '\0' || *cp == '#') {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 prefix_allows_abbrev = 0;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 return;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 for (np = cp; *cp && !isspace(*cp); cp++)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 ;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 if (*cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 *cp++ = '\0';
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 if (!strcmp(np, "allow-abbrev")) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 prefix_allows_abbrev = 1;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 prefix_int = strtoul(prefix, 0, 10);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 return;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 "number-db line %d: non-understood notation \"%s\" after prefix\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 lineno, np);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 handle_suffix_line(cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 char *cp;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 char *np, full10[11];
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 if (!prefix[0]) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 "number-db line %d: suffix not valid without preceding prefix\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 lineno);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 for (np = cp; *cp && !isspace(*cp); cp++)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 ;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 if (*cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 *cp++ = '\0';
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 if (grok_number_string(np, 0) != 4) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 "number-db line %d: suffix requires 4-digit argument\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 lineno);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 strcpy(full10, prefix);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 strcat(full10, np);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 enter_owned_number(full10);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 if (!prefix_allows_abbrev)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 return;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 enter_short_number(np, prefix_int);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 handle_full10_line(cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 char *cp;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 char *np, full10[11];
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 prefix[0] = '\0'; /* cancel any previous prefix line */
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 for (np = cp; *cp && !isspace(*cp); cp++)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 ;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 if (*cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 *cp++ = '\0';
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 if (grok_number_string(np, 1) != 10) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 "number-db line %d: full10 requires 10-digit argument\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 lineno);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 dehyphen_number_string(np, full10);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 if (!is_nanp_valid_prefix(full10)) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 "number-db line %d: number violates NANP rules\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 lineno);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 enter_owned_number(full10);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 handle_itn_line(cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 char *cp;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 char *np;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 prefix[0] = '\0'; /* cancel any previous prefix line */
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 for (np = cp; *cp && !isspace(*cp); cp++)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 ;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 if (*cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 *cp++ = '\0';
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 if (grok_number_string(np, 0) != 4) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 "number-db line %d: itn requires 4-digit argument\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 lineno);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 enter_short_number(np, 0);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 process_line()
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 char *cp, *np;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 void (*handler)();
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 if (!index(linebuf, '\n')) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 "number-db line %d: too long or missing newline\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 lineno);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 for (cp = linebuf; isspace(*cp); cp++)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 ;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 if (*cp == '\0' || *cp == '#')
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 return;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 for (np = cp; *cp && !isspace(*cp); cp++)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 ;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 if (*cp)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 *cp++ = '\0';
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 if (!strcmp(np, "prefix"))
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 handler = handle_prefix_line;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 else if (!strcmp(np, "suffix"))
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 handler = handle_suffix_line;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 else if (!strcmp(np, "full10"))
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 handler = handle_full10_line;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 else if (!strcmp(np, "itn"))
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 handler = handle_itn_line;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 else {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 "number-db line %d: non-understood keyword \"%s\"\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 lineno, np);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 while (isspace(*cp))
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 cp++;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 if (*cp == '\0' || *cp == '#') {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 "number-db line %d: missing argument after \"%s\" keyword\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 lineno, np);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219 handler(cp);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222 static int
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 compare_owned_num(p1, p2)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 uint64_t *p1, *p2;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 if (*p1 < *p2)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 return(-1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 else if (*p1 > *p2)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 return(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230 else
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 return(0);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 static int
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 compare_short_num(p1, p2)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 struct short_number_map *p1, *p2;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 if (p1->short_code < p2->short_code)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 return(-1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 else if (p1->short_code > p2->short_code)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 return(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 else
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 return(0);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247 owned_num_check_dup()
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 uint64_t *p, *endp;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 endp = owned_number_buf + owned_number_count - 1;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 for (p = owned_number_buf; p < endp; p++) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 if (p[0] == p[1]) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 "error: NANP number %llu appears more than once\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 (unsigned long long) *p);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 short_num_check_dup()
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 struct short_number_map *p, *endp;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 endp = short_number_buf + short_number_count - 1;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 for (p = short_number_buf; p < endp; p++) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 if (p[0].short_code == p[1].short_code) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 fprintf(stderr,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 "error: short number %04u appears more than once\n",
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 (unsigned) p->short_code);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 static void
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279 emit_output()
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 FILE *outf;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 struct numdb_file_hdr hdr;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
283
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
284 outf = fopen("number-db.newbin", "w");
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
285 if (!outf) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
286 perror("creating number-db.newbin");
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
287 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
288 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
289 hdr.owned_number_count = owned_number_count;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
290 hdr.short_number_count = short_number_count;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
291 if (fwrite(&hdr, sizeof hdr, 1, outf) != 1) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
292 write_err: fprintf(stderr, "error writing to new binary file\n");
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
293 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
294 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
295 if (fwrite(owned_number_buf, sizeof(owned_number_buf[0]),
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
296 owned_number_count, outf) != owned_number_count)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
297 goto write_err;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
298 if (fwrite(short_number_buf, sizeof(short_number_buf[0]),
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
299 short_number_count, outf) != short_number_count)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
300 goto write_err;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
301 fclose(outf);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
302 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
303
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
304 main(argc, argv)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
305 char **argv;
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
306 {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
307 if (argc > 2) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
308 fprintf(stderr, "usage: %s [directory]\n", argv[0]);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
309 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311 if (argv[1])
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
312 system_dir = argv[1];
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
313 else
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
314 system_dir = "/var/gsm";
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
315 if (chdir(system_dir) < 0) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
316 perror(system_dir);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
317 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
318 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
319 inf = fopen("number-db", "r");
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
320 if (!inf) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
321 perror("opening number-db");
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
322 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
323 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
324 for (lineno = 1; fgets(linebuf, sizeof linebuf, inf); lineno++)
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
325 process_line();
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
326 fclose(inf);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
327 if (owned_number_count >= 2) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
328 qsort(owned_number_buf, owned_number_count,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
329 sizeof(owned_number_buf[0]), compare_owned_num);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
330 owned_num_check_dup();
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
331 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
332 if (short_number_count >= 2) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
333 qsort(short_number_buf, short_number_count,
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
334 sizeof(short_number_buf[0]), compare_short_num);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
335 short_num_check_dup();
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
336 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
337 emit_output();
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
338 /* make it live */
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
339 if (rename("number-db.newbin", "number-db.bin") < 0) {
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
340 perror("rename");
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
341 exit(1);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
342 }
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
343 exit(0);
4ad5deafaa87 themwi-update-numdb utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
344 }