dhcp_gettag.c

来自「minix操作系统最新版本(3.1.1)的源代码」· C语言 代码 · 共 56 行

C
56
字号
/*	dhcp_gettag()					Author: Kees J. Bot *								1 Dec 2000 */#define nil ((void*)0)#include <stddef.h>#include <string.h>#include <sys/types.h>#include <net/hton.h>#include <net/gen/in.h>#include <net/gen/dhcp.h>#define arraysize(a)	(sizeof(a) / sizeof((a)[0]))int dhcp_gettag(dhcp_t *dp, int searchtag, u8_t **pdata, size_t *plen){    /* Find a tag in the options field, or possibly in the file or sname     * fields.  Return true iff found, and return the data and/or length if     * their pointers are non-null.     */    u8_t *p;    u8_t *optfield[3];    size_t optlen[3];    int i, tag, len;    /* The DHCP magic number must be correct, or no tags. */    if (dp->magic != DHCP_MAGIC) return 0;    optfield[0]= dp->options;    optlen[0]= arraysize(dp->options);    optfield[1]= dp->file;    optlen[1]= 0;		/* Unknown if used for options yet. */    optfield[2]= dp->sname;    optlen[2]= 0;    for (i= 0; i < 3; i++) {	p= optfield[i];	while (p < optfield[i] + optlen[i]) {	    tag= *p++;	    if (tag == 255) break;	    len= tag == 0 ? 0 : *p++;	    if (tag == searchtag) {		if (pdata != nil) *pdata= p;		if (plen != nil) *plen= len;		return 1;	    }	    if (tag == DHCP_TAG_OVERLOAD) {		/* There are also options in the file or sname field. */		if (*p & 1) optlen[1]= arraysize(dp->file);		if (*p & 2) optlen[1]= arraysize(dp->sname);	    }	    p += len;	}    }    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?