diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/ape/cmd/pax/mem.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/ape/cmd/pax/mem.c')
-rwxr-xr-x | sys/src/ape/cmd/pax/mem.c | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/sys/src/ape/cmd/pax/mem.c b/sys/src/ape/cmd/pax/mem.c new file mode 100755 index 000000000..0eaca9042 --- /dev/null +++ b/sys/src/ape/cmd/pax/mem.c @@ -0,0 +1,138 @@ +/* $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; + + 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; + + if (mem = mem_get((uint) strlen(str) + 1)) { + strcpy(mem, str); + } + return (mem); +} |