Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
 
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
 
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
}