bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Steal all string functions from the libc


From: Justus Winter
Subject: [PATCH] Steal all string functions from the libc
Date: Fri, 28 Mar 2014 16:22:14 +0100

Steal all string functions previously implemented in kern/strings.c
from the libc.  Those are most likely more optimized than our simple
implementations.

* Makefile.am (clib_routines): Add memset, strcmp, strncmp, strcpy,
strncpy, and strlen.
* Makefrag.am (libkernel_a_SOURCES): Drop kern/strings.c.
* kern/strings.c: Remove file.
---
 Makefile.am    |   3 +-
 Makefrag.am    |   1 -
 kern/strings.c | 193 ---------------------------------------------------------
 3 files changed, 2 insertions(+), 195 deletions(-)
 delete mode 100644 kern/strings.c

diff --git a/Makefile.am b/Makefile.am
index 918cdc3..6e5207e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -156,7 +156,8 @@ noinst_PROGRAMS += \
        gnumach.o
 
 # This is the list of routines we decide is OK to steal from the C library.
-clib_routines := memcmp memcpy memmove                         \
+clib_routines := memcmp memcpy memmove memset                  \
+                strcmp strncmp strcpy strncpy strlen           \
                 strchr strstr strsep strtok                    \
                 htonl htons ntohl ntohs                        \
                 udivdi3 __udivdi3                              \
diff --git a/Makefrag.am b/Makefrag.am
index c1387bd..de020fc 100644
--- a/Makefrag.am
+++ b/Makefrag.am
@@ -193,7 +193,6 @@ libkernel_a_SOURCES += \
        kern/shuttle.h \
        kern/startup.c \
        kern/startup.h \
-       kern/strings.c \
        kern/syscall_emulation.c \
        kern/syscall_emulation.h \
        kern/syscall_subr.c \
diff --git a/kern/strings.c b/kern/strings.c
deleted file mode 100644
index c77ae4f..0000000
--- a/kern/strings.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* 
- * Mach Operating System
- * Copyright (c) 1993 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- *     File: strings.c
- *     Author: Robert V. Baron, Carnegie Mellon University
- *     Date:   ??/92
- *
- *     String functions.
- */
-
-#include <string.h>
-
-#ifdef strcpy
-#undef strcmp
-#undef strncmp
-#undef strcpy
-#undef strncpy
-#undef strlen
-#endif
-
-/*
- * Abstract:
- *     strcmp (s1, s2) compares the strings "s1" and "s2".
- *     It returns 0 if the strings are identical. It returns
- *     > 0 if the first character that differs in the two strings
- *     is larger in s1 than in s2 or if s1 is longer than s2 and 
- *     the contents are identical up to the length of s2.
- *     It returns < 0 if the first differing character is smaller 
- *     in s1 than in s2 or if s1 is shorter than s2 and the
- *     contents are identical upto the length of s1.
- */
-
-int __attribute__ ((pure))
-strcmp(
-       const char *s1,
-       const char *s2)
-{
-       unsigned int a, b;
-
-       do {
-               a = *s1++;
-               b = *s2++;
-               if (a != b)
-                       return a-b;     /* includes case when
-                                          'a' is zero and 'b' is not zero
-                                          or vice versa */
-       } while (a != '\0');
-
-       return 0;       /* both are zero */
-}
-
-
-/*
- * Abstract:
- *     strncmp (s1, s2, n) compares the strings "s1" and "s2"
- *     in exactly the same way as strcmp does.  Except the
- *     comparison runs for at most "n" characters.
- */
-
-int __attribute__ ((pure))
-strncmp(
-       const char *s1,
-       const char *s2,
-       size_t n)
-{
-       unsigned int a, b;
-
-       while (n != 0) {
-               a = *s1++;
-               b = *s2++;
-               if (a != b)
-                       return a-b;     /* includes case when
-                                          'a' is zero and 'b' is not zero
-                                          or vice versa */
-               if (a == '\0')
-                       return 0;       /* both are zero */
-               n--;
-       }
-
-       return 0;
-}
-
-
-/*
- * Abstract:
- *     strcpy copies the contents of the string "from" including 
- *     the null terminator to the string "to". A pointer to "to"
- *     is returned.
- */
-
-char *
-strcpy(
-       char *to,
-       const char *from)
-{
-       char *ret = to;
-
-       while ((*to++ = *from++) != '\0')
-               continue;
-
-       return ret;
-}
-
-/*
- * Abstract:
- *     strncpy copies "count" characters from the "from" string to
- *     the "to" string. If "from" contains less than "count" characters
- *     "to" will be padded with null characters until exactly "count"
- *     characters have been written. The return value is a pointer
- *     to the "to" string.
- */
-
-char *
-strncpy(
-       char *to,
-       const char *from,
-       size_t count)
-{
-       char *ret = to;
-
-       while (count != 0) {
-               count--;
-               if ((*to++ = *from++) == '\0')
-                       break;
-       }
-
-       while (count != 0) {
-               *to++ = '\0';
-               count--;
-       }
-
-       return ret;
-}
-
-/*
- * Abstract:
- *     strlen returns the number of characters in "string" preceeding 
- *     the terminating null character.
- */
-
-size_t __attribute__ ((pure))
-strlen(
-       const char *string)
-{
-       const char *ret = string;
-
-       while (*string++ != '\0')
-               continue;
-
-       return string - 1 - ret;
-}
-
-/*
- * Abstract:
- *     memset writes value "c" in the "n" bytes starting at address "s".
- *     The return value is a pointer to the "s" string.
- */
-
-void *
-memset(
-       void *_s, int c, size_t n)
-{
-       char *s = _s;
-       int i;
-
-       for (i = 0; i < n ; i++)
-               s[i] = c;
-
-       return _s;
-}
-- 
1.9.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]