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