xref: /plan9/sys/src/ape/cmd/pax/mem.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1 /* $Source: /u/mark/src/pax/RCS/mem.c,v $
2  *
3  * $Revision: 1.2 $
4  *
5  * mem.c - memory allocation and manipulation functions
6  *
7  * DESCRIPTION
8  *
9  *	These routines are provided for higher level handling of the UNIX
10  *	memory allocation functions.
11  *
12  * AUTHOR
13  *
14  *     Mark H. Colburn, NAPS International (mark@jhereg.mn.org)
15  *
16  *
17  * Sponsored by The USENIX Association for public distribution.
18  *
19  * Copyright (c) 1989 Mark H. Colburn.
20  * All rights reserved.
21  *
22  * Redistribution and use in source and binary forms are permitted
23  * provided that the above copyright notice is duplicated in all such
24  * forms and that any documentation, advertising materials, and other
25  * materials related to such distribution and use acknowledge that the
26  * software was developed * by Mark H. Colburn and sponsored by The
27  * USENIX Association.
28  *
29  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
30  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
31  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
32  *
33  * $Log:	mem.c,v $
34  * Revision 1.2  89/02/12  10:04:53  mark
35  * 1.2 release fixes
36  *
37  * Revision 1.1  88/12/23  18:02:17  mark
38  * Initial revision
39  *
40  */
41 
42 #ifndef lint
43 static char *ident = "$Id: mem.c,v 1.2 89/02/12 10:04:53 mark Exp $";
44 static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
45 #endif /* ! lint */
46 
47 
48 /* Headers */
49 
50 #include "pax.h"
51 
52 
53 /* mem_get - allocate memory
54  *
55  * DESCRIPTION
56  *
57  *	Mem_get attempts to allocate a block of memory using the malloc
58  *	function call.  In the event that the memory is not available,
59  *	mem_get will display an "Out of memory" message for the user
60  *	the first time it encounters the an out of memory situation.
61  *	Subsequent calls to mem_get may fail, but no message will be
62  *	printed.
63  *
64  * PARAMETERS
65  *
66  *	uint len	- The amount of memory to allocate
67  *
68  * RETURNS
69  *
70  *	Normally returns the pointer to the newly allocated memory.  If
71  *	an error occurs, NULL is returned, and an error message is
72  *	printed.
73  *
74  * ERRORS
75  *
76  *	ENOMEM	No memory is available
77  */
78 
79 #ifdef __STDC__
80 
mem_get(uint len)81 char *mem_get(uint len)
82 
83 #else
84 
85 char *mem_get(len)
86 uint            len;		/* amount of memory to get */
87 
88 #endif
89 {
90     char           *mem;
91     static short    outofmem = 0;
92 
93     if ((mem = (char *)malloc(len)) == (char *)NULL && !outofmem) {
94 	outofmem++;
95 	warn("mem_get()", "Out of memory");
96     }
97     return (mem);
98 }
99 
100 
101 /* mem_str - duplicate a string into dynamic memory
102  *
103  * DESCRIPTION
104  *
105  *	Mem_str attempts to make a copy of string.  It allocates space for
106  *	the string, and if the allocation was successfull, copies the old
107  *	string into the newly allocated space.
108  *
109  * PARAMETERS
110  *
111  *	char *str 	- string to make a copy of
112  *
113  * RETURNS
114  *
115  *	Normally returns a pointer to a new string at least as large
116  *	as strlen(str) + 1, which contains a copy of the the data
117  *	passed in str, plus a null terminator.  Returns (char *)NULL
118  *	if enough memory to make a copy of str is not available.
119  */
120 
121 #ifdef __STDC__
122 
mem_str(char * str)123 char *mem_str(char *str)
124 
125 #else
126 
127 char *mem_str(str)
128 char           *str;		/* string to make a copy of */
129 
130 #endif
131 {
132     char           *mem;
133 
134     if (mem = mem_get((uint) strlen(str) + 1)) {
135 	strcpy(mem, str);
136     }
137     return (mem);
138 }
139