From 9f1a1248e6ff7438e06c09b18e38be949ed4cf32 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Tue, 28 Mar 2023 10:03:50 +0800 Subject: [PATCH] Remove snpf.c Upstream-commit: 9f1a1248e6ff7438e06c09b18e38be949ed4cf32 Cherry-picked-by: Lukáš Zaoral --- 00PORTING | 4 - lib/proto.h | 4 - lib/snpf.c | 715 ------------------------------- 3 files changed, 723 deletions(-) delete mode 100644 lib/snpf.c diff --git a/00PORTING b/00PORTING index 43dacafa..4fa5fb9d 100644 --- a/00PORTING +++ b/00PORTING @@ -444,10 +444,6 @@ to be compiled and archived to liblsof.a. NCACHE_VP, X_NCACHE, and X_NCSIZE, customize them. - snpf.c Source for the snprintf() family of functions - - USE_LIB_SNPF selects it. - The comments and the source code in these library files give more information on customization. diff --git a/proto.h b/proto.h index 4c15d6ff..37e2abb4 100644 --- a/proto.h +++ b/proto.h @@ -327,8 +327,4 @@ _PROTOTYPE(extern int readtnode, (KA_T ta, struct tmpnode *t)); _PROTOTYPE(extern int readvnode,(KA_T va, struct vnode *v)); # endif /* defined(HASVNODE) */ -# if defined(USE_LIB_SNPF) -_PROTOTYPE(extern int snpf,(char *str, int len, char *fmt, ...)); -# endif /* defined(USE_LIB_SNPF) */ - # endif /* !defined(PROTO_H) */ diff --git a/lib/snpf.c b/lib/snpf.c deleted file mode 100644 index 93c0292b..00000000 --- a/lib/snpf.c +++ /dev/null @@ -1,749 +0,0 @@ -/* - * snpf.c -- snprintf() empulation functions for lsof library - * - * V. Abell - * Purdue University Computing Center - */ - -/* - * Copyright 2000 Purdue Research Foundation, West Lafayette, Indiana - * 47907. All rights reserved. - * - * Written by Victor A. Abell - * - * This software is not subject to any license of the American Telephone - * and Telegraph Company or the Regents of the University of California. - * - * This software has been adapted from snprintf.c in sendmail 8.9.3. It - * is subject to the sendmail copyright statements listed below, and the - * sendmail licensing terms stated in the sendmail LICENSE file comment - * section of this file. - * - * Permission is granted to anyone to use this software for any purpose on - * any computer system, and to alter it and redistribute it freely, subject - * to the following restrictions: - * - * 1. Neither the authors nor Purdue University are responsible for any - * consequences of the use of this software. - * - * 2. The origin of this software must not be misrepresented, either by - * explicit claim or by omission. Credit to the authors and Purdue - * University must appear in documentation and sources. - * - * 3. Altered versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 4. This notice may not be removed or altered. - */ - -#include "../machine.h" - -#ifdef USE_LIB_SNPF - -/* - * Sendmail copyright statements: - * - * Copyright (c) 1998 Sendmail, Inc. All rights reserved. - * Copyright (c) 1997 Eric P. Allman. All rights reserved. - * Copyright (c) 1988, 1993 - * The Regents of the University of California. All rights reserved. - * - * By using this file, you agree to the terms and conditions set - * forth in the LICENSE file which can be found at the top level of - * the sendmail distribution. - * - * The LICENSE file may be found in the following comment section. - */ - - -/* - * Begin endmail LICENSE file. - - SENDMAIL LICENSE - -The following license terms and conditions apply, unless a different -license is obtained from Sendmail, Inc., 1401 Park Avenue, Emeryville, CA -94608, or by electronic mail at license@sendmail.com. - -License Terms: - -Use, Modification and Redistribution (including distribution of any -modified or derived work) in source and binary forms is permitted only if -each of the following conditions is met: - -1. Redistributions qualify as "freeware" or "Open Source Software" under - one of the following terms: - - (a) Redistributions are made at no charge beyond the reasonable cost of - materials and delivery. - - (b) Redistributions are accompanied by a copy of the Source Code or by an - irrevocable offer to provide a copy of the Source Code for up to three - years at the cost of materials and delivery. Such redistributions - must allow further use, modification, and redistribution of the Source - Code under substantially the same terms as this license. For the - purposes of redistribution "Source Code" means the complete source - code of sendmail including all modifications. - - Other forms of redistribution are allowed only under a separate royalty- - free agreement permitting such redistribution subject to standard - commercial terms and conditions. A copy of such agreement may be - obtained from Sendmail, Inc. at the above address. - -2. Redistributions of source code must retain the copyright notices as they - appear in each source code file, these license terms, and the - disclaimer/limitation of liability set forth as paragraph 6 below. - -3. Redistributions in binary form must reproduce the Copyright Notice, - these license terms, and the disclaimer/limitation of liability set - forth as paragraph 6 below, in the documentation and/or other materials - provided with the distribution. For the purposes of binary distribution - the "Copyright Notice" refers to the following language: - "Copyright (c) 1998 Sendmail, Inc. All rights reserved." - -4. Neither the name of Sendmail, Inc. nor the University of California nor - the names of their contributors may be used to endorse or promote - products derived from this software without specific prior written - permission. The name "sendmail" is a trademark of Sendmail, Inc. - -5. All redistributions must comply with the conditions imposed by the - University of California on certain embedded code, whose copyright - notice and conditions for redistribution are as follows: - - (a) Copyright (c) 1988, 1993 The Regents of the University of - California. All rights reserved. - - (b) Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - (i) Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - (ii) Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - (iii) All advertising materials mentioning features or use of this - software must display the following acknowledgement: "This - product includes software developed by the University of - California, Berkeley and its contributors." - - (iv) Neither the name of the University nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -6. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY - SENDMAIL, INC. AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - NO EVENT SHALL SENDMAIL, INC., THE REGENTS OF THE UNIVERSITY OF - CALIFORNIA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -(Version 8.6, last updated 6/24/1998) - - * End endmail LICENSE file. - */ - - -/* - * If "ll" format support is not possible -- e.g., the long long type isn't - * supported -- define HAS_NO_LONG_LONG. - */ - -# ifndef lint -static char copyright[] = -"@(#) Copyright 2000 Purdue Research Foundation.\nAll rights reserved.\n"; -# endif /* !defined(lint) */ - -#include - -#if defined(__STDC__) -#define _PROTOTYPE(function, params) function params -#else /* !defined(__STDC__) */ -#define _PROTOTYPE(function, params) function() -#endif /* defined(__STDC__) */ - - -/* -** SNPRINTF, VSNPRINT -- counted versions of printf -** -** These versions have been grabbed off the net. They have been -** cleaned up to compile properly and support for .precision and -** %lx has been added. -*/ - -/************************************************************** - * Original: - * Patrick Powell Tue Apr 11 09:48:21 PDT 1995 - * A bombproof version of doprnt (dopr) included. - * Sigh. This sort of thing is always nasty do deal with. Note that - * the version here does not include floating point... - * - * snprintf() is used instead of sprintf() as it does limit checks - * for string length. This covers a nasty loophole. - * - * The other functions are there to prevent NULL pointers from - * causing nast effects. - **************************************************************/ - -/*static char _id[] = "$Id: snpf.c,v 1.5 2008/10/21 16:13:23 abe Exp $";*/ - - -/* - * Local function prototypes - */ - -_PROTOTYPE(static void dopr,(char *bp, char *ep, char *fmt, va_list args)); -_PROTOTYPE(static void dopr_outch,(char **bp, char *ep, int c)); -_PROTOTYPE(static void dostr,(char **bp, char *ep, char *str, int)); - -# if !defined(HAS_NO_LONG_LONG) -_PROTOTYPE(static void fmtllnum,(char **bp, char *ep, long long value, - int base, int dosign, int ljust, int len, - int zpad)); -# endif /* !defined(HAS_NO_LONG_LONG) */ - -_PROTOTYPE(static void fmtnum,(char **bp, char *ep, long value, int base, - int dosign, int ljust, int len, int zpad)); -_PROTOTYPE(static void fmtstr,(char **bp, char *ep, char *value, int ljust, - int len, int zpad, - int maxwidth)); - - -/* - * Local variables - */ - -static int Length; - - -/* - * snpf() -- count-controlled sprintf() - */ - -int -snpf(va_alist) - va_dcl /* requires at least three arguments: - * bp = receiving buffer pointer - * ct = length of buffer - * fmt = format string - */ -{ - va_list args; - char *bp, *fmt; - int ct, len; - - va_start(args); - bp = va_arg(args, char *); - ct = va_arg(args, int); - fmt = va_arg(args, char *); - len = vsnpf(bp, ct, fmt, args); - va_end(args); - return(len); -} - - -/* - * vsnpf() -- count-controlled vsprintf() - */ - -int -vsnpf(str, count, fmt, args) - char *str; /* result buffer */ - int count; /* size of buffer */ - char *fmt; /* format */ - va_list args; /* variable length argument list */ -{ - char *ep = str + count - 1; - - *str = '\0'; - (void) dopr(str, ep, fmt, args); - if (count > 0) - *ep = '\0'; - return(Length); -} - - -/* - * dopr() -- poor man's version of doprintf - */ - - -static void -dopr(bp, ep, fmt, args) - char *bp; /* buffer start */ - char *ep; /* buffer end (start + length - 1) */ - char *fmt; /* format */ - va_list args; /* variable length argument list */ -{ - int ch; - char ebuf[64]; - int ebufl = (int)(sizeof(ebuf) - 1); - long value; - int longflag = 0; - int longlongflag = 0; - int pointflag = 0; - int maxwidth = 0; - char *strvalue; - int ljust; - int len; - int zpad; - int zxflag = 0; - -# if !defined(HAS_NO_LONG_LONG) - long long llvalue; -# endif /* !defined(HAS_NO_LONG_LONG) */ - - Length = 0; - while((ch = *fmt++)) { - switch (ch) { - case '%': - ljust = len = zpad = zxflag = maxwidth = 0; - longflag = longlongflag = pointflag = 0; - -nextch: - - ch = *fmt++; - switch (ch) { - case '\0': - dostr(&bp, ep, "**end of format**" , 0); - return; - case '-': - ljust = 1; - goto nextch; - case '0': /* set zero padding if len not set */ - if ((len == 0) && !pointflag) - zpad = '0'; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (pointflag) - maxwidth = (maxwidth * 10) + (int)(ch - '0'); - else - len = (len * 10) + (int)(ch - '0'); - goto nextch; - case '*': - if (pointflag) - maxwidth = va_arg(args, int); - else - len = va_arg(args, int); - goto nextch; - case '#': - zxflag = 1; - goto nextch; - case '.': - pointflag = 1; - goto nextch; - case 'l': - if (longflag) { - longflag = 0; - longlongflag = 1; - goto nextch; - } - longflag = 1; - goto nextch; - case 'u': - case 'U': - if (longlongflag) { - -# if !defined(HAS_NO_LONG_LONG) - llvalue = va_arg(args, long long); - (void) fmtllnum(&bp,ep,llvalue,10,0,ljust,len,zpad); -# else /* defined(HAS_NO_LONG_LONG) */ - (void) strncpy(ebuf, "ll is unsupported", ebufl); - ebuf[(int)ebufl] = '\0'; - (void) dostr(&bp, ep, ebuf, 0); -# endif /* !defined(HAS_NO_LONG_LONG) */ - - break; - } - if (longflag) - value = va_arg(args, long); - else - value = va_arg(args, int); - (void) fmtnum(&bp, ep, value, 10,0, ljust, len, zpad); - break; - case 'o': - case 'O': - if (longlongflag) { - -# if !defined(HAS_NO_LONG_LONG) - llvalue = va_arg(args, long long); - (void) fmtllnum(&bp,ep,llvalue,8,0,ljust,len,zpad); -# else /* defined(HAS_NO_LONG_LONG) */ - (void) strncpy(ebuf, "ll is unsupported", ebufl); - ebuf[(int)ebufl] = '\0'; - (void) dostr(&bp, ep, ebuf, 0); -# endif /* !defined(HAS_NO_LONG_LONG) */ - - break; - } - if (longflag) - value = va_arg(args, long); - else - value = va_arg(args, int); - (void) fmtnum(&bp, ep, value, 8,0, ljust, len, zpad); - break; - case 'd': - case 'D': - if (longlongflag) { - -# if !defined(HAS_NO_LONG_LONG) - llvalue = va_arg(args, long long); - (void) fmtllnum(&bp,ep,llvalue,10,1,ljust,len,zpad); -# else /* defined(HAS_NO_LONG_LONG) */ - (void) strncpy(ebuf, "ll is unsupported", ebufl); - ebuf[(int)ebufl] = '\0'; - (void) dostr(&bp, ep, ebuf, 0); -# endif /* !defined(HAS_NO_LONG_LONG) */ - - break; - } - if (longflag) - value = va_arg(args, long); - else - value = va_arg(args, int); - (void) fmtnum(&bp, ep, value, 10,1, ljust, len, zpad); - break; - case 'x': - if (longlongflag) { - -# if !defined(HAS_NO_LONG_LONG) - llvalue = va_arg(args, long long); - if (zxflag && llvalue) { - (void) dostr(&bp, ep, "0x", 0); - if (len >= 2) - len -= 2; - } - (void) fmtllnum(&bp,ep,llvalue,16,0,ljust,len,zpad); -# else /* defined(HAS_NO_LONG_LONG) */ - (void) strncpy(ebuf, "ll is unsupported", ebufl); - ebuf[(int)ebufl] = '\0'; - (void) dostr(&bp, ep, ebuf, 0); -# endif /* !defined(HAS_NO_LONG_LONG) */ - - break; - } - if (longflag) - value = va_arg(args, long); - else - value = va_arg(args, int); - if (zxflag && value) { - (void) dostr(&bp, ep, "0x", 0); - if (len >= 2) - len -= 2; - } - (void) fmtnum(&bp, ep, value, 16,0, ljust, len, zpad); - break; - case 'X': - if (longlongflag) { - -# if !defined(HAS_NO_LONG_LONG) - llvalue = va_arg(args, long long); - if (zxflag && llvalue) { - (void) dostr(&bp, ep, "0x", 0); - if (len >= 2) - len -= 2; - } - (void) fmtllnum(&bp,ep,llvalue,-16,0,ljust,len,zpad); -# else /* defined(HAS_NO_LONG_LONG) */ - (void) strncpy(ebuf, "ll is unsupported", ebufl); - ebuf[(int)ebufl] = '\0'; - (void) dostr(&bp, ep, ebuf, 0); -# endif /* !defined(HAS_NO_LONG_LONG) */ - - break; - } - if (longflag) - value = va_arg(args, long); - else - value = va_arg(args, int); - if (zxflag && value) { - (void) dostr(&bp, ep, "0x", 0); - if (len >= 2) - len -= 2; - } - (void) fmtnum(&bp, ep, value,-16,0, ljust, len, zpad); - break; - case 's': - strvalue = va_arg(args, char *); - if (maxwidth > 0 || !pointflag) { - if (pointflag && len > maxwidth) - len = maxwidth; /* Adjust padding */ - (void) fmtstr(&bp, ep, strvalue, ljust, len, zpad, - maxwidth); - } - break; - case 'c': - ch = va_arg(args, int); - dopr_outch(&bp, ep, ch); - break; - case '%': - (void) dopr_outch(&bp, ep, ch); - continue; - default: - ebuf[0] = ch; - (void) strncpy(&ebuf[1], " is unsupported", ebufl); - ebuf[(int)ebufl] = '\0'; - (void) dostr(&bp, ep, ebuf, 0); - } - break; - default: - (void) dopr_outch(&bp, ep, ch); - break; - } - } - *bp = '\0'; -} - - -# if !defined(HAS_NO_LONG_LONG) -/* - * fmtllnum() -- format long long number for output - */ - -static void -fmtllnum(bp, ep, value, base, dosign, ljust, len, zpad) - char **bp; /* current buffer pointer */ - char *ep; /* end of buffer (-1) */ - long long value; /* number to format */ - int base; /* number base */ - int dosign; /* sign request */ - int ljust; /* left justfication request */ - int len; /* length request */ - int zpad; /* zero padding request */ -{ - int signvalue = 0; - unsigned long long uvalue; - char convert[20]; - int place = 0; - int padlen = 0; /* amount to pad */ - int caps = 0; - - uvalue = value; - if (dosign) { - if (value < 0) { - signvalue = '-'; - uvalue = -value; - } - } - if (base < 0) { - caps = 1; - base = -base; - } - do { - convert[place++] = - (caps ? "0123456789ABCDEF" : "0123456789abcdef") - [uvalue % (unsigned)base]; - uvalue = (uvalue / (unsigned)base); - } while (uvalue && (place < (int)(sizeof(convert) - 1))); - convert[place] = 0; - padlen = len - place; - if (padlen < 0) - padlen = 0; - if (ljust) - padlen = -padlen; - if (zpad && padlen > 0) { - if (signvalue) { - (void) dopr_outch(bp, ep, signvalue); - --padlen; - signvalue = 0; - } - while (padlen > 0) { - (void) dopr_outch(bp, ep, zpad); - --padlen; - } - } - while (padlen > 0) { - (void) dopr_outch(bp, ep, ' '); - --padlen; - } - if (signvalue) - (void) dopr_outch(bp, ep, signvalue); - while (place > 0) - (void) dopr_outch(bp, ep, convert[--place]); - while (padlen < 0) { - (void) dopr_outch(bp, ep, ' '); - ++padlen; - } -} -# endif /* !defined(HAS_NO_LONG_LONG) */ - - -/* - * fmtnum() -- format number for output - */ - -static void -fmtnum(bp, ep, value, base, dosign, ljust, len, zpad) - char **bp; /* current buffer pointer */ - char *ep; /* end of buffer (-1) */ - long value; /* number to format */ - int base; /* number base */ - int dosign; /* sign request */ - int ljust; /* left justfication request */ - int len; /* length request */ - int zpad; /* zero padding request */ -{ - int signvalue = 0; - unsigned long uvalue; - char convert[20]; - int place = 0; - int padlen = 0; /* amount to pad */ - int caps = 0; - - uvalue = value; - if (dosign) { - if (value < 0) { - signvalue = '-'; - uvalue = -value; - } - } - if (base < 0) { - caps = 1; - base = -base; - } - do { - convert[place++] = - (caps ? "0123456789ABCDEF" : "0123456789abcdef") - [uvalue % (unsigned)base]; - uvalue = (uvalue / (unsigned)base); - } while (uvalue && (place < (int)(sizeof(convert) - 1))); - convert[place] = 0; - padlen = len - place; - if (padlen < 0) - padlen = 0; - if(ljust) - padlen = -padlen; - if (zpad && padlen > 0) { - if (signvalue) { - (void) dopr_outch(bp, ep, signvalue); - --padlen; - signvalue = 0; - } - while (padlen > 0) { - (void) dopr_outch(bp, ep, zpad); - --padlen; - } - } - while (padlen > 0) { - (void) dopr_outch(bp, ep, ' '); - --padlen; - } - if (signvalue) - (void) dopr_outch(bp, ep, signvalue); - while (place > 0) - (void) dopr_outch(bp, ep, convert[--place]); - while (padlen < 0) { - (void) dopr_outch(bp, ep, ' '); - ++padlen; - } -} - - -/* - * fmtstr() -- format string for output - */ - -static void -fmtstr(bp, ep, value, ljust, len, zpad, maxwidth) - char **bp; /* current buffer pointer */ - char *ep; /* end of buffer (-1) */ - char *value; /* string to format */ - int ljust; /* left justification request */ - int len; /* length request */ - int zpad; /* zero padding request */ - int maxwidth; /* maximum width request */ -{ - int padlen, strlen; /* amount to pad */ - - if (value == 0) - value = ""; - for (strlen = 0; value[strlen]; ++ strlen) /* strlen() */ - ; - if ((strlen > maxwidth) && maxwidth) - strlen = maxwidth; - padlen = len - strlen; - if (padlen < 0) - padlen = 0; - if (ljust) - padlen = -padlen; - while (padlen > 0) { - (void) dopr_outch(bp, ep, ' '); - --padlen; - } - (void) dostr(bp, ep, value, maxwidth); - while (padlen < 0) { - (void) dopr_outch(bp, ep, ' '); - ++padlen; - } -} - - -/* - * dostr() -- do string output - */ - -static void -dostr(bp, ep, str, cut) - char **bp; /* current buffer pointer */ - char *ep; /* end of buffer (-1) */ - char *str; /* string to output */ - int cut; /* limit on amount of string to output: - * 0 == no limit */ -{ - int f; - - f = cut ? 1 : 0; - while (*str) { - if (f) { - if (cut-- > 0) - (void) dopr_outch(bp, ep, *str); - } else - (void) dopr_outch(bp, ep, *str); - str++; - } -} - - -/* - * dopr_outch() -- output a character (or two) - */ - -static void -dopr_outch(bp, ep, c) - char **bp; /* current buffer pointer */ - char *ep; /* end of buffer (-1) */ - int c; /* character to output */ -{ - register char *cp = *bp; - - if (iscntrl(c) && c != '\n' && c != '\t') { - c = '@' + (c & 0x1F); - if (cp < ep) - *cp++ = '^'; - Length++; - } - if (cp < ep) - *cp++ = c; - *bp = cp; - Length++; -} - -#else /* !defined(USE_LIB_SNPF) */ -char snpf_d1[] = "d"; char *snpf_d2 = snpf_d1; -#endif /* defined(USE_LIB_SNPF) */