xref: /titanic_41/usr/src/cmd/lp/lib/lp/Sys_malloc.c (revision d29b2c4438482eb00488be49a1f5d6835f455546)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 1993 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28 /*	  All Rights Reserved  	*/
29 
30 
31 #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.14	*/
32 /* LINTLIBRARY */
33 
34 #include "unistd.h"
35 #include "sys/types.h"
36 #include "sys/stat.h"
37 #include "errno.h"
38 #include "fcntl.h"
39 #include "stdlib.h"
40 #include "string.h"
41 
42 /**
43  ** _Malloc()
44  ** _Realloc()
45  ** _Calloc()
46  ** _Strdup()
47  ** _Free()
48  **/
49 
50 #if	!defined(TRACE_MALLOC)
51 
52 #if	defined(__STDC__)
53 void			(*lp_alloc_fail_handler)( void ) = 0;
54 #else
55 void			(*lp_alloc_fail_handler)() = 0;
56 #endif
57 
58 #if	defined(__STDC__)
59 typedef void *alloc_type;
60 #else
61 typedef char *alloc_type;
62 #endif
63 
64 alloc_type
65 #if	defined(__STDC__)
66 _Malloc (
67 	size_t			size,
68 	const char *		file,
69 	int			line
70 )
71 #else
72 _Malloc (size, file, line)
73 	size_t			size;
74 	char *			file;
75 	int			line;
76 #endif
77 {
78 	alloc_type		ret	= malloc(size);
79 
80 	if (!ret) {
81 		if (lp_alloc_fail_handler)
82 			(*lp_alloc_fail_handler)();
83 		errno = ENOMEM;
84 	}
85 	return (ret);
86 }
87 
88 alloc_type
89 #if	defined(__STDC__)
90 _Realloc (
91 	void *			ptr,
92 	size_t			size,
93 	const char *		file,
94 	int			line
95 )
96 #else
97 _Realloc (ptr, size, file, line)
98 	char *			ptr;
99 	size_t			size;
100 	char *			file;
101 	int			line;
102 #endif
103 {
104 	alloc_type		ret	= realloc(ptr, size);
105 
106 	if (!ret) {
107 		if (lp_alloc_fail_handler)
108 			(*lp_alloc_fail_handler)();
109 		errno = ENOMEM;
110 	}
111 	return (ret);
112 }
113 
114 alloc_type
115 #if	defined(__STDC__)
116 _Calloc (
117 	size_t			nelem,
118 	size_t			elsize,
119 	const char *		file,
120 	int			line
121 )
122 #else
123 _Calloc (nelem, elsize, file, line)
124 	size_t			nelem;
125 	size_t			elsize;
126 	char *			file;
127 	int			line;
128 #endif
129 {
130 	alloc_type		ret	= calloc(nelem, elsize);
131 
132 	if (!ret) {
133 		if (lp_alloc_fail_handler)
134 			(*lp_alloc_fail_handler)();
135 		errno = ENOMEM;
136 	}
137 	return (ret);
138 }
139 
140 char *
141 #if	defined(__STDC__)
142 _Strdup (
143 	const char *		s,
144 	const char *		file,
145 	int			line
146 )
147 #else
148 _Strdup (s, file, line)
149 	char *			s;
150 	char *			file;
151 	int			line;
152 #endif
153 {
154 	char *			ret;
155 
156 	if (!s)
157 		return( (char *) 0);
158 
159 	ret = strdup(s);
160 
161 	if (!ret) {
162 		if (lp_alloc_fail_handler)
163 			(*lp_alloc_fail_handler)();
164 		errno = ENOMEM;
165 	}
166 	return (ret);
167 }
168 
169 void
170 #if	defined(__STDC__)
171 _Free (
172 	void *			ptr,
173 	const char *		file,
174 	int			line
175 )
176 #else
177 _Free (ptr, file, line)
178 	char *			ptr;
179 	char *			file;
180 	int			line;
181 #endif
182 {
183 	free (ptr);
184 	return;
185 }
186 
187 #else
188 # include "mdl.c"
189 #endif
190