|
|
1.1 root 1: /* $Source: /src386/usr/bin/pax/mem.c,v $
2: *
3: * $Revision: 1.1 $
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 ([email protected])
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.1 92/08/28 08:02:18 bin
35: * Initial revision
36: *
37: * Revision 1.1 89/02/14 16:48:01 jep
38: * Initial revision
39: *
40: * Revision 1.1 88/12/23 18:02:17 mark
41: * Initial revision
42: *
43: */
44:
45: #ifndef lint
46: static char *ident = "$Id: mem.c,v 1.1 92/08/28 08:02:18 bin Exp Locker: bin $";
47: static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
48: #endif /* ! lint */
49:
50:
51: /* Headers */
52:
53: #include "pax.h"
54:
55:
56: /* mem_get - allocate memory
57: *
58: * DESCRIPTION
59: *
60: * Mem_get attempts to allocate a block of memory using the malloc
61: * function call. In the event that the memory is not available,
62: * mem_get will display an "Out of memory" message for the user
63: * the first time it encounters the an out of memory situation.
64: * Subsequent calls to mem_get may fail, but no message will be
65: * printed.
66: *
67: * PARAMETERS
68: *
69: * uint len - The amount of memory to allocate
70: *
71: * RETURNS
72: *
73: * Normally returns the pointer to the newly allocated memory. If
74: * an error occurs, NULL is returned, and an error message is
75: * printed.
76: *
77: * ERRORS
78: *
79: * ENOMEM No memory is available
80: */
81:
82: #if __STDC__
83:
84: char *mem_get(uint len)
85:
86: #else
87:
88: char *mem_get(len)
89: uint len; /* amount of memory to get */
90:
91: #endif
92: {
93: char *mem;
94: static short outofmem = 0;
95:
96: if ((mem = (char *)malloc(len)) == (char *)NULL && !outofmem) {
97: outofmem++;
98: warn("mem_get()", "Out of memory");
99: }
100: return (mem);
101: }
102:
103:
104: /* mem_str - duplicate a string into dynamic memory
105: *
106: * DESCRIPTION
107: *
108: * Mem_str attempts to make a copy of string. It allocates space for
109: * the string, and if the allocation was successfull, copies the old
110: * string into the newly allocated space.
111: *
112: * PARAMETERS
113: *
114: * char *str - string to make a copy of
115: *
116: * RETURNS
117: *
118: * Normally returns a pointer to a new string at least as large
119: * as strlen(str) + 1, which contains a copy of the the data
120: * passed in str, plus a null terminator. Returns (char *)NULL
121: * if enough memory to make a copy of str is not available.
122: */
123:
124: #if __STDC__
125:
126: char *mem_str(char *str)
127:
128: #else
129:
130: char *mem_str(str)
131: char *str; /* string to make a copy of */
132:
133: #endif
134: {
135: char *mem;
136:
137: if (mem = mem_get((uint) strlen(str) + 1)) {
138: strcpy(mem, str);
139: }
140: return (mem);
141: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.