亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? utils.c

?? 自己精簡過的PPPD代碼。在嵌入中應用可以更好的發揮。比原先的小了很多
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * utils.c - various utility functions used in pppd. * * Copyright (c) 1999-2002 Paul Mackerras. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. The name(s) of the authors of this software must not be used to *    endorse or promote products derived from this software without *    prior written permission. * * 3. Redistributions of any form whatsoever must retain the following *    acknowledgment: *    "This product includes software developed by Paul Mackerras *     <paulus@samba.org>". * * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */#define RCSID	"$Id: utils.c,v 1.24 2004/11/04 10:02:26 paulus Exp $"#include <stdio.h>#include <ctype.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <signal.h>#include <errno.h>#include <fcntl.h>#include <syslog.h>#include <netdb.h>#include <time.h>#include <utmp.h>#include <pwd.h>#include <sys/param.h>#include <sys/types.h>#include <sys/wait.h>#include <sys/time.h>#include <sys/resource.h>#include <sys/stat.h>#include <sys/socket.h>#include <netinet/in.h>#ifdef SVR4#include <sys/mkdev.h>#endif#include "pppd.h"#include "fsm.h"#include "lcp.h"static const char rcsid[] = RCSID;#if defined(SUNOS4)extern char *strerror();#endifstatic void logit __P((int, char *, va_list));static void log_write __P((int, char *));static void vslp_printer __P((void *, char *, ...));static void format_packet __P((u_char *, int, void (*) (void *, char *, ...),			       void *));struct buffer_info {    char *ptr;    int len;};/* * strlcpy - like strcpy/strncpy, doesn't overflow destination buffer, * always leaves destination null-terminated (for len > 0). */size_tstrlcpy(dest, src, len)    char *dest;    const char *src;    size_t len;{    size_t ret = strlen(src);    if (len != 0) {	if (ret < len)	    strcpy(dest, src);	else {	    strncpy(dest, src, len - 1);	    dest[len-1] = 0;	}    }    return ret;}/* * strlcat - like strcat/strncat, doesn't overflow destination buffer, * always leaves destination null-terminated (for len > 0). */size_tstrlcat(dest, src, len)    char *dest;    const char *src;    size_t len;{    size_t dlen = strlen(dest);    return dlen + strlcpy(dest + dlen, src, (len > dlen? len - dlen: 0));}/* * slprintf - format a message into a buffer.  Like sprintf except we * also specify the length of the output buffer, and we handle * %m (error message), %v (visible string), * %q (quoted string), %t (current time) and %I (IP address) formats. * Doesn't do floating-point formats. * Returns the number of chars put into buf. */intslprintf __V((char *buf, int buflen, char *fmt, ...)){    va_list args;    int n;#if defined(__STDC__)    va_start(args, fmt);#else    char *buf;    int buflen;    char *fmt;    va_start(args);    buf = va_arg(args, char *);    buflen = va_arg(args, int);    fmt = va_arg(args, char *);#endif    n = vslprintf(buf, buflen, fmt, args);    va_end(args);    return n;}/* * vslprintf - like slprintf, takes a va_list instead of a list of args. */#define OUTCHAR(c)	(buflen > 0? (--buflen, *buf++ = (c)): 0)intvslprintf(buf, buflen, fmt, args)    char *buf;    int buflen;    char *fmt;    va_list args;{    int c, i, n;    int width, prec, fillch;    int base, len, neg, quoted;    unsigned long val = 0;    char *str, *f, *buf0;    unsigned char *p;    char num[32];    time_t t;    u_int32_t ip;    static char hexchars[] = "0123456789abcdef";    struct buffer_info bufinfo;    buf0 = buf;    --buflen;    while (buflen > 0) {	for (f = fmt; *f != '%' && *f != 0; ++f)	    ;	if (f > fmt) {	    len = f - fmt;	    if (len > buflen)		len = buflen;	    memcpy(buf, fmt, len);	    buf += len;	    buflen -= len;	    fmt = f;	}	if (*fmt == 0)	    break;	c = *++fmt;	width = 0;	prec = -1;	fillch = ' ';	if (c == '0') {	    fillch = '0';	    c = *++fmt;	}	if (c == '*') {	    width = va_arg(args, int);	    c = *++fmt;	} else {	    while (isdigit(c)) {		width = width * 10 + c - '0';		c = *++fmt;	    }	}	if (c == '.') {	    c = *++fmt;	    if (c == '*') {		prec = va_arg(args, int);		c = *++fmt;	    } else {		prec = 0;		while (isdigit(c)) {		    prec = prec * 10 + c - '0';		    c = *++fmt;		}	    }	}	str = 0;	base = 0;	neg = 0;	++fmt;	switch (c) {	case 'l':	    c = *fmt++;	    switch (c) {	    case 'd':		val = va_arg(args, long);		if (val < 0) {		    neg = 1;		    val = -val;		}		base = 10;		break;	    case 'u':		val = va_arg(args, unsigned long);		base = 10;		break;	    default:		*buf++ = '%'; --buflen;		*buf++ = 'l'; --buflen;		--fmt;		/* so %lz outputs %lz etc. */		continue;	    }	    break;	case 'd':	    i = va_arg(args, int);	    if (i < 0) {		neg = 1;		val = -i;	    } else		val = i;	    base = 10;	    break;	case 'u':	    val = va_arg(args, unsigned int);	    base = 10;	    break;	case 'o':	    val = va_arg(args, unsigned int);	    base = 8;	    break;	case 'x':	case 'X':	    val = va_arg(args, unsigned int);	    base = 16;	    break;	case 'p':	    val = (unsigned long) va_arg(args, void *);	    base = 16;	    neg = 2;	    break;	case 's':	    str = va_arg(args, char *);	    break;	case 'c':	    num[0] = va_arg(args, int);	    num[1] = 0;	    str = num;	    break;	case 'm':	    str = strerror(errno);	    break;	case 'I':	    ip = va_arg(args, u_int32_t);	    ip = ntohl(ip);	    slprintf(num, sizeof(num), "%d.%d.%d.%d", (ip >> 24) & 0xff,		     (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff);	    str = num;	    break;#if 0	/* not used, and breaks on S/390, apparently */	case 'r':	    f = va_arg(args, char *);#ifndef __powerpc__	    n = vslprintf(buf, buflen + 1, f, va_arg(args, va_list));#else	    /* On the powerpc, a va_list is an array of 1 structure */	    n = vslprintf(buf, buflen + 1, f, va_arg(args, void *));#endif	    buf += n;	    buflen -= n;	    continue;#endif	case 't':	    time(&t);	    str = ctime(&t);	    str += 4;		/* chop off the day name */	    str[15] = 0;	/* chop off year and newline */	    break;	case 'v':		/* "visible" string */	case 'q':		/* quoted string */	    quoted = c == 'q';	    p = va_arg(args, unsigned char *);	    if (fillch == '0' && prec >= 0) {		n = prec;	    } else {		n = strlen((char *)p);		if (prec >= 0 && n > prec)		    n = prec;	    }	    while (n > 0 && buflen > 0) {		c = *p++;		--n;		if (!quoted && c >= 0x80) {		    OUTCHAR('M');		    OUTCHAR('-');		    c -= 0x80;		}		if (quoted && (c == '"' || c == '\\'))		    OUTCHAR('\\');		if (c < 0x20 || (0x7f <= c && c < 0xa0)) {		    if (quoted) {			OUTCHAR('\\');			switch (c) {			case '\t':	OUTCHAR('t');	break;			case '\n':	OUTCHAR('n');	break;			case '\b':	OUTCHAR('b');	break;			case '\f':	OUTCHAR('f');	break;			default:			    OUTCHAR('x');			    OUTCHAR(hexchars[c >> 4]);			    OUTCHAR(hexchars[c & 0xf]);			}		    } else {			if (c == '\t')			    OUTCHAR(c);			else {			    OUTCHAR('^');			    OUTCHAR(c ^ 0x40);			}		    }		} else		    OUTCHAR(c);	    }	    continue;	case 'P':		/* print PPP packet */	    bufinfo.ptr = buf;	    bufinfo.len = buflen + 1;	    p = va_arg(args, unsigned char *);	    n = va_arg(args, int);	    format_packet(p, n, vslp_printer, &bufinfo);	    buf = bufinfo.ptr;	    buflen = bufinfo.len - 1;	    continue;	case 'B':	    p = va_arg(args, unsigned char *);	    for (n = prec; n > 0; --n) {		c = *p++;		if (fillch == ' ')		    OUTCHAR(' ');		OUTCHAR(hexchars[(c >> 4) & 0xf]);		OUTCHAR(hexchars[c & 0xf]);	    }	    continue;	default:	    *buf++ = '%';	    if (c != '%')		--fmt;		/* so %z outputs %z etc. */	    --buflen;	    continue;	}	if (base != 0) {	    str = num + sizeof(num);	    *--str = 0;	    while (str > num + neg) {		*--str = hexchars[val % base];		val = val / base;		if (--prec <= 0 && val == 0)		    break;	    }	    switch (neg) {	    case 1:		*--str = '-';		break;	    case 2:		*--str = 'x';		*--str = '0';		break;	    }	    len = num + sizeof(num) - 1 - str;	} else {	    len = strlen(str);	    if (prec >= 0 && len > prec)		len = prec;	}	if (width > 0) {	    if (width > buflen)		width = buflen;	    if ((n = width - len) > 0) {		buflen -= n;		for (; n > 0; --n)		    *buf++ = fillch;	    }	}	if (len > buflen)	    len = buflen;	memcpy(buf, str, len);	buf += len;	buflen -= len;    }    *buf = 0;    return buf - buf0;}/* * vslp_printer - used in processing a %P format */static voidvslp_printer __V((void *arg, char *fmt, ...)){    int n;    va_list pvar;    struct buffer_info *bi;#if defined(__STDC__)    va_start(pvar, fmt);#else    void *arg;    char *fmt;    va_start(pvar);    arg = va_arg(pvar, void *);    fmt = va_arg(pvar, char *);#endif    bi = (struct buffer_info *) arg;    n = vslprintf(bi->ptr, bi->len, fmt, pvar);    va_end(pvar);    bi->ptr += n;    bi->len -= n;}#ifdef unused/* * log_packet - format a packet and log it. */voidlog_packet(p, len, prefix, level)    u_char *p;    int len;    char *prefix;    int level;{	init_pr_log(prefix, level);	format_packet(p, len, pr_log, &level);	end_pr_log();}#endif /* unused *//* * format_packet - make a readable representation of a packet, * calling `printer(arg, format, ...)' to output it. */static voidformat_packet(p, len, printer, arg)    u_char *p;    int len;    void (*printer) __P((void *, char *, ...));    void *arg;{    int i, n;    u_short proto;    struct protent *protp;    if (len >= PPP_HDRLEN && p[0] == PPP_ALLSTATIONS && p[1] == PPP_UI) {	p += 2;	GETSHORT(proto, p);	len -= PPP_HDRLEN;	for (i = 0; (protp = protocols[i]) != NULL; ++i)	    if (proto == protp->protocol)		break;	if (protp != NULL) {	    printer(arg, "[%s", protp->name);	    n = (*protp->printpkt)(p, len, printer, arg);	    printer(arg, "]");	    p += n;	    len -= n;	} else {	    for (i = 0; (protp = protocols[i]) != NULL; ++i)		if (proto == (protp->protocol & ~0x8000))		    break;	    if (protp != 0 && protp->data_name != 0) {		printer(arg, "[%s data]", protp->data_name);		if (len > 8)		    printer(arg, "%.8B ...", p);		else		    printer(arg, "%.*B", len, p);		len = 0;	    } else		printer(arg, "[proto=0x%x]", proto);	}    }    if (len > 32)	printer(arg, "%.32B ...", p);    else	printer(arg, "%.*B", len, p);}/* * init_pr_log, end_pr_log - initialize and finish use of pr_log. */static char line[256];		/* line to be logged accumulated here */static char *linep;		/* current pointer within line */static int llevel;		/* level for logging */void

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久免费电影网| 欧美疯狂性受xxxxx喷水图片| 亚洲一区视频在线| 中文字幕欧美国产| 国产日韩成人精品| 国产精品久久免费看| 欧美国产日韩在线观看| 日日嗨av一区二区三区四区| 日韩成人av影视| 蜜臀精品久久久久久蜜臀| 麻豆国产欧美一区二区三区| 日本精品视频一区二区| 欧美亚日韩国产aⅴ精品中极品| 色婷婷一区二区三区四区| 欧美三级视频在线观看| 日韩一区二区中文字幕| 欧美电影免费观看高清完整版| 精品国产一区久久| 中文字幕制服丝袜一区二区三区| 久久精品国产999大香线蕉| 国产精品影视网| 成人v精品蜜桃久久一区| 成人免费视频视频| 欧美午夜电影一区| 国产精品国产自产拍在线| 国产精品中文字幕一区二区三区| 日韩欧美一级片| 免费观看在线色综合| 成人国产精品免费| 亚洲国产精品精华液2区45| 国产综合色在线| 欧洲中文字幕精品| 国产亚洲欧美在线| 亚洲午夜羞羞片| 国产成人亚洲综合a∨婷婷图片| 91黄色免费看| 亚洲一区二区三区在线播放| 色天天综合色天天久久| 一区二区三区91| 经典三级在线一区| 日韩一区二区中文字幕| 国产三级一区二区| 8v天堂国产在线一区二区| 天天av天天翘天天综合网| 日韩一区二区三区在线观看| 蜜桃久久久久久| 亚洲欧洲日韩女同| 99久久国产综合精品麻豆| 亚洲另类中文字| 欧美色偷偷大香| 不卡视频一二三| 精品系列免费在线观看| 亚洲综合在线电影| 国产精品国产三级国产a| 精品日韩一区二区| 国产不卡免费视频| 亚洲男同1069视频| 欧美精品久久一区| 91麻豆高清视频| 日韩不卡一二三区| 亚洲一区二区在线播放相泽| 国产精品女人毛片| 欧美精品1区2区3区| 91免费看片在线观看| 成a人片亚洲日本久久| 国产成人日日夜夜| 99精品一区二区三区| 欧美视频三区在线播放| 国产成人精品影院| 国产综合色产在线精品| 男男gaygay亚洲| 日韩在线卡一卡二| 亚洲国产视频网站| 亚洲一区二区3| 一区二区三区产品免费精品久久75| 久久久一区二区三区捆绑**| 精品久久人人做人人爰| 日韩欧美区一区二| 欧美一区二区三区免费观看视频| 久久国产精品第一页| 免费黄网站欧美| 老司机精品视频导航| 久久精品国产精品亚洲精品 | 最新日韩av在线| 国产校园另类小说区| 国产亚洲综合在线| 国产精品全国免费观看高清 | 日韩午夜av一区| 日韩一级在线观看| 精品1区2区在线观看| 久久久久综合网| 中文字幕精品三区| 午夜视频一区二区| 午夜国产精品一区| 久久精品噜噜噜成人av农村| 精品无人区卡一卡二卡三乱码免费卡| 欧美刺激午夜性久久久久久久| 99久久久精品免费观看国产蜜| 成人综合激情网| 99久久99久久免费精品蜜臀| 在线观看亚洲一区| 337p亚洲精品色噜噜噜| 欧美xxx久久| 国产精品免费视频一区| 亚洲欧美日韩系列| 日韩福利视频网| 国产精一品亚洲二区在线视频| 成人高清免费观看| 欧美性大战久久| 久久综合九色综合97_久久久| av成人免费在线观看| 国产精品综合一区二区三区| 99视频一区二区三区| 欧美日韩一区国产| 久久久777精品电影网影网| 亚洲视频 欧洲视频| 中文字幕一区日韩精品欧美| 香蕉影视欧美成人| 亚洲va韩国va欧美va精品| 精品影院一区二区久久久| av在线播放不卡| 日韩欧美国产三级| 亚洲成人激情综合网| 精品国产露脸精彩对白| 国产精品色在线观看| 亚洲在线视频网站| 国产精品一区免费在线观看| 色诱视频网站一区| 久久久久久久久久久黄色| 亚洲国产精品久久人人爱| 国产suv精品一区二区三区| 久久久精品国产免大香伊| 亚洲精品国产高清久久伦理二区| 免费看欧美美女黄的网站| 一本在线高清不卡dvd| 亚洲精品在线网站| 日韩高清欧美激情| 色偷偷成人一区二区三区91| 久久综合久久综合久久| 亚洲成人av一区| 91蜜桃婷婷狠狠久久综合9色| 亚洲精品一区二区三区精华液 | 亚洲三级在线观看| 国产在线视频精品一区| 精品国产一区二区三区忘忧草 | 日韩欧美在线一区二区三区| 国产精品久久久久久福利一牛影视 | 粉嫩蜜臀av国产精品网站| 欧美日韩国产精品成人| 色播五月激情综合网| 久久精品人人做人人爽97| 日本最新不卡在线| 欧美在线视频全部完| 18欧美乱大交hd1984| 国产裸体歌舞团一区二区| 国产69精品久久777的优势| 日韩欧美一区中文| 午夜视频在线观看一区二区 | 欧美人牲a欧美精品| 亚洲欧美日韩国产手机在线| 成人自拍视频在线观看| 欧美韩日一区二区三区| 国产激情一区二区三区四区| 欧美va亚洲va香蕉在线| 蜜桃传媒麻豆第一区在线观看| 男人的天堂亚洲一区| 国产a精品视频| 欧美tk丨vk视频| 麻豆精品国产91久久久久久| 日韩一区和二区| 蜜臀av国产精品久久久久| 欧美不卡在线视频| 美国三级日本三级久久99| 欧美α欧美αv大片| 精品一区二区三区免费毛片爱 | 国产91精品免费| 久久―日本道色综合久久| 国产精品亚洲视频| 亚洲国产精品精华液2区45| 成人18精品视频| 亚洲精品高清在线观看| 精品视频一区 二区 三区| 天堂va蜜桃一区二区三区漫画版| 91精品国产91久久久久久一区二区 | 国产欧美一二三区| 久久99精品久久久久婷婷| 日韩视频在线你懂得| 久久精品国产免费| 久久久久久久久99精品| 成人免费高清视频在线观看| 国产精品色哟哟网站| 色综合 综合色| 香蕉久久一区二区不卡无毒影院| 7799精品视频| 国产精品自拍毛片| 亚洲男同1069视频| 欧美一区二区大片| 国产成人鲁色资源国产91色综 | 日韩精品一区二区三区老鸭窝| 国产精品一区一区|