From 5ff0fdb354d9b8b037f68fabb28f0d2442f434f9 Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Sat, 24 Nov 2007 22:17:26 +0000 Subject: [PATCH] Move the code from strings.h to a C file. We should really avoid to have code in header files. Signed-off-by: Uwe Hermann Acked-by: Stefan Reinauer git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@518 f3766cd6-281f-0410-b1cd-43a5c92072e9 --- arch/x86/Makefile | 5 +- include/string.h | 108 ++++------------------------------------- lib/string.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 102 deletions(-) create mode 100644 lib/string.c diff --git a/arch/x86/Makefile b/arch/x86/Makefile index b1c626c656..bdba3931b0 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -107,7 +107,7 @@ $(obj)/linuxbios.bootblock: $(obj)/linuxbios.vpd $(obj)/stage0.init # STAGE0_LIB_OBJ = uart8250.o mem.o elfboot.o lar.o delay.o vtxprintf.o \ - vsprintf.o console.o $(DECOMPRESSORS) + vsprintf.o console.o string.o $(DECOMPRESSORS) STAGE0_ARCH_X86_OBJ = stage1.o serial.o archelfboot.o speaker.o \ udelay_io.o mc146818rtc.o post_code.o @@ -169,7 +169,8 @@ $(obj)/stage0.o $(obj)/stage0.init: $(STAGE0_OBJ) # TODO: This should be compressed with the default compressor. # -STAGE2_LIB_OBJ = stage2.o clog2.o mem.o tables.o delay.o compute_ip_checksum.o +STAGE2_LIB_OBJ = stage2.o clog2.o mem.o tables.o delay.o \ + compute_ip_checksum.o string.o STAGE2_ARCH_X86_OBJ = archtables.o linuxbios_table.o udelay_io.o STAGE2_ARCH_X86_OBJ += pci_ops_auto.o pci_ops_conf1.o pci_ops_conf2.o diff --git a/include/string.h b/include/string.h index 7ddfb0df05..f4bfb4c71d 100644 --- a/include/string.h +++ b/include/string.h @@ -23,111 +23,19 @@ #include -/* Prototypes for functions from lib/mem.c. */ +/* lib/string.c */ +size_t strnlen(const char *str, size_t maxlen); +size_t strlen(const char *str); +int strcmp(const char *s1, const char *s2); +int strncmp(const char *s1, const char *s2, int maxlen); + +/* lib/mem.c */ void *memcpy(void *dest, const void *src, size_t len); void *memmove(void *dest, const void *src, size_t len); void *memset(void *s, int c, size_t len); int memcmp(const void *s1, const void *s2, size_t len); -/* Prototypes for functions from console/vsprintf.c. */ +/* console/vsprintf.c */ int sprintf(char *buf, const char *fmt, ...); -/** - * Calculate the length of a fixed-size string. - * - * @param str The input string. - * @param maxlen Return at most maxlen characters as length of the string. - * @return The length of the string, not including the final NUL character. - * The maximum length returned is maxlen. - */ -static inline size_t strnlen(const char *str, size_t maxlen) -{ - size_t len = 0; - - /* NULL and empty strings have length 0. */ - if (!str) - return 0; - - /* Loop until we find a NUL character, or maxlen is reached. */ - while ((*str++ != '\0') && (len < maxlen)) - len++; - - return len; -} - -/** - * Calculate the length of a string. - * - * @param str The input string. - * @return The length of the string, not including the final NUL character. - */ -static inline size_t strlen(const char *str) -{ - size_t len = 0; - - /* NULL and empty strings have length 0. */ - if (!str) - return 0; - - /* Loop until we find a NUL character. */ - while (*str++ != '\0') - len++; - - return len; -} - -/** - * Compare two strings. - * - * @param s1 The first string. - * @param s2 The second string. - * @return Returns a value less than zero, if s1 is shorter than s2. Returns - * zero, if s1 equals s2. Returns a value greater than zero, if - * s1 is longer than s2. - */ -static inline int strcmp(const char *s1, const char *s2) -{ - char c1, c2; - - /* Set c1 == c2, so that we can enter the while loop. */ - c1 = 0; - c2 = 0; - - /* Compare characters until they differ, or one of the strings ends. */ - while (c1 == c2) { - /* Read the next character from each string. */ - c1 = *s1++; - c2 = *s2++; - - /* Return something negative (if s1 is shorter than s2), or - zero (if s1 equals s2). */ - if (c1 == '\0') - return c1 - c2; - } - - /* Return someting positive (if s1 is longer than s2), or zero (if s1 - and s2 are equal). */ - return c1 - c2; -} - -/** - * Compare two strings with fixed length. - * - * @param s1 The first string. - * @param s2 The second string. - * @param maxlen Return at most maxlen characters as length of the string. - * @return A non-zero value if s1 and s2 differ, or zero if s1 equals s2. - */ -static inline int strncmp(const char *s1, const char *s2, int maxlen) -{ - int i; - - for (i = 0; i < maxlen; i++) { - if (s1[i] != s2[i]) - return s1[i] - s2[i]; - } - - return 0; -} - #endif /* STRING_H */ diff --git a/lib/string.c b/lib/string.c new file mode 100644 index 0000000000..6524dbd2f4 --- /dev/null +++ b/lib/string.c @@ -0,0 +1,119 @@ +/* + * This file is part of the LinuxBIOS project. + * + * Copyright (C) 2007 Uwe Hermann + * + * This program 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 2 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +/** + * Calculate the length of a fixed-size string. + * + * @param str The input string. + * @param maxlen Return at most maxlen characters as length of the string. + * @return The length of the string, not including the final NUL character. + * The maximum length returned is maxlen. + */ +size_t strnlen(const char *str, size_t maxlen) +{ + size_t len = 0; + + /* NULL and empty strings have length 0. */ + if (!str) + return 0; + + /* Loop until we find a NUL character, or maxlen is reached. */ + while ((*str++ != '\0') && (len < maxlen)) + len++; + + return len; +} + +/** + * Calculate the length of a string. + * + * @param str The input string. + * @return The length of the string, not including the final NUL character. + */ +size_t strlen(const char *str) +{ + size_t len = 0; + + /* NULL and empty strings have length 0. */ + if (!str) + return 0; + + /* Loop until we find a NUL character. */ + while (*str++ != '\0') + len++; + + return len; +} + +/** + * Compare two strings. + * + * @param s1 The first string. + * @param s2 The second string. + * @return Returns a value less than zero, if s1 is shorter than s2. Returns + * zero, if s1 equals s2. Returns a value greater than zero, if + * s1 is longer than s2. + */ +int strcmp(const char *s1, const char *s2) +{ + char c1, c2; + + /* Set c1 == c2, so that we can enter the while loop. */ + c1 = 0; + c2 = 0; + + /* Compare characters until they differ, or one of the strings ends. */ + while (c1 == c2) { + /* Read the next character from each string. */ + c1 = *s1++; + c2 = *s2++; + + /* Return something negative (if s1 is shorter than s2), or + zero (if s1 equals s2). */ + if (c1 == '\0') + return c1 - c2; + } + + /* Return someting positive (if s1 is longer than s2), or zero (if s1 + and s2 are equal). */ + return c1 - c2; +} + +/** + * Compare two strings with fixed length. + * + * @param s1 The first string. + * @param s2 The second string. + * @param maxlen Return at most maxlen characters as length of the string. + * @return A non-zero value if s1 and s2 differ, or zero if s1 equals s2. + */ +int strncmp(const char *s1, const char *s2, int maxlen) +{ + int i; + + for (i = 0; i < maxlen; i++) { + if (s1[i] != s2[i]) + return s1[i] - s2[i]; + } + + return 0; +}