source: mainline/generic/src/lib/func.c@ 91c78c9

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 91c78c9 was 91c78c9, checked in by Ondrej Palkovsky <ondrap@…>, 20 years ago

String constants without spaces are now supported by call commands.
For more we would need some lexer.
The call? commands are not compatibile with stdarg functions on AMD
architectures, because of the calling sequence.

  • Property mode set to 100644
File size: 3.8 KB
Line 
1/*
2 * Copyright (C) 2001-2004 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <func.h>
30#include <print.h>
31#include <cpu.h>
32#include <arch/asm.h>
33#include <arch.h>
34#include <typedefs.h>
35
36__u32 haltstate = 0; /**< Halt flag */
37
38
39/** Halt wrapper
40 *
41 * Set halt flag and halt the cpu.
42 *
43 */
44void halt(void)
45{
46 haltstate = 1;
47 interrupts_disable();
48 if (CPU)
49 printf("cpu%d: halted\n", CPU->id);
50 else
51 printf("cpu: halted\n");
52 cpu_halt();
53}
54
55/** Return number of characters in a string.
56 *
57 * @param str NULL terminated string.
58 *
59 * @return Number of characters in str.
60 */
61size_t strlen(const char *str)
62{
63 int i;
64
65 for (i = 0; str[i]; i++)
66 ;
67
68 return i;
69}
70
71/** Compare two NULL terminated strings
72 *
73 * Do a char-by-char comparison of two NULL terminated strings.
74 * The strings are considered equal iff they consist of the same
75 * characters on the minimum of their lengths and specified maximal
76 * length.
77 *
78 * @param src First string to compare.
79 * @param dst Second string to compare.
80 * @param len Maximal length for comparison.
81 *
82 * @return 0 if the strings are equal, 1 otherwise.
83 *
84 */
85int strncmp(const char *src, const char *dst, size_t len)
86{
87 int i;
88
89 i = 0;
90 while ((i < len) && (src[i] == dst[i])) {
91 if ((i == len - 1) || (src[i] == '\0'))
92 return 0;
93 i++;
94 }
95 return 1;
96}
97
98/** Copy NULL terminated string.
99 *
100 * Copy at most 'len' characters from string 'src' to 'dest'.
101 * If 'src' is shorter than 'len', '\0' is inserted behind the
102 * last copied character.
103 *
104 * @param src Source string.
105 * @param dst Destination buffer.
106 * @param len Size of destination buffer.
107 */
108void strncpy(char *dest, const char *src, size_t len)
109{
110 int i;
111 for (i = 0; i < len; i++) {
112 if (!(dest[i] = src[i]))
113 return;
114 }
115 dest[i-1] = '\0';
116}
117
118/** Convert ascii representation to __native
119 *
120 * Supports 0x for hexa & 0 for octal notation.
121 * Does not check for overflows, does not support negative numbers
122 *
123 * @param text Textual representation of number
124 * @return Converted number or 0 if no valid number ofund
125 */
126__native atoi(const char *text)
127{
128 int base = 10;
129 __native result = 0;
130
131 if (text[0] == '0' && text[1] == 'x') {
132 base = 16;
133 text += 2;
134 } else if (text[0] == '0')
135 base = 8;
136
137 while (*text) {
138 result *= base;
139 if (base != 16 && *text >= 'A' && *text <= 'F')
140 break;
141 if (base == 8 && *text >='8')
142 break;
143
144 if (*text >= '0' && *text <= '9')
145 result += *text - '0';
146 else if (*text >= 'A' && *text <= 'F')
147 result += *text - 'A' + 10;
148 else
149 break;
150 text++;
151 }
152
153 return result;
154}
Note: See TracBrowser for help on using the repository browser.