* score/src/wkstringduplicate.c: New file.
	* score/Makefile.am: Reflect change above.
	* score/include/rtems/score/wkspace.h: Declare
	_Workspace_String_duplicate().
This commit is contained in:
Sebastian Huber
2011-12-12 15:17:33 +00:00
parent ebd6c936de
commit 141b31107a
4 changed files with 64 additions and 1 deletions
+7
View File
@@ -1,3 +1,10 @@
2011-12-12 Sebastian Huber <sebastian.huber@embedded-brains.de>
* score/src/wkstringduplicate.c: New file.
* score/Makefile.am: Reflect change above.
* score/include/rtems/score/wkspace.h: Declare
_Workspace_String_duplicate().
2011-12-10 Ralf Corsépius <ralf.corsepius@rtems.org>
* posix/src/fork.c: Include <unistd.h> for "fork" prototype.
+1 -1
View File
@@ -329,7 +329,7 @@ libscore_a_SOURCES += src/userextaddset.c \
libscore_a_SOURCES += src/apiext.c src/chain.c src/chainappend.c \
src/chainextract.c src/chainget.c src/chaininsert.c \
src/chainappendempty.c src/chainprependempty.c src/chaingetempty.c \
src/interr.c src/isr.c src/wkspace.c
src/interr.c src/isr.c src/wkspace.c src/wkstringduplicate.c
EXTRA_DIST = src/Unlimited.txt
@@ -99,6 +99,23 @@ void *_Workspace_Allocate_or_fatal_error(
size_t size
);
/**
* @brief Duplicates the @a string with memory from the Workspace.
*
* If the @a string length exceeds @a maxlen, then the additional characters
* will be discarded.
*
* @param[in] string Pointer to zero terminated string.
* @param[in] maxlen Maximum length of the duplicated string.
*
* @return NULL Not enough memory.
* @return other Duplicated string.
*/
char *_Workspace_String_duplicate(
const char *string,
size_t maxlen
);
#ifndef __RTEMS_APPLICATION__
#include <rtems/score/wkspace.inl>
#endif
+39
View File
@@ -0,0 +1,39 @@
/*
* Copyright (c) 2011 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Obere Lagerstr. 30
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems/score/wkspace.h>
#include <string.h>
char *_Workspace_String_duplicate(
const char *string,
size_t maxlen
)
{
size_t n = strnlen(string, maxlen);
char *dup = _Workspace_Allocate(n + 1);
if (dup != NULL) {
dup [n] = '\0';
memcpy(dup, string, n);
}
return dup;
}