X-Git-Url: https://git.distorted.org.uk/~mdw/become/blobdiff_plain/03f996bd8a0d6391518979cdab3dbe38cba0bf83..f60a34341fee6aafd5b878dce23b80af7c60064d:/src/utils.c diff --git a/src/utils.c b/src/utils.c deleted file mode 100644 index 7867411..0000000 --- a/src/utils.c +++ /dev/null @@ -1,327 +0,0 @@ -/* -*-c-*- - * - * $Id: utils.c,v 1.2 1997/08/04 10:24:26 mdw Exp $ - * - * Miscellaneous useful bits of code. - * - * (c) 1997 Mark Wooding - */ - -/*----- Licensing notice --------------------------------------------------* - * - * This file is part of `become' - * - * `Become' is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * `Become' is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with `become'; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/*----- Revision history --------------------------------------------------* - * - * $Log: utils.c,v $ - * Revision 1.2 1997/08/04 10:24:26 mdw - * Sources placed under CVS control. - * - * Revision 1.1 1997/07/21 13:47:42 mdw - * Initial revision - * - */ - -/*----- Header files ------------------------------------------------------*/ - -/* --- ANSI headers --- */ - -#include -#include -#include -#include -#include - -/* --- Local headers --- */ - -#include "config.h" -#include "utils.h" - -/*----- Program name handling ---------------------------------------------*/ - -/* --- Static data --- */ - -static const char *myname = 0; /* What's my name? */ - -/* --- @quis@ --- * - * - * Arguments: --- - * - * Returns: Pointer to the program name. - * - * Use: Returns the program name. - */ - -const char *quis(void) -{ - return (myname); -} - -/* --- @ego@ --- * - * - * Arguments: @const char *p@ = pointer to program name - * - * Returns: --- - * - * Use: Tells the utils library what the program's name is. - */ - -#ifndef PATHSEP -# if defined(__riscos) -# define PATHSEP '.' -# elif defined(__unix) || defined(unix) -# define PATHSEP '/' -# else -# define PATHSEP '\\' -# endif -#endif - -void ego(const char *p) -{ - const char *q = p; - while (*q) { - if (*q++ == PATHSEP) - p = q; - } - myname = p; -} - -/*----- Error reporting ---------------------------------------------------*/ - -/* --- @moan@ --- * - * - * Arguments: @const char *f@ = a @printf@-style format string - * @...@ = other arguments - * - * Returns: --- - * - * Use: Reports an error. - */ - -void moan(const char *f, ...) -{ - va_list ap; - va_start(ap, f); - fprintf(stderr, "%s: ", myname); - vfprintf(stderr, f, ap); - va_end(ap); - putc('\n', stderr); -} - -/* --- @die@ --- * - * - * Arguments: @const char *f@ = a @printf@-style format string - * @...@ = other arguments - * - * Returns: Never. - * - * Use: Reports an error and hari-kiris. Like @moan@ above, only - * more permanent. - */ - -void die(const char *f, ...) -{ - va_list ap; - va_start(ap, f); - fprintf(stderr, "%s: ", myname); - vfprintf(stderr, f, ap); - va_end(ap); - putc('\n', stderr); - exit(EXIT_FAILURE); -} - -/*----- Trace messages ----------------------------------------------------*/ - -#if defined(TRACING) || !defined(NDEBUG) - -/* --- Static data --- */ - -static FILE *tracefp = 0; /* Where does debugging go? */ -static unsigned int tracelvl = 0; /* How much tracing gets done? */ - -/* --- @trace@ --- * - * - * Arguments: @unsigned int lvl@ = trace level for output - * @const char *f@ = a @printf@-style format string - * @...@ = other arguments - * - * Returns: --- - * - * Use: Reports a message to the trace output. - */ - -void trace(unsigned int lvl, const char *f, ...) -{ - va_list ap; - if ((lvl & tracing()) == 0) - return; - va_start(ap, f); - fprintf(tracefp, "*** %s: ", myname); - vfprintf(tracefp, f, ap); - va_end(ap); - putc('\n', tracefp); -} - -/* --- @traceblk@ --- * - * - * Arguments: @unsigned int lvl@ = trace level for output - * @const char *hdr@ = some header string to write - * @const void *blk@ = pointer to a block of memory to dump - * @size_t sz@ = size of the block of memory - * - * Returns: --- - * - * Use: Dumps the contents of a block to the trace output. - */ - -void traceblk(unsigned int lvl, const char *hdr, const void *blk, size_t sz) -{ - const unsigned char *p = blk; - size_t i; - unsigned long o = 0; - size_t c; - - /* --- Skip if the trace level is too high --- */ - - if ((lvl & tracing()) == 0) - return; - - /* --- Now start work --- */ - - fprintf(tracefp, "*** %s: %s\n", myname, hdr); - - while (sz) { - fprintf(tracefp, "*** %s: %08lu : ", myname, o); - for (i = 0; i < 8; i++) { - if (i < sz) - fprintf(tracefp, "%02x ", p[i]); - else - fputs("** ", tracefp); - } - fputs(": ", tracefp); - for (i = 0; i < 8; i++) { - if (i < sz) - fputc(isprint(p[i]) ? p[i] : '.', tracefp); - else - fputc('*', tracefp); - } - fputc('\n', tracefp); - c = (sz >= 8) ? 8 : sz; - sz -= c, p += c, o += c; - } -} - - -/* --- @traceon@ --- * - * - * Arguments: @FILE *fp@ = a file to trace on - * @unsigned int lvl@ = trace level to set - * - * Returns: --- - * - * Use: Enables tracing to a file. - */ - -void traceon(FILE *fp, unsigned int lvl) -{ - tracefp = fp; - if (!tracelvl) - tracelvl = lvl; -} - -/* --- @tracesetlvl@ --- * - * - * Arguments: @unsigned int lvl@ = trace level to set - * - * Returns: --- - * - * Use: Sets the tracing level. - */ - -void tracesetlvl(unsigned int lvl) { tracelvl = lvl; } - -/* --- @tracing@ --- * - * - * Arguments: --- - * - * Returns: Zero if not tracing, tracing level if tracing. - * - * Use: Informs the caller whether tracing is enabled. - */ - -unsigned int tracing(void) { return (tracefp ? tracelvl : 0u); } - -#endif - -/*----- Memory management functions ---------------------------------------*/ - -/* --- @xmalloc@ --- * - * - * Arguments: @size_t sz@ = size of block to allocate - * - * Returns: Pointer to allocated block. - * - * Use: Allocates memory. If the memory isn't available, we don't - * hang aroung long enough for a normal function return. - */ - -void *xmalloc(size_t sz) -{ - void *p = malloc(sz); - if (!p) - die("not enough memory"); - return (p); -} - -/* --- @xstrdup@ --- * - * - * Arguments: @const char *s@ = pointer to a string - * - * Returns: Pointer to a copy of the string. - * - * Use: Copies a string (like @strdup@ would, if it existed). - */ - -char *xstrdup(const char *s) -{ - size_t sz = strlen(s) + 1; - char *p = xmalloc(sz); - memcpy(p, s, sz); - return (p); -} - -/* --- @xrealloc@ --- * - * - * Arguments: @void *p@ = pointer to a block of memory - * @size_t sz@ = new size desired for the block - * - * Returns: Pointer to the resized memory block (which is almost - * certainly not in the same place any more). - * - * Use: Resizes a memory block. - */ - -void *xrealloc(void *p, size_t sz) -{ - p = realloc(p, sz); - if (!p) - die("not enough memory"); - return (p); -} - -/*----- That's all, folks -------------------------------------------------*/