Ignore machine-check MSRs
[freebsd-src/fkvm-freebsd.git] / usr.sbin / manctl / manctl.sh
blob23e20870ab95f162bb16c46739362a2847ec8291
1 #!/bin/sh
3 # Copyright (c) 1994 Geoffrey M. Rehmet, Rhodes University
4 # All rights reserved.
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 # 3. All advertising materials mentioning features or use of this software
15 # must display the following acknowledgement:
16 # This product includes software developed by Geoffrey M. Rehmet
17 # 4. Neither the name of Geoffrey M. Rehmet nor that of Rhodes University
18 # may be used to endorse or promote products derived from this software
19 # without specific prior written permission.
21 # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
22 # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23 # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24 # IN NO EVENT SHALL GEOFFREY M. REHMET OR RHODES UNIVERSITY BE LIABLE
25 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 # SUCH DAMAGE.
33 # $FreeBSD$
35 # manctl:
36 # a utility for manipulating manual pages
37 # functions:
38 # compress uncompressed man pages (elliminating .so's)
39 # this is now two-pass. If possible, .so's
40 # are replaced with hard links
41 # uncompress compressed man pages
42 # purge old formatted man pages (not implemented yet)
43 # Things to watch out for:
44 # Hard links - careful with g(un)zipping!
45 # .so's - throw everything through soelim before gzip!
46 # symlinks - ignore these - eg: expn is its own man page:
47 # don't want to compress this!
49 PATH=/bin:/sbin:/usr/bin:/usr/sbin; export PATH
52 # purge cat? directories
54 do_purge()
56 echo "purge $@" 2>&1
57 echo "not implemented yet\n" 2>&1
62 # Uncompress one page
64 uncompress_page()
66 local pname
67 local fname
68 local sect
69 local ext
71 # break up file name
72 pname=$1
73 IFS='.' ; set $pname
74 # less than 3 fields - don't know what to do with this
75 if [ $# -lt 3 ] ; then
76 IFS=" " ; echo ignoring $pname 1>&2 ; return 0 ;
78 # construct name and section
79 fname=$1 ; shift
80 while [ $# -gt 2 ] ; do
81 fname=$fname.$1
82 shift
83 done
84 sect=$1
85 ext=$2
87 IFS=" "
88 case "$ext" in
89 gz|Z) {
90 IFS=" " ; set `file $pname`
91 if [ $2 != "gzip" ] ; then
92 echo moving hard link $pname 1>&2
93 mv $pname $fname.$ext # link
94 else
95 if [ $2 != "symbolic" ] ; then
96 echo gunzipping page $pname 1>&2
97 temp=`mktemp -t manager` || exit 1
98 gunzip -c $pname > $temp
99 chmod u+w $pname
100 cp $temp $pname
101 chmod 444 $pname
102 mv $pname $fname.$sect
103 rm -f $temp
104 else
105 # skip symlinks - this can be
106 # a program like expn, which is
107 # its own man page !
108 echo skipping symlink $pname 1>&2
110 fi };;
111 *) {
112 IFS=" "
113 echo skipping file $pname 1>&2
114 } ;;
115 esac
116 # reset IFS - this is important!
117 IFS=" "
122 # Uncompress manpages in paths
124 do_uncompress()
126 local i
127 local dir
128 local workdir
130 workdir=`pwd`
131 while [ $# != 0 ] ; do
132 if [ -d $1 ] ; then
133 dir=$1
134 cd $dir
135 for i in * ; do
136 case $i in
137 *cat?) ;; # ignore cat directories
138 *) {
139 if [ -d $i ] ; then
140 do_uncompress $i
141 else
142 if [ -e $i ] ; then
143 uncompress_page $i
145 fi } ;;
146 esac
147 done
148 cd $workdir
149 else
150 echo "directory $1 not found" 1>&2
152 shift
153 done
157 # Remove .so's from one file
159 so_purge_page()
161 local so_entries
162 local lines
163 local fname
165 so_entries=`grep "^\.so" $1 | wc -l`
166 if [ $so_entries -eq 0 ] ; then return 0 ; fi
168 # we have a page with a .so in it
169 echo $1 contains a .so entry 2>&1
171 # now check how many lines in the file
172 lines=`wc -l < $1`
174 # if the file is only one line long, we can replace it
175 # with a hard link!
176 if [ $lines -eq 1 ] ; then
177 fname=$1;
178 echo replacing $fname with a hard link
179 set `cat $fname`;
180 rm -f $fname
181 ln ../$2 $fname
182 else
183 echo inlining page $fname 1>&2
184 temp=`mktemp -t manager` || exit 1
185 cat $fname | \
186 (cd .. ; soelim ) > $temp
187 chmod u+w $fname
188 cp $temp $fname
189 chmod 444 $fname
190 rm -f $temp
195 # Remove .so entries from man pages
196 # If a page consists of just one line with a .so,
197 # replace it with a hard link
199 remove_so()
201 local pname
202 local fname
203 local sect
205 # break up file name
206 pname=$1
207 IFS='.' ; set $pname
208 if [ $# -lt 2 ] ; then
209 IFS=" " ; echo ignoring $pname 1>&2 ; return 0 ;
211 # construct name and section
212 fname=$1 ; shift
213 while [ $# -gt 1 ] ; do
214 fname=$fname.$1
215 shift
216 done
217 sect=$1
219 IFS=" "
220 case "$sect" in
221 gz) { echo file $pname already gzipped 1>&2 ; } ;;
222 Z) { echo file $pname already compressed 1>&2 ; } ;;
223 [12345678ln]*){
224 IFS=" " ; set `file $pname`
225 if [ $2 = "gzip" ] ; then
226 echo moving hard link $pname 1>&2
227 mv $pname $pname.gz # link
228 else
229 if [ $2 != "symbolic" ] ; then
230 echo "removing .so's in page $pname" 1>&2
231 so_purge_page $pname
232 else
233 # skip symlink - this can be
234 # a program like expn, which is
235 # its own man page !
236 echo skipping symlink $pname 1>&2
238 fi };;
239 *) {
240 IFS=" "
241 echo skipping file $pname 1>&2
242 } ;;
243 esac
244 # reset IFS - this is important!
245 IFS=" "
250 # compress one page
251 # We need to watch out for hard links here.
253 compress_page()
255 local pname
256 local fname
257 local sect
259 # break up file name
260 pname=$1
261 IFS='.' ; set $pname
262 if [ $# -lt 2 ] ; then
263 IFS=" " ; echo ignoring $pname 1>&2 ; return 0 ;
265 # construct name and section
266 fname=$1 ; shift
267 while [ $# -gt 1 ] ; do
268 fname=$fname.$1
269 shift
270 done
271 sect=$1
273 IFS=" "
274 case "$sect" in
275 gz) { echo file $pname already gzipped 1>&2 ; } ;;
276 Z) { echo file $pname already compressed 1>&2 ; } ;;
277 [12345678ln]*){
278 IFS=" " ; set `file $pname`
279 if [ $2 = "gzip" ] ; then
280 echo moving hard link $pname 1>&2
281 mv $pname $pname.gz # link
282 else
283 if [ $2 != "symbolic" ] ; then
284 echo gzipping page $pname 1>&2
285 temp=`mktemp -t manager` || exit 1
286 cat $pname | \
287 (cd .. ; soelim )| gzip -c -- > $temp
288 chmod u+w $pname
289 cp $temp $pname
290 chmod 444 $pname
291 mv $pname $pname.gz
292 rm -f $temp
293 else
294 # skip symlink - this can be
295 # a program like expn, which is
296 # its own man page !
297 echo skipping symlink $pname 1>&2
299 fi };;
300 *) {
301 IFS=" "
302 echo skipping file $pname 1>&2
303 } ;;
304 esac
305 # reset IFS - this is important!
306 IFS=" "
310 # Compress man pages in paths
312 do_compress_so()
314 local i
315 local dir
316 local workdir
317 local what
319 what=$1
320 shift
321 workdir=`pwd`
322 while [ $# != 0 ] ; do
323 if [ -d $1 ] ; then
324 dir=$1
325 cd $dir
326 for i in * ; do
327 case $i in
328 *cat?) ;; # ignore cat directories
329 *) {
330 if [ -d $i ] ; then
331 do_compress_so $what $i
332 else
333 if [ -e $i ] ; then
334 $what $i
336 fi } ;;
337 esac
338 done
339 cd $workdir
340 else
341 echo "directory $1 not found" 1>&2
343 shift
344 done
348 # Display a usage message
350 ctl_usage()
352 echo "usage: $1 -compress <path> ... " 1>&2
353 echo " $1 -uncompress <path> ... " 1>&2
354 echo " $1 -purge <days> <path> ... " 1>&2
355 echo " $1 -purge expire <path> ... " 1>&2
356 exit 1
360 # remove .so's and do compress
362 do_compress()
364 # First remove all so's from the pages to be compressed
365 do_compress_so remove_so "$@"
366 # now do ahead and compress the pages
367 do_compress_so compress_page "$@"
371 # dispatch options
373 if [ $# -lt 2 ] ; then ctl_usage $0 ; fi ;
375 case "$1" in
376 -compress) shift ; do_compress "$@" ;;
377 -uncompress) shift ; do_uncompress "$@" ;;
378 -purge) shift ; do_purge "$@" ;;
379 *) ctl_usage $0 ;;
380 esac