home *** CD-ROM | disk | FTP | other *** search
- /* $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)) != NULL) { /* Xn */
- strcpy(mem, str);
- }
- return (mem);
- }
-