mirror of
https://gitlab.freedesktop.org/libbsd/libbsd.git
synced 2025-06-01 08:31:30 +02:00
Add reallocf function
This commit is contained in:
parent
06a60a166a
commit
acb7c42d7c
2
Makefile
2
Makefile
@ -33,6 +33,7 @@ LIB_SRCS := \
|
|||||||
hash/md5.c \
|
hash/md5.c \
|
||||||
pidfile.c \
|
pidfile.c \
|
||||||
readpassphrase.c \
|
readpassphrase.c \
|
||||||
|
reallocf.c \
|
||||||
setmode.c \
|
setmode.c \
|
||||||
setproctitle.c \
|
setproctitle.c \
|
||||||
strmode.c \
|
strmode.c \
|
||||||
@ -84,6 +85,7 @@ LIB_MANS := \
|
|||||||
fgetln.3 \
|
fgetln.3 \
|
||||||
flopen.3 \
|
flopen.3 \
|
||||||
readpassphrase.3 \
|
readpassphrase.3 \
|
||||||
|
reallocf.3 \
|
||||||
humanize_number.3 \
|
humanize_number.3 \
|
||||||
fmtcheck.3 \
|
fmtcheck.3 \
|
||||||
nlist.3 \
|
nlist.3 \
|
||||||
|
4
Versions
4
Versions
@ -65,3 +65,7 @@ LIBBSD_0.2 {
|
|||||||
arc4random_uniform;
|
arc4random_uniform;
|
||||||
} LIBBSD_0.1;
|
} LIBBSD_0.1;
|
||||||
|
|
||||||
|
LIBBSD_0.3 {
|
||||||
|
reallocf;
|
||||||
|
} LIBBSD_0.2;
|
||||||
|
|
||||||
|
@ -53,6 +53,8 @@ void setprogname(const char *);
|
|||||||
|
|
||||||
int heapsort (void *, size_t, size_t, int (*)(const void *, const void *));
|
int heapsort (void *, size_t, size_t, int (*)(const void *, const void *));
|
||||||
|
|
||||||
|
void *reallocf(void *ptr, size_t size);
|
||||||
|
|
||||||
long long strtonum(const char *nptr, long long minval, long long maxval,
|
long long strtonum(const char *nptr, long long minval, long long maxval,
|
||||||
const char **errstr);
|
const char **errstr);
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
107
src/reallocf.3
Normal file
107
src/reallocf.3
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
.\" Copyright (c) 1980, 1991, 1993
|
||||||
|
.\" The Regents of the University of California. All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" This code is derived from software contributed to Berkeley by
|
||||||
|
.\" the American National Standards Committee X3, on Information
|
||||||
|
.\" Processing Systems.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\" 3. Neither the name of the University nor the names of its contributors
|
||||||
|
.\" may be used to endorse or promote products derived from this software
|
||||||
|
.\" without specific prior written permission.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
.\" SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.\" @(#)malloc.3 8.1 (Berkeley) 6/4/93
|
||||||
|
.\" $FreeBSD: src/lib/libc/stdlib/malloc.3,v 1.80.2.2.2.1 2010/06/14 02:09:06 kensmith Exp $
|
||||||
|
.\"
|
||||||
|
.Dd September 26, 2009
|
||||||
|
.Dt MALLOC 3
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm reallocf
|
||||||
|
.Nd general purpose memory allocation functions
|
||||||
|
.Sh LIBRARY
|
||||||
|
.ds str-Lb-libbsd Utility functions from BSD systems (libbsd, \-lbsd)
|
||||||
|
.Lb libbsd
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.In stdlib.h
|
||||||
|
.Ft void *
|
||||||
|
.Fn reallocf "void *ptr" "size_t size"
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The
|
||||||
|
.Fn reallocf
|
||||||
|
function changes the size of the previously allocated memory referenced by
|
||||||
|
.Fa ptr
|
||||||
|
to
|
||||||
|
.Fa size
|
||||||
|
bytes.
|
||||||
|
The contents of the memory are unchanged up to the lesser of the new and
|
||||||
|
old sizes.
|
||||||
|
If the new size is larger,
|
||||||
|
the contents of the newly allocated portion of the memory are undefined.
|
||||||
|
Upon success, the memory referenced by
|
||||||
|
.Fa ptr
|
||||||
|
is freed and a pointer to the newly allocated memory is returned.
|
||||||
|
Note that
|
||||||
|
.Fn reallocf
|
||||||
|
may move the memory allocation, resulting in a different return value than
|
||||||
|
.Fa ptr .
|
||||||
|
If
|
||||||
|
.Fa ptr
|
||||||
|
is
|
||||||
|
.Dv NULL ,
|
||||||
|
the
|
||||||
|
.Fn reallocf
|
||||||
|
function behaves identically to
|
||||||
|
.Fn malloc
|
||||||
|
for the specified size.
|
||||||
|
Upon failure, when the requested memory cannot be allocated, the passed pointer
|
||||||
|
is freed to ease the problems with traditional coding styles for
|
||||||
|
.Fn reallocf
|
||||||
|
causing memory leaks in libraries.
|
||||||
|
.Sh RETURN VALUES
|
||||||
|
The
|
||||||
|
.Fn reallocf
|
||||||
|
function returns a pointer, possibly identical to
|
||||||
|
.Fa ptr ,
|
||||||
|
to the allocated memory
|
||||||
|
if successful; otherwise a
|
||||||
|
.Dv NULL
|
||||||
|
pointer is returned, and
|
||||||
|
.Va errno
|
||||||
|
is set to
|
||||||
|
.Er ENOMEM
|
||||||
|
if the error was the result of an allocation failure.
|
||||||
|
The buffer is deallocated in this case.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr brk 2 ,
|
||||||
|
.Xr mmap 2 ,
|
||||||
|
.Xr alloca 3 ,
|
||||||
|
.Xr calloc 3 ,
|
||||||
|
.Xr free 3 ,
|
||||||
|
.Xr malloc 3 ,
|
||||||
|
.Xr posix_memalign 3 ,
|
||||||
|
.Xr realloc 3 ,
|
||||||
|
.Sh HISTORY
|
||||||
|
The
|
||||||
|
.Fn reallocf
|
||||||
|
function first appeared in
|
||||||
|
.Fx 3.0 .
|
48
src/reallocf.c
Normal file
48
src/reallocf.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 1998, M. Warner Losh <imp@freebsd.org>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
void *
|
||||||
|
reallocf(void *ptr, size_t size)
|
||||||
|
{
|
||||||
|
void *nptr;
|
||||||
|
|
||||||
|
nptr = realloc(ptr, size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When the System V compatibility option (malloc "V" flag) is
|
||||||
|
* in effect, realloc(ptr, 0) frees the memory and returns NULL.
|
||||||
|
* So, to avoid double free, call free() only when size != 0.
|
||||||
|
* realloc(ptr, 0) can't fail when ptr != NULL.
|
||||||
|
*/
|
||||||
|
if (!nptr && ptr && size != 0)
|
||||||
|
free(ptr);
|
||||||
|
return (nptr);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user