Initial revision
authorroland <roland>
Wed, 30 Jan 1991 09:55:21 +0000 (09:55 +0000)
committerroland <roland>
Wed, 30 Jan 1991 09:55:21 +0000 (09:55 +0000)
12 files changed:
ctype/ctype.c [new file with mode: 0644]
grp/getgrent.c [new file with mode: 0644]
grp/getgrnam.c [new file with mode: 0644]
grp/grpopen.c [new file with mode: 0644]
string/strtok.c [new file with mode: 0644]
string/strxfrm.c [new file with mode: 0644]
sysdeps/generic/bcopy.c [new file with mode: 0644]
sysdeps/generic/bzero.c [new file with mode: 0644]
sysdeps/generic/strcspn.c [new file with mode: 0644]
sysdeps/generic/strpbrk.c [new file with mode: 0644]
sysdeps/generic/strspn.c [new file with mode: 0644]
time/localtime.c [new file with mode: 0644]

diff --git a/ctype/ctype.c b/ctype/ctype.c
new file mode 100644 (file)
index 0000000..ba3e529
--- /dev/null
@@ -0,0 +1,50 @@
+/* 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>
+
+#define        __NO_CTYPE
+#include <ctype.h>
+
+/* Provide real-function versions of all the ctype macros.  */
+
+#define        func(name, type) \
+  int DEFUN(name, (c), int c) { return __isctype(c, type); }
+
+func(isalnum, _ISalnum)
+func(isalpha, _ISalpha)
+func(iscntrl, _IScntrl)
+func(isdigit, _ISdigit)
+func(islower, _ISlower)
+func(isgraph, _ISgraph)
+func(isprint, _ISprint)
+func(ispunct, _ISpunct)
+func(isspace, _ISspace)
+func(isupper, _ISupper)
+func(isxdigit, _ISxdigit)
+
+int
+DEFUN(tolower, (c), int c)
+{
+  return __tolower(c);
+}
+
+int
+DEFUN(toupper, (c), int c)
+{
+  return __toupper(c);
+}
diff --git a/grp/getgrent.c b/grp/getgrent.c
new file mode 100644 (file)
index 0000000..92306cc
--- /dev/null
@@ -0,0 +1,66 @@
+/* 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 <stddef.h>
+#include <stdio.h>
+#include <grp.h>
+
+static FILE *stream = NULL;
+
+/* Rewind the stream.  */
+void
+DEFUN_VOID(setgrent)
+{
+  if (stream != NULL)
+    rewind(stream);
+}
+
+
+/* Close the stream.  */
+void
+DEFUN_VOID(endgrent)
+{
+  if (stream != NULL)
+    {
+      (void) fclose(stream);
+      stream = NULL;
+    }
+}
+
+
+/* Read an entry from the stream.  */
+struct group *
+DEFUN_VOID(getgrent)
+{
+  static PTR info = NULL;
+  if (info == NULL)
+    {
+      info = __grpalloc();
+      if (info == NULL)
+       return(NULL);
+    }
+
+  if (stream == NULL)
+    {
+      stream = __grpopen();
+      if (stream == NULL)
+       return(NULL);
+    }
+
+  return(__grpread(stream, info));
+}
diff --git a/grp/getgrnam.c b/grp/getgrnam.c
new file mode 100644 (file)
index 0000000..ec4d0a9
--- /dev/null
@@ -0,0 +1,49 @@
+/* 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 <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <grp.h>
+
+/* Search for an entry with a matching name.  */
+struct group *
+DEFUN(getgrnam, (name), register CONST char *name)
+{
+  static PTR info = NULL;
+  register FILE *stream;
+  register struct group *g;
+
+  if (info == NULL)
+    {
+      info = __grpalloc();
+      if (info == NULL)
+       return NULL;
+    }
+
+  stream = __grpopen();
+  if (stream == NULL)
+    return NULL;
+
+  while ((g = __grpread(stream, info)) != NULL)
+    if (!strcmp(g->gr_name, name))
+      break;
+
+  (void) fclose(stream);
+  return g;
+}
diff --git a/grp/grpopen.c b/grp/grpopen.c
new file mode 100644 (file)
index 0000000..0750bec
--- /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.  */
+
+#include <ansidecl.h>
+#include <stdio.h>
+#include <grp.h>
+
+/* Return a new stream open on the group file.  */
+FILE *
+DEFUN_VOID(__grpopen)
+{
+  return fopen("/etc/group", "r");
+}
diff --git a/string/strtok.c b/string/strtok.c
new file mode 100644 (file)
index 0000000..0eaa82d
--- /dev/null
@@ -0,0 +1,72 @@
+/* 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 <string.h>
+
+
+static char *olds = NULL;
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the last string strtok() was called with is
+   used.  For example:
+       char s[] = "-abc=-def";
+       x = strtok(s, "-");             // x = "abc"
+       x = strtok(NULL, "=-");         // x = "def"
+       x = strtok(NULL, "=");          // x = NULL
+               // s = "abc\0-def\0"
+*/
+char *
+DEFUN(strtok, (s, delim),
+      register char *s AND register CONST char *delim)
+{
+  char *token;
+
+  if (s == NULL)
+    {
+      if (olds == NULL)
+       {
+         errno = EINVAL;
+         return NULL;
+       }
+      else
+       s = olds;
+    }
+
+  /* Scan leading delimiters.  */
+  s += strspn(s, delim);
+  if (*s == '\0')
+    {
+      olds = NULL;
+      return NULL;
+    }
+
+  /* Find the end of the token.  */
+  token = s;
+  s = strpbrk(token, delim);
+  if (s == NULL)
+    /* This token finishes the string.  */
+    olds = NULL;
+  else
+    {
+      /* Terminate the token and make OLDS point past it.  */
+      *s = '\0';
+      olds = s + 1;
+    }
+  return token;
+}
diff --git a/string/strxfrm.c b/string/strxfrm.c
new file mode 100644 (file)
index 0000000..a37996b
--- /dev/null
@@ -0,0 +1,75 @@
+/* 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 <stdlib.h>
+#include <string.h>
+
+
+/* Transform SRC into a form such that the result of strcmp
+   on two strings that have been transformed by strxfrm is
+   the same as the result of strcoll on the two strings before
+   their transformation.  The transformed string is put in at
+   most N characters of DEST and its length is returned.  */
+size_t
+DEFUN(strxfrm, (dest, src, n), char *dest AND CONST char *src AND size_t n)
+{
+  CONST unsigned char *CONST values
+    = _collate_info != NULL ? _collate_info->values : NULL;
+  CONST unsigned char *CONST offsets
+    = _collate_info != NULL ? _collate_info->offsets : NULL;
+  register size_t done = 0;
+
+  while (*src != '\0')
+    {
+      CONST unsigned char c = *src++;
+
+      ++done;
+      if (offsets != NULL && offsets[c] != 0)
+       {
+         ++done;
+         if (offsets[c] == CHAR_MAX)
+           ++done;
+       }
+      if (done < n && dest != NULL)
+       {
+         if (values == NULL)
+           *dest++ = c;
+         else if (values[c] == UCHAR_MAX && offsets[c] == 0)
+           /* This is a non-collating element.  Skip it.  */
+           ;
+         else if (values[c] == UCHAR_MAX && offsets[c] == CHAR_MAX)
+           {
+             /* This element collates lower than anything else.  */
+             *dest++ = '\001';
+             *dest++ = '\001';
+             *dest++ = '\001';
+           }
+         else
+           {
+             *dest++ = values[c];
+             *dest++ = offsets[c];
+           }
+       }
+    }
+
+  if (dest != NULL)
+    *dest = '\0';
+  return done;
+}
diff --git a/sysdeps/generic/bcopy.c b/sysdeps/generic/bcopy.c
new file mode 100644 (file)
index 0000000..1384e4a
--- /dev/null
@@ -0,0 +1,31 @@
+/* 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 <bstring.h>
+#include <string.h>
+
+
+#define        memmove         bcopy
+#define        rettype         void
+#define        RETURN(s)       return
+#define        a1              src
+#define        a1const         CONST
+#define        a2              dest
+#define        a2const
+
+#include <memmove.c>
diff --git a/sysdeps/generic/bzero.c b/sysdeps/generic/bzero.c
new file mode 100644 (file)
index 0000000..8401c8b
--- /dev/null
@@ -0,0 +1,31 @@
+/* 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 <bstring.h>
+
+
+/* Set N bytes of S to 0.  */
+void
+DEFUN(bzero, (s, n), PTR s AND size_t n)
+{
+  register char *p = (char *) s;
+  register size_t i = n;
+
+  while (i-- > 0)
+    *p++ = 0;
+}
diff --git a/sysdeps/generic/strcspn.c b/sysdeps/generic/strcspn.c
new file mode 100644 (file)
index 0000000..c3f7fe5
--- /dev/null
@@ -0,0 +1,37 @@
+/* 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 <string.h>
+
+
+/* Return the length of the maximum inital segment of S
+   which contains no characters from REJECT.  */
+size_t
+DEFUN(strcspn, (s, reject),
+      register CONST char *s AND register CONST char *reject)
+{
+  register size_t count = 0;
+
+  while (*s != '\0')
+    if (strchr(reject, *s++) == NULL)
+      ++count;
+    else
+      return count;
+
+  return count;
+}
diff --git a/sysdeps/generic/strpbrk.c b/sysdeps/generic/strpbrk.c
new file mode 100644 (file)
index 0000000..2adfafe
--- /dev/null
@@ -0,0 +1,34 @@
+/* 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 <string.h>
+
+
+/* Find the first ocurrence in S of any character in ACCEPT.  */
+char *
+DEFUN(strpbrk, (s, accept),
+      register CONST char *s AND register CONST char *accept)
+{
+  while (*s != '\0')
+    if (strchr(accept, *s) == NULL)
+      ++s;
+    else
+      return (char *) s;
+
+  return NULL;
+}
diff --git a/sysdeps/generic/strspn.c b/sysdeps/generic/strspn.c
new file mode 100644 (file)
index 0000000..17c6eab
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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 <string.h>
+
+
+/* Return the length of the maximum initial segment
+   of S which contains only characters in ACCEPT.  */
+size_t
+DEFUN(strspn, (s, accept), CONST char *s AND CONST char *accept)
+{
+  register CONST char *p;
+  register CONST char *a;
+  register size_t count = 0;
+
+  for (p = s; *p != '\0'; ++p)
+    {
+      for (a = accept; *a != '\0'; ++a)
+       if (*p == *a)
+         break;
+      if (*a == '\0')
+       return count;
+      else
+       ++count;
+    }
+
+  return count;
+}
diff --git a/time/localtime.c b/time/localtime.c
new file mode 100644 (file)
index 0000000..f3e5497
--- /dev/null
@@ -0,0 +1,51 @@
+/* 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 <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+
+/* Return the `struct tm' representation of *TIMER in the local timezone.  */
+struct tm *
+DEFUN(localtime, (timer), CONST time_t *timer)
+{
+  extern int EXFUN(__tz_compute, (time_t, struct tm));
+  register struct tm *tp;
+
+  if (timer == NULL)
+    {
+      errno = EINVAL;
+      return NULL;
+    }
+
+  tp = gmtime(timer);
+  if (tp == NULL)
+    return NULL;
+
+  if (!__tz_compute(*timer, *tp))
+    return NULL;
+
+  tp = __offtime(timer, __timezone);
+  tp->tm_isdst = __daylight;
+  return tp;
+}