mirror of
https://github.com/samsonjs/csc360-a1-shell.git
synced 2026-03-25 08:45:52 +00:00
80 lines
1.4 KiB
C
80 lines
1.4 KiB
C
/*
|
|
* 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 <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#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);
|
|
}
|