📄 util.c
字号:
/* * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that: (1) source code distributions * retain the above copyright notice and this paragraph in its entirety, (2) * distributions including binary code include the above copyright notice and * this paragraph in its entirety in the documentation or other materials * provided with the distribution, and (3) all advertising materials mentioning * features or use of this software display the following acknowledgement: * ``This product includes software developed by the University of California, * Lawrence Berkeley Laboratory and its contributors.'' 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. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */#ifndef lintstatic const char rcsid[] = "@(#) $Header: util.c,v 1.58 97/05/09 14:52:17 leres Exp $ (LBL)";#endif#include <sys/types.h>#ifndef WIN32
#include <sys/time.h>#include <sys/file.h>#else
#include <winsock.h>
#endif
#include <sys/stat.h>
#include <ctype.h>#include <errno.h>#ifdef HAVE_FCNTL_H#include <fcntl.h>#endif#ifdef HAVE_MALLOC_H#include <malloc.h>#endif#include <pcap.h>#include <stdio.h>
#if __STDC__#include <stdarg.h>#else#include <varargs.h>#endif#include <stdlib.h>#include <string.h>#ifdef TIME_WITH_SYS_TIME#include <time.h>#endif#include <unistd.h>#include "interface.h"/* * Print out a filename (or other ascii string). * If ep is NULL, assume no truncation check is needed. * Return true if truncated. */#ifdef WIN32
#define isascii(a) __isascii(a)
#define toascii(a) __toascii(a)
#endif
intfn_print(register const u_char *s, register const u_char *ep){ register int ret; register u_char c; ret = 1; /* assume truncated */ while (ep == NULL || s < ep) { c = *s++; if (c == '\0') { ret = 0; break; } if (!isascii(c)) { c = toascii(c); putchar('M'); putchar('-'); } if (!isprint(c)) { c ^= 0x40; /* DEL to ?, others to alpha */ putchar('^'); } putchar(c); } return(ret);}/* * Print out a counted filename (or other ascii string). * If ep is NULL, assume no truncation check is needed. * Return true if truncated. */intfn_printn(register const u_char *s, register u_int n, register const u_char *ep){ register int ret; register u_char c; ret = 1; /* assume truncated */ while (ep == NULL || s < ep) { if (n-- <= 0) { ret = 0; break; } c = *s++; if (!isascii(c)) { c = toascii(c); putchar('M'); putchar('-'); } if (!isprint(c)) { c ^= 0x40; /* DEL to ?, others to alpha */ putchar('^'); } putchar(c); } return(ret);}/* * Print the timestamp */#ifdef WIN32
#define u_int32_t unsigned int
#endif
voidts_print(register const struct timeval *tvp){ register int s; DWORD dwVersion;
DWORD dwWindowsMajorVersion;
dwVersion=GetVersion(); //get the OS version
dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
if (tflag > 0) { /* Default */#ifndef WIN32
s = (tvp->tv_sec + thiszone) % 86400;#else
if (dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4) // Windows '95
s = (tvp->tv_sec) % 86400;
else
s = (tvp->tv_sec + thiszone) % 86400;
#endif
(void)printf("%02d:%02d:%02d.%06u ", s / 3600, (s % 3600) / 60, s % 60, (u_int32_t)tvp->tv_usec); } else if (tflag < 0) {
/* Unix timeval style */ (void)printf("%u.%06u ", (u_int32_t)tvp->tv_sec, (u_int32_t)tvp->tv_usec); }}/* * Convert a token value to a string; use "fmt" if not found. */const char *tok2str(register const struct tok *lp, register const char *fmt, register int v){ static char buf[128]; while (lp->s != NULL) { if (lp->v == v) return (lp->s); ++lp; } if (fmt == NULL) fmt = "#%d"; (void)sprintf(buf, fmt, v); return (buf);}/* VARARGS */__dead void#if __STDC__error(const char *fmt, ...)#elseerror(fmt, va_alist) const char *fmt; va_dcl#endif{ va_list ap; (void)fprintf(stderr, "%s: ", program_name);#if __STDC__ va_start(ap, fmt);#else va_start(ap);#endif (void)vfprintf(stderr, fmt, ap); va_end(ap); if (*fmt) { fmt += strlen(fmt); if (fmt[-1] != '\n') (void)fputc('\n', stderr); } exit(1); /* NOTREACHED */}/* VARARGS */void#if __STDC__warning(const char *fmt, ...)#elsewarning(fmt, va_alist) const char *fmt; va_dcl#endif{ va_list ap; (void)fprintf(stderr, "%s: WARNING: ", program_name);#if __STDC__ va_start(ap, fmt);#else va_start(ap);#endif (void)vfprintf(stderr, fmt, ap); va_end(ap); if (*fmt) { fmt += strlen(fmt); if (fmt[-1] != '\n') (void)fputc('\n', stderr); }}/* * Copy arg vector into a new buffer, concatenating arguments with spaces. */char *copy_argv(register char **argv){ register char **p; register u_int len = 0; char *buf; char *src, *dst; p = argv; if (*p == 0) return 0; while (*p) len += strlen(*p++) + 1; buf = (char *)malloc(len); if (buf == NULL) error("copy_argv: malloc"); p = argv; dst = buf; while ((src = *p++) != NULL) { while ((*dst++ = *src++) != '\0') ; dst[-1] = ' '; } dst[-1] = '\0'; return buf;}
#ifdef WIN32
#include <io.h>
#include <fcntl.h>
#define stat _stat
#define open _open
#define fstat _fstat
#define read _read
#define O_RDONLY _O_RDONLY
#endif
char *read_infile(char *fname){ register int fd, cc; register char *cp; struct stat buf; fd = open(fname, O_RDONLY); if (fd < 0) error("can't open %s: %s", fname, pcap_strerror(errno)); if (fstat(fd, &buf) < 0) error("can't stat %s: %s", fname, pcap_strerror(errno)); cp = malloc((u_int)buf.st_size + 1); cc = read(fd, cp, (int)buf.st_size); if (cc < 0) error("read %s: %s", fname, pcap_strerror(errno)); if (cc != buf.st_size) error("short read %s (%d != %d)", fname, cc, (int)buf.st_size); cp[(int)buf.st_size] = '\0'; return (cp);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -