Initial revision
authorroland <roland>
Wed, 30 Jan 1991 09:55:20 +0000 (09:55 +0000)
committerroland <roland>
Wed, 30 Jan 1991 09:55:20 +0000 (09:55 +0000)
string/memory.h [new file with mode: 0644]
string/strcoll.c [new file with mode: 0644]
string/strdup.c [new file with mode: 0644]
string/strsignal.c [new file with mode: 0644]

diff --git a/string/memory.h b/string/memory.h
new file mode 100644 (file)
index 0000000..763613b
--- /dev/null
@@ -0,0 +1,33 @@
+/* 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.  */
+
+/*
+ * SVID
+ */
+
+#ifndef        _MEMORY_H
+
+#define        _MEMORY_H       1
+#include <features.h>
+
+
+#ifndef        _STRING_H
+#include <string.h>
+#endif /* string.h  */
+
+
+#endif /* memory.h  */
diff --git a/string/strcoll.c b/string/strcoll.c
new file mode 100644 (file)
index 0000000..0146aee
--- /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 <localeinfo.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Compare S1 and S2, returning less than, equal to or
+   greater than zero if the collated form of S1 is lexiographically
+   less than, equal to or greater than the collated form of S2.  */
+int
+DEFUN(strcoll, (s1, s2), CONST char *s1 AND CONST char *s2)
+{
+  if (_collate_info == NULL || _collate_info->values == NULL)
+    return strcmp(s1, s2);
+  else
+    {
+      CONST unsigned char *CONST values = _collate_info->values;
+      CONST unsigned char *CONST offsets = _collate_info->offsets;
+
+      while (*s1 != '\0' && *s2 != '\0')
+       {
+         CONST unsigned char c1 = *s1++, c2 = *s2++;
+         CONST unsigned char v1 = values[c1], v2 = values[c2];
+         CONST unsigned char o1 = offsets[c1], o2 = offsets[c2];
+
+         if (v1 == UCHAR_MAX && o1 == 0)
+           /* This is a non-collating element.  Skip it.  */
+           --s2;
+         else if (v2 == UCHAR_MAX && o2 == 0)
+           --s1;
+         else if (v1 == UCHAR_MAX && o1 == CHAR_MAX)
+           {
+             /* This element collates lower than anything else.  */
+             if (v2 != UCHAR_MAX || o2 != CHAR_MAX)
+               return -1;
+           }
+         else if (v2 == UCHAR_MAX && o2 == CHAR_MAX)
+           return 1;
+         else if (v1 != v2)
+           return v1 - v2;
+         else if (o1 != o2)
+           return o1 - o2;
+       }
+
+      if (*s1 == '\0')
+       return *s2 == '\0' ? 0 : -1;
+      else if (*s2 == '\0')
+       return 1;
+      return 0;
+    }
+}
diff --git a/string/strdup.c b/string/strdup.c
new file mode 100644 (file)
index 0000000..af35fda
--- /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 <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Duplicate S, returning an identical malloc'd string.  */
+char *
+DEFUN(strdup, (s), CONST char *s)
+{
+  size_t len = strlen(s) + 1;
+  PTR new = malloc(len);
+
+  if (new == NULL)
+    return NULL;
+
+  memcpy(new, (PTR) s, len);
+
+  return (char *) new;
+}
diff --git a/string/strsignal.c b/string/strsignal.c
new file mode 100644 (file)
index 0000000..d873318
--- /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 <signal.h>
+#include <stdio.h>
+#include <string.h>
+
+
+/* Defined in stdio/sys_siglist.c.  */
+extern CONST char *CONST _sys_siglist[];
+
+
+/* Return a string describing the meaning of the signal number SIGNUM.  */
+char *
+DEFUN(strsignal, (signum), int signum)
+{
+  if (signum < 0 || signum > NSIG)
+    {
+      static char unknown_signal[] = "Unknown signal 000000000000000000";
+      static char fmt[] = "Unknown signal%d";
+      size_t len = sprintf(unknown_signal, fmt, signum);
+      if (len < sizeof(fmt) - 2)
+       return NULL;
+      unknown_signal[len - 1] = '\0';
+      return unknown_signal;
+    }
+
+  return (char *) _sys_siglist[signum];
+}