Mercurial > hg > octave-nkf > gnulib-hg
changeset 10068:c7189e3f4fa9
Split xmemdup0 into its own module.
* modules/xmemdup0: New file.
* lib/xmemdup0.h: Likewise.
* lib/xmemdup0.c: Likewise.
* MODULES.html.sh (Memory management functions): Add xmemdup0.
* lib/xalloc.h (xmemdup0): Remove.
* lib/xmalloc.c (xmemdup0): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Tue, 13 May 2008 21:28:43 -0600 |
parents | 40a8c0b4f5e0 |
children | 7748c1704de6 |
files | ChangeLog MODULES.html.sh lib/xalloc.h lib/xmalloc.c lib/xmemdup0.c lib/xmemdup0.h modules/xmemdup0 |
diffstat | 7 files changed, 129 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-05-13 Eric Blake <ebb9@byu.net> + + Split xmemdup0 into its own module. + * modules/xmemdup0: New file. + * lib/xmemdup0.h: Likewise. + * lib/xmemdup0.c: Likewise. + * MODULES.html.sh (Memory management functions): Add xmemdup0. + * lib/xalloc.h (xmemdup0): Remove. + * lib/xmalloc.c (xmemdup0): Likewise. + 2008-05-13 Eric Blake <ebb9@byu.net> Bruno Haible <bruno@clisp.org>
--- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -1609,6 +1609,7 @@ func_module alloca-opt func_module malloca func_module xmalloca + func_module xmemdup0 func_end_table element="Integer arithmetic functions <stdlib.h>"
--- a/lib/xalloc.h +++ b/lib/xalloc.h @@ -50,7 +50,6 @@ void *xrealloc (void *p, size_t s); void *x2realloc (void *p, size_t *pn); void *xmemdup (void const *p, size_t s); -void *xmemdup0 (void const *p, size_t s); char *xstrdup (char const *str); /* Return 1 if an array of N objects, each of size S, cannot exist due @@ -265,12 +264,6 @@ return (T *) xmemdup ((void const *) p, s); } -template <typename T> inline T * -xmemdup0 (T const *p, size_t s) -{ - return (T *) xmemdup0 ((void const *) p, s); -} - # endif
--- a/lib/xmalloc.c +++ b/lib/xmalloc.c @@ -113,24 +113,6 @@ return memcpy (xmalloc (s), p, s); } -/* Clone an object P of size S, with error checking, and include a - terminating NUL byte. - - The terminating NUL makes it safe to use strlen or rawmemchr to - check for embedded NUL; it also speeds up algorithms such as escape - sequence processing on arbitrary memory, by making it always safe - to read the byte after the escape character rather than having to - check if each escape character is the last byte in the object. */ - -void * -xmemdup0 (void const *p, size_t s) -{ - char *result = xcharalloc (s + 1); - memcpy (result, p, s); - result[s] = 0; - return result; -} - /* Clone STRING. */ char *
new file mode 100644 --- /dev/null +++ b/lib/xmemdup0.c @@ -0,0 +1,44 @@ +/* xmemdup0.c -- copy a block of arbitrary bytes, plus a trailing NUL + + Copyright (C) 2008 Free Software Foundation, Inc. + + 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 3 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, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "xmemdup0.h" +#include "xalloc.h" + +#include <string.h> + +/* Clone an arbitrary block of bytes P of size S, with error checking, + and include a terminating NUL byte. P is of type `void const *', + to make it easier to use this with other mem* functions that return + `void *', but since appending a NUL byte only makes sense on bytes, + the return type is `char *'. + + The terminating NUL makes it safe to use strlen or rawmemchr to + check for embedded NUL; it also speeds up algorithms such as escape + sequence processing on arbitrary memory, by making it always safe + to read the byte after the escape character rather than having to + check if each escape character is the last byte in the object. */ + +char * +xmemdup0 (void const *p, size_t s) +{ + char *result = xcharalloc (s + 1); + memcpy (result, p, s); + result[s] = 0; + return result; +}
new file mode 100644 --- /dev/null +++ b/lib/xmemdup0.h @@ -0,0 +1,51 @@ +/* xmemdup0.h -- copy a block of arbitrary bytes, plus a trailing NUL + + Copyright (C) 2008 Free Software Foundation, Inc. + + 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 3 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, see <http://www.gnu.org/licenses/>. */ + +#ifndef XMEMDUP_H_ +# define XMEMDUP_H_ + +# include <stddef.h> + + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef __attribute__ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) +# define __attribute__(x) +# endif +# endif + +# ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +# endif + +/* This function is always triggered when memory is exhausted. + It must be defined by the application, either explicitly + or by using gnulib's xalloc-die module. This is the + function to call when one wants the program to die because of a + memory allocation failure. */ +extern void xalloc_die (void) ATTRIBUTE_NORETURN; + +char *xmemdup0 (void const *p, size_t s); + +# ifdef __cplusplus +} +# endif + +#endif /* !XMEMDUP0_H_ */
new file mode 100644 --- /dev/null +++ b/modules/xmemdup0 @@ -0,0 +1,23 @@ +Description: +Copy a block of arbitrary bytes, and append a trailing NUL. + +Files: +lib/xmemdup0.h +lib/xmemdup0.c + +Depends-on: +xalloc + +configure.ac: +AC_LIBOBJ([xmemdup0]) + +Makefile.am: + +Include: +"xmemdup0.h" + +License: +GPL + +Maintainer: +Eric Blake