annotate rvinterf/libprint/back_esc.c @ 964:a96cb97b66a2

ringtools/imy: fix duplicate definition of tdma_durations[] The bug was reported by Vadim Yanitskiy <fixeria@osmocom.org>, although the present fix is slightly different from the contributed patch: because main.c doesn't need this tdma_durations[] array at all, let's simply remove the reference to this array from main.c rather than turn it into an extern. I no longer remember my original thought flow that resulted (by mistake) in tdma_durations[] being multiply defined in main.c and durations.c. My intent might have been to define all globals in main.c and have the reference in durations.c be an extern - and I missed that extern - but without clear memory, I have no certainty. In any case, having this data array defined in the same module that fills it (durations.c) is sensible, so let's make it the new way.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 31 Aug 2023 19:38:18 +0000
parents 6a0aa8d36d06
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
926
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * The function implemented in this module prints a potentially-dirty string
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * into a buffer with C-style backslash escapes, including doubling of any
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * already-present backslashes. The output buffer must be sized for up to
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * 4x expansion, plus the terminating NUL.
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 */
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <sys/types.h>
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <ctype.h>
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <stdio.h>
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 void
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 safe_print_trace(src, srclen, dest)
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 u_char *src;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 char *dest;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 int i, c;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 char *dp;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 dp = dest;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 for (i = 0; i < srclen; i++) {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 c = src[i];
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 switch (c) {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 case '\\':
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 *dp++ = '\\';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 *dp++ = '\\';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 continue;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 case '\r':
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 *dp++ = '\\';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 *dp++ = 'r';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 continue;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 case '\n':
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 *dp++ = '\\';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 *dp++ = 'n';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 continue;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 }
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 if (c >= ' ' && c <= '~')
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 *dp++ = c;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 else if (c <= 7 && (i+1 == srclen || !isdigit(src[i+1]))) {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 sprintf(dp, "\\%d", c);
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 dp += 2;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 } else {
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 sprintf(dp, "\\x%02X", c);
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 dp += 4;
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 }
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 }
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 *dp = '\0';
6a0aa8d36d06 rvinterf backslash escape: introduce libprint
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 }