mescc: Add atoi.
authorJan Nieuwenhuizen <janneke@gnu.org>
Mon, 17 Apr 2017 21:29:54 +0000 (23:29 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Mon, 17 Apr 2017 21:29:54 +0000 (23:29 +0200)
* libc/mlibc.c (atoi): New function.
* module/mes/libc.mes (atoi): New function.
  (libc): Add it.

libc/mlibc.c
module/mes/libc.mes

index 8688d7fd26f37eddd83b17d9985b163f2499d452..98bcd9dd3a7312781a87f3cfd8e7996d2a7f695a 100644 (file)
@@ -312,6 +312,25 @@ isdigit (int c)
 {
   return (c>='0') && (c<='9');
 }
+
+int
+atoi (char const *s)
+{
+  int i = 0;
+  int sign = 1;
+  if (*s && *s == '-')
+    {
+      sign = -1;
+      s++;
+    }
+  while (isdigit (*s))
+    {
+      i *= 10;
+      i += (*s - '0');
+      s++;
+    }
+  return i * sign;
+}
 #endif
 
 char itoa_buf[10];
index 993699fa241b3ef4bc77f7224db502b0cc4b0487..31607f8e78a4adfba66ac215c414aa484341d7de 100644 (file)
@@ -285,6 +285,32 @@ isdigit (char c)
                 parse-c99)))
     ast))
 
+(define atoi
+  (let* ((ast (with-input-from-string
+                  "
+int
+atoi (char const *s)
+{
+  int i = 0;
+  int sign = 1;
+  if (*s && *s == '-')
+    {
+      sign = -1;
+      s++;
+    }
+  while (isdigit (*s))
+    {
+      i *= 10;
+      i += (*s - '0');
+      s++;
+    }
+  return i * sign;
+}
+"
+;;paredit:"
+                parse-c99)))
+    ast))
+
 (define malloc
   (let* ((ast (with-input-from-string
                   "
@@ -374,6 +400,7 @@ getenv (char const* s)
    strcmp
    itoa
    isdigit
+   atoi
    malloc
    realloc
    strncmp