string: move strdup() & strconcat() to lib/string.c

Move functions not available in PRE_RAM into seperate file.
Makes it easier to share code between rom and ramstage.

Change-Id: I0b9833fbf6742d110ee4bfc00cd650f219aebb2c
Signed-off-by: Thomas Heijligen <thomas.heijligen@secunet.com>
Reviewed-on: https://review.coreboot.org/c/31141
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
Thomas Heijligen 2019-01-29 12:48:01 +01:00 committed by Patrick Georgi
parent 05532260ae
commit 9204355b4d
3 changed files with 24 additions and 20 deletions

View File

@ -23,6 +23,8 @@ void *memchr(const void *s, int c, size_t n);
int snprintf(char *buf, size_t size, const char *fmt, ...);
int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
#endif
char *strdup(const char *s);
char *strconcat(const char *s1, const char *s2);
// simple string functions
@ -51,26 +53,6 @@ static inline char *strchr(const char *s, int c)
return 0;
}
#if !defined(__PRE_RAM__)
static inline char *strdup(const char *s)
{
size_t sz = strlen(s) + 1;
char *d = malloc(sz);
memcpy(d, s, sz);
return d;
}
static inline char *strconcat(const char *s1, const char *s2)
{
size_t sz_1 = strlen(s1);
size_t sz_2 = strlen(s2);
char *d = malloc(sz_1 + sz_2 + 1);
memcpy(d, s1, sz_1);
memcpy(d + sz_1, s2, sz_2 + 1);
return d;
}
#endif
/**
* Find a character in a string.
*

View File

@ -118,6 +118,7 @@ ramstage-y += bootmem.c
ramstage-y += fmap.c
ramstage-y += memchr.c
ramstage-y += memcmp.c
ramstage-y += string.c
ramstage-y += malloc.c
smm-$(CONFIG_SMM_TSEG) += malloc.c
ramstage-y += dimm_info_util.c

21
src/lib/string.c Normal file
View File

@ -0,0 +1,21 @@
#include <string.h>
#include <stddef.h>
#include <stdlib.h>
char *strdup(const char *s)
{
size_t sz = strlen(s) + 1;
char *d = malloc(sz);
memcpy(d, s, sz);
return d;
}
char *strconcat(const char *s1, const char *s2)
{
size_t sz_1 = strlen(s1);
size_t sz_2 = strlen(s2);
char *d = malloc(sz_1 + sz_2 + 1);
memcpy(d, s1, sz_1);
memcpy(d + sz_1, s2, sz_2 + 1);
return d;
}