Initial revision
authorroland <roland>
Wed, 30 Jan 1991 09:57:50 +0000 (09:57 +0000)
committerroland <roland>
Wed, 30 Jan 1991 09:57:50 +0000 (09:57 +0000)
17 files changed:
assert/assert.c [new file with mode: 0644]
assert/assert.h [new file with mode: 0644]
dirent/Makefile [new file with mode: 0644]
dirent/list.c [new file with mode: 0644]
stdlib/atof.c [new file with mode: 0644]
stdlib/atoi.c [new file with mode: 0644]
stdlib/atol.c [new file with mode: 0644]
stdlib/bsearch.c [new file with mode: 0644]
stdlib/div.c [new file with mode: 0644]
stdlib/labs.c [new file with mode: 0644]
stdlib/ldiv.c [new file with mode: 0644]
stdlib/mblen.c [new file with mode: 0644]
stdlib/mbstowcs.c [new file with mode: 0644]
stdlib/mbtowc.c [new file with mode: 0644]
stdlib/strtoul.c [new file with mode: 0644]
stdlib/wcstombs.c [new file with mode: 0644]
stdlib/wctomb.c [new file with mode: 0644]

diff --git a/assert/assert.c b/assert/assert.c
new file mode 100644 (file)
index 0000000..dd54bbc
--- /dev/null
@@ -0,0 +1,44 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+
+/* This function, when passed a string containing an asserted
+   expression, a filename, and a line number, prints a message
+   on the standard error stream of the form:
+       a.c:10: Assertion `a == b' failed.
+   It then aborts program execution via a call to abort().  */
+
+int
+DEFUN(__assert_fail, (assertion, file, line),
+      CONST char *assertion AND CONST char *file AND unsigned int line)
+{
+  /* Print the message.  */
+  (void) fprintf(stderr, "%s:%u: Assertion `%s' failed.\n",
+                file, line, assertion);
+  (void) fflush(stderr);
+
+  abort();
+
+  /* This function never returns, so making it void would make sense,
+     but returning something makes the assert macro easier to write.  */
+  return(0);
+}
diff --git a/assert/assert.h b/assert/assert.h
new file mode 100644 (file)
index 0000000..0569251
--- /dev/null
@@ -0,0 +1,63 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/*
+ *     ANSI Standard: 4.2 DIAGNOSTICS  <assert.h>
+ */
+
+#ifdef _ASSERT_H
+
+#undef _ASSERT_H
+#undef assert
+#undef __assert_quotearg
+
+#endif /* assert.h     */
+
+#define        _ASSERT_H       1
+#include <features.h>
+
+/* void assert(int expression);
+   If NDEBUG is defined, do nothing.
+   If not, and EXPRESSION is zero, print an error message and abort.  */
+
+#ifdef NDEBUG
+
+#define        assert(expr)    ((void) 0)
+
+#else  /* Not NDEBUG.  */
+
+/* This prints an "Assertion failed" message and aborts.  */
+extern int  EXFUN(__assert_fail, (CONST char *__assertion,
+                                 CONST char *__file, unsigned int __line));
+
+/* IGNORE($    */
+#ifdef __STDC__
+/* $) IFANSI($ */
+#define        __assert_quotearg(s)    #s
+/* $) IGNORE($ */
+#else  /* Not ANSI C.  */
+/* $) IFTRAD($ */
+#define        __assert_quotearg(s)    "s"
+/* $) IGNORE($ */
+#endif /* ANSI C.  */
+/* $)  */
+
+#define        assert(expr)                                                          \
+  ((void) ((expr) ||                                                         \
+          __assert_fail(__assert_quotearg(expr), __FILE__, __LINE__)))
+
+#endif /* NDEBUG.  */
diff --git a/dirent/Makefile b/dirent/Makefile
new file mode 100644 (file)
index 0000000..41d3b36
--- /dev/null
@@ -0,0 +1,27 @@
+# Copyright (C) 1991 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 1, or (at your option)
+# any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with the GNU C Library; see the file COPYING.  If not, write to
+# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+#
+#      Sub-makefile for dirent portion of the library.
+#
+subdir := dirent
+
+routines   := opendir closedir readdir rewinddir seekdir telldir
+
+tests     := list
+
+include ../Rules
diff --git a/dirent/list.c b/dirent/list.c
new file mode 100644 (file)
index 0000000..11e81d0
--- /dev/null
@@ -0,0 +1,63 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <errno.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <dirent.h>
+
+
+void
+DEFUN(test, (name), CONST char *name)
+{
+  DIR *dirp;
+  struct dirent *entp;
+
+  puts(name);
+
+  dirp = opendir(name);
+  if (dirp == NULL)
+    {
+      perror("opendir");
+      return;
+    }
+
+  while ((entp = readdir(dirp)) != NULL)
+    printf("%s\tfile number %lu\n",
+          entp->d_name, (unsigned long int) entp->d_fileno);
+
+  if (closedir(dirp) < 0)
+    perror("closedir");
+}
+
+int
+DEFUN(main, (argc, argv), int argc AND char **argv)
+{
+  --argc;
+  ++argv;
+
+  if (argc == 0)
+    test(".");
+  else
+    while (argc-- > 0)
+      test(*argv++);
+
+  exit(0);
+  return(0);
+}
diff --git a/stdlib/atof.c b/stdlib/atof.c
new file mode 100644 (file)
index 0000000..609715e
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdlib.h>
+
+#undef atof
+
+
+/* Convert a string to a double.  */
+double
+DEFUN(atof, (nptr), CONST char *nptr)
+{
+  return(strtod(nptr, (char **) NULL));
+}
diff --git a/stdlib/atoi.c b/stdlib/atoi.c
new file mode 100644 (file)
index 0000000..00c7a92
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdlib.h>
+
+#undef atoi
+
+
+/* Convert a string to an int.  */
+int
+DEFUN(atoi, (nptr), CONST char *nptr)
+{
+  return((int) strtol(nptr, (char **) NULL, 10));
+}
diff --git a/stdlib/atol.c b/stdlib/atol.c
new file mode 100644 (file)
index 0000000..4a6e522
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdlib.h>
+
+#undef atol
+
+
+/* Convert a string to a long int.  */
+long int
+DEFUN(atol, (nptr), CONST char *nptr)
+{
+  return(strtol(nptr, (char **) NULL, 10));
+}
diff --git a/stdlib/bsearch.c b/stdlib/bsearch.c
new file mode 100644 (file)
index 0000000..79537e5
--- /dev/null
@@ -0,0 +1,55 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdlib.h>
+
+
+/* Perform a binary search for KEY in BASE which has NMEMB elements
+   of SIZE bytes each.  The comparisons are done by (*COMPAR)().  */
+PTR
+DEFUN(bsearch, (key, base, nmemb, size, compar),
+      register CONST PTR key AND register CONST PTR base AND
+      size_t nmemb AND register size_t size AND
+      register int EXFUN((*compar), (CONST PTR, CONST PTR)))
+{
+  register size_t l, u, idx;
+  register CONST PTR p;
+  register int comparison;
+
+  l = 0;
+  u = nmemb - 1;
+  while (l <= u)
+    {
+      idx = (l + u) / 2;
+      p = (PTR) (((CONST char *) base) + (idx * size));
+      comparison = (*compar)(key, p);
+      /* Don't make U negative because it will wrap around.  */
+      if (comparison < 0)
+       {
+         if (idx == 0)
+           break;
+         u = idx - 1;
+       }
+      else if (comparison > 0)
+       l = idx + 1;
+      else
+       return (PTR) p;
+    }
+
+  return NULL;
+}
diff --git a/stdlib/div.c b/stdlib/div.c
new file mode 100644 (file)
index 0000000..6e5e7f2
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdlib.h>
+
+
+/* Return the `div_t' representation of NUMER over DENOM.  */
+__CONSTVALUE
+div_t
+DEFUN(div, (numer, denom), int numer AND int denom)
+{
+  div_t result;
+  /* Behavior for negative numbers is guaranteed.  */
+  register int sign = (numer < 0) == (denom < 0) ? 1 : -1;
+
+  numer = numer < 0 ? -numer : numer;
+  denom = denom < 0 ? -denom : denom;
+
+  result.quot = (numer / denom) * sign;
+  result.rem = (numer % denom) * sign;
+
+  return(result);
+}
diff --git a/stdlib/labs.c b/stdlib/labs.c
new file mode 100644 (file)
index 0000000..ac18fc5
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdlib.h>
+
+#undef labs
+
+
+/* Return the absolute value of I.  */
+__CONSTVALUE
+long int
+DEFUN(labs, (i), long int i)
+{
+  return(i < 0 ? -i : i);
+}
diff --git a/stdlib/ldiv.c b/stdlib/ldiv.c
new file mode 100644 (file)
index 0000000..a5c905c
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdlib.h>
+
+
+/* Return the `ldiv_t' representation of NUMER over DENOM.  */
+__CONSTVALUE
+ldiv_t
+DEFUN(ldiv, (numer, denom), long int numer AND long int denom)
+{
+  ldiv_t result;
+  /* Behavior for negative numbers is guaranteed.  */
+  register long int sign = (numer < 0L) == (denom < 0L) ? 1L : -1L;
+
+  numer = numer < 0L ? -numer : numer;
+  denom = denom < 0L ? -denom : denom;
+
+  result.quot = (numer / denom) * sign;
+  result.rem = (numer % denom) * sign;
+
+  return result;
+}
diff --git a/stdlib/mblen.c b/stdlib/mblen.c
new file mode 100644 (file)
index 0000000..9d724a6
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <stdlib.h>
+
+#undef mblen
+
+
+/* Return the length of the multibyte character (if there is one)
+   at S which is no longer than N characters.  */
+int
+DEFUN(mblen, (s, n), CONST char *s AND size_t n)
+{
+  return(mbtowc((wchar_t *) NULL, s, n));
+}
diff --git a/stdlib/mbstowcs.c b/stdlib/mbstowcs.c
new file mode 100644 (file)
index 0000000..cdb576b
--- /dev/null
@@ -0,0 +1,69 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <ctype.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+extern int _mb_shift;  /* Defined in mbtowc.c.  */
+
+/* Convert the string of multibyte characters in S to `wchar_t's in
+   PWCS, writing no more than N.  Return the number written,
+   or (size_t) -1 if an invalid multibyte character is encountered.  */
+size_t
+DEFUN(mbstowcs, (pwcs, s, n),
+      register wchar_t *pwcs AND register CONST char *s AND register size_t n)
+{
+  int save_shift;
+  register size_t written = 0;
+
+  /* Save the shift state.  */
+  save_shift = _mb_shift;
+  /* Reset the shift state.  */
+  _mb_shift = 0;
+
+  while (*s != '\0')
+    {
+      int len;
+      if (isascii(*s) || (len = mbtowc(pwcs, s, n)) < 1)
+       {
+         /* Return an error.  */
+         written = (size_t) -1;
+         break;
+       }
+      else
+       {
+         /* Multibyte character converted.  */
+         ++pwcs;
+         ++written;
+         s += len;
+         n -= len;
+       }
+    }
+
+  /* Terminate the string if it has space.  */
+  if (n > 0)
+    *pwcs = (wchar_t) 0;
+
+  /* Restore the old shift state.  */
+  _mb_shift = save_shift;
+
+  /* Return how many we wrote (or maybe an error).  */
+  return written;
+}
diff --git a/stdlib/mbtowc.c b/stdlib/mbtowc.c
new file mode 100644 (file)
index 0000000..03cfdd2
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <ctype.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+long int _mb_shift = 0;
+
+/* Convert the multibyte character at S, which is no longer
+   than N characters, to its `wchar_t' representation, placing
+   this n *PWC and returning its length.  */
+int
+DEFUN(mbtowc, (pwc, s, n), wchar_t *pwc AND CONST char *s AND size_t n)
+{
+  register CONST mb_char *mb;
+  register wchar_t i;
+
+  if (s == NULL)
+    return _mb_shift != 0;
+
+  if (_ctype_info->mbchar == NULL ||
+      _ctype_info->mbchar->mb_chars == NULL)
+    return -1;
+  if (*s == '\0')
+    return 0;
+
+  if (n > MB_CUR_MAX)
+    n = MB_CUR_MAX;
+
+  for (i = 0; i < WCHAR_MAX; ++i)
+    {
+      mb = &_ctype_info->mbchar->mb_chars[i];
+      /* EOF and NUL aren't MB chars.  */
+      if (i == (wchar_t) EOF || i == (wchar_t) '\0')
+       continue;
+      /* Normal ASCII values can't start MB chars.  */
+      else if (isascii(i))
+       continue;
+      else if (mb->string == NULL || mb->len == 0)
+       continue;
+      else if (mb->len > n)
+       continue;
+      else if (!strncmp(mb->string, s, mb->len))
+       {
+         _mb_shift += mb->shift;
+         if (pwc != NULL)
+           *pwc = i;
+         return mb->len;
+       }
+    }
+
+  return -1;
+}
diff --git a/stdlib/strtoul.c b/stdlib/strtoul.c
new file mode 100644 (file)
index 0000000..d4c76e3
--- /dev/null
@@ -0,0 +1,20 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#define        UNSIGNED        1
+
+#include <strtol.c>
diff --git a/stdlib/wcstombs.c b/stdlib/wcstombs.c
new file mode 100644 (file)
index 0000000..4bd5d52
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <ctype.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Convert the `wchar_t' string in PWCS to a multibyte character string
+   in S, writing no more than N characters.  Return the number of bytes
+   written, or (size_t) -1 if an invalid `wchar_t' was found.  */
+size_t
+DEFUN(wcstombs, (s, pwcs, n),
+      register char *s AND register CONST wchar_t *pwcs AND register size_t n)
+{
+  register CONST mb_char *mb;
+  register int shift = 0;
+
+  register size_t written = 0;
+  register wchar_t w;
+
+  while ((w = *pwcs++) != (wchar_t) '\0')
+    {
+      if (w == ((wchar_t) EOF) || isascii(w))
+       {
+         written = (size_t) -1;
+         break;
+       }
+      else
+       {
+         mb = &_ctype_info->mbchar->mb_chars[w + shift];
+         if (mb->string == NULL || mb->len == 0)
+           {
+             written = (size_t) -1;
+             break;
+           }
+         else if (mb->len > n)
+           break;
+         else
+           {
+             memcpy((PTR) s, (CONST PTR) mb->string, mb->len);
+             n -= mb->len;
+             written += mb->len;
+             shift += mb->shift;
+           }
+       }
+    }
+
+  /* Terminate the string if it has space.  */
+  if (n > 0)
+    *s = '\0';
+
+  /* Return the number of characters written (or maybe an error).  */
+  return written;
+}
diff --git a/stdlib/wctomb.c b/stdlib/wctomb.c
new file mode 100644 (file)
index 0000000..81c9114
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU C Library; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <ansidecl.h>
+#include <localeinfo.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+extern int _mb_shift;  /* Defined in mbtowc.c.  */
+
+/* Convert WCHAR into its multibyte character representation,
+   putting this in S and returning its length.  */
+int
+DEFUN(wctomb, (s, wchar), register char *s AND wchar_t wchar)
+{
+  register CONST mb_char *mb;
+
+  if (_ctype_info->mbchar == NULL)
+    mb = NULL;
+  else
+    mb = _ctype_info->mbchar->mb_chars;
+
+  /* If S is NULL, just say if we're shifted or not.  */
+  if (s == NULL)
+    return _mb_shift != 0;
+
+  if (wchar == (wchar_t) '\0')
+    {
+      _mb_shift = 0;
+      return 0;
+    }
+  else if (mb == NULL)
+    return -1;
+
+  mb += wchar + _mb_shift;
+  if (mb->string == NULL || mb->len == 0)
+    return -1;
+  memcpy((PTR) s, (CONST PTR) mb->string, mb->len + 1);
+  _mb_shift += mb->shift;
+  return mb->len;
+}