FreeCalypso > hg > themwi-system-sw
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 |
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 } |