strdup.c revision b7f2b4d529ee03ee0e4172cc06e7cd973bd9bef5
1/* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004 Free Software
2   Foundation, Inc.
3
4   This file is part of the GNU C Library.
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   This program is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License along
17   with this program; if not, write to the Free Software Foundation,
18   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
19
20#ifdef HAVE_CONFIG_H
21# include <config.h>
22#endif
23
24#ifndef _LIBC
25/* Get specification.  */
26# include "strdup.h"
27#endif
28
29#include <stdlib.h>
30#include <string.h>
31
32#undef __strdup
33#undef strdup
34
35#ifndef weak_alias
36# define __strdup strdup
37#endif
38
39/* Duplicate S, returning an identical malloc'd string.  */
40char *
41__strdup (const char *s)
42{
43  size_t len = strlen (s) + 1;
44  void *new = malloc (len);
45
46  if (new == NULL)
47    return NULL;
48
49  return (char *) memcpy (new, s, len);
50}
51#ifdef libc_hidden_def
52libc_hidden_def (__strdup)
53#endif
54#ifdef weak_alias
55weak_alias (__strdup, strdup)
56#endif
57