⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.y

📁 Bluezan implementation of the Bluetooth&#8482 wireless standards specifications for Linux. The code
💻 Y
字号:
%{/* * *  BlueZ - Bluetooth protocol stack for Linux * *  Copyright (C) 2000-2001  Qualcomm Incorporated *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com> *  Copyright (C) 2002-2005  Marcel Holtmann <marcel@holtmann.org> * * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License version 2 as *  published by the Free Software Foundation; * *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. *  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY *  CLAIM, OR 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. * *  ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,  *  COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS  *  SOFTWARE IS DISCLAIMED. * * *  $Id: parser.y,v 1.15 2005/05/06 13:51:17 holtmann Exp $ */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#include <syslog.h>#include <stdarg.h>#include <sys/socket.h>#include <asm/types.h>#include <bluetooth/bluetooth.h>#include <bluetooth/hci.h>#include <bluetooth/hci_lib.h>#include "hcid.h"#include "kword.h"int cfg_error(const char *fmt, ...);int yyparse(void);int yylex(void);int yyerror(char *s); %}%union {	char *str;	long  num;}%token K_OPTIONS K_DEVICE%token K_AUTOINIT K_SECURITY K_PAIRING%token K_PTYPE K_NAME K_CLASS K_VOICE K_INQMODE K_PAGETO K_LM K_LP K_AUTH K_ENCRYPT K_ISCAN K_PSCAN%token K_PINHELP K_DBUSPINHELP%token K_YES K_NO%token <str> WORD PATH STRING LIST HCI BDADDR%token <num> NUM%type  <num> bool pkt_type link_mode link_policy sec_mode pair_mode%type  <str> dev_name hci bdaddr%%config: statement | config statement;statement:   K_OPTIONS hcid_options  | device device_options  | WORD	{			cfg_error("Invalid statement '%s'", $1);		}  | error	{			yyclearin; yyerrok;		}  ;device:  K_DEVICE		{				parser_device = &default_device;			}  | K_DEVICE hci	{				parser_device = alloc_device_opts($2);			}  | K_DEVICE bdaddr	{				parser_device = alloc_device_opts($2);			}  ;hcid_options: '{' hcid_opts '}';hcid_opts: | hcid_opt ';' | error ';' | hcid_opts hcid_opt ';';hcid_opt:   K_AUTOINIT bool	{				hcid.auto_init = $2;			}  | K_SECURITY sec_mode	{				hcid.security = $2;			}  | K_PAIRING pair_mode	{				hcid.pairing = $2;			}  | K_PINHELP PATH	{				if (hcid.pin_helper)					free(hcid.pin_helper);				hcid.pin_helper = strdup($2);				hcid.dbus_pin_helper = 0;			}  | K_DBUSPINHELP	{				if (hcid.pin_helper)					free(hcid.pin_helper);				hcid.pin_helper = NULL;				hcid.dbus_pin_helper = 1;			}  | WORD		{				cfg_error("Unknown option '%s'", $1);			}  ;sec_mode:  WORD		{			int opt = find_keyword(sec_param, $1);			if (opt < 0) {				cfg_error("Unknown security mode '%s'", $1);				$$ = 0;			} else				$$ = opt;		}  | K_NO	{			$$ = HCID_SEC_NONE;		}  ;pair_mode:  WORD		{			int opt = find_keyword(pair_param, $1);			if (opt < 0) {				cfg_error("Unknown pairing mode '%s'", $1);				$$ = 0;			} else				$$ = opt;		}  ;device_options: '{' device_opts '}';device_opts: | device_opt ';' | error ';' | device_opts device_opt ';';device_opt:  K_PTYPE pkt_type	{				parser_device->flags |= (1 << HCID_SET_PTYPE);				parser_device->pkt_type = $2;			}  | K_LM link_mode	{				parser_device->flags |= (1 << HCID_SET_LM);				parser_device->link_mode = $2;			}  | K_LP link_policy	{				parser_device->flags |= (1 << HCID_SET_LP);				parser_device->link_policy = $2;			}  | K_NAME dev_name	{				if (parser_device->name)					free(parser_device->name);				parser_device->flags |= (1 << HCID_SET_NAME);				parser_device->name = strdup($2);			}  | K_CLASS NUM		{				parser_device->flags |= (1 << HCID_SET_CLASS);				parser_device->class = $2;			}  | K_VOICE NUM		{				parser_device->flags |= (1 << HCID_SET_VOICE);				parser_device->voice = $2;			}  | K_INQMODE NUM	{				parser_device->flags |= (1 << HCID_SET_INQMODE);				parser_device->inqmode = $2;			}  | K_PAGETO NUM	{				parser_device->flags |= (1 << HCID_SET_PAGETO);				parser_device->pageto = $2;			}  | K_AUTH bool		{				parser_device->auth = $2;			}  | K_ENCRYPT bool	{				 parser_device->encrypt = $2;			}  | K_ISCAN bool	{				if ($2)					parser_device->scan |=  SCAN_INQUIRY;				else					parser_device->scan &= ~SCAN_INQUIRY;			}  | K_PSCAN bool	{				if ($2)					parser_device->scan |=  SCAN_PAGE;				else					parser_device->scan &= ~SCAN_PAGE;			}  | WORD		{				cfg_error("Unknown option '%s'",$1);				YYABORT;			}  ;dev_name:  WORD		{			$$ = strdup($1);		}  |  STRING	{			$$ = strdup($1);		}  ;hci:  HCI		{			$$ = strdup($1);		}  ;bdaddr:  BDADDR	{			$$ = strdup($1);		}  ;pkt_type:  WORD		{			int opt;			if (!hci_strtoptype($1, &opt))				cfg_error("Unknown packet type '%s'", $1);			$$ = opt;		}  | LIST	{			int opt;			if (!hci_strtoptype($1, &opt))				cfg_error("Unknown packet type '%s'", $1);			$$ = opt;		}  ;link_mode:  WORD		{			int opt;			if (!hci_strtolm($1, &opt))				cfg_error("Unknown link mode '%s'", $1);			$$ = opt;		}  | LIST	{			int opt;			if (!hci_strtolm($1, &opt))				cfg_error("Unknown link mode '%s'", $1);			$$ = opt;		}  ;link_policy:  WORD		{			int opt;			if (!hci_strtolp($1, &opt))				cfg_error("Unknown link policy '%s'", $1);			$$ = opt;		}  | LIST	{			int opt;			if (!hci_strtolp($1, &opt))				cfg_error("Unknown link policy '%s'", $1);			$$ = opt;		}  ;bool: K_YES { $$ = 1; } | K_NO  { $$ = 0; };%%int yyerror(char *s) {	syslog(LOG_ERR, "%s line %d", s, lineno);	return 0;}int cfg_error(const char *fmt, ...){	char buf[255];	va_list ap;	va_start(ap, fmt);	vsnprintf(buf,sizeof(buf),fmt,ap);	va_end(ap);	yyerror(buf);	return 0;}/*  * Read config file.  */ int read_config(char *file) {	extern FILE *yyin;	if (!(yyin = fopen(file, "r"))) {		syslog(LOG_ERR,"Can not open %s", file);		return -1;	}	lineno = 1;	yyparse();	fclose(yyin);	return 0;}

⌨️ 快捷键说明

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