annotate target-utils/libc/strtol.c @ 1014:961efadd530a default tip

fc-shell TCH DL handler: add support for CSD modes TCH DL capture mechanism in FC Tourmaline firmware has been extended to support CSD modes in addition to speech - add the necessary support on the host tools side. It needs to be noted that this mechanism in its present state does NOT provide the debug utility value that was sought: as we learned only after the code was implemented, TI's DSP has a misfeature in that the buffer we are reading (a_dd_0[]) is zeroed out when the IDS block is enabled, i.e., we are reading all zeros and not the real DL bits we were after. But since the code has already been written, we are keeping it - perhaps we can do some tests with IDS disabled.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 26 Nov 2024 06:27:43 +0000
parents d8d03dafb9c0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
96
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*-
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * Copyright (c) 1990, 1993
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * The Regents of the University of California. All rights reserved.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 *
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * modification, are permitted provided that the following conditions
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 * are met:
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * 2. Redistributions in binary form must reproduce the above copyright
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer in the
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 * documentation and/or other materials provided with the distribution.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 * 3. All advertising materials mentioning features or use of this software
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 * must display the following acknowledgement:
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 * This product includes software developed by the University of
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 * California, Berkeley and its contributors.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 * 4. Neither the name of the University nor the names of its contributors
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 * may be used to endorse or promote products derived from this software
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 * without specific prior written permission.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 *
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 * SUCH DAMAGE.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 */
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 /*
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 * Embedded libc note: the present version of strtol() has been
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 * simplified in that overflow checking has been removed.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 * This simplification is needed for embedded systems in which
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 * there is no UNIX-style errno global variable.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 */
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 #include <ctype.h>
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 /*
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 * Convert a string to a long integer.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 *
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 * Ignores `locale' stuff. Assumes that the upper and lower case
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 * alphabets and digits are each contiguous.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 */
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 long
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 strtol(nptr, endptr, base)
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 const char *nptr;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 char **endptr;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 register int base;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 {
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 register const char *s = nptr;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 register unsigned long acc;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 register int c;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 register int neg = 0, any;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 /*
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 * Skip white space and pick up leading +/- sign if any.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 * If base is 0, allow 0x for hex and 0 for octal, else
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 * assume decimal; if base is already 16, allow 0x.
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 */
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 do {
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 c = *s++;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 } while (isspace(c));
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 if (c == '-') {
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 neg = 1;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 c = *s++;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 } else if (c == '+')
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 c = *s++;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 if ((base == 0 || base == 16) &&
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 c == '0' && (*s == 'x' || *s == 'X')) {
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 c = s[1];
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 s += 2;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 base = 16;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 }
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 if (base == 0)
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 base = c == '0' ? 8 : 10;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 for (acc = 0, any = 0;; c = *s++) {
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 if (isdigit(c))
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 c -= '0';
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 else if (isalpha(c))
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 c -= isupper(c) ? 'A' - 10 : 'a' - 10;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 else
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 break;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 if (c >= base)
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 break;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 any = 1;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 acc *= base;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 acc += c;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 }
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 if (neg)
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 acc = -acc;
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 if (endptr != 0)
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 *endptr = (char *)(any ? s - 1 : nptr);
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 return (acc);
d8d03dafb9c0 target-utils/libc: strtol and strtoul added from 4.4BSD with simplification
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 }