1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%{
2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	The Regents of the University of California.  All rights reserved.
5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without
7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that: (1) source code distributions
8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2)
9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * distributions including binary code include the above copyright notice and
10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * this paragraph in its entirety in the documentation or other materials
11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning
12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * features or use of this software display the following acknowledgement:
13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ``This product includes software developed by the University of California,
14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * the University nor the names of its contributors may be used to endorse
16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * or promote products derived from this software without specific prior
17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * written permission.
18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef lint
24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic const char rcsid[] _U_ =
25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project    "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.99.2.9 2007/06/11 09:52:05 guy Exp $ (LBL)";
26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_CONFIG_H
29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "config.h"
30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <ctype.h>
33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <string.h>
34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "pcap-int.h"
36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "gencode.h"
38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6
39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32
40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <pcap-stdinc.h>
41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef __MINGW32__
43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "IP6_misc.h"
44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* WIN32 */
46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/socket.h>	/* for "struct sockaddr" in "struct addrinfo" */
47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <netdb.h>	/* for "struct addrinfo" */
48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */
49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Workaround for AIX 4.3 */
51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if !defined(AI_NUMERICHOST)
52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define AI_NUMERICHOST 0x04
53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /*INET6*/
55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <pcap-namedb.h>
56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "tokdefs.h"
57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_OS_PROTO_H
59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "os-proto.h"
60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int stoi(char *);
63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic inline int xdtoi(int);
64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef FLEX_SCANNER
66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define YY_NO_UNPUT
67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic YY_BUFFER_STATE in_buffer;
68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else
69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic char *in_buffer;
70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#undef getc
72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define getc(fp)  (*in_buffer == 0 ? EOF : *in_buffer++)
73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define yylval pcap_lval
76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern YYSTYPE yylval;
77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%}
79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectN		([0-9]+|(0X|0x)[0-9A-Fa-f]+)
81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectB		([0-9A-Fa-f][0-9A-Fa-f]?)
82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectW		([0-9A-Fa-f][0-9A-Fa-f]?[0-9A-Fa-f]?[0-9A-Fa-f]?)
83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%a 18400
85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%o 21500
86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%e 7600
87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%k 4550
88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%p 27600
89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%n 2000
90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV680		{W}:{W}:{W}:{W}:{W}:{W}:{W}:{W}
92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV670		::{W}:{W}:{W}:{W}:{W}:{W}:{W}
94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV671		{W}::{W}:{W}:{W}:{W}:{W}:{W}
95478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV672		{W}:{W}::{W}:{W}:{W}:{W}:{W}
96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV673		{W}:{W}:{W}::{W}:{W}:{W}:{W}
97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV674		{W}:{W}:{W}:{W}::{W}:{W}:{W}
98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV675		{W}:{W}:{W}:{W}:{W}::{W}:{W}
99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV676		{W}:{W}:{W}:{W}:{W}:{W}::{W}
100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV677		{W}:{W}:{W}:{W}:{W}:{W}:{W}::
101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV660		::{W}:{W}:{W}:{W}:{W}:{W}
103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV661		{W}::{W}:{W}:{W}:{W}:{W}
104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV662		{W}:{W}::{W}:{W}:{W}:{W}
105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV663		{W}:{W}:{W}::{W}:{W}:{W}
106478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV664		{W}:{W}:{W}:{W}::{W}:{W}
107478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV665		{W}:{W}:{W}:{W}:{W}::{W}
108478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV666		{W}:{W}:{W}:{W}:{W}:{W}::
109478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
110478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV650		::{W}:{W}:{W}:{W}:{W}
111478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV651		{W}::{W}:{W}:{W}:{W}
112478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV652		{W}:{W}::{W}:{W}:{W}
113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV653		{W}:{W}:{W}::{W}:{W}
114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV654		{W}:{W}:{W}:{W}::{W}
115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV655		{W}:{W}:{W}:{W}:{W}::
116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV640		::{W}:{W}:{W}:{W}
118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV641		{W}::{W}:{W}:{W}
119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV642		{W}:{W}::{W}:{W}
120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV643		{W}:{W}:{W}::{W}
121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV644		{W}:{W}:{W}:{W}::
122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV630		::{W}:{W}:{W}
124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV631		{W}::{W}:{W}
125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV632		{W}:{W}::{W}
126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV633		{W}:{W}:{W}::
127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV620		::{W}:{W}
129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV621		{W}::{W}
130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV622		{W}:{W}::
131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV610		::{W}
133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV611		{W}::
134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV600		::
136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6604		{W}:{W}:{W}:{W}:{W}:{W}:{N}\.{N}\.{N}\.{N}
138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6504		::{W}:{W}:{W}:{W}:{W}:{N}\.{N}\.{N}\.{N}
140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6514		{W}::{W}:{W}:{W}:{W}:{N}\.{N}\.{N}\.{N}
141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6524		{W}:{W}::{W}:{W}:{W}:{N}\.{N}\.{N}\.{N}
142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6534		{W}:{W}:{W}::{W}:{W}:{N}\.{N}\.{N}\.{N}
143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6544		{W}:{W}:{W}:{W}::{W}:{N}\.{N}\.{N}\.{N}
144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6554		{W}:{W}:{W}:{W}:{W}::{N}\.{N}\.{N}\.{N}
145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6404		::{W}:{W}:{W}:{W}:{N}\.{N}\.{N}\.{N}
147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6414		{W}::{W}:{W}:{W}:{N}\.{N}\.{N}\.{N}
148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6424		{W}:{W}::{W}:{W}:{N}\.{N}\.{N}\.{N}
149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6434		{W}:{W}:{W}::{W}:{N}\.{N}\.{N}\.{N}
150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6444		{W}:{W}:{W}:{W}::{N}\.{N}\.{N}\.{N}
151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6304		::{W}:{W}:{W}:{N}\.{N}\.{N}\.{N}
153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6314		{W}::{W}:{W}:{N}\.{N}\.{N}\.{N}
154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6324		{W}:{W}::{W}:{N}\.{N}\.{N}\.{N}
155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6334		{W}:{W}:{W}::{N}\.{N}\.{N}\.{N}
156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6204		::{W}:{W}:{N}\.{N}\.{N}\.{N}
158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6214		{W}::{W}:{N}\.{N}\.{N}\.{N}
159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6224		{W}:{W}::{N}\.{N}\.{N}\.{N}
160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6104		::{W}:{N}\.{N}\.{N}\.{N}
162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6114		{W}::{N}\.{N}\.{N}\.{N}
163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6004		::{N}\.{N}\.{N}\.{N}
165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectV6		({V680}|{V670}|{V671}|{V672}|{V673}|{V674}|{V675}|{V676}|{V677}|{V660}|{V661}|{V662}|{V663}|{V664}|{V665}|{V666}|{V650}|{V651}|{V652}|{V653}|{V654}|{V655}|{V640}|{V641}|{V642}|{V643}|{V644}|{V630}|{V631}|{V632}|{V633}|{V620}|{V621}|{V622}|{V610}|{V611}|{V600}|{V6604}|{V6504}|{V6514}|{V6524}|{V6534}|{V6544}|{V6554}|{V6404}|{V6414}|{V6424}|{V6434}|{V6444}|{V6304}|{V6314}|{V6324}|{V6334}|{V6204}|{V6214}|{V6224}|{V6104}|{V6114}|{V6004})
168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%%
170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdst		return DST;
171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsrc		return SRC;
172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlink|ether|ppp|slip  return LINK;
174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfddi|tr|wlan	return LINK;
175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectarp		return ARP;
176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrarp		return RARP;
177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectip		return IP;
178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsctp		return SCTP;
179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttcp		return TCP;
180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectudp		return UDP;
181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp		return ICMP;
182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectigmp		return IGMP;
183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectigrp		return IGRP;
184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpim		return PIM;
185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvrrp		return VRRP;
186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectradio		return RADIO;
187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectip6		{
189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6
190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		return IPV6;
191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else
192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		bpf_error("%s not supported", yytext);
193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		}
195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp6		{
196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6
197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		return ICMPV6;
198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else
199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		bpf_error("%s not supported", yytext);
200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		}
202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectah		return AH;
203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectesp		return ESP;
204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatalk		return ATALK;
206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectaarp		return AARP;
207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdecnet		return DECNET;
208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlat		return LAT;
209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsca		return SCA;
210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmoprc		return MOPRC;
211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmopdl		return MOPDL;
212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectiso		return ISO;
214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectesis		return ESIS;
215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectes-is		return ESIS;
216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectisis		return ISIS;
217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectis-is		return ISIS;
218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectl1              return L1;
219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectl2              return L2;
220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectiih             return IIH;
221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlsp             return LSP;
222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsnp             return SNP;
223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectcsnp            return CSNP;
224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpsnp            return PSNP;
225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectclnp		return CLNP;
227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstp		return STP;
229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectipx		return IPX;
231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnetbeui		return NETBEUI;
233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecthost		return HOST;
235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnet		return NET;
236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmask		return NETMASK;
237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectport		return PORT;
238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectportrange	return PORTRANGE;
239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectproto		return PROTO;
240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectprotochain	{
241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef NO_PROTOCHAIN
242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		  bpf_error("%s not supported", yytext);
243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else
244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		  return PROTOCHAIN;
245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		}
247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectgateway		return GATEWAY;
249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectless		return LESS;
251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectgreater		return GREATER;
252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectbyte		return CBYTE;
253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectbroadcast	return TK_BROADCAST;
254478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmulticast	return TK_MULTICAST;
255478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectand|"&&"	return AND;
257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projector|"||"		return OR;
258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnot		return '!';
259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlen|length	return LEN;
261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectinbound		return INBOUND;
262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectoutbound	return OUTBOUND;
263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvlan		return VLAN;
265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmpls		return MPLS;
266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpppoed		return PPPOED;
267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpppoes		return PPPOES;
268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlane		return LANE;
270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectllc		return LLC;
271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmetac		return METAC;
272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectbcc		return BCC;
273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectoam		return OAM;
274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectoamf4		return OAMF4;
275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectoamf4ec		return OAMF4EC;
276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectoamf4sc		return OAMF4SC;
277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsc		return SC;
278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectilmic		return ILMIC;
279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvpi		return VPI;
280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvci		return VCI;
281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectconnectmsg	return CONNECTMSG;
282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmetaconnect	return METACONNECT;
283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecton|ifname	return PF_IFNAME;
285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrset|ruleset	return PF_RSET;
286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrnr|rulenum	return PF_RNR;
287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsrnr|subrulenum	return PF_SRNR;
288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectreason		return PF_REASON;
289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectaction		return PF_ACTION;
290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectfisu		return FISU;
292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlssu		return LSSU;
293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlsu		return LSSU;
294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmsu		return MSU;
295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsio		return SIO;
296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectopc		return OPC;
297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdpc		return DPC;
298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectsls		return SLS;
299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project[ \r\n\t]		;
301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project[+\-*/:\[\]!<>()&|=]	return yytext[0];
302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project">="			return GEQ;
303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project"<="			return LEQ;
304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project"!="			return NEQ;
305478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project"=="			return '=';
306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project"<<"			return LSH;
307478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project">>"			return RSH;
308478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project${B}			{ yylval.e = pcap_ether_aton(((char *)yytext)+1);
309478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  return AID; }
310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{N}			{ yylval.i = stoi((char *)yytext); return NUM; }
311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project({N}\.{N})|({N}\.{N}\.{N})|({N}\.{N}\.{N}\.{N})	{
312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			yylval.s = sdup((char *)yytext); return HID; }
313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{B}:{B}:{B}:{B}:{B}:{B} { yylval.e = pcap_ether_aton((char *)yytext);
314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  return EID; }
315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{V6}			{
316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6
317478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  struct addrinfo hints, *res;
318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  memset(&hints, 0, sizeof(hints));
319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  hints.ai_family = AF_INET6;
320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  hints.ai_flags = AI_NUMERICHOST;
321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  if (getaddrinfo(yytext, NULL, &hints, &res))
322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				bpf_error("bogus IPv6 address %s", yytext);
323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  else {
324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				yylval.s = sdup((char *)yytext); return HID6;
325478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  }
326478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else
327478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			  bpf_error("IPv6 address %s not supported", yytext);
328478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /*INET6*/
329478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			}
330478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{B}:+({B}:+)+		{ bpf_error("bogus ethernet address %s", yytext); }
331478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmptype		{ yylval.i = 0; return NUM; }
332478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmpcode		{ yylval.i = 1; return NUM; }
333478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-echoreply		{ yylval.i = 0; return NUM; }
334478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-unreach		{ yylval.i = 3; return NUM; }
335478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-sourcequench	{ yylval.i = 4; return NUM; }
336478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-redirect		{ yylval.i = 5; return NUM; }
337478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-echo		{ yylval.i = 8; return NUM; }
338478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-routeradvert	{ yylval.i = 9; return NUM; }
339478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-routersolicit	{ yylval.i = 10; return NUM; }
340478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-timxceed		{ yylval.i = 11; return NUM; }
341478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-paramprob		{ yylval.i = 12; return NUM; }
342478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-tstamp		{ yylval.i = 13; return NUM; }
343478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-tstampreply	{ yylval.i = 14; return NUM; }
344478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-ireq		{ yylval.i = 15; return NUM; }
345478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-ireqreply		{ yylval.i = 16; return NUM; }
346478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-maskreq		{ yylval.i = 17; return NUM; }
347478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecticmp-maskreply		{ yylval.i = 18; return NUM; }
348478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttcpflags		{ yylval.i = 13; return NUM; }
349478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttcp-fin			{ yylval.i = 0x01; return NUM; }
350478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttcp-syn			{ yylval.i = 0x02; return NUM; }
351478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttcp-rst			{ yylval.i = 0x04; return NUM; }
352478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttcp-push		{ yylval.i = 0x08; return NUM; }
353478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttcp-ack			{ yylval.i = 0x10; return NUM; }
354478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttcp-urg			{ yylval.i = 0x20; return NUM; }
355478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project[A-Za-z0-9]([-_.A-Za-z0-9]*[.A-Za-z0-9])? {
356478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			 yylval.s = sdup((char *)yytext); return ID; }
357478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project"\\"[^ !()\n\t]+	{ yylval.s = sdup((char *)yytext + 1); return ID; }
358478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project[^ \[\]\t\n\-_.A-Za-z0-9!<>()&|=]+ {
359478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			bpf_error("illegal token: %s", yytext); }
360478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project.			{ bpf_error("illegal char '%c'", *yytext); }
361478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%%
362478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid
363478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlex_init(buf)
364478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	const char *buf;
365478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{
366478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef FLEX_SCANNER
367478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	in_buffer = yy_scan_string(buf);
368478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else
369478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	in_buffer = buf;
370478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
371478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}
372478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
373478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
374478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Do any cleanup necessary after parsing.
375478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
376478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid
377478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectlex_cleanup()
378478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{
379478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef FLEX_SCANNER
380478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if (in_buffer != NULL)
381478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		yy_delete_buffer(in_buffer);
382478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	in_buffer = NULL;
383478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
384478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}
385478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
386478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
387478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Also define a yywrap.  Note that if we're using flex, it will
388478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * define a macro to map this identifier to pcap_wrap.
389478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
390478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint
391478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectyywrap()
392478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{
393478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	return 1;
394478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}
395478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
396478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Hex digit to integer. */
397478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic inline int
398478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectxdtoi(c)
399478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	register int c;
400478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{
401478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if (isdigit(c))
402478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		return c - '0';
403478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else if (islower(c))
404478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		return c - 'a' + 10;
405478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	else
406478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		return c - 'A' + 10;
407478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}
408478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
409478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
410478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Convert string to integer.  Just like atoi(), but checks for
411478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * preceding 0x or 0 and uses hex or octal instead of decimal.
412478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
413478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int
414478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstoi(s)
415478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	char *s;
416478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{
417478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int base = 10;
418478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int n = 0;
419478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
420478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	if (*s == '0') {
421478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		if (s[1] == 'x' || s[1] == 'X') {
422478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			s += 2;
423478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			base = 16;
424478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		}
425478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		else {
426478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			base = 8;
427478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project			s += 1;
428478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		}
429478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	}
430478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	while (*s)
431478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project		n = n * base + xdtoi(*s++);
432478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
433478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	return n;
434478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}
435