home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 May / W2KPRK.iso / apps / posix / source / PAX / MEM.C < prev    next >
Encoding:
C/C++ Source or Header  |  1999-11-17  |  3.5 KB  |  145 lines

  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. #ifdef DF_TRACE_DEBUG
  94. printf("DF_TRACE_DEBUG: char *mem_get() in mem.c\n");
  95. #endif
  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. #ifdef __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. #ifdef DF_TRACE_DEBUG
  138. printf("DF_TRACE_DEBUG: char *mem_str() in mem.c\n");
  139. #endif
  140.     if ((mem = mem_get((uint) strlen(str) + 1)) != NULL) {  /* Xn */
  141.     strcpy(mem, str);
  142.     }
  143.     return (mem);
  144. }
  145.