1cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#!/bin/sh
2cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
3cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project# Bzgrep wrapped for bzip2, 
4cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project# adapted from zgrep by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.
5cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project## zgrep notice:
6cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project## zgrep -- a wrapper around a grep program that decompresses files as needed
7cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project## Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca>
8cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
9cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectPATH="/usr/bin:$PATH"; export PATH
10cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
11cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectprog=`echo $0 | sed 's|.*/||'`
12cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectcase "$prog" in
13cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project	*egrep)	grep=${EGREP-egrep}	;;
14cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project	*fgrep)	grep=${FGREP-fgrep}	;;
15cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project	*)	grep=${GREP-grep}	;;
16cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectesac
17cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectpat=""
18cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectwhile test $# -ne 0; do
19cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  case "$1" in
20cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  -e | -f) opt="$opt $1"; shift; pat="$1"
21cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project           if test "$grep" = grep; then  # grep is buggy with -e on SVR4
22cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project             grep=egrep
23cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project           fi;;
24cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  -A | -B) opt="$opt $1 $2"; shift;;
25cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  -*)	   opt="$opt $1";;
26cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project   *)      if test -z "$pat"; then
27cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project	     pat="$1"
28cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project	   else
29cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project	     break;
30cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project           fi;;
31cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  esac
32cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  shift
33cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectdone
34cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
35cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectif test -z "$pat"; then
36cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  echo "grep through bzip2 files"
37cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  echo "usage: $prog [grep_options] pattern [files]"
38cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  exit 1
39cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectfi
40cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
41cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectlist=0
42cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectsilent=0
43cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectop=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'`
44cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectcase "$op" in
45cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  *l*) list=1
46cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectesac
47cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectcase "$op" in
48cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  *h*) silent=1
49cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectesac
50cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
51cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectif test $# -eq 0; then
52cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  bzip2 -cdfq | $grep $opt "$pat"
53cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  exit $?
54cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectfi
55cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project
56cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectres=0
57cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectfor i do
58cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  if test -f "$i"; then :; else if test -f "$i.bz2"; then i="$i.bz2"; fi; fi
59cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  if test $list -eq 1; then
60cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    bzip2 -cdfq "$i" | $grep $opt "$pat" 2>&1 > /dev/null && echo $i
61cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    r=$?
62cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  elif test $# -eq 1 -o $silent -eq 1; then
63cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    bzip2 -cdfq "$i" | $grep $opt "$pat"
64cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    r=$?
65cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  else
66cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    j=${i//\\/\\\\}
67cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    j=${j//|/\\|}
68cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    j=${j//&/\\&}
69cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    j=`printf "%s" "$j" | tr '\n' ' '`
70cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${j}:|"
71cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project    r=$?
72cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  fi
73cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project  test "$r" -ne 0 && res="$r"
74cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectdone
75cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectexit $res
76