xref: /freebsd/contrib/mandoc/mandoc_malloc.3 (revision 6d38604fc532a3fc060788e3ce40464b46047eaf)
1*6d38604fSBaptiste Daroussin.\"	$Id: mandoc_malloc.3,v 1.3 2021/09/17 18:50:21 schwarze Exp $
261d06d6bSBaptiste Daroussin.\"
361d06d6bSBaptiste Daroussin.\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
461d06d6bSBaptiste Daroussin.\"
561d06d6bSBaptiste Daroussin.\" Permission to use, copy, modify, and distribute this software for any
661d06d6bSBaptiste Daroussin.\" purpose with or without fee is hereby granted, provided that the above
761d06d6bSBaptiste Daroussin.\" copyright notice and this permission notice appear in all copies.
861d06d6bSBaptiste Daroussin.\"
961d06d6bSBaptiste Daroussin.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1061d06d6bSBaptiste Daroussin.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1161d06d6bSBaptiste Daroussin.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1261d06d6bSBaptiste Daroussin.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1361d06d6bSBaptiste Daroussin.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1461d06d6bSBaptiste Daroussin.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1561d06d6bSBaptiste Daroussin.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1661d06d6bSBaptiste Daroussin.\"
17*6d38604fSBaptiste Daroussin.Dd $Mdocdate: September 17 2021 $
1861d06d6bSBaptiste Daroussin.Dt MANDOC_MALLOC 3
1961d06d6bSBaptiste Daroussin.Os
2061d06d6bSBaptiste Daroussin.Sh NAME
2161d06d6bSBaptiste Daroussin.Nm mandoc_malloc ,
2261d06d6bSBaptiste Daroussin.Nm mandoc_realloc ,
2361d06d6bSBaptiste Daroussin.Nm mandoc_reallocarray ,
2461d06d6bSBaptiste Daroussin.Nm mandoc_calloc ,
25*6d38604fSBaptiste Daroussin.Nm mandoc_recallocarray ,
2661d06d6bSBaptiste Daroussin.Nm mandoc_strdup ,
2761d06d6bSBaptiste Daroussin.Nm mandoc_strndup ,
2861d06d6bSBaptiste Daroussin.Nm mandoc_asprintf
2961d06d6bSBaptiste Daroussin.Nd memory allocation function wrappers used in the mandoc library
3061d06d6bSBaptiste Daroussin.Sh SYNOPSIS
3161d06d6bSBaptiste Daroussin.In sys/types.h
3261d06d6bSBaptiste Daroussin.In mandoc_aux.h
3361d06d6bSBaptiste Daroussin.Ft "void *"
3461d06d6bSBaptiste Daroussin.Fo mandoc_malloc
3561d06d6bSBaptiste Daroussin.Fa "size_t size"
3661d06d6bSBaptiste Daroussin.Fc
3761d06d6bSBaptiste Daroussin.Ft "void *"
3861d06d6bSBaptiste Daroussin.Fo mandoc_realloc
3961d06d6bSBaptiste Daroussin.Fa "void *ptr"
4061d06d6bSBaptiste Daroussin.Fa "size_t size"
4161d06d6bSBaptiste Daroussin.Fc
4261d06d6bSBaptiste Daroussin.Ft "void *"
4361d06d6bSBaptiste Daroussin.Fo mandoc_reallocarray
4461d06d6bSBaptiste Daroussin.Fa "void *ptr"
4561d06d6bSBaptiste Daroussin.Fa "size_t nmemb"
4661d06d6bSBaptiste Daroussin.Fa "size_t size"
4761d06d6bSBaptiste Daroussin.Fc
4861d06d6bSBaptiste Daroussin.Ft "void *"
4961d06d6bSBaptiste Daroussin.Fo mandoc_calloc
5061d06d6bSBaptiste Daroussin.Fa "size_t nmemb"
5161d06d6bSBaptiste Daroussin.Fa "size_t size"
5261d06d6bSBaptiste Daroussin.Fc
53*6d38604fSBaptiste Daroussin.Ft "void *"
54*6d38604fSBaptiste Daroussin.Fo mandoc_recallocarray
55*6d38604fSBaptiste Daroussin.Fa "void *ptr"
56*6d38604fSBaptiste Daroussin.Fa "size_t oldnmemb"
57*6d38604fSBaptiste Daroussin.Fa "size_t nmemb"
58*6d38604fSBaptiste Daroussin.Fa "size_t size"
59*6d38604fSBaptiste Daroussin.Fc
6061d06d6bSBaptiste Daroussin.Ft "char *"
6161d06d6bSBaptiste Daroussin.Fo mandoc_strdup
6261d06d6bSBaptiste Daroussin.Fa "const char *s"
6361d06d6bSBaptiste Daroussin.Fc
6461d06d6bSBaptiste Daroussin.Ft "char *"
6561d06d6bSBaptiste Daroussin.Fo mandoc_strndup
6661d06d6bSBaptiste Daroussin.Fa "const char *s"
6761d06d6bSBaptiste Daroussin.Fa "size_t maxlen"
6861d06d6bSBaptiste Daroussin.Fc
6961d06d6bSBaptiste Daroussin.Ft int
7061d06d6bSBaptiste Daroussin.Fo mandoc_asprintf
7161d06d6bSBaptiste Daroussin.Fa "char **ret"
7261d06d6bSBaptiste Daroussin.Fa "const char *format"
7361d06d6bSBaptiste Daroussin.Fa "..."
7461d06d6bSBaptiste Daroussin.Fc
7561d06d6bSBaptiste Daroussin.Sh DESCRIPTION
7661d06d6bSBaptiste DaroussinThese functions call the libc functions of the same names, passing
7761d06d6bSBaptiste Daroussinthrough their return values when successful.
7861d06d6bSBaptiste DaroussinIn case of failure, they do not return, but instead call
7961d06d6bSBaptiste Daroussin.Xr err 3 .
8061d06d6bSBaptiste DaroussinThey can be used both internally by any code in the mandoc libraries
8161d06d6bSBaptiste Daroussinand externally by programs using that library, for example
8261d06d6bSBaptiste Daroussin.Xr mandoc 1 ,
8361d06d6bSBaptiste Daroussin.Xr man 1 ,
8461d06d6bSBaptiste Daroussin.Xr apropos 1 ,
8561d06d6bSBaptiste Daroussin.Xr makewhatis 8 ,
8661d06d6bSBaptiste Daroussinand
8761d06d6bSBaptiste Daroussin.Xr man.cgi 8 .
8861d06d6bSBaptiste Daroussin.Pp
8961d06d6bSBaptiste DaroussinThe function
9061d06d6bSBaptiste Daroussin.Fn mandoc_malloc
9161d06d6bSBaptiste Daroussinallocates one new object, leaving the memory uninitialized.
9261d06d6bSBaptiste DaroussinThe functions
93*6d38604fSBaptiste Daroussin.Fn mandoc_realloc ,
94*6d38604fSBaptiste Daroussin.Fn mandoc_reallocarray ,
9561d06d6bSBaptiste Daroussinand
96*6d38604fSBaptiste Daroussin.Fn mandoc_recallocarray
9761d06d6bSBaptiste Daroussinchange the size of an existing object or array, possibly moving it.
9861d06d6bSBaptiste DaroussinWhen shrinking the size, existing data is truncated; when growing,
99*6d38604fSBaptiste Daroussinonly
100*6d38604fSBaptiste Daroussin.Fn mandoc_recallocarray
101*6d38604fSBaptiste Daroussininitializes the new elements to zero.
10261d06d6bSBaptiste DaroussinThe function
10361d06d6bSBaptiste Daroussin.Fn mandoc_calloc
10461d06d6bSBaptiste Daroussinallocates a new array, initializing it to zero.
10561d06d6bSBaptiste Daroussin.Pp
10661d06d6bSBaptiste DaroussinThe argument
10761d06d6bSBaptiste Daroussin.Fa size
10861d06d6bSBaptiste Daroussinis the size of each object.
10961d06d6bSBaptiste DaroussinThe argument
11061d06d6bSBaptiste Daroussin.Fa nmemb
11161d06d6bSBaptiste Daroussinis the new number of objects in the array.
11261d06d6bSBaptiste DaroussinThe argument
113*6d38604fSBaptiste Daroussin.Fa oldnmemb
114*6d38604fSBaptiste Daroussinis the number of objects in the array before the call.
115*6d38604fSBaptiste DaroussinThe argument
11661d06d6bSBaptiste Daroussin.Fa ptr
11761d06d6bSBaptiste Daroussinis a pointer to the existing object or array to be resized; if it is
11861d06d6bSBaptiste Daroussin.Dv NULL ,
11961d06d6bSBaptiste Daroussina new object or array is allocated.
12061d06d6bSBaptiste Daroussin.Pp
12161d06d6bSBaptiste DaroussinThe functions
12261d06d6bSBaptiste Daroussin.Fn mandoc_strdup
12361d06d6bSBaptiste Daroussinand
12461d06d6bSBaptiste Daroussin.Fn mandoc_strndup
12561d06d6bSBaptiste Daroussincopy a string into newly allocated memory.
12661d06d6bSBaptiste DaroussinFor
12761d06d6bSBaptiste Daroussin.Fn mandoc_strdup ,
12861d06d6bSBaptiste Daroussinthe string pointed to by
12961d06d6bSBaptiste Daroussin.Fa s
13061d06d6bSBaptiste Daroussinneeds to be NUL-terminated.
13161d06d6bSBaptiste DaroussinFor
13261d06d6bSBaptiste Daroussin.Fn mandoc_strndup ,
13361d06d6bSBaptiste Daroussinat most
13461d06d6bSBaptiste Daroussin.Fa maxlen
13561d06d6bSBaptiste Daroussinbytes are copied.
13661d06d6bSBaptiste DaroussinThe function
13761d06d6bSBaptiste Daroussin.Fn mandoc_asprintf
13861d06d6bSBaptiste Daroussinwrites output formatted according to
13961d06d6bSBaptiste Daroussin.Fa format
14061d06d6bSBaptiste Daroussininto newly allocated memory and returns a pointer to the result in
14161d06d6bSBaptiste Daroussin.Fa ret .
14261d06d6bSBaptiste DaroussinFor all three string functions, the result is always NUL-terminated.
14361d06d6bSBaptiste Daroussin.Pp
14461d06d6bSBaptiste DaroussinWhen the objects and strings are no longer needed,
14561d06d6bSBaptiste Daroussinthe pointers returned by these functions can be passed to
14661d06d6bSBaptiste Daroussin.Xr free 3 .
14761d06d6bSBaptiste Daroussin.Sh RETURN VALUES
14861d06d6bSBaptiste DaroussinThe function
14961d06d6bSBaptiste Daroussin.Fn mandoc_asprintf
15061d06d6bSBaptiste Daroussinalways returns the number of characters written, excluding the
15161d06d6bSBaptiste Daroussinfinal NUL byte.
15261d06d6bSBaptiste DaroussinIt never returns -1.
15361d06d6bSBaptiste Daroussin.Pp
15461d06d6bSBaptiste DaroussinThe other functions always return a valid pointer; they never return
15561d06d6bSBaptiste Daroussin.Dv NULL .
15661d06d6bSBaptiste Daroussin.Sh FILES
15761d06d6bSBaptiste DaroussinThese functions are implemented in
15861d06d6bSBaptiste Daroussin.Pa mandoc_aux.c .
15961d06d6bSBaptiste Daroussin.Sh SEE ALSO
16061d06d6bSBaptiste Daroussin.Xr asprintf 3 ,
16161d06d6bSBaptiste Daroussin.Xr err 3 ,
16261d06d6bSBaptiste Daroussin.Xr malloc 3 ,
16361d06d6bSBaptiste Daroussin.Xr strdup 3
16461d06d6bSBaptiste Daroussin.Sh STANDARDS
16561d06d6bSBaptiste DaroussinThe functions
16661d06d6bSBaptiste Daroussin.Fn malloc ,
16761d06d6bSBaptiste Daroussin.Fn realloc ,
16861d06d6bSBaptiste Daroussinand
16961d06d6bSBaptiste Daroussin.Fn calloc
17061d06d6bSBaptiste Daroussinare required by
17161d06d6bSBaptiste Daroussin.St -ansiC .
17261d06d6bSBaptiste DaroussinThe functions
17361d06d6bSBaptiste Daroussin.Fn strdup
17461d06d6bSBaptiste Daroussinand
17561d06d6bSBaptiste Daroussin.Fn strndup
17661d06d6bSBaptiste Daroussinare required by
17761d06d6bSBaptiste Daroussin.St -p1003.1-2008 .
17861d06d6bSBaptiste DaroussinThe function
17961d06d6bSBaptiste Daroussin.Fn asprintf
18061d06d6bSBaptiste Daroussinis a widespread extension that first appeared in the GNU C library.
18161d06d6bSBaptiste Daroussin.Pp
18261d06d6bSBaptiste DaroussinThe function
18361d06d6bSBaptiste Daroussin.Fn reallocarray
18461d06d6bSBaptiste Daroussinis an extension that first appeared in
185*6d38604fSBaptiste Daroussin.Ox 5.6 ,
186*6d38604fSBaptiste Daroussinand
187*6d38604fSBaptiste Daroussin.Fn recallocarray
188*6d38604fSBaptiste Daroussinin
189*6d38604fSBaptiste Daroussin.Ox 6.1 .
190*6d38604fSBaptiste DaroussinIf these two are not provided by the operating system,
191*6d38604fSBaptiste Daroussinthe mandoc build system uses bundled portable implementations.
19261d06d6bSBaptiste Daroussin.Sh HISTORY
19361d06d6bSBaptiste DaroussinThe functions
19461d06d6bSBaptiste Daroussin.Fn mandoc_malloc ,
19561d06d6bSBaptiste Daroussin.Fn mandoc_realloc ,
19661d06d6bSBaptiste Daroussin.Fn mandoc_calloc ,
19761d06d6bSBaptiste Daroussinand
19861d06d6bSBaptiste Daroussin.Fn mandoc_strdup
19961d06d6bSBaptiste Daroussinhave been available since mandoc 1.9.12,
20061d06d6bSBaptiste Daroussin.Fn mandoc_strndup
20161d06d6bSBaptiste Daroussinsince 1.11.5,
20261d06d6bSBaptiste Daroussin.Fn mandoc_asprintf
203*6d38604fSBaptiste Daroussinsince 1.12.4,
20461d06d6bSBaptiste Daroussin.Fn mandoc_reallocarray
205*6d38604fSBaptiste Daroussinsince 1.13.0, and
206*6d38604fSBaptiste Daroussin.Fn mandoc_recallocarray
207*6d38604fSBaptiste Daroussinsince 1.14.2.
20861d06d6bSBaptiste Daroussin.Sh AUTHORS
20961d06d6bSBaptiste Daroussin.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
21061d06d6bSBaptiste Daroussin.An Ingo Schwarze Aq Mt schwarze@openbsd.org
211