|
@@ -0,0 +1,45 @@
|
|
|
+/*
|
|
|
+ * stdlib functions
|
|
|
+ *
|
|
|
+ * Author: Scott Wood <scottwood@freescale.com>
|
|
|
+ *
|
|
|
+ * Copyright (c) 2007 Freescale Semiconductor, Inc.
|
|
|
+ *
|
|
|
+ * This program is free software; you can redistribute it and/or modify it
|
|
|
+ * under the terms of the GNU General Public License version 2 as published
|
|
|
+ * by the Free Software Foundation.
|
|
|
+ */
|
|
|
+
|
|
|
+#include "stdlib.h"
|
|
|
+
|
|
|
+/* Not currently supported: leading whitespace, sign, 0x prefix, zero base */
|
|
|
+unsigned long long int strtoull(const char *ptr, char **end, int base)
|
|
|
+{
|
|
|
+ unsigned long long ret = 0;
|
|
|
+
|
|
|
+ if (base > 36)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ while (*ptr) {
|
|
|
+ int digit;
|
|
|
+
|
|
|
+ if (*ptr >= '0' && *ptr <= '9' && *ptr < '0' + base)
|
|
|
+ digit = *ptr - '0';
|
|
|
+ else if (*ptr >= 'A' && *ptr < 'A' + base - 10)
|
|
|
+ digit = *ptr - 'A' + 10;
|
|
|
+ else if (*ptr >= 'a' && *ptr < 'a' + base - 10)
|
|
|
+ digit = *ptr - 'a' + 10;
|
|
|
+ else
|
|
|
+ break;
|
|
|
+
|
|
|
+ ret *= base;
|
|
|
+ ret += digit;
|
|
|
+ ptr++;
|
|
|
+ }
|
|
|
+
|
|
|
+out:
|
|
|
+ if (end)
|
|
|
+ *end = (char *)ptr;
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|