/* * A simple shell with some basic features. * * Sami Samhuri 0327342 * January 31, 2006 * CSC 360, Assignment 1 * * utils.c * $Id: utils.c 184 2006-01-29 08:53:30Z sjs $ */ #include #include #include #include "utils.h" char *array_cat ( char **array ) { char *p = NULL, *str = NULL; int i, pos = 0; for (i = 0; array[i]; i++) { if (DEBUG) printf("DEBUG: array[%i]=%p:'%s'\n", i, array[i], array[i]); int len = strlen (array[i]); str = (char *)myxrealloc (str, pos + len + 1); p = str + pos; memcpy (p, array[i], len); p += len; *p++ = ' '; pos += len + 1; } *--p = '\0'; if (DEBUG) printf("DEBUG: str=%p\n", str); return str; } void free_array ( void **array ) { int i = 0; if (!array) return; while ( array[i] ) free (array[i++]); free (array); } void *myxmalloc ( size_t size ) { void *ptr = malloc (size); if (ptr) return ptr; printf(RED "Out of memory, bailing!\n" CLEAR); exit (EXIT_FAILURE); } void *myxrealloc( void *ptr, size_t size ) { void *new_ptr = realloc (ptr, size); if (new_ptr) return new_ptr; printf(RED "Out of memory, bailing!\n" CLEAR); exit (EXIT_FAILURE); } void **array_realloc ( void **array, size_t size ) { void **ptr = realloc (array, size * sizeof (void *)); if (ptr) return ptr; free_array (array); printf (RED "Out of memory, bailing!\n" CLEAR); exit (EXIT_FAILURE); }