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