1 /* $NetBSD: util.c,v 1.4 2004/06/20 22:20:16 jmc Exp $ */ 2 3 /* 4 * Copyright 1997 Piermont Information Systems Inc. 5 * All rights reserved. 6 * 7 * Written by Philip A. Nelson for Piermont Information Systems Inc. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. All advertising materials mentioning features or use of this software 18 * must display the following acknowledgement: 19 * This product includes software develooped for the NetBSD Project by 20 * Piermont Information Systems Inc. 21 * 4. The name of Piermont Information Systems Inc. may not be used to endorse 22 * or promote products derived from this software without specific prior 23 * written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS'' 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28 * ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE 29 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 35 * THE POSSIBILITY OF SUCH DAMAGE. 36 * 37 */ 38 39 /* util.c - utility routines. */ 40 41 #if HAVE_NBTOOL_CONFIG_H 42 #include "nbtool_config.h" 43 #endif 44 45 #include <sys/cdefs.h> 46 47 #if defined(__RCSID) && !defined(lint) 48 __RCSID("$NetBSD: util.c,v 1.4 2004/06/20 22:20:16 jmc Exp $"); 49 #endif 50 51 52 #include <stdio.h> 53 #include <stdlib.h> 54 #include <string.h> 55 #include <stdarg.h> 56 #include "defs.h" 57 58 /* Error routine */ 59 void 60 yyerror(const char *fmt, ...) 61 { 62 va_list args; 63 64 va_start (args, fmt); 65 printf ("%s:%d: ", src_name, line_no); 66 vfprintf (stdout, fmt, args); 67 printf ("\n"); 68 va_end (args); 69 had_errors = TRUE; 70 } 71 72 73 /* Buffer routines */ 74 static char *mc_buff = NULL; 75 static int mc_size = 0; 76 static int mc_loc = 0; 77 78 void buff_add_ch (char ch) 79 { 80 char *t; 81 82 if (mc_loc >= mc_size-1) { 83 if (mc_size == 0) 84 mc_size = 80; 85 else 86 mc_size *= 2; 87 t = (char *) malloc (mc_size); 88 if (t == NULL) { 89 (void) fprintf (stderr, "%s:%d: Malloc error\n", 90 src_name, line_no); 91 exit (1); 92 } 93 if (mc_buff != NULL) { 94 strcpy (t, mc_buff); 95 free (mc_buff); 96 } 97 mc_buff = t; 98 } 99 mc_buff[mc_loc++] = ch; 100 mc_buff[mc_loc] = '\0'; 101 } 102 103 /* get a copy of the string ! */ 104 105 char * 106 buff_copy (void) 107 { 108 char *res = strdup (mc_buff); 109 mc_loc = 0; 110 mc_buff[0] = '\0'; 111 return res; 112 } 113