TSL256x I2C luminosity and IR sensor driver
[lpc82x] / lib / stdlib.c
1 /****************************************************************************
2  *  lib/stdlib.c
3  *
4  * Copyright 2014 Nathael Pajani <nathael.pajani@ed3l.fr>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  *************************************************************************** */
21 #include "lib/stdint.h"
22 #include "lib/stddef.h"
24 /* Simple strtoul implementation.
25  * Returns the value convertes from the given string.
26  * Does not check that the base is respected aside for the use of letters in
27  *   number representation.
28  */
29 uint32_t strtoul(const char* str, char** end, uint8_t base)
30 {
31         uint32_t val = 0;
32         while (*str != '\0') {
33                 if (*str >= '0' && *str <= '9') {
34                         val = (val * base) + ((*str) - '0');
35                         str++;
36                         continue;
37                 }
38                 if (*str >= 'A' && *str <= 'F' && base > 10) {
39                         val = (val * base) + ((*str) - 'A' + 10);
40                         str++;
41                         continue;
42                 }
43                 if (*str >= 'a' && *str <= 'f' && base > 10) {
44                         val = (val * base) + ((*str) - 'a' + 10);
45                         str++;
46                         continue;
47                 }
48                 break;
49         }
50         if (end != NULL) {
51                 *end = str;
52         }
53         return val;
54 }