Immense cleanup of libc, implemening login program. Slight changes to ACL handling...
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / stdlib.c
1 /*\r
2  * AcessOS Basic C Library\r
3  * stdlib.c\r
4  */\r
5 /**\r
6  * \todo Move half of these to stdio\r
7  */\r
8 #include <acess/sys.h>\r
9 #include <stdlib.h>\r
10 #include <stdio.h>\r
11 #include "lib.h"\r
12 \r
13 #define _stdout 1\r
14 #define _stdin  0\r
15 \r
16 // === IMPORTS ===\r
17 extern int      fprintfv(FILE *fp, const char *format, va_list args);\r
18 \r
19 // === PROTOTYPES ===\r
20 EXPORT int      atoi(const char *str);\r
21 EXPORT void     exit(int status);\r
22 \r
23 // === CODE ===\r
24 /**\r
25  * \fn EXPORT void exit(int status)\r
26  * \brief Exit\r
27  */\r
28 EXPORT void exit(int status)\r
29 {\r
30         _exit(status);\r
31 }\r
32 \r
33 /**\r
34  */\r
35 EXPORT int atoi(const char *str)\r
36 {\r
37          int    neg = 0;\r
38          int    ret = 0;\r
39         \r
40         // NULL Check\r
41         if(!str)        return 0;\r
42         \r
43         while(*str == ' ' || *str == '\t')      str++;\r
44         \r
45         // Check for negative\r
46         if(*str == '-') {\r
47                 neg = 1;\r
48                 str++;\r
49         }\r
50         \r
51         if(*str == '0') {\r
52                 str ++;\r
53                 if(*str == 'x') {\r
54                         str++;\r
55                         // Hex\r
56                         while( ('0' <= *str && *str <= '9')\r
57                                 || ('A' <= *str && *str <= 'F' )\r
58                                 || ('a' <= *str && *str <= 'f' )\r
59                                 )\r
60                         {\r
61                                 ret *= 16;\r
62                                 if(*str <= '9') {\r
63                                         ret += *str - '0';\r
64                                 } else if (*str <= 'F') {\r
65                                         ret += *str - 'A' + 10;\r
66                                 } else {\r
67                                         ret += *str - 'a' + 10;\r
68                                 }\r
69                                 str++;\r
70                         }\r
71                 } else {\r
72                         // Octal\r
73                         while( '0' <= *str && *str <= '7' )\r
74                         {\r
75                                 ret *= 8;\r
76                                 ret += *str - '0';\r
77                                 str++;\r
78                         }\r
79                 }\r
80         } else {\r
81                 // Decimal\r
82                 while( '0' <= *str && *str <= '9' )\r
83                 {\r
84                         ret *= 10;\r
85                         ret += *str - '0';\r
86                         str++;\r
87                 }\r
88         }\r
89         \r
90         // Negate if needed\r
91         if(neg) ret = -ret;\r
92         return ret;\r
93 }\r

UCC git Repository :: git.ucc.asn.au