1 /* $NetBSD: util.c,v 1.2 2003/06/23 13:05:49 agc 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 #include <sys/cdefs.h> 42 43 #ifndef lint 44 __RCSID("$NetBSD: util.c,v 1.2 2003/06/23 13:05:49 agc Exp $"); 45 #endif 46 47 48 #include <stdio.h> 49 #include <stdlib.h> 50 #include <string.h> 51 #include <stdarg.h> 52 #include "defs.h" 53 54 /* Error routine */ 55 void 56 yyerror(const char *fmt, ...) 57 { 58 va_list args; 59 60 va_start (args, fmt); 61 printf ("%s:%d: ", src_name, line_no); 62 vfprintf (stdout, fmt, args); 63 printf ("\n"); 64 va_end (args); 65 had_errors = TRUE; 66 } 67 68 69 /* Buffer routines */ 70 static char *mc_buff = NULL; 71 static int mc_size = 0; 72 static int mc_loc = 0; 73 74 void buff_add_ch (char ch) 75 { 76 char *t; 77 78 if (mc_loc >= mc_size-1) { 79 if (mc_size == 0) 80 mc_size = 80; 81 else 82 mc_size *= 2; 83 t = (char *) malloc (mc_size); 84 if (t == NULL) { 85 (void) fprintf (stderr, "%s:%d: Malloc error\n", 86 src_name, line_no); 87 exit (1); 88 } 89 if (mc_buff != NULL) { 90 strcpy (t, mc_buff); 91 free (mc_buff); 92 } 93 mc_buff = t; 94 } 95 mc_buff[mc_loc++] = ch; 96 mc_buff[mc_loc] = '\0'; 97 } 98 99 /* get a copy of the string ! */ 100 101 char * 102 buff_copy (void) 103 { 104 char *res = strdup (mc_buff); 105 mc_loc = 0; 106 mc_buff[0] = '\0'; 107 return res; 108 } 109