1 /* 2 * Copyright 1987, 1988, 1989 by MIT Student Information Processing 3 * Board 4 * 5 * Permission to use, copy, modify, and distribute this software and 6 * its documentation for any purpose is hereby granted, provided that 7 * the names of M.I.T. and the M.I.T. S.I.P.B. not be used in 8 * advertising or publicity pertaining to distribution of the software 9 * without specific, written prior permission. M.I.T. and the 10 * M.I.T. S.I.P.B. make no representations about the suitability of 11 * this software for any purpose. It is provided "as is" without 12 * express or implied warranty. 13 */ 14 15 #include <stdio.h> 16 17 #include <com_err.h> 18 #include "ss_internal.h" 19 20 #include <stdarg.h> 21 22 char * ss_name(sci_idx) 23 int sci_idx; 24 { 25 register char *ret_val; 26 register ss_data *infop; 27 28 infop = ss_info(sci_idx); 29 if (infop->current_request == (char const *)NULL) { 30 ret_val = malloc((unsigned) 31 (strlen(infop->subsystem_name)+1) 32 * sizeof(char)); 33 if (ret_val == (char *)NULL) 34 return((char *)NULL); 35 strcpy(ret_val, infop->subsystem_name); 36 return(ret_val); 37 } 38 else { 39 register char *cp; 40 register char const *cp1; 41 ret_val = malloc((unsigned)sizeof(char) * 42 (strlen(infop->subsystem_name)+ 43 strlen(infop->current_request)+ 44 4)); 45 cp = ret_val; 46 cp1 = infop->subsystem_name; 47 while (*cp1) 48 *cp++ = *cp1++; 49 *cp++ = ' '; 50 *cp++ = '('; 51 cp1 = infop->current_request; 52 while (*cp1) 53 *cp++ = *cp1++; 54 *cp++ = ')'; 55 *cp = '\0'; 56 return(ret_val); 57 } 58 } 59 60 void ss_error (int sci_idx, long code, const char * fmt, ...) 61 { 62 register char *whoami; 63 va_list pvar; 64 65 va_start (pvar, fmt); 66 whoami = ss_name (sci_idx); 67 com_err_va (whoami, code, fmt, pvar); 68 free (whoami); 69 va_end(pvar); 70 } 71 72 void ss_perror (sci_idx, code, msg) /* for compatibility */ 73 int sci_idx; 74 long code; 75 char const *msg; 76 { 77 ss_error (sci_idx, code, "%s", msg); 78 } 79