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