Mercurial > hg > octave-kai > gnulib-hg
comparison lib/strndup.c @ 7379:3ee6e46a13c3
[lib/ChangeLog]
This function could end up with a definition for a function
named __strndup, rather than rpl_strndup on a system with
incomplete weak_alias support.
* strndup.c (strndup): Rename from __strndup.
Remove #defines that used to map __strndup to strndup.
Don't use K&R prototypes.
Remove LIBC-related code, since this file is not sync'd with glibc.
* strndup.h: Revamp, accordingly.
[m4/ChangeLog]
* strndup.m4: Modernize.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Thu, 28 Sep 2006 11:16:05 +0000 |
parents | 8a1a9361108c |
children | a1d177cd9523 |
comparison
equal
deleted
inserted
replaced
7378:4dc1cdcb962f | 7379:3ee6e46a13c3 |
---|---|
1 /* Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006 Free | 1 /* A replacement function, for systems that lack strndup. |
2 | |
3 Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006 Free | |
2 Software Foundation, Inc. | 4 Software Foundation, Inc. |
3 | |
4 NOTE: The canonical source of this file is maintained with the GNU C Library. | |
5 Bugs can be reported to bug-glibc@prep.ai.mit.edu. | |
6 | 5 |
7 This program is free software; you can redistribute it and/or modify it | 6 This program is free software; you can redistribute it and/or modify it |
8 under the terms of the GNU General Public License as published by the | 7 under the terms of the GNU General Public License as published by the |
9 Free Software Foundation; either version 2, or (at your option) any | 8 Free Software Foundation; either version 2, or (at your option) any |
10 later version. | 9 later version. |
16 | 15 |
17 You should have received a copy of the GNU General Public License | 16 You should have received a copy of the GNU General Public License |
18 along with this program; if not, write to the Free Software Foundation, | 17 along with this program; if not, write to the Free Software Foundation, |
19 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 18 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
20 | 19 |
21 #if !_LIBC | 20 #include <config.h> |
22 # include <config.h> | 21 #include "strndup.h" |
23 # include "strndup.h" | |
24 #endif | |
25 | 22 |
26 #include <stdlib.h> | 23 #include <stdlib.h> |
27 #include <string.h> | 24 #include <string.h> |
28 | 25 |
29 #if !_LIBC | 26 #include "strnlen.h" |
30 # include "strnlen.h" | |
31 # ifndef __strnlen | |
32 # define __strnlen strnlen | |
33 # endif | |
34 #endif | |
35 | |
36 #undef __strndup | |
37 #if _LIBC | |
38 # undef strndup | |
39 #endif | |
40 | |
41 #ifndef weak_alias | |
42 # define __strndup strndup | |
43 #endif | |
44 | 27 |
45 char * | 28 char * |
46 __strndup (s, n) | 29 strndup (char const *s, size_t n) |
47 const char *s; | |
48 size_t n; | |
49 { | 30 { |
50 size_t len = __strnlen (s, n); | 31 size_t len = strnlen (s, n); |
51 char *new = malloc (len + 1); | 32 char *new = malloc (len + 1); |
52 | 33 |
53 if (new == NULL) | 34 if (new == NULL) |
54 return NULL; | 35 return NULL; |
55 | 36 |
56 new[len] = '\0'; | 37 new[len] = '\0'; |
57 return memcpy (new, s, len); | 38 return memcpy (new, s, len); |
58 } | 39 } |
59 #ifdef libc_hidden_def | |
60 libc_hidden_def (__strndup) | |
61 #endif | |
62 #ifdef weak_alias | |
63 weak_alias (__strndup, strndup) | |
64 #endif |