windows-nt/Source/XPSP1/NT/base/subsys/posix/programs/pax/mem.c
2020-09-26 16:20:57 +08:00

145 lines
3.4 KiB
C

/* $Source: /u/mark/src/pax/RCS/mem.c,v $
*
* $Revision: 1.2 $
*
* mem.c - memory allocation and manipulation functions
*
* DESCRIPTION
*
* These routines are provided for higher level handling of the UNIX
* memory allocation functions.
*
* AUTHOR
*
* Mark H. Colburn, NAPS International (mark@jhereg.mn.org)
*
*
* Sponsored by The USENIX Association for public distribution.
*
* Copyright (c) 1989 Mark H. Colburn.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice is duplicated in all such
* forms and that any documentation, advertising materials, and other
* materials related to such distribution and use acknowledge that the
* software was developed * by Mark H. Colburn and sponsored by The
* USENIX Association.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: mem.c,v $
* Revision 1.2 89/02/12 10:04:53 mark
* 1.2 release fixes
*
* Revision 1.1 88/12/23 18:02:17 mark
* Initial revision
*
*/
#ifndef lint
static char *ident = "$Id: mem.c,v 1.2 89/02/12 10:04:53 mark Exp $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
/* Headers */
#include "pax.h"
/* mem_get - allocate memory
*
* DESCRIPTION
*
* Mem_get attempts to allocate a block of memory using the malloc
* function call. In the event that the memory is not available,
* mem_get will display an "Out of memory" message for the user
* the first time it encounters the an out of memory situation.
* Subsequent calls to mem_get may fail, but no message will be
* printed.
*
* PARAMETERS
*
* uint len - The amount of memory to allocate
*
* RETURNS
*
* Normally returns the pointer to the newly allocated memory. If
* an error occurs, NULL is returned, and an error message is
* printed.
*
* ERRORS
*
* ENOMEM No memory is available
*/
#ifdef __STDC__
char *mem_get(uint len)
#else
char *mem_get(len)
uint len; /* amount of memory to get */
#endif
{
char *mem;
static short outofmem = 0;
#ifdef DF_TRACE_DEBUG
printf("DF_TRACE_DEBUG: char *mem_get() in mem.c\n");
#endif
if ((mem = (char *)malloc(len)) == (char *)NULL && !outofmem) {
outofmem++;
warn("mem_get()", "Out of memory");
}
return (mem);
}
/* mem_str - duplicate a string into dynamic memory
*
* DESCRIPTION
*
* Mem_str attempts to make a copy of string. It allocates space for
* the string, and if the allocation was successfull, copies the old
* string into the newly allocated space.
*
* PARAMETERS
*
* char *str - string to make a copy of
*
* RETURNS
*
* Normally returns a pointer to a new string at least as large
* as strlen(str) + 1, which contains a copy of the the data
* passed in str, plus a null terminator. Returns (char *)NULL
* if enough memory to make a copy of str is not available.
*/
#ifdef __STDC__
char *mem_str(char *str)
#else
char *mem_str(str)
char *str; /* string to make a copy of */
#endif
{
char *mem;
#ifdef DF_TRACE_DEBUG
printf("DF_TRACE_DEBUG: char *mem_str() in mem.c\n");
#endif
if (mem = mem_get((uint) strlen(str) + 1)) {
strcpy(mem, str);
}
return (mem);
}