|
|
1.1 ! root 1: /* asprintf.c - sprintf with errno */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/compat/RCS/asprintf.c,v 7.1 90/02/19 13:07:10 mrose Exp $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/compat/RCS/asprintf.c,v 7.1 90/02/19 13:07:10 mrose Exp $ ! 9: * ! 10: * ! 11: * $Log: asprintf.c,v $ ! 12: * Revision 7.1 90/02/19 13:07:10 mrose ! 13: * update ! 14: * ! 15: * Revision 7.0 89/11/23 21:22:54 mrose ! 16: * Release 6.0 ! 17: * ! 18: */ ! 19: ! 20: /* ! 21: * NOTICE ! 22: * ! 23: * Acquisition, use, and distribution of this module and related ! 24: * materials are subject to the restrictions of a license agreement. ! 25: * Consult the Preface in the User's Manual for the full terms of ! 26: * this agreement. ! 27: * ! 28: */ ! 29: ! 30: ! 31: /* LINTLIBRARY */ ! 32: ! 33: #include <stdio.h> ! 34: #include <varargs.h> ! 35: #include "general.h" ! 36: #include "manifest.h" ! 37: ! 38: /* DATA */ ! 39: ! 40: extern int errno; ! 41: ! 42: /* */ ! 43: ! 44: void asprintf (bp, ap) /* what, fmt, args, ... */ ! 45: char *bp; ! 46: va_list ap; ! 47: { ! 48: char *what; ! 49: ! 50: what = va_arg (ap, char *); ! 51: ! 52: _asprintf (bp, what, ap); ! 53: } ! 54: ! 55: ! 56: void _asprintf (bp, what, ap) /* fmt, args, ... */ ! 57: register char *bp; ! 58: char *what; ! 59: va_list ap; ! 60: { ! 61: register int eindex; ! 62: char *fmt; ! 63: ! 64: eindex = errno; ! 65: ! 66: *bp = NULL; ! 67: fmt = va_arg (ap, char *); ! 68: ! 69: if (fmt) { ! 70: #ifndef VSPRINTF ! 71: struct _iobuf iob; ! 72: #endif ! 73: ! 74: #ifndef VSPRINTF ! 75: #ifdef pyr ! 76: bzero ((char *) &iob, sizeof iob); ! 77: iob._file = _NFILE; ! 78: #endif ! 79: iob._flag = _IOWRT | _IOSTRG; ! 80: #if !defined(vax) && !defined(pyr) ! 81: iob._ptr = (unsigned char *) bp; ! 82: #else ! 83: iob._ptr = bp; ! 84: #endif ! 85: iob._cnt = BUFSIZ; ! 86: _doprnt (fmt, ap, &iob); ! 87: putc (NULL, &iob); ! 88: #else ! 89: (void) vsprintf (bp, fmt, ap); ! 90: #endif ! 91: bp += strlen (bp); ! 92: ! 93: } ! 94: ! 95: if (what) { ! 96: if (*what) { ! 97: (void) sprintf (bp, " %s: ", what); ! 98: bp += strlen (bp); ! 99: } ! 100: (void) strcpy (bp, sys_errname (eindex)); ! 101: bp += strlen (bp); ! 102: } ! 103: ! 104: errno = eindex; ! 105: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.