mes: Add isatty?.
[mes.git] / lib / libc.c
index 384af166c0d380799a59503b3385a4ed3c083353..2819468c0633c4cbf6cf733cee6a72246c9c2d0f 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-comment-start: "//";comment-end:""-*-
  * Mes --- Maxwell Equations of Software
- * Copyright © 2016,2017 Jan Nieuwenhuizen <janneke@gnu.org>
+ * Copyright © 2016,2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
  *
  * This file is part of Mes.
  *
@@ -18,6 +18,7 @@
  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <sys/ioctl.h>
 #include <stdarg.h>
 #include <stdlib.h>
 
@@ -41,6 +42,12 @@ isxdigit (int c)
   return isdigit (c) || (c>='a') && (c<='f');
 }
 
+int
+isspace (int c)
+{
+  return (c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r' || c == ' ');
+}
+
 int
 isnumber (int c, int base)
 {
@@ -320,6 +327,29 @@ getenv (char const* s)
   return 0;
 }
 
+int
+setenv (char const* s, char const* v, int overwrite_p)
+{
+  char **p = g_environment;
+  int length = strlen (s);
+  while (*p)
+    {
+      if (!strncmp (s, *p, length) && *(*p + length) == '=')
+        break;
+      p++;
+    }
+  char *entry = malloc (length + strlen (v) + 2);
+  int end_p = *p == 0;
+  *p = entry;
+  strcpy (entry, s);
+  strcpy (entry + length, "=");
+  strcpy (entry + length + 1, v);
+  *(entry + length + strlen (v) + 2) = 0;
+  if (end_p)
+    *++p = 0;
+  return 0;
+}
+
 int
 vprintf (char const* format, va_list ap)
 {
@@ -390,4 +420,11 @@ sprintf (char *str, char const* format, ...)
   va_end (ap);
   return r;
 }
+
+int
+isatty (int fd)
+{
+  return ioctl (fd, TCGETS, 0) & 0xf0;
+}
+
 #endif //!POSIX