/* * util: utility functions */ #include #include "glob.h" int mmcount=0; /* * no_more_core() complains about not having memory */ no_more_core() { fprintf(stderr, "tsh: out of memory\n"); } /* no_more_core */ /* * xstrdup() allocates memory or dies a horrible death */ char * xstrdup(item) char *item; { register char *tmp; ++mmcount; if (tmp=strdup(item)) return tmp; no_more_core(); exit(0); } /* * mmalloc() allocates memory, keeping track in an accumulator */ char * mmalloc(size) { extern char *malloc(); register char *tmp; if (tmp = malloc(size)) mmcount++; return tmp; } /* * mrealloc() reallocates memory */ char * mrealloc(ptr, size) char *ptr; { extern char *realloc(); if (ptr == (char*)0) return mmalloc(size); return realloc(ptr, size); } /* * mfree() frees memory */ mfree(ptr) char *ptr; { register st = free(ptr); mmcount--; return st; } /* mfree */ /* * basename() returns the filename part of a pathname */ char * basename(s) register char *s; { register char *p = s; for (p = s+strlen(s); p > s; --p) if (p[-1] == '/' || p[-1] == '\\' || p[-1] == ':') return p; return s; } /* basename */ /* * mapslash() converts all backslashes to forward slashes */ mapslash(s) register char *s; { for (; *s; ++s) if (*s == '\\') *s = '/'; } /* mapslash */