home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / compsrcs / unix / volume19 / backup next >
SHell self-extracting ARchive  |  1989-06-30  |  52.9 KB

open in: MacOS 8.1     |     Win98     |     DOS

view JSON data     |     view as text

This file was processed as: SHell self-extracting ARchive (archive/shar).

You can browse this item here: backup

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert Newsgroup Content (archive/news) magic Supported
100% dexvert SHell self-extracting ARchive (archive/shar) magic Supported
100% dexvert Internet Message Format (text/imf) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file news, ASCII text default
100% checkBytes Printable ASCII default
100% dexmagic PrintFox/Pagefox WEAK default
100% perlTextCheck Likely Text (Perl) default
100% siegfried fmt/329 Shell Archive Format default
100% detectItEasy Format: plain text[LF] default (weak)
100% xdgMime message/news default



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 50 61 74 68 3a 20 77 75 | 61 72 63 68 69 76 65 21 |Path: wu|archive!|
|00000010| 77 75 67 61 74 65 21 75 | 75 6e 65 74 21 63 73 2e |wugate!u|unet!cs.|
|00000020| 75 74 65 78 61 73 2e 65 | 64 75 21 75 73 63 21 62 |utexas.e|du!usc!b|
|00000030| 62 6e 21 62 62 6e 2e 63 | 6f 6d 21 72 73 61 6c 7a |bn!bbn.c|om!rsalz|
|00000040| 0a 46 72 6f 6d 3a 20 72 | 73 61 6c 7a 40 75 75 6e |.From: r|salz@uun|
|00000050| 65 74 2e 75 75 2e 6e 65 | 74 20 28 52 69 63 68 20 |et.uu.ne|t (Rich |
|00000060| 53 61 6c 7a 29 0a 4e 65 | 77 73 67 72 6f 75 70 73 |Salz).Ne|wsgroups|
|00000070| 3a 20 63 6f 6d 70 2e 73 | 6f 75 72 63 65 73 2e 75 |: comp.s|ources.u|
|00000080| 6e 69 78 0a 53 75 62 6a | 65 63 74 3a 20 76 31 39 |nix.Subj|ect: v19|
|00000090| 69 31 30 32 3a 20 20 53 | 61 76 65 20 66 69 6c 65 |i102: S|ave file|
|000000a0| 73 20 74 68 61 74 20 68 | 61 76 65 20 63 68 61 6e |s that h|ave chan|
|000000b0| 67 65 64 20 69 6e 20 74 | 68 65 20 6c 61 73 74 20 |ged in t|he last |
|000000c0| 6c 69 74 74 6c 65 20 77 | 68 69 6c 65 0a 4d 65 73 |little w|hile.Mes|
|000000d0| 73 61 67 65 2d 49 44 3a | 20 3c 31 38 38 32 40 70 |sage-ID:| <1882@p|
|000000e0| 61 70 61 79 61 2e 62 62 | 6e 2e 63 6f 6d 3e 0a 44 |apaya.bb|n.com>.D|
|000000f0| 61 74 65 3a 20 33 30 20 | 4a 75 6e 20 38 39 20 31 |ate: 30 |Jun 89 1|
|00000100| 34 3a 35 30 3a 30 36 20 | 47 4d 54 0a 4c 69 6e 65 |4:50:06 |GMT.Line|
|00000110| 73 3a 20 31 39 38 31 0a | 41 70 70 72 6f 76 65 64 |s: 1981.|Approved|
|00000120| 3a 20 72 73 61 6c 7a 40 | 75 75 6e 65 74 2e 55 55 |: rsalz@|uunet.UU|
|00000130| 2e 4e 45 54 0a 0a 53 75 | 62 6d 69 74 74 65 64 2d |.NET..Su|bmitted-|
|00000140| 62 79 3a 20 52 61 79 61 | 6e 20 5a 61 63 68 61 72 |by: Raya|n Zachar|
|00000150| 69 61 73 73 65 6e 20 3c | 72 61 79 61 6e 40 61 69 |iassen <|rayan@ai|
|00000160| 2e 74 6f 72 6f 6e 74 6f | 2e 65 64 75 3e 0a 50 6f |.toronto|.edu>.Po|
|00000170| 73 74 69 6e 67 2d 6e 75 | 6d 62 65 72 3a 20 56 6f |sting-nu|mber: Vo|
|00000180| 6c 75 6d 65 20 31 39 2c | 20 49 73 73 75 65 20 31 |lume 19,| Issue 1|
|00000190| 30 32 0a 41 72 63 68 69 | 76 65 2d 6e 61 6d 65 3a |02.Archi|ve-name:|
|000001a0| 20 62 61 63 6b 75 70 0a | 0a 54 68 65 20 62 61 63 | backup.|.The bac|
|000001b0| 6b 75 70 20 70 72 6f 67 | 72 61 6d 20 69 73 20 61 |kup prog|ram is a|
|000001c0| 6e 20 6f 6e 6c 69 6e 65 | 20 64 69 73 6b 2d 74 6f |n online| disk-to|
|000001d0| 2d 64 69 73 6b 20 69 6e | 63 72 65 6d 65 6e 74 61 |-disk in|crementa|
|000001e0| 6c 20 62 61 63 6b 75 70 | 20 75 74 69 6c 69 74 79 |l backup| utility|
|000001f0| 0a 74 68 61 74 20 6d 61 | 69 6e 74 61 69 6e 73 20 |.that ma|intains |
|00000200| 61 20 66 69 6c 65 20 71 | 75 65 75 65 20 69 6e 20 |a file q|ueue in |
|00000210| 61 20 73 65 70 65 72 61 | 74 65 20 70 61 72 74 69 |a sepera|te parti|
|00000220| 74 69 6f 6e 2c 20 63 6f | 70 79 69 6e 67 20 66 69 |tion, co|pying fi|
|00000230| 6c 65 73 20 74 68 61 74 | 0a 68 61 76 65 20 62 65 |les that|.have be|
|00000240| 65 6e 20 6d 6f 64 69 66 | 69 65 64 20 73 69 6e 63 |en modif|ied sinc|
|00000250| 65 20 69 74 73 20 6c 61 | 73 74 20 72 75 6e 20 74 |e its la|st run t|
|00000260| 6f 20 74 68 65 20 73 70 | 65 63 69 61 6c 20 62 61 |o the sp|ecial ba|
|00000270| 63 6b 75 70 20 66 69 6c | 65 73 79 73 74 65 6d 2e |ckup fil|esystem.|
|00000280| 0a 41 73 20 73 70 61 63 | 65 20 69 73 20 6e 65 65 |.As spac|e is nee|
|00000290| 64 65 64 20 6f 6e 20 74 | 68 65 20 62 61 63 6b 75 |ded on t|he backu|
|000002a0| 70 20 70 61 72 74 69 74 | 69 6f 6e 2c 20 6a 75 73 |p partit|ion, jus|
|000002b0| 74 20 65 6e 6f 75 67 68 | 20 6f 66 20 74 68 65 20 |t enough| of the |
|000002c0| 6f 6c 64 65 73 74 20 66 | 69 6c 65 73 0a 61 72 65 |oldest f|iles.are|
|000002d0| 20 72 65 6d 6f 76 65 64 | 20 74 6f 20 6d 61 6b 65 | removed| to make|
|000002e0| 20 73 70 61 63 65 20 66 | 6f 72 20 6e 65 77 20 66 | space f|or new f|
|000002f0| 69 6c 65 20 63 6f 70 69 | 65 73 2e 20 20 49 6e 20 |ile copi|es. In |
|00000300| 6f 74 68 65 72 20 77 6f | 72 64 73 2c 20 61 20 66 |other wo|rds, a f|
|00000310| 69 78 65 64 0a 73 69 7a | 65 20 28 69 6e 20 64 69 |ixed.siz|e (in di|
|00000320| 73 6b 20 62 6c 6f 63 6b | 73 29 20 71 75 65 75 65 |sk block|s) queue|
|00000330| 20 6f 66 20 72 65 63 65 | 6e 74 6c 79 20 6d 6f 64 | of rece|ntly mod|
|00000340| 69 66 69 65 64 20 66 69 | 6c 65 73 2e 0a 0a 41 73 |ified fi|les...As|
|00000350| 73 75 6d 65 73 20 53 75 | 6e 4f 53 20 66 69 6c 65 |sumes Su|nOS file|
|00000360| 73 79 73 74 65 6d 20 69 | 6e 74 65 72 66 61 63 65 |system i|nterface|
|00000370| 20 28 76 6e 6f 64 65 73 | 2c 20 65 74 63 2e 29 2c | (vnodes|, etc.),|
|00000380| 20 77 6f 75 6c 64 20 6e | 6f 74 20 62 65 20 68 61 | would n|ot be ha|
|00000390| 72 64 20 74 6f 0a 70 6f | 72 74 20 74 6f 20 73 74 |rd to.po|rt to st|
|000003a0| 72 61 69 67 68 74 20 42 | 53 44 20 66 69 6c 65 73 |raight B|SD files|
|000003b0| 79 73 74 65 6d 2e 0a 0a | 23 21 20 2f 62 69 6e 2f |ystem...|#! /bin/|
|000003c0| 73 68 0a 23 20 54 68 69 | 73 20 69 73 20 61 20 73 |sh.# Thi|s is a s|
|000003d0| 68 65 6c 6c 20 61 72 63 | 68 69 76 65 2e 20 20 52 |hell arc|hive. R|
|000003e0| 65 6d 6f 76 65 20 61 6e | 79 74 68 69 6e 67 20 62 |emove an|ything b|
|000003f0| 65 66 6f 72 65 20 74 68 | 69 73 20 6c 69 6e 65 2c |efore th|is line,|
|00000400| 20 74 68 65 6e 20 75 6e | 70 61 63 6b 0a 23 20 69 | then un|pack.# i|
|00000410| 74 20 62 79 20 73 61 76 | 69 6e 67 20 69 74 20 69 |t by sav|ing it i|
|00000420| 6e 74 6f 20 61 20 66 69 | 6c 65 20 61 6e 64 20 74 |nto a fi|le and t|
|00000430| 79 70 69 6e 67 20 22 73 | 68 20 66 69 6c 65 22 2e |yping "s|h file".|
|00000440| 20 20 54 6f 20 6f 76 65 | 72 77 72 69 74 65 20 65 | To ove|rwrite e|
|00000450| 78 69 73 74 69 6e 67 0a | 23 20 49 66 20 74 68 69 |xisting.|# If thi|
|00000460| 73 20 61 72 63 68 69 76 | 65 20 69 73 20 63 6f 6d |s archiv|e is com|
|00000470| 70 6c 65 74 65 2c 20 79 | 6f 75 20 77 69 6c 6c 20 |plete, y|ou will |
|00000480| 73 65 65 20 74 68 65 20 | 66 6f 6c 6c 6f 77 69 6e |see the |followin|
|00000490| 67 20 6d 65 73 73 61 67 | 65 20 61 74 20 74 68 65 |g messag|e at the|
|000004a0| 20 65 6e 64 3a 0a 23 09 | 09 22 45 6e 64 20 6f 66 | end:.#.|."End of|
|000004b0| 20 73 68 65 6c 6c 20 61 | 72 63 68 69 76 65 2e 22 | shell a|rchive."|
|000004c0| 0a 23 0a 23 20 43 6f 6e | 74 65 6e 74 73 3a 0a 23 |.#.# Con|tents:.#|
|000004d0| 20 20 20 52 45 41 44 4d | 45 20 4d 61 6b 65 66 69 | READM|E Makefi|
|000004e0| 6c 65 20 62 61 63 6b 75 | 70 2e 38 20 62 61 63 6b |le backu|p.8 back|
|000004f0| 75 70 2e 63 20 62 61 63 | 6b 75 70 2e 63 6f 6e 66 |up.c bac|kup.conf|
|00000500| 0a 23 20 20 20 62 61 63 | 6b 75 70 2e 66 69 6c 74 |.# bac|kup.filt|
|00000510| 65 72 20 67 65 74 62 61 | 63 6b 2e 31 20 67 65 74 |er getba|ck.1 get|
|00000520| 62 61 63 6b 2e 63 20 67 | 65 74 62 61 63 6b 2e 73 |back.c g|etback.s|
|00000530| 68 20 69 6c 77 2e 63 0a | 50 41 54 48 3d 2f 62 69 |h ilw.c.|PATH=/bi|
|00000540| 6e 3a 2f 75 73 72 2f 62 | 69 6e 3a 2f 75 73 72 2f |n:/usr/b|in:/usr/|
|00000550| 75 63 62 20 3b 20 65 78 | 70 6f 72 74 20 50 41 54 |ucb ; ex|port PAT|
|00000560| 48 0a 69 66 20 74 65 73 | 74 20 2d 66 20 52 45 41 |H.if tes|t -f REA|
|00000570| 44 4d 45 20 2d 61 20 22 | 24 7b 31 7d 22 20 21 3d |DME -a "|${1}" !=|
|00000580| 20 22 2d 63 22 20 3b 20 | 74 68 65 6e 20 0a 20 20 | "-c" ; |then . |
|00000590| 65 63 68 6f 20 73 68 61 | 72 3a 20 57 69 6c 6c 20 |echo sha|r: Will |
|000005a0| 6e 6f 74 20 6f 76 65 72 | 2d 77 72 69 74 65 20 65 |not over|-write e|
|000005b0| 78 69 73 74 69 6e 67 20 | 66 69 6c 65 20 5c 22 52 |xisting |file \"R|
|000005c0| 45 41 44 4d 45 5c 22 0a | 65 6c 73 65 0a 65 63 68 |EADME\".|else.ech|
|000005d0| 6f 20 73 68 61 72 3a 20 | 45 78 74 72 61 63 74 69 |o shar: |Extracti|
|000005e0| 6e 67 20 5c 22 52 45 41 | 44 4d 45 5c 22 20 5c 28 |ng \"REA|DME\" \(|
|000005f0| 31 30 38 33 20 63 68 61 | 72 61 63 74 65 72 73 5c |1083 cha|racters\|
|00000600| 29 0a 73 65 64 20 22 73 | 2f 5e 58 2f 2f 22 20 3e |).sed "s|/^X//" >|
|00000610| 52 45 41 44 4d 45 20 3c | 3c 27 45 4e 44 5f 4f 46 |README <|<'END_OF|
|00000620| 5f 52 45 41 44 4d 45 27 | 0a 58 54 68 65 20 62 61 |_README'|.XThe ba|
|00000630| 63 6b 75 70 20 70 72 6f | 67 72 61 6d 20 69 73 20 |ckup pro|gram is |
|00000640| 61 6e 20 6f 6e 6c 69 6e | 65 20 64 69 73 6b 2d 74 |an onlin|e disk-t|
|00000650| 6f 2d 64 69 73 6b 20 69 | 6e 63 72 65 6d 65 6e 74 |o-disk i|ncrement|
|00000660| 61 6c 20 62 61 63 6b 75 | 70 20 75 74 69 6c 69 74 |al backu|p utilit|
|00000670| 79 0a 58 74 68 61 74 20 | 6d 61 69 6e 74 61 69 6e |y.Xthat |maintain|
|00000680| 73 20 61 20 66 69 6c 65 | 20 71 75 65 75 65 20 69 |s a file| queue i|
|00000690| 6e 20 61 20 73 65 70 65 | 72 61 74 65 20 70 61 72 |n a sepe|rate par|
|000006a0| 74 69 74 69 6f 6e 2c 20 | 63 6f 70 79 69 6e 67 20 |tition, |copying |
|000006b0| 66 69 6c 65 73 20 74 68 | 61 74 0a 58 68 61 76 65 |files th|at.Xhave|
|000006c0| 20 62 65 65 6e 20 6d 6f | 64 69 66 69 65 64 20 73 | been mo|dified s|
|000006d0| 69 6e 63 65 20 69 74 73 | 20 6c 61 73 74 20 72 75 |ince its| last ru|
|000006e0| 6e 20 74 6f 20 74 68 65 | 20 73 70 65 63 69 61 6c |n to the| special|
|000006f0| 20 62 61 63 6b 75 70 20 | 66 69 6c 65 73 79 73 74 | backup |filesyst|
|00000700| 65 6d 2e 0a 58 41 73 20 | 73 70 61 63 65 20 69 73 |em..XAs |space is|
|00000710| 20 6e 65 65 64 65 64 20 | 6f 6e 20 74 68 65 20 62 | needed |on the b|
|00000720| 61 63 6b 75 70 20 70 61 | 72 74 69 74 69 6f 6e 2c |ackup pa|rtition,|
|00000730| 20 6a 75 73 74 20 65 6e | 6f 75 67 68 20 6f 66 20 | just en|ough of |
|00000740| 74 68 65 20 6f 6c 64 65 | 73 74 20 66 69 6c 65 73 |the olde|st files|
|00000750| 0a 58 61 72 65 20 72 65 | 6d 6f 76 65 64 20 74 6f |.Xare re|moved to|
|00000760| 20 6d 61 6b 65 20 73 70 | 61 63 65 20 66 6f 72 20 | make sp|ace for |
|00000770| 6e 65 77 20 66 69 6c 65 | 20 63 6f 70 69 65 73 2e |new file| copies.|
|00000780| 20 20 49 6e 20 6f 74 68 | 65 72 20 77 6f 72 64 73 | In oth|er words|
|00000790| 2c 20 61 20 66 69 78 65 | 64 0a 58 73 69 7a 65 20 |, a fixe|d.Xsize |
|000007a0| 28 69 6e 20 64 69 73 6b | 20 62 6c 6f 63 6b 73 29 |(in disk| blocks)|
|000007b0| 20 71 75 65 75 65 20 6f | 66 20 72 65 63 65 6e 74 | queue o|f recent|
|000007c0| 6c 79 20 6d 6f 64 69 66 | 69 65 64 20 66 69 6c 65 |ly modif|ied file|
|000007d0| 73 2e 0a 58 0a 58 0a 58 | 44 65 66 61 75 6c 74 73 |s..X.X.X|Defaults|
|000007e0| 2c 20 6f 76 65 72 72 69 | 64 64 65 6e 20 62 79 20 |, overri|dden by |
|000007f0| 63 6f 6d 6d 61 6e 64 20 | 6c 69 6e 65 20 61 72 67 |command |line arg|
|00000800| 75 6d 65 6e 74 73 3a 0a | 58 0a 58 09 42 41 43 4b |uments:.|X.X.BACK|
|00000810| 55 50 09 09 2f 62 61 63 | 6b 75 70 0a 58 09 43 4f |UP../bac|kup.X.CO|
|00000820| 4e 46 49 47 09 09 2f 65 | 74 63 2f 62 61 63 6b 75 |NFIG../e|tc/backu|
|00000830| 70 2e 63 6f 6e 66 0a 58 | 09 4d 41 58 53 49 5a 45 |p.conf.X|.MAXSIZE|
|00000840| 09 09 31 30 30 6b 0a 58 | 09 44 45 4c 54 41 09 09 |..100k.X|.DELTA..|
|00000850| 32 34 68 72 0a 58 0a 58 | 41 73 73 75 6d 65 73 20 |24hr.X.X|Assumes |
|00000860| 53 75 6e 4f 53 20 66 69 | 6c 65 73 79 73 74 65 6d |SunOS fi|lesystem|
|00000870| 20 69 6e 74 65 72 66 61 | 63 65 20 28 76 6e 6f 64 | interfa|ce (vnod|
|00000880| 65 73 2c 20 65 74 63 2e | 29 2c 20 77 6f 75 6c 64 |es, etc.|), would|
|00000890| 20 6e 6f 74 0a 58 62 65 | 20 68 61 72 64 20 74 6f | not.Xbe| hard to|
|000008a0| 20 70 6f 72 74 20 74 6f | 20 73 74 72 61 69 67 68 | port to| straigh|
|000008b0| 74 20 42 53 44 20 66 69 | 6c 65 73 79 73 74 65 6d |t BSD fi|lesystem|
|000008c0| 2e 0a 58 0a 58 49 6e 73 | 74 61 6c 6c 61 74 69 6f |..X.XIns|tallatio|
|000008d0| 6e 3a 0a 58 0a 58 2d 20 | 45 64 69 74 20 4d 61 6b |n:.X.X- |Edit Mak|
|000008e0| 65 66 69 6c 65 2e 0a 58 | 2d 20 54 77 65 61 6b 20 |efile..X|- Tweak |
|000008f0| 64 65 66 61 75 6c 74 20 | 70 61 72 61 6d 65 74 65 |default |paramete|
|00000900| 72 73 20 69 6e 20 62 61 | 63 6b 75 70 2e 63 20 69 |rs in ba|ckup.c i|
|00000910| 66 20 79 6f 75 20 64 6f | 6e 27 74 20 6c 69 6b 65 |f you do|n't like|
|00000920| 20 74 68 65 20 61 62 6f | 76 65 20 76 61 6c 75 65 | the abo|ve value|
|00000930| 73 2e 0a 58 2d 20 43 72 | 65 61 74 65 20 61 6e 64 |s..X- Cr|eate and|
|00000940| 20 69 6e 73 74 61 6c 6c | 20 61 20 63 6f 6e 66 69 | install| a confi|
|00000950| 67 75 72 61 74 69 6f 6e | 20 66 69 6c 65 2c 20 73 |guration| file, s|
|00000960| 65 65 20 74 68 65 20 65 | 78 61 6d 70 6c 65 20 69 |ee the e|xample i|
|00000970| 6e 20 2e 2f 62 61 63 6b | 75 70 2e 63 6f 6e 66 2e |n ./back|up.conf.|
|00000980| 0a 58 2d 20 6d 61 6b 65 | 3b 20 6d 61 6b 65 20 69 |.X- make|; make i|
|00000990| 6e 73 74 61 6c 6c 0a 58 | 2d 20 41 6c 6c 6f 63 61 |nstall.X|- Alloca|
|000009a0| 74 65 20 61 20 2f 62 61 | 63 6b 75 70 20 70 61 72 |te a /ba|ckup par|
|000009b0| 74 69 74 69 6f 6e 2c 20 | 63 72 65 61 74 65 20 61 |tition, |create a|
|000009c0| 6e 64 20 6d 6f 75 6e 74 | 20 61 6e 20 65 6d 70 74 |nd mount| an empt|
|000009d0| 79 20 66 69 6c 65 73 79 | 73 74 65 6d 20 6f 6e 20 |y filesy|stem on |
|000009e0| 69 74 2e 0a 58 2d 20 41 | 64 64 20 61 20 63 72 6f |it..X- A|dd a cro|
|000009f0| 6e 74 61 62 20 65 6e 74 | 72 79 2c 20 65 2e 67 2e |ntab ent|ry, e.g.|
|00000a00| 3a 0a 58 09 33 37 20 34 | 2c 31 32 2c 32 30 20 2a |:.X.37 4|,12,20 *|
|00000a10| 20 2a 20 2a 20 2f 6c 6f | 63 61 6c 2f 65 74 63 2f | * * /lo|cal/etc/|
|00000a20| 62 61 63 6b 75 70 0a 58 | 0a 58 54 68 61 6e 6b 73 |backup.X|.XThanks|
|00000a30| 20 74 6f 20 4b 65 6e 20 | 4c 61 6c 6f 6e 64 65 20 | to Ken |Lalonde |
|00000a40| 66 6f 72 20 63 6f 64 65 | 20 74 77 65 61 6b 73 2c |for code| tweaks,|
|00000a50| 20 67 65 74 62 61 63 6b | 2e 73 68 2c 20 61 6e 64 | getback|.sh, and|
|00000a60| 20 6d 6f 73 74 20 6f 66 | 20 74 68 69 73 20 52 45 | most of| this RE|
|00000a70| 41 44 4d 45 20 66 69 6c | 65 0a 58 0a 58 72 61 79 |ADME fil|e.X.Xray|
|00000a80| 61 6e 0a 45 4e 44 5f 4f | 46 5f 52 45 41 44 4d 45 |an.END_O|F_README|
|00000a90| 0a 69 66 20 74 65 73 74 | 20 31 30 38 33 20 2d 6e |.if test| 1083 -n|
|00000aa0| 65 20 60 77 63 20 2d 63 | 20 3c 52 45 41 44 4d 45 |e `wc -c| <README|
|00000ab0| 60 3b 20 74 68 65 6e 0a | 20 20 20 20 65 63 68 6f |`; then.| echo|
|00000ac0| 20 73 68 61 72 3a 20 5c | 22 52 45 41 44 4d 45 5c | shar: \|"README\|
|00000ad0| 22 20 75 6e 70 61 63 6b | 65 64 20 77 69 74 68 20 |" unpack|ed with |
|00000ae0| 77 72 6f 6e 67 20 73 69 | 7a 65 21 0a 66 69 0a 23 |wrong si|ze!.fi.#|
|00000af0| 20 65 6e 64 20 6f 66 20 | 6f 76 65 72 77 72 69 74 | end of |overwrit|
|00000b00| 69 6e 67 20 63 68 65 63 | 6b 0a 66 69 0a 69 66 20 |ing chec|k.fi.if |
|00000b10| 74 65 73 74 20 2d 66 20 | 4d 61 6b 65 66 69 6c 65 |test -f |Makefile|
|00000b20| 20 2d 61 20 22 24 7b 31 | 7d 22 20 21 3d 20 22 2d | -a "${1|}" != "-|
|00000b30| 63 22 20 3b 20 74 68 65 | 6e 20 0a 20 20 65 63 68 |c" ; the|n . ech|
|00000b40| 6f 20 73 68 61 72 3a 20 | 57 69 6c 6c 20 6e 6f 74 |o shar: |Will not|
|00000b50| 20 6f 76 65 72 2d 77 72 | 69 74 65 20 65 78 69 73 | over-wr|ite exis|
|00000b60| 74 69 6e 67 20 66 69 6c | 65 20 5c 22 4d 61 6b 65 |ting fil|e \"Make|
|00000b70| 66 69 6c 65 5c 22 0a 65 | 6c 73 65 0a 65 63 68 6f |file\".e|lse.echo|
|00000b80| 20 73 68 61 72 3a 20 45 | 78 74 72 61 63 74 69 6e | shar: E|xtractin|
|00000b90| 67 20 5c 22 4d 61 6b 65 | 66 69 6c 65 5c 22 20 5c |g \"Make|file\" \|
|00000ba0| 28 35 34 39 20 63 68 61 | 72 61 63 74 65 72 73 5c |(549 cha|racters\|
|00000bb0| 29 0a 73 65 64 20 22 73 | 2f 5e 58 2f 2f 22 20 3e |).sed "s|/^X//" >|
|00000bc0| 4d 61 6b 65 66 69 6c 65 | 20 3c 3c 27 45 4e 44 5f |Makefile| <<'END_|
|00000bd0| 4f 46 5f 4d 61 6b 65 66 | 69 6c 65 27 0a 58 44 45 |OF_Makef|ile'.XDE|
|00000be0| 53 54 44 49 52 3d 2f 6c | 6f 63 61 6c 0a 58 43 4f |STDIR=/l|ocal.XCO|
|00000bf0| 50 54 53 20 3d 20 23 20 | 2d 42 73 74 61 74 69 63 |PTS = # |-Bstatic|
|00000c00| 0a 58 43 46 4c 41 47 53 | 20 3d 20 24 28 43 4f 50 |.XCFLAGS| = $(COP|
|00000c10| 54 53 29 20 2d 44 43 4f | 4e 46 49 47 3d 5c 22 24 |TS) -DCO|NFIG=\"$|
|00000c20| 28 44 45 53 54 44 49 52 | 29 2f 65 74 63 2f 62 61 |(DESTDIR|)/etc/ba|
|00000c30| 63 6b 75 70 2e 63 6f 6e | 66 5c 22 0a 58 0a 58 61 |ckup.con|f\".X.Xa|
|00000c40| 6c 6c 3a 09 62 61 63 6b | 75 70 20 67 65 74 62 61 |ll:.back|up getba|
|00000c50| 63 6b 0a 58 0a 58 62 61 | 63 6b 75 70 3a 09 62 61 |ck.X.Xba|ckup:.ba|
|00000c60| 63 6b 75 70 2e 6f 20 69 | 6c 77 2e 6f 0a 58 09 24 |ckup.o i|lw.o.X.$|
|00000c70| 28 43 43 29 20 24 28 43 | 46 4c 41 47 53 29 20 2d |(CC) $(C|FLAGS) -|
|00000c80| 6f 20 62 61 63 6b 75 70 | 20 62 61 63 6b 75 70 2e |o backup| backup.|
|00000c90| 6f 20 69 6c 77 2e 6f 0a | 58 0a 58 69 6e 73 74 61 |o ilw.o.|X.Xinsta|
|00000ca0| 6c 6c 3a 20 61 6c 6c 0a | 58 09 69 6e 73 74 61 6c |ll: all.|X.instal|
|00000cb0| 6c 20 2d 6d 20 37 31 30 | 20 62 61 63 6b 75 70 20 |l -m 710| backup |
|00000cc0| 24 28 44 45 53 54 44 49 | 52 29 2f 65 74 63 2f 62 |$(DESTDI|R)/etc/b|
|00000cd0| 61 63 6b 75 70 0a 58 09 | 69 6e 73 74 61 6c 6c 20 |ackup.X.|install |
|00000ce0| 2d 6d 20 37 35 35 20 67 | 65 74 62 61 63 6b 20 24 |-m 755 g|etback $|
|00000cf0| 28 44 45 53 54 44 49 52 | 29 2f 62 69 6e 2f 67 65 |(DESTDIR|)/bin/ge|
|00000d00| 74 62 61 63 6b 0a 58 09 | 69 6e 73 74 61 6c 6c 20 |tback.X.|install |
|00000d10| 2d 63 20 2d 6d 20 36 34 | 34 20 62 61 63 6b 75 70 |-c -m 64|4 backup|
|00000d20| 2e 38 20 24 28 44 45 53 | 54 44 49 52 29 2f 6d 61 |.8 $(DES|TDIR)/ma|
|00000d30| 6e 2f 6d 61 6e 38 0a 58 | 09 69 6e 73 74 61 6c 6c |n/man8.X|.install|
|00000d40| 20 2d 63 20 2d 6d 20 36 | 34 34 20 67 65 74 62 61 | -c -m 6|44 getba|
|00000d50| 63 6b 2e 31 20 24 28 44 | 45 53 54 44 49 52 29 2f |ck.1 $(D|ESTDIR)/|
|00000d60| 6d 61 6e 2f 6d 61 6e 31 | 0a 58 0a 58 63 6c 65 61 |man/man1|.X.Xclea|
|00000d70| 6e 3a 0a 58 09 72 6d 20 | 2d 66 20 2a 2e 6f 20 62 |n:.X.rm |-f *.o b|
|00000d80| 61 63 6b 75 70 20 67 65 | 74 62 61 63 6b 20 6d 61 |ackup ge|tback ma|
|00000d90| 6b 65 2e 6c 6f 67 0a 58 | 0a 58 64 69 73 74 3a 0a |ke.log.X|.Xdist:.|
|00000da0| 58 09 73 68 61 72 20 52 | 45 41 44 4d 45 20 4d 61 |X.shar R|EADME Ma|
|00000db0| 6b 65 66 69 6c 65 20 62 | 61 63 6b 75 70 2e 38 20 |kefile b|ackup.8 |
|00000dc0| 62 61 63 6b 75 70 2e 63 | 20 62 61 63 6b 75 70 2e |backup.c| backup.|
|00000dd0| 63 6f 6e 66 20 62 61 63 | 6b 75 70 2e 66 69 6c 74 |conf bac|kup.filt|
|00000de0| 65 72 20 67 65 74 62 61 | 63 6b 2e 31 20 67 65 74 |er getba|ck.1 get|
|00000df0| 62 61 63 6b 2e 63 20 67 | 65 74 62 61 63 6b 2e 73 |back.c g|etback.s|
|00000e00| 68 20 69 6c 77 2e 63 20 | 3e 20 62 61 63 6b 75 70 |h ilw.c |> backup|
|00000e10| 2e 73 68 61 72 0a 45 4e | 44 5f 4f 46 5f 4d 61 6b |.shar.EN|D_OF_Mak|
|00000e20| 65 66 69 6c 65 0a 69 66 | 20 74 65 73 74 20 35 34 |efile.if| test 54|
|00000e30| 39 20 2d 6e 65 20 60 77 | 63 20 2d 63 20 3c 4d 61 |9 -ne `w|c -c <Ma|
|00000e40| 6b 65 66 69 6c 65 60 3b | 20 74 68 65 6e 0a 20 20 |kefile`;| then. |
|00000e50| 20 20 65 63 68 6f 20 73 | 68 61 72 3a 20 5c 22 4d | echo s|har: \"M|
|00000e60| 61 6b 65 66 69 6c 65 5c | 22 20 75 6e 70 61 63 6b |akefile\|" unpack|
|00000e70| 65 64 20 77 69 74 68 20 | 77 72 6f 6e 67 20 73 69 |ed with |wrong si|
|00000e80| 7a 65 21 0a 66 69 0a 23 | 20 65 6e 64 20 6f 66 20 |ze!.fi.#| end of |
|00000e90| 6f 76 65 72 77 72 69 74 | 69 6e 67 20 63 68 65 63 |overwrit|ing chec|
|00000ea0| 6b 0a 66 69 0a 69 66 20 | 74 65 73 74 20 2d 66 20 |k.fi.if |test -f |
|00000eb0| 62 61 63 6b 75 70 2e 38 | 20 2d 61 20 22 24 7b 31 |backup.8| -a "${1|
|00000ec0| 7d 22 20 21 3d 20 22 2d | 63 22 20 3b 20 74 68 65 |}" != "-|c" ; the|
|00000ed0| 6e 20 0a 20 20 65 63 68 | 6f 20 73 68 61 72 3a 20 |n . ech|o shar: |
|00000ee0| 57 69 6c 6c 20 6e 6f 74 | 20 6f 76 65 72 2d 77 72 |Will not| over-wr|
|00000ef0| 69 74 65 20 65 78 69 73 | 74 69 6e 67 20 66 69 6c |ite exis|ting fil|
|00000f00| 65 20 5c 22 62 61 63 6b | 75 70 2e 38 5c 22 0a 65 |e \"back|up.8\".e|
|00000f10| 6c 73 65 0a 65 63 68 6f | 20 73 68 61 72 3a 20 45 |lse.echo| shar: E|
|00000f20| 78 74 72 61 63 74 69 6e | 67 20 5c 22 62 61 63 6b |xtractin|g \"back|
|00000f30| 75 70 2e 38 5c 22 20 5c | 28 34 38 37 31 20 63 68 |up.8\" \|(4871 ch|
|00000f40| 61 72 61 63 74 65 72 73 | 5c 29 0a 73 65 64 20 22 |aracters|\).sed "|
|00000f50| 73 2f 5e 58 2f 2f 22 20 | 3e 62 61 63 6b 75 70 2e |s/^X//" |>backup.|
|00000f60| 38 20 3c 3c 27 45 4e 44 | 5f 4f 46 5f 62 61 63 6b |8 <<'END|_OF_back|
|00000f70| 75 70 2e 38 27 0a 58 2e | 54 48 20 42 41 43 4b 55 |up.8'.X.|TH BACKU|
|00000f80| 50 20 38 20 22 55 6f 66 | 54 6f 72 6f 6e 74 6f 22 |P 8 "Uof|Toronto"|
|00000f90| 0a 58 2e 53 48 20 4e 41 | 4d 45 0a 58 62 61 63 6b |.X.SH NA|ME.Xback|
|00000fa0| 75 70 20 5c 2d 20 73 61 | 76 65 20 66 69 6c 65 73 |up \- sa|ve files|
|00000fb0| 20 74 68 61 74 20 68 61 | 76 65 20 63 68 61 6e 67 | that ha|ve chang|
|00000fc0| 65 64 20 69 6e 20 74 68 | 65 20 6c 61 73 74 20 6c |ed in th|e last l|
|00000fd0| 69 74 74 6c 65 20 77 68 | 69 6c 65 0a 58 2e 53 48 |ittle wh|ile.X.SH|
|00000fe0| 20 53 59 4e 4f 50 53 49 | 53 0a 58 2e 42 20 62 61 | SYNOPSI|S.X.B ba|
|00000ff0| 63 6b 75 70 0a 58 5b 20 | 2d 64 65 76 7a 0a 58 2e |ckup.X[ |-devz.X.|
|00001000| 52 49 20 2d 62 20 23 0a | 58 5d 20 5b 20 2d 63 0a |RI -b #.|X] [ -c.|
|00001010| 58 2e 49 20 62 61 63 6b | 75 70 2e 63 6f 6e 66 0a |X.I back|up.conf.|
|00001020| 58 5d 20 5b 20 2d 6f 0a | 58 2e 49 20 2f 62 61 63 |X] [ -o.|X.I /bac|
|00001030| 6b 75 70 0a 58 5d 20 5b | 0a 58 2e 49 20 2f 70 61 |kup.X] [|.X.I /pa|
|00001040| 74 68 0a 58 5c 26 2e 2e | 2e 20 5d 0a 58 2e 53 48 |th.X\&..|. ].X.SH|
|00001050| 20 44 45 53 43 52 49 50 | 54 49 4f 4e 0a 58 2e 49 | DESCRIP|TION.X.I|
|00001060| 20 42 61 63 6b 75 70 0a | 58 63 6f 70 69 65 73 20 | Backup.|Xcopies |
|00001070| 74 6f 20 61 20 73 70 65 | 63 69 61 6c 20 66 69 6c |to a spe|cial fil|
|00001080| 65 73 79 73 74 65 6d 20 | 68 69 65 72 61 72 63 68 |esystem |hierarch|
|00001090| 79 20 61 6c 6c 20 66 69 | 6c 65 73 20 77 68 69 63 |y all fi|les whic|
|000010a0| 68 20 68 61 76 65 20 62 | 65 65 6e 20 6d 6f 64 69 |h have b|een modi|
|000010b0| 66 69 65 64 0a 58 73 69 | 6e 63 65 20 74 68 65 20 |fied.Xsi|nce the |
|000010c0| 70 72 65 76 69 6f 75 73 | 20 72 75 6e 20 6f 66 0a |previous| run of.|
|000010d0| 58 2e 49 20 62 61 63 6b | 75 70 0a 58 6f 6e 20 74 |X.I back|up.Xon t|
|000010e0| 68 61 74 20 73 75 62 74 | 72 65 65 20 6f 66 20 74 |hat subt|ree of t|
|000010f0| 68 65 20 66 69 6c 65 73 | 79 73 74 65 6d 2e 0a 58 |he files|ystem..X|
|00001100| 54 68 65 20 73 75 62 74 | 72 65 65 28 73 29 20 6d |The subt|ree(s) m|
|00001110| 61 79 20 62 65 20 73 70 | 65 63 69 66 69 65 64 20 |ay be sp|ecified |
|00001120| 65 78 70 6c 69 63 69 74 | 6c 79 20 6f 6e 20 74 68 |explicit|ly on th|
|00001130| 65 20 63 6f 6d 6d 61 6e | 64 20 6c 69 6e 65 2e 0a |e comman|d line..|
|00001140| 58 49 66 20 6e 6f 6e 65 | 20 61 72 65 20 67 69 76 |XIf none| are giv|
|00001150| 65 6e 2c 20 61 20 63 6f | 6e 66 69 67 75 72 61 74 |en, a co|nfigurat|
|00001160| 69 6f 6e 20 66 69 6c 65 | 20 28 64 65 66 61 75 6c |ion file| (defaul|
|00001170| 74 20 69 73 0a 58 2e 42 | 52 20 2f 6c 6f 63 61 6c |t is.X.B|R /local|
|00001180| 2f 65 74 63 2f 62 61 63 | 6b 75 70 2e 63 6f 6e 66 |/etc/bac|kup.conf|
|00001190| 20 29 0a 58 69 73 20 72 | 65 61 64 20 74 6f 20 64 | ).Xis r|ead to d|
|000011a0| 65 74 65 72 6d 69 6e 65 | 20 77 68 69 63 68 20 73 |etermine| which s|
|000011b0| 75 62 74 72 65 65 73 20 | 74 6f 20 73 63 61 6e 20 |ubtrees |to scan |
|000011c0| 66 6f 72 20 72 65 63 65 | 6e 74 6c 79 20 63 68 61 |for rece|ntly cha|
|000011d0| 6e 67 65 64 20 66 69 6c | 65 73 2e 0a 58 49 66 20 |nged fil|es..XIf |
|000011e0| 73 75 62 74 72 65 65 73 | 20 61 72 65 20 65 78 70 |subtrees| are exp|
|000011f0| 6c 69 63 69 74 6c 79 20 | 6c 69 73 74 65 64 2c 20 |licitly |listed, |
|00001200| 61 20 72 75 6e 20 69 73 | 20 66 6f 72 63 65 64 2e |a run is| forced.|
|00001210| 20 20 4f 74 68 65 72 77 | 69 73 65 2c 0a 58 2e 49 | Otherw|ise,.X.I|
|00001220| 20 62 61 63 6b 75 70 0a | 58 77 69 6c 6c 20 6f 6e | backup.|Xwill on|
|00001230| 6c 79 20 64 6f 20 69 74 | 73 20 64 65 65 64 20 69 |ly do it|s deed i|
|00001240| 66 20 74 68 65 20 73 75 | 62 74 72 65 65 20 69 73 |f the su|btree is|
|00001250| 20 64 75 65 20 66 6f 72 | 20 62 61 63 6b 69 6e 67 | due for| backing|
|00001260| 20 75 70 20 61 73 20 69 | 6e 64 69 63 61 74 65 64 | up as i|ndicated|
|00001270| 0a 58 62 79 20 74 68 65 | 20 69 6e 74 65 72 76 61 |.Xby the| interva|
|00001280| 6c 20 74 69 6d 65 2c 20 | 61 6e 64 20 74 68 65 20 |l time, |and the |
|00001290| 6c 61 73 74 20 62 61 63 | 6b 75 70 20 73 63 61 6e |last bac|kup scan|
|000012a0| 20 74 69 6d 65 2c 20 69 | 6e 20 74 68 65 20 63 6f | time, i|n the co|
|000012b0| 6e 66 69 67 75 72 61 74 | 69 6f 6e 0a 58 66 69 6c |nfigurat|ion.Xfil|
|000012c0| 65 2e 20 20 49 66 20 74 | 68 65 20 73 75 62 74 72 |e. If t|he subtr|
|000012d0| 65 65 20 69 73 20 6e 6f | 74 20 66 6f 75 6e 64 20 |ee is no|t found |
|000012e0| 69 6e 20 74 68 65 20 63 | 6f 6e 66 69 67 75 72 61 |in the c|onfigura|
|000012f0| 74 69 6f 6e 20 66 69 6c | 65 2c 20 61 6c 6c 20 66 |tion fil|e, all f|
|00001300| 69 6c 65 73 0a 58 63 68 | 61 6e 67 65 64 20 64 75 |iles.Xch|anged du|
|00001310| 72 69 6e 67 20 74 68 65 | 20 6c 61 73 74 20 64 61 |ring the| last da|
|00001320| 79 20 77 69 6c 6c 20 62 | 65 20 73 65 6c 65 63 74 |y will b|e select|
|00001330| 65 64 2e 0a 58 2e 50 50 | 0a 58 54 68 65 20 66 6f |ed..X.PP|.XThe fo|
|00001340| 72 6d 61 74 20 6f 66 20 | 74 68 65 20 63 6f 6e 66 |rmat of |the conf|
|00001350| 69 67 75 72 61 74 69 6f | 6e 20 66 69 6c 65 20 69 |iguratio|n file i|
|00001360| 73 3a 0a 58 2e 49 50 20 | 2d 0a 58 6c 69 6e 65 73 |s:.X.IP |-.Xlines|
|00001370| 20 73 74 61 72 74 69 6e | 67 20 77 69 74 68 0a 58 | startin|g with.X|
|00001380| 2e 42 20 23 0a 58 61 72 | 65 20 69 67 6e 6f 72 65 |.B #.Xar|e ignore|
|00001390| 64 2e 0a 58 2e 49 50 20 | 2d 0a 58 61 6c 6c 20 6f |d..X.IP |-.Xall o|
|000013a0| 74 68 65 72 20 6c 69 6e | 65 73 20 63 6f 6e 74 61 |ther lin|es conta|
|000013b0| 69 6e 20 66 6f 75 72 20 | 73 70 61 63 65 2d 73 65 |in four |space-se|
|000013c0| 70 61 72 61 74 65 64 20 | 66 69 65 6c 64 73 3a 0a |parated |fields:.|
|000013d0| 58 2e 49 50 0a 58 46 69 | 65 6c 64 20 31 20 69 73 |X.IP.XFi|eld 1 is|
|000013e0| 20 74 68 65 20 70 61 74 | 68 20 6e 61 6d 65 20 6f | the pat|h name o|
|000013f0| 66 20 61 20 73 75 62 74 | 72 65 65 20 74 6f 20 62 |f a subt|ree to b|
|00001400| 61 63 6b 20 75 70 2e 0a | 58 2e 49 50 0a 58 46 69 |ack up..|X.IP.XFi|
|00001410| 65 6c 64 20 32 20 69 73 | 20 74 68 65 20 64 65 73 |eld 2 is| the des|
|00001420| 69 72 65 64 20 69 6e 74 | 65 72 76 61 6c 20 62 65 |ired int|erval be|
|00001430| 74 77 65 65 6e 20 62 61 | 63 6b 75 70 73 2e 0a 58 |tween ba|ckups..X|
|00001440| 2e 49 50 0a 58 46 69 65 | 6c 64 20 33 20 69 73 20 |.IP.XFie|ld 3 is |
|00001450| 74 68 65 20 6e 61 6d 65 | 20 6f 66 20 61 20 66 69 |the name| of a fi|
|00001460| 6c 74 65 72 20 66 69 6c | 65 20 63 6f 6e 74 61 69 |lter fil|e contai|
|00001470| 6e 69 6e 67 20 67 6c 6f | 62 20 70 61 74 74 65 72 |ning glo|b patter|
|00001480| 6e 73 2c 0a 58 6f 6e 65 | 20 70 65 72 20 6c 69 6e |ns,.Xone| per lin|
|00001490| 65 2c 20 64 65 73 63 72 | 69 62 69 6e 67 20 6e 61 |e, descr|ibing na|
|000014a0| 6d 65 73 20 6f 66 20 66 | 69 6c 65 73 20 74 6f 0a |mes of f|iles to.|
|000014b0| 58 2e 49 20 69 67 6e 6f | 72 65 0a 58 77 68 65 6e |X.I igno|re.Xwhen|
|000014c0| 20 73 63 61 6e 6e 69 6e | 67 20 74 68 65 20 73 75 | scannin|g the su|
|000014d0| 62 74 72 65 65 2e 0a 58 | 2e 49 50 0a 58 46 69 65 |btree..X|.IP.XFie|
|000014e0| 6c 64 20 34 20 69 73 20 | 61 20 74 69 6d 65 73 74 |ld 4 is |a timest|
|000014f0| 61 6d 70 20 69 6e 20 74 | 68 65 20 65 78 61 63 74 |amp in t|he exact|
|00001500| 20 73 79 6e 74 61 78 20 | 6f 66 0a 58 2e 42 52 20 | syntax |of.X.BR |
|00001510| 63 74 69 6d 65 20 28 33 | 29 2e 0a 58 2e 50 50 0a |ctime (3|)..X.PP.|
|00001520| 58 54 68 69 73 20 69 73 | 20 61 20 73 61 6d 70 6c |XThis is| a sampl|
|00001530| 65 20 63 6f 6e 66 69 67 | 75 72 61 74 69 6f 6e 20 |e config|uration |
|00001540| 66 69 6c 65 3a 0a 58 2e | 74 61 20 31 2e 37 69 2c |file:.X.|ta 1.7i,|
|00001550| 32 2e 33 69 2c 33 2e 37 | 69 0a 58 2e 6e 66 0a 58 |2.3i,3.7|i.X.nf.X|
|00001560| 0a 58 23 20 70 61 74 68 | 09 69 6e 74 76 6c 09 66 |.X# path|.intvl.f|
|00001570| 69 6c 74 65 72 20 66 69 | 6c 65 09 6c 61 73 74 20 |ilter fi|le.last |
|00001580| 64 6f 6e 65 0a 58 2f 75 | 73 72 09 38 68 09 2f 64 |done.X/u|sr.8h./d|
|00001590| 65 76 2f 6e 75 6c 6c 09 | 53 61 74 20 41 70 72 20 |ev/null.|Sat Apr |
|000015a0| 33 30 20 30 30 3a 33 33 | 3a 30 33 20 31 39 38 38 |30 00:33|:03 1988|
|000015b0| 0a 58 2f 68 6f 6d 65 73 | 2f 6e 65 61 74 2f 63 61 |.X/homes|/neat/ca|
|000015c0| 72 09 38 68 09 2f 65 74 | 63 2f 66 69 6c 74 65 72 |r.8h./et|c/filter|
|000015d0| 2e 75 09 53 61 74 20 41 | 70 72 20 33 30 20 30 30 |.u.Sat A|pr 30 00|
|000015e0| 3a 33 33 3a 30 33 20 31 | 39 38 38 0a 58 2f 68 6f |:33:03 1|988.X/ho|
|000015f0| 6d 65 73 2f 6e 65 61 74 | 2f 63 64 72 09 38 68 09 |mes/neat|/cdr.8h.|
|00001600| 2f 65 74 63 2f 66 69 6c | 74 65 72 2e 75 09 53 61 |/etc/fil|ter.u.Sa|
|00001610| 74 20 41 70 72 20 33 30 | 20 30 30 3a 33 33 3a 30 |t Apr 30| 00:33:0|
|00001620| 33 20 31 39 38 38 0a 58 | 2f 76 61 72 09 32 34 68 |3 1988.X|/var.24h|
|00001630| 09 2f 64 65 76 2f 6e 75 | 6c 6c 09 53 61 74 20 41 |./dev/nu|ll.Sat A|
|00001640| 70 72 20 33 30 20 30 30 | 3a 33 33 3a 30 33 20 31 |pr 30 00|:33:03 1|
|00001650| 39 38 38 0a 58 2e 66 69 | 0a 58 2e 50 50 0a 58 54 |988.X.fi|.X.PP.XT|
|00001660| 68 65 20 66 69 72 73 74 | 20 74 68 72 65 65 20 66 |he first| three f|
|00001670| 69 65 6c 64 73 20 61 72 | 65 20 6d 61 69 6e 74 61 |ields ar|e mainta|
|00001680| 69 6e 65 64 20 6d 61 6e | 75 61 6c 6c 79 20 28 61 |ined man|ually (a|
|00001690| 6e 64 20 64 65 66 61 75 | 6c 74 65 64 20 69 66 0a |nd defau|lted if.|
|000016a0| 58 2e 49 20 62 61 63 6b | 75 70 0a 58 69 73 20 67 |X.I back|up.Xis g|
|000016b0| 69 76 65 6e 20 61 20 73 | 75 62 74 72 65 65 20 61 |iven a s|ubtree a|
|000016c0| 72 67 75 6d 65 6e 74 20 | 6e 6f 74 20 61 70 70 65 |rgument |not appe|
|000016d0| 61 72 69 6e 67 20 69 6e | 20 74 68 65 20 63 6f 6e |aring in| the con|
|000016e0| 66 69 67 75 72 61 74 69 | 6f 6e 20 66 69 6c 65 29 |figurati|on file)|
|000016f0| 2e 0a 58 54 68 65 20 6c | 61 73 74 20 66 69 65 6c |..XThe l|ast fiel|
|00001700| 64 20 69 73 20 6d 61 69 | 6e 74 61 69 6e 65 64 20 |d is mai|ntained |
|00001710| 62 79 20 74 68 65 20 70 | 72 6f 67 72 61 6d 20 69 |by the p|rogram i|
|00001720| 74 73 65 6c 66 2e 20 20 | 41 66 74 65 72 20 65 76 |tself. |After ev|
|00001730| 65 72 79 20 73 75 63 63 | 65 73 73 66 75 6c 0a 58 |ery succ|essful.X|
|00001740| 72 75 6e 2c 20 74 68 65 | 20 63 6f 6e 66 69 67 75 |run, the| configu|
|00001750| 72 61 74 69 6f 6e 20 66 | 69 6c 65 20 69 73 20 77 |ration f|ile is w|
|00001760| 72 69 74 74 65 6e 20 6f | 75 74 20 63 6f 6e 74 61 |ritten o|ut conta|
|00001770| 69 6e 69 6e 67 20 74 68 | 65 20 75 70 64 61 74 65 |ining th|e update|
|00001780| 64 20 74 69 6d 65 73 74 | 61 6d 70 0a 58 69 6e 66 |d timest|amp.Xinf|
|00001790| 6f 72 6d 61 74 69 6f 6e | 2e 20 20 54 68 65 20 70 |ormation|. The p|
|000017a0| 75 72 70 6f 73 65 20 6f | 66 20 74 68 65 20 63 6f |urpose o|f the co|
|000017b0| 6e 66 69 67 75 72 61 74 | 69 6f 6e 20 66 69 6c 65 |nfigurat|ion file|
|000017c0| 20 69 73 20 74 6f 20 61 | 6c 6c 6f 77 20 61 6c 6c | is to a|llow all|
|000017d0| 20 69 6e 66 6f 72 6d 61 | 74 69 6f 6e 0a 58 62 65 | informa|tion.Xbe|
|000017e0| 20 6d 61 69 6e 74 61 69 | 6e 65 64 20 69 6e 20 74 | maintai|ned in t|
|000017f0| 68 69 73 20 66 6f 72 6d | 2c 20 61 6e 64 20 74 68 |his form|, and th|
|00001800| 65 0a 58 2e 49 20 62 61 | 63 6b 75 70 0a 58 70 72 |e.X.I ba|ckup.Xpr|
|00001810| 6f 67 72 61 6d 20 73 74 | 61 72 74 65 64 20 76 65 |ogram st|arted ve|
|00001820| 72 79 20 66 72 65 71 75 | 65 6e 74 6c 79 20 62 79 |ry frequ|ently by|
|00001830| 0a 58 2e 42 52 20 63 72 | 6f 6e 20 28 38 29 2e 0a |.X.BR cr|on (8)..|
|00001840| 58 2e 50 50 0a 58 42 61 | 63 6b 65 64 20 75 70 20 |X.PP.XBa|cked up |
|00001850| 66 69 6c 65 73 20 61 72 | 65 20 73 74 6f 72 65 64 |files ar|e stored|
|00001860| 20 69 6e 20 61 20 70 61 | 72 61 6c 6c 65 6c 20 64 | in a pa|rallel d|
|00001870| 69 72 65 63 74 6f 72 79 | 20 68 69 65 72 61 72 63 |irectory| hierarc|
|00001880| 68 79 20 75 6e 64 65 72 | 20 74 68 65 0a 58 72 6f |hy under| the.Xro|
|00001890| 6f 74 20 6f 66 20 74 68 | 65 20 62 61 63 6b 75 70 |ot of th|e backup|
|000018a0| 20 68 69 65 72 61 72 63 | 68 79 20 28 62 79 20 64 | hierarc|hy (by d|
|000018b0| 65 66 61 75 6c 74 0a 58 | 2e 42 52 20 2f 62 61 63 |efault.X|.BR /bac|
|000018c0| 6b 75 70 20 29 2e 0a 58 | 45 61 63 68 20 62 61 63 |kup )..X|Each bac|
|000018d0| 6b 65 64 20 75 70 20 66 | 69 6c 65 20 68 61 73 20 |ked up f|ile has |
|000018e0| 61 73 73 6f 63 69 61 74 | 65 64 20 77 69 74 68 20 |associat|ed with |
|000018f0| 69 74 20 61 20 64 69 72 | 65 63 74 6f 72 79 20 77 |it a dir|ectory w|
|00001900| 68 6f 73 65 20 72 65 6c | 61 74 69 76 65 0a 58 70 |hose rel|ative.Xp|
|00001910| 61 74 68 6e 61 6d 65 20 | 75 6e 64 65 72 20 74 68 |athname |under th|
|00001920| 65 20 72 6f 6f 74 20 6f | 66 20 74 68 65 20 62 61 |e root o|f the ba|
|00001930| 63 6b 75 70 20 68 69 65 | 72 61 72 63 68 79 20 69 |ckup hie|rarchy i|
|00001940| 73 20 69 74 73 20 66 75 | 6c 6c 20 70 61 74 68 6e |s its fu|ll pathn|
|00001950| 61 6d 65 2e 0a 58 54 68 | 69 73 20 64 69 72 65 63 |ame..XTh|is direc|
|00001960| 74 6f 72 79 20 63 6f 6e | 74 61 69 6e 73 20 6f 6e |tory con|tains on|
|00001970| 65 20 6f 72 20 6d 6f 72 | 65 20 62 61 63 6b 65 64 |e or mor|e backed|
|00001980| 20 75 70 20 66 69 6c 65 | 73 20 69 6e 20 66 69 6c | up file|s in fil|
|00001990| 65 73 20 6e 61 6d 65 64 | 20 62 79 0a 58 74 68 65 |es named| by.Xthe|
|000019a0| 20 64 61 74 65 20 6f 66 | 20 74 68 65 20 62 61 63 | date of| the bac|
|000019b0| 6b 75 70 2e 20 20 54 68 | 75 73 2c 20 61 20 75 73 |kup. Th|us, a us|
|000019c0| 65 72 20 77 69 74 68 20 | 61 20 66 69 6c 65 0a 58 |er with |a file.X|
|000019d0| 2e 62 72 0a 58 2e 73 70 | 0a 58 2e 49 20 2f 68 6f |.br.X.sp|.X.I /ho|
|000019e0| 6d 65 73 2f 6e 65 61 74 | 2f 63 61 72 2f 75 73 65 |mes/neat|/car/use|
|000019f0| 72 2f 73 72 63 2f 73 74 | 75 66 66 2e 63 0a 58 2e |r/src/st|uff.c.X.|
|00001a00| 62 72 0a 58 2e 73 70 0a | 58 74 68 61 74 20 68 65 |br.X.sp.|Xthat he|
|00001a10| 20 68 61 73 20 62 65 65 | 6e 20 77 6f 72 6b 69 6e | has bee|n workin|
|00001a20| 67 20 6f 6e 20 61 6e 64 | 20 68 65 6e 63 65 20 68 |g on and| hence h|
|00001a30| 61 73 20 62 65 65 6e 20 | 62 61 63 6b 65 64 20 75 |as been |backed u|
|00001a40| 70 20 61 20 6e 75 6d 62 | 65 72 0a 58 6f 66 20 74 |p a numb|er.Xof t|
|00001a50| 69 6d 65 73 20 6d 69 67 | 68 74 20 66 69 6e 64 20 |imes mig|ht find |
|00001a60| 61 20 73 65 74 20 6f 66 | 20 66 69 6c 65 73 0a 58 |a set of| files.X|
|00001a70| 2e 62 72 0a 58 2e 73 70 | 0a 58 2e 49 52 20 2f 62 |.br.X.sp|.X.IR /b|
|00001a80| 61 63 6b 75 70 2f 68 6f | 6d 65 73 2f 6e 65 61 74 |ackup/ho|mes/neat|
|00001a90| 2f 63 61 72 2f 75 73 65 | 72 2f 73 72 63 2f 73 74 |/car/use|r/src/st|
|00001aa0| 75 66 66 2e 63 2f 41 70 | 72 33 30 2d 30 36 3a 30 |uff.c/Ap|r30-06:0|
|00001ab0| 35 20 2c 0a 58 2e 49 52 | 20 2f 62 61 63 6b 75 70 |5 ,.X.IR| /backup|
|00001ac0| 2f 68 6f 6d 65 73 2f 6e | 65 61 74 2f 63 61 72 2f |/homes/n|eat/car/|
|00001ad0| 75 73 65 72 2f 73 72 63 | 2f 73 74 75 66 66 2e 63 |user/src|/stuff.c|
|00001ae0| 2f 41 70 72 33 30 2d 30 | 39 3a 30 35 20 2c 0a 58 |/Apr30-0|9:05 ,.X|
|00001af0| 2e 62 72 0a 58 2e 73 70 | 0a 58 61 6e 64 0a 58 2e |.br.X.sp|.Xand.X.|
|00001b00| 62 72 0a 58 2e 73 70 0a | 58 2e 49 52 20 2f 62 61 |br.X.sp.|X.IR /ba|
|00001b10| 63 6b 75 70 2f 68 6f 6d | 65 73 2f 6e 65 61 74 2f |ckup/hom|es/neat/|
|00001b20| 63 61 72 2f 75 73 65 72 | 2f 73 72 63 2f 73 74 75 |car/user|/src/stu|
|00001b30| 66 66 2e 63 2f 41 70 72 | 33 30 2d 31 32 3a 30 35 |ff.c/Apr|30-12:05|
|00001b40| 20 2e 0a 58 2e 62 72 0a | 58 2e 73 70 0a 58 50 65 | ..X.br.|X.sp.XPe|
|00001b50| 72 6d 69 73 73 69 6f 6e | 73 20 61 6e 64 20 6f 77 |rmission|s and ow|
|00001b60| 6e 65 72 2f 67 72 6f 75 | 70 20 61 72 65 20 63 6f |ner/grou|p are co|
|00001b70| 70 69 65 64 20 77 69 74 | 68 20 74 68 65 20 66 69 |pied wit|h the fi|
|00001b80| 6c 65 73 2e 0a 58 2e 50 | 50 0a 58 41 73 20 74 68 |les..X.P|P.XAs th|
|00001b90| 65 20 62 61 63 6b 75 70 | 73 20 61 72 65 20 76 65 |e backup|s are ve|
|00001ba0| 72 79 20 65 78 70 65 6e | 73 69 76 65 20 69 6e 20 |ry expen|sive in |
|00001bb0| 74 65 72 6d 73 20 6f 66 | 20 66 69 6c 65 20 73 70 |terms of| file sp|
|00001bc0| 61 63 65 20 6f 6e 6c 79 | 0a 58 66 69 6c 65 73 20 |ace only|.Xfiles |
|00001bd0| 6f 66 20 6c 65 73 73 20 | 74 68 61 6e 20 73 6f 6d |of less |than som|
|00001be0| 65 20 73 69 7a 65 2c 20 | 63 75 72 72 65 6e 74 6c |e size, |currentl|
|00001bf0| 79 20 31 30 30 20 6b 69 | 6c 6f 62 79 74 65 73 2c |y 100 ki|lobytes,|
|00001c00| 20 61 72 65 20 73 61 76 | 65 64 2e 0a 58 46 69 6c | are sav|ed..XFil|
|00001c10| 65 73 20 63 61 6e 20 62 | 65 20 64 65 73 65 6c 65 |es can b|e desele|
|00001c20| 63 74 65 64 20 62 79 20 | 63 72 65 61 74 69 6e 67 |cted by |creating|
|00001c30| 20 61 20 66 69 6c 74 65 | 72 20 66 69 6c 65 2c 20 | a filte|r file, |
|00001c40| 61 6e 64 20 61 64 64 69 | 6e 67 20 74 6f 20 69 74 |and addi|ng to it|
|00001c50| 0a 58 67 6c 6f 62 20 70 | 61 74 74 65 72 6e 73 20 |.Xglob p|atterns |
|00001c60| 74 68 61 74 20 77 6f 75 | 6c 64 20 6d 61 74 63 68 |that wou|ld match|
|00001c70| 20 73 75 73 70 69 63 69 | 6f 75 73 20 6e 61 6d 65 | suspici|ous name|
|00001c80| 73 2e 20 20 20 54 79 70 | 69 63 61 6c 6c 79 2c 0a |s. Typ|ically,.|
|00001c90| 58 66 6f 72 20 65 78 61 | 6d 70 6c 65 0a 58 2e 49 |Xfor exa|mple.X.I|
|00001ca0| 52 20 63 6f 72 65 20 2c | 0a 58 2e 49 52 20 61 2e |R core ,|.X.IR a.|
|00001cb0| 6f 75 74 20 2c 0a 58 65 | 6d 61 63 73 20 74 65 6d |out ,.Xe|macs tem|
|00001cc0| 70 6f 72 61 72 69 65 73 | 20 6c 69 6b 65 0a 58 2e |poraries| like.X.|
|00001cd0| 49 20 23 2a 0a 58 6f 72 | 0a 58 2e 49 20 2a 7e 0a |I #*.Xor|.X.I *~.|
|00001ce0| 58 61 6e 64 20 6d 61 6e | 79 20 6f 74 68 65 72 73 |Xand man|y others|
|00001cf0| 2c 20 61 72 65 20 6e 6f | 74 20 62 61 63 6b 65 64 |, are no|t backed|
|00001d00| 20 75 70 2e 0a 58 2e 50 | 50 0a 58 57 68 65 6e 20 | up..X.P|P.XWhen |
|00001d10| 66 69 6c 65 73 70 61 63 | 65 20 75 73 61 67 65 20 |filespac|e usage |
|00001d20| 6f 6e 20 74 68 65 20 62 | 61 63 6b 75 70 20 72 6f |on the b|ackup ro|
|00001d30| 6f 74 27 73 20 66 69 6c | 65 20 73 79 73 74 65 6d |ot's fil|e system|
|00001d40| 20 70 61 73 73 65 73 20 | 61 20 68 69 67 68 20 77 | passes |a high w|
|00001d50| 61 74 65 72 20 6d 61 72 | 6b 2c 0a 58 63 75 72 72 |ater mar|k,.Xcurr|
|00001d60| 65 6e 74 6c 79 20 39 35 | 25 2c 0a 58 2e 49 0a 58 |ently 95|%,.X.I.X|
|00001d70| 62 61 63 6b 75 70 0a 58 | 64 65 6c 65 74 65 73 20 |backup.X|deletes |
|00001d80| 66 69 6c 65 73 20 69 6e | 20 6f 72 64 65 72 20 62 |files in| order b|
|00001d90| 79 20 6d 6f 64 69 66 69 | 63 61 74 69 6f 6e 20 64 |y modifi|cation d|
|00001da0| 61 74 65 20 75 6e 74 69 | 6c 20 69 74 20 68 61 73 |ate unti|l it has|
|00001db0| 20 65 6e 6f 75 67 68 20 | 73 70 61 63 65 20 75 6e | enough |space un|
|00001dc0| 64 65 72 0a 58 74 68 65 | 20 68 69 67 68 20 77 61 |der.Xthe| high wa|
|00001dd0| 74 65 72 20 6d 61 72 6b | 20 74 6f 20 61 64 64 20 |ter mark| to add |
|00001de0| 6e 65 77 20 62 61 63 6b | 75 70 20 66 69 6c 65 73 |new back|up files|
|00001df0| 2e 0a 58 2e 50 50 0a 58 | 2e 49 20 42 61 63 6b 75 |..X.PP.X|.I Backu|
|00001e00| 70 0a 58 72 65 61 64 73 | 20 74 68 65 20 65 6e 74 |p.Xreads| the ent|
|00001e10| 69 72 65 20 69 2d 6c 69 | 73 74 20 66 6f 72 20 74 |ire i-li|st for t|
|00001e20| 68 65 20 66 69 6c 65 73 | 79 73 74 65 6d 2c 20 73 |he files|ystem, s|
|00001e30| 61 76 69 6e 67 20 69 6e | 66 6f 72 6d 61 74 69 6f |aving in|formatio|
|00001e40| 6e 20 73 75 63 68 20 61 | 73 20 74 68 65 0a 58 6d |n such a|s the.Xm|
|00001e50| 6f 64 69 66 69 63 61 74 | 69 6f 6e 20 74 69 6d 65 |odificat|ion time|
|00001e60| 20 61 6e 64 20 74 79 70 | 65 20 6f 66 20 74 68 65 | and typ|e of the|
|00001e70| 20 69 6e 6f 64 65 2e 20 | 20 54 68 65 72 65 61 66 | inode. | Thereaf|
|00001e80| 74 65 72 20 61 6c 6c 20 | 74 68 65 20 61 70 70 72 |ter all |the appr|
|00001e90| 6f 70 72 69 61 74 65 0a | 58 66 69 6c 65 20 6e 61 |opriate.|Xfile na|
|00001ea0| 6d 65 73 20 61 72 65 20 | 69 64 65 6e 74 69 66 69 |mes are |identifi|
|00001eb0| 65 64 20 62 79 20 74 72 | 65 65 20 77 61 6c 6b 73 |ed by tr|ee walks|
|00001ec0| 20 69 6e 20 74 68 65 20 | 66 69 6c 65 73 79 73 74 | in the |filesyst|
|00001ed0| 65 6d 2c 20 61 6e 64 20 | 62 61 63 6b 65 64 20 75 |em, and |backed u|
|00001ee0| 70 2e 0a 58 49 66 20 66 | 69 6c 65 73 20 6d 75 73 |p..XIf f|iles mus|
|00001ef0| 74 20 62 65 20 64 65 6c | 65 74 65 64 20 66 72 6f |t be del|eted fro|
|00001f00| 6d 20 74 68 65 20 62 61 | 63 6b 75 70 20 68 69 65 |m the ba|ckup hie|
|00001f10| 72 61 72 63 68 79 2c 0a | 58 74 68 65 6e 20 69 74 |rarchy,.|Xthen it|
|00001f20| 20 64 6f 65 73 20 74 68 | 65 20 73 61 6d 65 20 66 | does th|e same f|
|00001f30| 6f 72 20 74 68 65 20 62 | 61 63 6b 75 70 20 73 75 |or the b|ackup su|
|00001f40| 62 74 72 65 65 20 28 6f | 6e 6c 79 20 64 65 6c 65 |btree (o|nly dele|
|00001f50| 74 69 6e 67 20 69 6e 73 | 74 65 61 64 20 6f 66 0a |ting ins|tead of.|
|00001f60| 58 62 61 63 6b 75 70 20 | 75 70 21 29 2e 0a 58 2e |Xbackup |up!)..X.|
|00001f70| 50 50 0a 58 54 68 65 20 | 76 61 72 69 6f 75 73 20 |PP.XThe |various |
|00001f80| 6f 70 74 69 6f 6e 73 20 | 61 72 65 3a 0a 58 2e 49 |options |are:.X.I|
|00001f90| 50 20 2d 62 0a 58 74 68 | 65 20 61 72 67 75 6d 65 |P -b.Xth|e argume|
|00001fa0| 6e 74 20 69 73 20 74 68 | 65 20 6c 61 72 67 65 73 |nt is th|e larges|
|00001fb0| 74 20 73 69 7a 65 20 69 | 6e 20 6b 69 6c 6f 62 79 |t size i|n kiloby|
|00001fc0| 74 65 73 20 6f 66 20 66 | 69 6c 65 73 20 74 6f 20 |tes of f|iles to |
|00001fd0| 63 6f 6e 73 69 64 65 72 | 20 62 61 63 6b 69 6e 67 |consider| backing|
|00001fe0| 20 75 70 2e 0a 58 2e 49 | 50 20 2d 63 0a 58 73 70 | up..X.I|P -c.Xsp|
|00001ff0| 65 63 69 66 69 65 73 20 | 61 6e 20 61 6c 74 65 72 |ecifies |an alter|
|00002000| 6e 61 74 65 20 63 6f 6e | 66 69 67 75 72 61 74 69 |nate con|figurati|
|00002010| 6f 6e 20 66 69 6c 65 2e | 0a 58 2e 49 50 20 2d 64 |on file.|.X.IP -d|
|00002020| 0a 58 74 75 72 6e 73 20 | 61 20 6c 69 74 74 6c 65 |.Xturns |a little|
|00002030| 20 62 69 74 20 6f 66 20 | 64 65 62 75 67 67 69 6e | bit of |debuggin|
|00002040| 67 20 6f 75 74 70 75 74 | 20 6f 6e 2e 0a 58 2e 49 |g output| on..X.I|
|00002050| 50 20 2d 65 0a 58 77 69 | 6c 6c 20 6e 6f 74 20 69 |P -e.Xwi|ll not i|
|00002060| 67 6e 6f 72 65 20 65 78 | 65 63 75 74 61 62 6c 65 |gnore ex|ecutable|
|00002070| 20 66 69 6c 65 73 20 77 | 68 65 6e 20 6c 6f 6f 6b | files w|hen look|
|00002080| 69 6e 67 20 66 6f 72 20 | 66 69 6c 65 73 20 74 6f |ing for |files to|
|00002090| 20 62 61 63 6b 20 75 70 | 2e 0a 58 2e 49 50 20 2d | back up|..X.IP -|
|000020a0| 6f 0a 58 73 70 65 63 69 | 66 69 65 73 20 61 6e 20 |o.Xspeci|fies an |
|000020b0| 61 6c 74 65 72 6e 61 74 | 65 20 62 61 63 6b 75 70 |alternat|e backup|
|000020c0| 20 68 69 65 72 61 72 63 | 68 79 20 74 6f 20 70 6c | hierarc|hy to pl|
|000020d0| 61 63 65 20 62 61 63 6b | 65 64 20 75 70 20 66 69 |ace back|ed up fi|
|000020e0| 6c 65 73 2e 0a 58 2e 49 | 50 20 2d 76 0a 58 74 75 |les..X.I|P -v.Xtu|
|000020f0| 72 6e 73 20 6f 6e 20 76 | 65 72 62 6f 73 69 74 79 |rns on v|erbosity|
|00002100| 2c 20 61 6e 64 20 63 61 | 6e 20 62 65 20 64 6f 75 |, and ca|n be dou|
|00002110| 62 6c 65 64 20 66 6f 72 | 20 6d 6f 72 65 20 63 68 |bled for| more ch|
|00002120| 61 74 74 65 72 2e 0a 58 | 2e 49 50 20 2d 7a 0a 58 |atter..X|.IP -z.X|
|00002130| 61 73 6b 73 20 74 68 65 | 20 70 72 6f 67 72 61 6d |asks the| program|
|00002140| 20 74 6f 20 67 6f 20 74 | 68 72 6f 75 67 68 20 74 | to go t|hrough t|
|00002150| 68 65 20 6d 6f 74 69 6f | 6e 73 2c 20 62 75 74 20 |he motio|ns, but |
|00002160| 74 6f 20 6e 6f 74 20 74 | 61 6b 65 20 61 6e 79 20 |to not t|ake any |
|00002170| 61 63 74 69 6f 6e 0a 58 | 77 68 61 74 73 6f 65 76 |action.X|whatsoev|
|00002180| 65 72 2e 0a 58 2e 53 48 | 20 46 49 4c 45 53 0a 58 |er..X.SH| FILES.X|
|00002190| 2e 74 61 20 32 2e 35 69 | 0a 58 2f 62 61 63 6b 75 |.ta 2.5i|.X/backu|
|000021a0| 70 09 2d 20 6d 6f 75 6e | 74 65 64 20 66 69 6c 65 |p.- moun|ted file|
|000021b0| 73 79 73 74 65 6d 20 66 | 6f 72 20 62 61 63 6b 75 |system f|or backu|
|000021c0| 70 73 0a 58 2e 62 72 0a | 58 2f 6c 6f 63 61 6c 2f |ps.X.br.|X/local/|
|000021d0| 65 74 63 2f 62 61 63 6b | 75 70 2e 63 6f 6e 66 09 |etc/back|up.conf.|
|000021e0| 2d 20 62 61 63 6b 75 70 | 20 63 6f 6e 66 69 67 75 |- backup| configu|
|000021f0| 72 61 74 69 6f 6e 20 69 | 6e 66 6f 72 6d 61 74 69 |ration i|nformati|
|00002200| 6f 6e 0a 58 2e 53 48 20 | 49 4e 46 4f 0a 58 4f 72 |on.X.SH |INFO.XOr|
|00002210| 69 67 69 6e 61 6c 20 69 | 64 65 61 20 62 79 20 43 |iginal i|dea by C|
|00002220| 69 61 72 61 6e 20 4f 27 | 44 6f 6e 6e 65 6c 6c 20 |iaran O'|Donnell |
|00002230| 6f 66 20 55 20 6f 66 20 | 57 61 74 65 72 6c 6f 6f |of U of |Waterloo|
|00002240| 2c 20 77 68 6f 73 65 20 | 76 65 72 73 69 6f 6e 20 |, whose |version |
|00002250| 77 61 73 0a 58 77 72 69 | 74 74 65 6e 20 69 6e 20 |was.Xwri|tten in |
|00002260| 31 39 37 35 2e 20 20 54 | 68 69 73 20 69 73 20 61 |1975. T|his is a|
|00002270| 6e 20 69 6e 64 65 70 65 | 6e 64 65 6e 74 20 72 65 |n indepe|ndent re|
|00002280| 69 6d 70 6c 65 6d 65 6e | 74 61 74 69 6f 6e 20 6e |implemen|tation n|
|00002290| 61 74 69 76 65 20 74 6f | 20 74 68 65 0a 58 53 75 |ative to| the.XSu|
|000022a0| 6e 4f 53 20 65 6e 76 69 | 72 6f 6e 6d 65 6e 74 2c |nOS envi|ronment,|
|000022b0| 20 77 72 69 74 74 65 6e | 20 62 79 20 52 61 79 61 | written| by Raya|
|000022c0| 6e 20 5a 61 63 68 61 72 | 69 61 73 73 65 6e 20 61 |n Zachar|iassen a|
|000022d0| 74 20 55 20 6f 66 20 54 | 6f 72 6f 6e 74 6f 0a 58 |t U of T|oronto.X|
|000022e0| 28 62 75 67 20 66 69 78 | 65 73 20 61 6e 64 20 69 |(bug fix|es and i|
|000022f0| 6d 70 72 6f 76 65 6d 65 | 6e 74 73 20 74 6f 20 3c |mproveme|nts to <|
|00002300| 72 61 79 61 6e 40 61 69 | 2e 74 6f 72 6f 6e 74 6f |rayan@ai|.toronto|
|00002310| 2e 65 64 75 3e 29 2e 0a | 45 4e 44 5f 4f 46 5f 62 |.edu>)..|END_OF_b|
|00002320| 61 63 6b 75 70 2e 38 0a | 69 66 20 74 65 73 74 20 |ackup.8.|if test |
|00002330| 34 38 37 31 20 2d 6e 65 | 20 60 77 63 20 2d 63 20 |4871 -ne| `wc -c |
|00002340| 3c 62 61 63 6b 75 70 2e | 38 60 3b 20 74 68 65 6e |<backup.|8`; then|
|00002350| 0a 20 20 20 20 65 63 68 | 6f 20 73 68 61 72 3a 20 |. ech|o shar: |
|00002360| 5c 22 62 61 63 6b 75 70 | 2e 38 5c 22 20 75 6e 70 |\"backup|.8\" unp|
|00002370| 61 63 6b 65 64 20 77 69 | 74 68 20 77 72 6f 6e 67 |acked wi|th wrong|
|00002380| 20 73 69 7a 65 21 0a 66 | 69 0a 23 20 65 6e 64 20 | size!.f|i.# end |
|00002390| 6f 66 20 6f 76 65 72 77 | 72 69 74 69 6e 67 20 63 |of overw|riting c|
|000023a0| 68 65 63 6b 0a 66 69 0a | 69 66 20 74 65 73 74 20 |heck.fi.|if test |
|000023b0| 2d 66 20 62 61 63 6b 75 | 70 2e 63 20 2d 61 20 22 |-f backu|p.c -a "|
|000023c0| 24 7b 31 7d 22 20 21 3d | 20 22 2d 63 22 20 3b 20 |${1}" !=| "-c" ; |
|000023d0| 74 68 65 6e 20 0a 20 20 | 65 63 68 6f 20 73 68 61 |then . |echo sha|
|000023e0| 72 3a 20 57 69 6c 6c 20 | 6e 6f 74 20 6f 76 65 72 |r: Will |not over|
|000023f0| 2d 77 72 69 74 65 20 65 | 78 69 73 74 69 6e 67 20 |-write e|xisting |
|00002400| 66 69 6c 65 20 5c 22 62 | 61 63 6b 75 70 2e 63 5c |file \"b|ackup.c\|
|00002410| 22 0a 65 6c 73 65 0a 65 | 63 68 6f 20 73 68 61 72 |".else.e|cho shar|
|00002420| 3a 20 45 78 74 72 61 63 | 74 69 6e 67 20 5c 22 62 |: Extrac|ting \"b|
|00002430| 61 63 6b 75 70 2e 63 5c | 22 20 5c 28 32 38 30 34 |ackup.c\|" \(2804|
|00002440| 34 20 63 68 61 72 61 63 | 74 65 72 73 5c 29 0a 73 |4 charac|ters\).s|
|00002450| 65 64 20 22 73 2f 5e 58 | 2f 2f 22 20 3e 62 61 63 |ed "s/^X|//" >bac|
|00002460| 6b 75 70 2e 63 20 3c 3c | 27 45 4e 44 5f 4f 46 5f |kup.c <<|'END_OF_|
|00002470| 62 61 63 6b 75 70 2e 63 | 27 0a 58 2f 2a 0a 58 20 |backup.c|'.X/*.X |
|00002480| 2a 20 62 61 63 6b 75 70 | 20 2d 20 64 6f 20 69 6e |* backup| - do in|
|00002490| 63 72 65 6d 65 6e 74 61 | 6c 20 64 69 73 6b 2d 74 |crementa|l disk-t|
|000024a0| 6f 2d 64 69 73 6b 20 62 | 61 63 6b 75 70 73 20 6f |o-disk b|ackups o|
|000024b0| 66 20 69 6e 64 69 76 69 | 64 75 61 6c 20 66 69 6c |f indivi|dual fil|
|000024c0| 65 73 0a 58 20 2a 0a 58 | 20 2a 20 54 68 69 73 20 |es.X *.X| * This |
|000024d0| 63 6f 64 65 20 69 73 20 | 61 20 63 6f 6d 70 6c 65 |code is |a comple|
|000024e0| 74 65 20 72 65 69 6d 70 | 6c 65 6d 65 6e 74 61 74 |te reimp|lementat|
|000024f0| 69 6f 6e 20 28 66 6f 72 | 20 74 68 65 20 53 75 6e |ion (for| the Sun|
|00002500| 4f 53 20 65 6e 76 69 72 | 6f 6e 6d 65 6e 74 29 0a |OS envir|onment).|
|00002510| 58 20 2a 20 6f 66 20 61 | 6e 20 6f 72 69 67 69 6e |X * of a|n origin|
|00002520| 61 6c 20 69 64 65 61 20 | 62 79 20 43 69 61 72 61 |al idea |by Ciara|
|00002530| 6e 20 4f 27 44 6f 6e 6e | 65 6c 6c 2e 20 20 54 68 |n O'Donn|ell. Th|
|00002540| 69 73 20 69 6d 70 6c 65 | 6d 65 6e 74 61 74 69 6f |is imple|mentatio|
|00002550| 6e 20 69 73 0a 58 20 2a | 20 43 6f 70 79 72 69 67 |n is.X *| Copyrig|
|00002560| 68 74 20 31 39 38 38 20 | 62 79 20 52 61 79 61 6e |ht 1988 |by Rayan|
|00002570| 20 5a 61 63 68 61 72 69 | 61 73 73 65 6e 2c 20 73 | Zachari|assen, s|
|00002580| 6f 6c 65 6c 79 20 74 6f | 20 70 72 65 76 65 6e 74 |olely to| prevent|
|00002590| 20 79 6f 75 20 73 65 6c | 6c 69 6e 67 0a 58 20 2a | you sel|ling.X *|
|000025a0| 20 69 74 20 6f 72 20 70 | 75 74 74 69 6e 67 20 79 | it or p|utting y|
|000025b0| 6f 75 72 20 6e 61 6d 65 | 20 6f 6e 20 69 74 2e 20 |our name| on it. |
|000025c0| 20 46 72 65 65 20 28 67 | 72 61 74 69 73 29 20 72 | Free (g|ratis) r|
|000025d0| 65 64 69 73 74 72 69 62 | 75 74 69 6f 6e 20 69 73 |edistrib|ution is|
|000025e0| 0a 58 20 2a 20 65 6e 63 | 6f 75 72 61 67 65 64 2e |.X * enc|ouraged.|
|000025f0| 0a 58 20 2a 2f 0a 58 0a | 58 23 69 66 6e 64 65 66 |.X */.X.|X#ifndef|
|00002600| 09 6c 69 6e 74 0a 58 73 | 74 61 74 69 63 20 63 68 |.lint.Xs|tatic ch|
|00002610| 61 72 20 2a 52 43 53 69 | 64 20 3d 20 22 24 48 65 |ar *RCSi|d = "$He|
|00002620| 61 64 65 72 3a 20 2f 61 | 69 2f 63 61 72 2f 73 72 |ader: /a|i/car/sr|
|00002630| 63 2f 65 74 63 2f 62 61 | 63 6b 75 70 2f 52 43 53 |c/etc/ba|ckup/RCS|
|00002640| 2f 62 61 63 6b 75 70 2e | 63 2c 76 20 31 2e 32 20 |/backup.|c,v 1.2 |
|00002650| 38 39 2f 30 35 2f 32 33 | 20 32 32 3a 31 33 3a 31 |89/05/23| 22:13:1|
|00002660| 39 20 72 61 79 61 6e 20 | 45 78 70 20 24 22 3b 0a |9 rayan |Exp $";.|
|00002670| 58 23 65 6e 64 69 66 09 | 6c 69 6e 74 0a 58 0a 58 |X#endif.|lint.X.X|
|00002680| 23 69 6e 63 6c 75 64 65 | 20 3c 73 74 64 69 6f 2e |#include| <stdio.|
|00002690| 68 3e 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 63 74 |h>.X#inc|lude <ct|
|000026a0| 79 70 65 2e 68 3e 0a 58 | 23 69 6e 63 6c 75 64 65 |ype.h>.X|#include|
|000026b0| 20 3c 6d 6e 74 65 6e 74 | 2e 68 3e 0a 58 23 69 6e | <mntent|.h>.X#in|
|000026c0| 63 6c 75 64 65 20 3c 76 | 61 6c 75 65 73 2e 68 3e |clude <v|alues.h>|
|000026d0| 0a 58 23 69 6e 63 6c 75 | 64 65 20 3c 65 72 72 6e |.X#inclu|de <errn|
|000026e0| 6f 2e 68 3e 0a 58 23 69 | 6e 63 6c 75 64 65 20 3c |o.h>.X#i|nclude <|
|000026f0| 73 79 73 2f 70 61 72 61 | 6d 2e 68 3e 0a 58 23 69 |sys/para|m.h>.X#i|
|00002700| 6e 63 6c 75 64 65 20 3c | 73 79 73 2f 74 79 70 65 |nclude <|sys/type|
|00002710| 73 2e 68 3e 0a 58 23 69 | 6e 63 6c 75 64 65 20 3c |s.h>.X#i|nclude <|
|00002720| 73 79 73 2f 66 69 6c 65 | 2e 68 3e 0a 58 23 69 6e |sys/file|.h>.X#in|
|00002730| 63 6c 75 64 65 20 3c 73 | 79 73 2f 73 74 61 74 2e |clude <s|ys/stat.|
|00002740| 68 3e 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 73 79 |h>.X#inc|lude <sy|
|00002750| 73 2f 74 69 6d 65 2e 68 | 3e 0a 58 23 69 6e 63 6c |s/time.h|>.X#incl|
|00002760| 75 64 65 20 3c 73 79 73 | 2f 76 6e 6f 64 65 2e 68 |ude <sys|/vnode.h|
|00002770| 3e 0a 58 23 69 6e 63 6c | 75 64 65 20 3c 73 79 73 |>.X#incl|ude <sys|
|00002780| 2f 76 66 73 2e 68 3e 0a | 58 23 69 6e 63 6c 75 64 |/vfs.h>.|X#includ|
|00002790| 65 20 3c 75 66 73 2f 69 | 6e 6f 64 65 2e 68 3e 0a |e <ufs/i|node.h>.|
|000027a0| 58 23 69 6e 63 6c 75 64 | 65 20 3c 75 66 73 2f 66 |X#includ|e <ufs/f|
|000027b0| 73 2e 68 3e 0a 58 23 69 | 6e 63 6c 75 64 65 20 3c |s.h>.X#i|nclude <|
|000027c0| 73 79 73 2f 64 69 72 2e | 68 3e 0a 58 0a 58 23 64 |sys/dir.|h>.X.X#d|
|000027d0| 65 66 69 6e 65 09 48 49 | 57 41 54 45 52 09 09 39 |efine.HI|WATER..9|
|000027e0| 35 09 2f 2a 20 25 20 6f | 66 20 62 61 63 6b 75 70 |5./* % o|f backup|
|000027f0| 20 66 69 6c 65 73 79 73 | 74 65 6d 20 75 73 65 64 | filesys|tem used|
|00002800| 20 61 74 20 68 69 67 68 | 20 77 61 74 65 72 20 2a | at high| water *|
|00002810| 2f 0a 58 23 64 65 66 69 | 6e 65 09 4c 4f 57 41 54 |/.X#defi|ne.LOWAT|
|00002820| 45 52 09 09 38 35 09 2f | 2a 20 25 20 6f 66 20 62 |ER..85./|* % of b|
|00002830| 61 63 6b 75 70 20 66 69 | 6c 65 73 79 73 74 65 6d |ackup fi|lesystem|
|00002840| 20 75 73 65 64 20 61 74 | 20 6c 6f 77 20 77 61 74 | used at| low wat|
|00002850| 65 72 20 2a 2f 0a 58 0a | 58 23 64 65 66 69 6e 65 |er */.X.|X#define|
|00002860| 09 42 41 43 4b 55 50 09 | 09 22 2f 62 61 63 6b 75 |.BACKUP.|."/backu|
|00002870| 70 22 09 2f 2a 20 62 61 | 63 6b 75 70 20 66 69 6c |p"./* ba|ckup fil|
|00002880| 65 73 79 73 74 65 6d 20 | 6d 6f 75 6e 74 20 70 6f |esystem |mount po|
|00002890| 69 6e 74 20 2a 2f 0a 58 | 23 69 66 6e 64 65 66 09 |int */.X|#ifndef.|
|000028a0| 43 4f 4e 46 49 47 0a 58 | 23 64 65 66 69 6e 65 09 |CONFIG.X|#define.|
|000028b0| 43 4f 4e 46 49 47 09 09 | 22 2f 65 74 63 2f 62 61 |CONFIG..|"/etc/ba|
|000028c0| 63 6b 75 70 2e 63 6f 6e | 66 22 09 2f 2a 20 63 6f |ckup.con|f"./* co|
|000028d0| 6e 66 69 67 75 72 61 74 | 69 6f 6e 20 66 69 6c 65 |nfigurat|ion file|
|000028e0| 20 2a 2f 0a 58 23 65 6e | 64 69 66 09 2f 2a 20 21 | */.X#en|dif./* !|
|000028f0| 43 4f 4e 46 49 47 20 2a | 2f 0a 58 0a 58 23 64 65 |CONFIG *|/.X.X#de|
|00002900| 66 69 6e 65 09 4d 41 58 | 53 49 5a 45 09 09 31 30 |fine.MAX|SIZE..10|
|00002910| 30 30 30 30 09 2f 2a 20 | 64 65 66 61 75 6c 74 20 |0000./* |default |
|00002920| 6d 61 78 69 6d 75 6d 20 | 73 69 7a 65 20 6f 66 20 |maximum |size of |
|00002930| 66 69 6c 65 73 20 74 6f | 20 62 61 63 6b 20 75 70 |files to| back up|
|00002940| 20 2a 2f 0a 58 0a 58 23 | 64 65 66 69 6e 65 09 44 | */.X.X#|define.D|
|00002950| 45 4c 54 41 09 09 28 32 | 34 2a 36 30 2a 36 30 29 |ELTA..(2|4*60*60)|
|00002960| 09 2f 2a 20 64 65 66 61 | 75 6c 74 20 74 69 6d 65 |./* defa|ult time|
|00002970| 20 73 69 6e 63 65 20 6c | 61 73 74 20 62 61 63 6b | since l|ast back|
|00002980| 75 70 20 2a 2f 0a 58 0a | 58 69 6e 74 09 6d 61 78 |up */.X.|Xint.max|
|00002990| 73 69 7a 65 20 3d 20 4d | 41 58 53 49 5a 45 3b 09 |size = M|AXSIZE;.|
|000029a0| 2f 2a 20 6d 61 78 69 6d | 75 6d 20 73 69 7a 65 20 |/* maxim|um size |
|000029b0| 69 6e 20 62 79 74 65 73 | 20 6f 66 20 66 69 6c 65 |in bytes| of file|
|000029c0| 73 20 74 6f 20 62 61 63 | 6b 20 75 70 20 2a 2f 0a |s to bac|k up */.|
|000029d0| 58 69 6e 74 09 64 6f 65 | 78 65 63 73 20 3d 20 30 |Xint.doe|xecs = 0|
|000029e0| 3b 09 09 2f 2a 20 73 68 | 6f 75 6c 64 20 77 65 20 |;../* sh|ould we |
|000029f0| 62 61 63 6b 20 75 70 20 | 65 78 65 63 75 74 61 62 |back up |executab|
|00002a00| 6c 65 73 3f 20 2a 2f 0a | 58 0a 58 73 74 72 75 63 |les? */.|X.Xstruc|
|00002a10| 74 20 61 5f 70 61 74 68 | 20 7b 0a 58 09 63 68 61 |t a_path| {.X.cha|
|00002a20| 72 09 09 2a 70 61 74 68 | 3b 09 2f 2a 20 70 61 74 |r..*path|;./* pat|
|00002a30| 68 20 74 6f 20 74 72 65 | 65 20 68 69 65 72 61 72 |h to tre|e hierar|
|00002a40| 63 68 79 20 77 65 20 77 | 61 6e 74 20 74 6f 20 62 |chy we w|ant to b|
|00002a50| 61 63 6b 20 75 70 20 2a | 2f 0a 58 09 63 68 61 72 |ack up *|/.X.char|
|00002a60| 09 09 2a 67 6c 6f 62 3b | 09 2f 2a 20 70 6f 69 6e |..*glob;|./* poin|
|00002a70| 74 65 72 20 74 6f 20 74 | 68 65 20 63 6f 6e 74 65 |ter to t|he conte|
|00002a80| 6e 74 73 20 6f 66 20 74 | 68 65 20 66 69 6c 74 65 |nts of t|he filte|
|00002a90| 72 20 66 69 6c 65 20 2a | 2f 0a 58 09 74 69 6d 65 |r file *|/.X.time|
|00002aa0| 5f 74 09 09 6e 65 77 65 | 72 3b 09 2f 2a 20 62 61 |_t..newe|r;./* ba|
|00002ab0| 63 6b 20 75 70 20 66 69 | 6c 65 73 20 6e 65 77 65 |ck up fi|les newe|
|00002ac0| 72 20 74 68 61 6e 20 74 | 68 69 73 20 74 69 6d 65 |r than t|his time|
|00002ad0| 20 2a 2f 0a 58 09 73 74 | 72 75 63 74 20 63 6f 6e | */.X.st|ruct con|
|00002ae0| 66 69 67 09 2a 63 6f 6e | 66 69 67 3b 2f 2a 20 62 |fig.*con|fig;/* b|
|00002af0| 61 63 6b 20 70 6f 69 6e | 74 65 72 20 74 6f 20 63 |ack poin|ter to c|
|00002b00| 6f 6e 66 69 67 20 73 74 | 72 75 63 74 75 72 65 20 |onfig st|ructure |
|00002b10| 2a 2f 0a 58 09 73 74 72 | 75 63 74 20 61 5f 70 61 |*/.X.str|uct a_pa|
|00002b20| 74 68 09 2a 6e 65 78 74 | 3b 0a 58 7d 3b 0a 58 0a |th.*next|;.X};.X.|
|00002b30| 58 73 74 72 75 63 74 20 | 61 5f 64 65 76 20 7b 0a |Xstruct |a_dev {.|
|00002b40| 58 09 63 68 61 72 09 09 | 2a 74 65 78 74 3b 09 2f |X.char..|*text;./|
|00002b50| 2a 20 72 61 77 20 64 65 | 76 69 63 65 20 6e 61 6d |* raw de|vice nam|
|00002b60| 65 20 2a 2f 0a 58 09 73 | 74 72 75 63 74 20 61 5f |e */.X.s|truct a_|
|00002b70| 70 61 74 68 09 2a 70 61 | 74 68 73 3b 09 2f 2a 20 |path.*pa|ths;./* |
|00002b80| 70 6f 69 6e 74 65 72 20 | 74 6f 20 6c 69 73 74 20 |pointer |to list |
|00002b90| 6f 66 20 70 61 74 68 73 | 20 2a 2f 0a 58 09 73 74 |of paths| */.X.st|
|00002ba0| 72 75 63 74 20 61 5f 64 | 65 76 09 2a 6e 65 78 74 |ruct a_d|ev.*next|
|00002bb0| 3b 09 2f 2a 20 70 6f 69 | 6e 74 65 72 20 74 6f 20 |;./* poi|nter to |
|00002bc0| 6e 65 78 74 20 64 65 76 | 69 63 65 20 2a 2f 0a 58 |next dev|ice */.X|
|00002bd0| 7d 3b 0a 58 0a 58 73 74 | 72 75 63 74 20 61 5f 64 |};.X.Xst|ruct a_d|
|00002be0| 65 76 09 2a 64 65 76 6c | 69 73 74 20 3d 20 4e 55 |ev.*devl|ist = NU|
|00002bf0| 4c 4c 3b 0a 58 0a 58 73 | 74 72 75 63 74 20 63 6f |LL;.X.Xs|truct co|
|00002c00| 6e 66 69 67 20 7b 0a 58 | 09 63 68 61 72 09 2a 70 |nfig {.X|.char.*p|
|00002c10| 61 74 68 3b 09 09 2f 2a | 20 74 6f 70 20 6f 66 20 |ath;../*| top of |
|00002c20| 68 69 65 72 61 72 63 68 | 79 20 77 65 20 77 61 6e |hierarch|y we wan|
|00002c30| 74 20 74 6f 20 62 61 63 | 6b 20 75 70 20 2a 2f 0a |t to bac|k up */.|
|00002c40| 58 09 63 68 61 72 09 2a | 69 6e 74 65 72 76 61 6c |X.char.*|interval|
|00002c50| 3b 09 2f 2a 20 68 6f 77 | 20 6f 66 74 65 6e 20 74 |;./* how| often t|
|00002c60| 6f 20 64 6f 20 69 6e 63 | 72 65 6d 65 6e 74 61 6c |o do inc|remental|
|00002c70| 73 20 2a 2f 0a 58 09 63 | 68 61 72 09 2a 66 69 6c |s */.X.c|har.*fil|
|00002c80| 74 65 72 3b 09 2f 2a 20 | 6e 61 6d 65 20 6f 66 20 |ter;./* |name of |
|00002c90| 66 69 6c 65 20 63 6f 6e | 74 61 69 6e 69 6e 67 20 |file con|taining |
|00002ca0| 72 65 67 65 78 70 27 73 | 20 2a 2f 0a 58 09 63 68 |regexp's| */.X.ch|
|00002cb0| 61 72 09 2a 6c 69 6e 65 | 3b 09 09 2f 2a 20 74 68 |ar.*line|;../* th|
|00002cc0| 65 20 63 6f 6e 66 69 67 | 20 66 69 6c 65 20 6c 69 |e config| file li|
|00002cd0| 6e 65 20 65 78 63 6c 75 | 64 69 6e 67 20 74 69 6d |ne exclu|ding tim|
|00002ce0| 65 20 66 69 65 6c 64 20 | 2a 2f 0a 58 09 74 69 6d |e field |*/.X.tim|
|00002cf0| 65 5f 74 09 6c 61 73 74 | 74 69 6d 65 3b 09 2f 2a |e_t.last|time;./*|
|00002d00| 20 6c 61 73 74 20 74 69 | 6d 65 20 69 6e 63 72 65 | last ti|me incre|
|00002d10| 6d 65 6e 74 61 6c 73 20 | 77 65 72 65 20 64 6f 6e |mentals |were don|
|00002d20| 65 20 68 65 72 65 20 2a | 2f 0a 58 09 73 74 72 75 |e here *|/.X.stru|
|00002d30| 63 74 20 63 6f 6e 66 69 | 67 09 2a 6e 65 78 74 3b |ct confi|g.*next;|
|00002d40| 0a 58 7d 3b 0a 58 0a 58 | 63 68 61 72 09 2a 70 72 |.X};.X.X|char.*pr|
|00002d50| 6f 67 6e 61 6d 65 2c 20 | 2a 62 61 63 6b 75 70 2c |ogname, |*backup,|
|00002d60| 20 2a 64 65 76 62 61 63 | 6b 75 70 2c 20 2a 62 61 | *devbac|kup, *ba|
|00002d70| 63 6b 75 70 6d 6e 74 3b | 0a 58 69 6e 74 09 64 65 |ckupmnt;|.Xint.de|
|00002d80| 62 75 67 2c 20 76 65 72 | 62 6f 73 65 2c 20 64 72 |bug, ver|bose, dr|
|00002d90| 79 72 75 6e 3b 0a 58 74 | 69 6d 65 5f 74 09 6e 6f |yrun;.Xt|ime_t.no|
|00002da0| 77 2c 20 6c 61 73 74 74 | 69 6d 65 3b 0a 58 0a 58 |w, lastt|ime;.X.X|
|00002db0| 65 78 74 65 72 6e 20 69 | 6e 74 09 6f 70 74 69 6e |extern i|nt.optin|
|00002dc0| 64 3b 0a 58 65 78 74 65 | 72 6e 20 63 68 61 72 09 |d;.Xexte|rn char.|
|00002dd0| 2a 6f 70 74 61 72 67 3b | 0a 58 65 78 74 65 72 6e |*optarg;|.Xextern|
|00002de0| 20 63 68 61 72 09 2a 65 | 6d 61 6c 6c 6f 63 28 29 | char.*e|malloc()|
|00002df0| 3b 0a 58 0a 58 23 64 65 | 66 69 6e 65 09 45 4d 53 |;.X.X#de|fine.EMS|
|00002e00| 47 28 78 29 09 28 65 72 | 72 6e 6f 20 3c 20 73 79 |G(x).(er|rno < sy|
|00002e10| 73 5f 6e 65 72 72 20 3f | 20 73 79 73 5f 65 72 72 |s_nerr ?| sys_err|
|00002e20| 6c 69 73 74 5b 78 5d 20 | 3a 20 5c 0a 58 09 20 20 |list[x] |: \.X. |
|00002e30| 20 20 20 20 20 28 73 70 | 72 69 6e 74 66 28 65 72 | (sp|rintf(er|
|00002e40| 72 6d 73 67 62 75 66 2c | 20 22 75 6e 6b 6e 6f 77 |rmsgbuf,| "unknow|
|00002e50| 6e 20 65 72 72 6f 72 20 | 25 64 22 2c 20 65 72 72 |n error |%d", err|
|00002e60| 6e 6f 29 2c 20 65 72 72 | 6d 73 67 62 75 66 29 29 |no), err|msgbuf))|
|00002e70| 0a 58 0a 58 65 78 74 65 | 72 6e 20 69 6e 74 09 65 |.X.Xexte|rn int.e|
|00002e80| 72 72 6e 6f 2c 20 73 79 | 73 5f 6e 65 72 72 3b 0a |rrno, sy|s_nerr;.|
|00002e90| 58 65 78 74 65 72 6e 20 | 63 68 61 72 09 2a 73 79 |Xextern |char.*sy|
|00002ea0| 73 5f 65 72 72 6c 69 73 | 74 5b 5d 3b 0a 58 63 68 |s_errlis|t[];.Xch|
|00002eb0| 61 72 09 09 65 72 72 6d | 73 67 62 75 66 5b 33 30 |ar..errm|sgbuf[30|
|00002ec0| 5d 3b 0a 58 0a 58 6d 61 | 69 6e 28 61 72 67 63 2c |];.X.Xma|in(argc,|
|00002ed0| 20 61 72 67 76 29 0a 58 | 09 69 6e 74 09 61 72 67 | argv).X|.int.arg|
|00002ee0| 63 3b 0a 58 09 63 68 61 | 72 09 2a 61 72 67 76 5b |c;.X.cha|r.*argv[|
|00002ef0| 5d 3b 0a 58 7b 0a 58 09 | 69 6e 74 09 09 63 2c 20 |];.X{.X.|int..c, |
|00002f00| 65 72 72 66 6c 61 67 3b | 0a 58 09 63 68 61 72 09 |errflag;|.X.char.|
|00002f10| 09 2a 63 66 66 69 6c 65 | 3b 0a 58 09 73 74 72 75 |.*cffile|;.X.stru|
|00002f20| 63 74 20 61 5f 64 65 76 | 09 2a 6c 70 3b 0a 58 09 |ct a_dev|.*lp;.X.|
|00002f30| 73 74 72 75 63 74 20 61 | 5f 70 61 74 68 09 2a 70 |struct a|_path.*p|
|00002f40| 70 3b 0a 58 09 73 74 72 | 75 63 74 20 63 6f 6e 66 |p;.X.str|uct conf|
|00002f50| 69 67 09 2a 63 66 2c 20 | 2a 63 66 70 3b 0a 58 09 |ig.*cf, |*cfp;.X.|
|00002f60| 46 49 4c 45 09 09 2a 63 | 66 5f 66 70 3b 0a 58 09 |FILE..*c|f_fp;.X.|
|00002f70| 65 78 74 65 72 6e 20 74 | 69 6d 65 5f 74 20 74 69 |extern t|ime_t ti|
|00002f80| 6d 65 28 29 3b 0a 58 09 | 65 78 74 65 72 6e 20 63 |me();.X.|extern c|
|00002f90| 68 61 72 20 2a 67 65 74 | 64 65 76 69 63 65 28 29 |har *get|device()|
|00002fa0| 2c 20 2a 67 65 74 70 61 | 74 68 28 29 2c 20 2a 63 |, *getpa|th(), *c|
|00002fb0| 74 69 6d 65 28 29 3b 0a | 58 09 65 78 74 65 72 6e |time();.|X.extern|
|00002fc0| 20 73 74 72 75 63 74 20 | 63 6f 6e 66 69 67 20 2a | struct |config *|
|00002fd0| 72 65 61 64 63 6f 6e 66 | 69 67 28 29 3b 0a 58 09 |readconf|ig();.X.|
|00002fe0| 65 78 74 65 72 6e 20 76 | 6f 69 64 20 77 72 69 74 |extern v|oid writ|
|00002ff0| 65 63 6f 6e 66 69 67 28 | 29 3b 0a 58 0a 58 09 70 |econfig(|);.X.X.p|
|00003000| 72 6f 67 6e 61 6d 65 20 | 3d 20 61 72 67 76 5b 30 |rogname |= argv[0|
|00003010| 5d 3b 0a 58 09 65 72 72 | 66 6c 61 67 20 3d 20 30 |];.X.err|flag = 0|
|00003020| 3b 0a 58 09 64 72 79 72 | 75 6e 20 3d 20 30 3b 0a |;.X.dryr|un = 0;.|
|00003030| 58 09 64 65 62 75 67 20 | 3d 20 76 65 72 62 6f 73 |X.debug |= verbos|
|00003040| 65 20 3d 20 30 3b 0a 58 | 09 62 61 63 6b 75 70 20 |e = 0;.X|.backup |
|00003050| 3d 20 42 41 43 4b 55 50 | 3b 0a 58 09 63 66 66 69 |= BACKUP|;.X.cffi|
|00003060| 6c 65 20 3d 20 43 4f 4e | 46 49 47 3b 0a 58 09 77 |le = CON|FIG;.X.w|
|00003070| 68 69 6c 65 20 28 28 63 | 20 3d 20 67 65 74 6f 70 |hile ((c| = getop|
|00003080| 74 28 61 72 67 63 2c 20 | 61 72 67 76 2c 20 22 62 |t(argc, |argv, "b|
|00003090| 63 3a 64 65 76 6f 3a 7a | 22 29 29 20 21 3d 20 45 |c:devo:z|")) != E|
|000030a0| 4f 46 29 20 7b 0a 58 09 | 09 73 77 69 74 63 68 20 |OF) {.X.|.switch |
|000030b0| 28 63 29 20 7b 0a 58 09 | 09 63 61 73 65 20 27 62 |(c) {.X.|.case 'b|
|000030c0| 27 3a 09 2f 2a 20 64 6f | 6e 27 74 20 62 61 63 6b |':./* do|n't back|
|000030d0| 20 75 70 20 66 69 6c 65 | 73 20 6c 61 72 67 65 72 | up file|s larger|
|000030e0| 20 74 68 61 6e 20 61 72 | 67 20 6b 62 79 74 65 73 | than ar|g kbytes|
|000030f0| 20 2a 2f 0a 58 09 09 09 | 69 66 20 28 28 6d 61 78 | */.X...|if ((max|
|00003100| 73 69 7a 65 20 3d 20 61 | 74 6f 69 28 6f 70 74 61 |size = a|toi(opta|
|00003110| 72 67 29 29 20 3c 20 31 | 29 20 7b 0a 58 09 09 09 |rg)) < 1|) {.X...|
|00003120| 09 66 70 72 69 6e 74 66 | 28 73 74 64 65 72 72 2c |.fprintf|(stderr,|
|00003130| 0a 58 09 09 09 09 09 22 | 25 73 3a 20 69 6c 6c 65 |.X....."|%s: ille|
|00003140| 67 61 6c 20 61 72 67 75 | 6d 65 6e 74 20 74 6f 20 |gal argu|ment to |
|00003150| 2d 62 3a 20 25 64 5c 6e | 22 2c 0a 58 09 09 09 09 |-b: %d\n|",.X....|
|00003160| 09 70 72 6f 67 6e 61 6d | 65 2c 20 6f 70 74 61 72 |.prognam|e, optar|
|00003170| 67 29 3b 0a 58 09 09 09 | 09 2b 2b 65 72 72 66 6c |g);.X...|.++errfl|
|00003180| 61 67 3b 0a 58 09 09 09 | 7d 20 65 6c 73 65 0a 58 |ag;.X...|} else.X|
|00003190| 09 09 09 09 6d 61 78 73 | 69 7a 65 20 3c 3c 3d 20 |....maxs|ize <<= |
|000031a0| 31 30 3b 09 09 2f 2a 20 | 6d 75 6c 74 69 70 6c 65 |10;../* |multiple|
|000031b0| 20 6f 66 20 31 6b 20 2a | 2f 0a 58 09 09 09 62 72 | of 1k *|/.X...br|
|000031c0| 65 61 6b 3b 0a 58 09 09 | 63 61 73 65 20 27 63 27 |eak;.X..|case 'c'|
|000031d0| 3a 09 2f 2a 20 73 70 65 | 63 69 66 79 20 61 6c 74 |:./* spe|cify alt|
|000031e0| 65 72 6e 61 74 65 20 63 | 6f 6e 66 69 67 75 72 61 |ernate c|onfigura|
|000031f0| 74 69 6f 6e 20 66 69 6c | 65 20 2a 2f 0a 58 09 09 |tion fil|e */.X..|
|00003200| 09 63 66 66 69 6c 65 20 | 3d 20 6f 70 74 61 72 67 |.cffile |= optarg|
|00003210| 3b 0a 58 09 09 09 62 72 | 65 61 6b 3b 0a 58 09 09 |;.X...br|eak;.X..|
|00003220| 63 61 73 65 20 27 64 27 | 3a 09 2f 2a 20 64 65 62 |case 'd'|:./* deb|
|00003230| 75 67 67 69 6e 67 20 6f | 75 74 70 75 74 20 2a 2f |ugging o|utput */|
|00003240| 0a 58 09 09 09 2b 2b 64 | 65 62 75 67 3b 0a 58 09 |.X...++d|ebug;.X.|
|00003250| 09 09 62 72 65 61 6b 3b | 0a 58 09 09 63 61 73 65 |..break;|.X..case|
|00003260| 20 27 65 27 3a 09 2f 2a | 20 63 6f 70 79 20 65 78 | 'e':./*| copy ex|
|00003270| 65 63 75 74 61 62 6c 65 | 73 20 2a 2f 0a 58 09 09 |ecutable|s */.X..|
|00003280| 09 2b 2b 64 6f 65 78 65 | 63 73 3b 0a 58 09 09 09 |.++doexe|cs;.X...|
|00003290| 62 72 65 61 6b 3b 0a 58 | 09 09 63 61 73 65 20 27 |break;.X|..case '|
|000032a0| 76 27 3a 09 2f 2a 20 62 | 65 20 28 6d 6f 72 65 20 |v':./* b|e (more |
|000032b0| 61 6e 64 20 6d 6f 72 65 | 29 20 76 65 72 62 6f 73 |and more|) verbos|
|000032c0| 65 20 2a 2f 0a 58 09 09 | 09 2b 2b 76 65 72 62 6f |e */.X..|.++verbo|
|000032d0| 73 65 3b 0a 58 09 09 09 | 62 72 65 61 6b 3b 0a 58 |se;.X...|break;.X|
|000032e0| 09 09 63 61 73 65 20 27 | 6f 27 3a 09 2f 2a 20 73 |..case '|o':./* s|
|000032f0| 70 65 63 69 66 79 20 61 | 6c 74 65 72 6e 61 74 65 |pecify a|lternate|
|00003300| 20 62 61 63 6b 75 70 20 | 6c 6f 63 61 74 69 6f 6e | backup |location|
|00003310| 20 2a 2f 0a 58 09 09 09 | 62 61 63 6b 75 70 20 3d | */.X...|backup =|
|00003320| 20 6f 70 74 61 72 67 3b | 0a 58 09 09 09 62 72 65 | optarg;|.X...bre|
|00003330| 61 6b 3b 0a 58 09 09 63 | 61 73 65 20 27 7a 27 3a |ak;.X..c|ase 'z':|
|00003340| 09 2f 2a 20 66 61 6b 65 | 20 69 74 20 2a 2f 0a 58 |./* fake| it */.X|
|00003350| 09 09 09 2b 2b 64 72 79 | 72 75 6e 3b 0a 58 09 09 |...++dry|run;.X..|
|00003360| 09 62 72 65 61 6b 3b 0a | 58 09 09 64 65 66 61 75 |.break;.|X..defau|
|00003370| 6c 74 3a 0a 58 09 09 09 | 2b 2b 65 72 72 66 6c 61 |lt:.X...|++errfla|
|00003380| 67 3b 0a 58 09 09 7d 0a | 58 09 7d 0a 58 09 28 76 |g;.X..}.|X.}.X.(v|
|00003390| 6f 69 64 29 20 74 69 6d | 65 28 26 6e 6f 77 29 3b |oid) tim|e(&now);|
|000033a0| 0a 58 09 69 66 20 28 28 | 63 66 5f 66 70 20 3d 20 |.X.if ((|cf_fp = |
|000033b0| 66 6f 70 65 6e 28 63 66 | 66 69 6c 65 2c 20 22 72 |fopen(cf|file, "r|
|000033c0| 2b 22 29 29 20 3d 3d 20 | 4e 55 4c 4c 29 20 7b 0a |+")) == |NULL) {.|
|000033d0| 58 09 09 66 70 72 69 6e | 74 66 28 73 74 64 65 72 |X..fprin|tf(stder|
|000033e0| 72 2c 20 22 25 73 3a 20 | 6f 70 65 6e 28 25 73 29 |r, "%s: |open(%s)|
|000033f0| 3a 20 25 73 5c 6e 22 2c | 0a 58 09 09 09 09 70 72 |: %s\n",|.X....pr|
|00003400| 6f 67 6e 61 6d 65 2c 20 | 63 66 66 69 6c 65 2c 20 |ogname, |cffile, |
|00003410| 45 4d 53 47 28 65 72 72 | 6e 6f 29 20 2f 2a 20 2e |EMSG(err|no) /* .|
|00003420| 2e 2e 20 2a 2f 29 3b 0a | 58 09 09 55 73 61 67 65 |.. */);.|X..Usage|
|00003430| 28 29 3b 0a 58 09 7d 0a | 58 09 69 66 20 28 76 65 |();.X.}.|X.if (ve|
|00003440| 72 62 6f 73 65 0a 58 09 | 20 20 20 20 26 26 20 66 |rbose.X.| && f|
|00003450| 6c 6f 63 6b 28 66 69 6c | 65 6e 6f 28 63 66 5f 66 |lock(fil|eno(cf_f|
|00003460| 70 29 2c 20 4c 4f 43 4b | 5f 45 58 7c 4c 4f 43 4b |p), LOCK|_EX|LOCK|
|00003470| 5f 4e 42 29 20 3c 20 30 | 0a 58 09 20 20 20 20 26 |_NB) < 0|.X. &|
|00003480| 26 20 65 72 72 6e 6f 20 | 3d 3d 20 45 57 4f 55 4c |& errno |== EWOUL|
|00003490| 44 42 4c 4f 43 4b 29 0a | 58 09 09 70 72 69 6e 74 |DBLOCK).|X..print|
|000034a0| 66 28 22 77 61 69 74 69 | 6e 67 20 66 6f 72 20 65 |f("waiti|ng for e|
|000034b0| 78 63 6c 75 73 69 76 65 | 20 6c 6f 63 6b 20 6f 6e |xclusive| lock on|
|000034c0| 20 25 73 5c 6e 22 2c 20 | 63 66 66 69 6c 65 29 3b | %s\n", |cffile);|
|000034d0| 0a 58 09 69 66 20 28 66 | 6c 6f 63 6b 28 66 69 6c |.X.if (f|lock(fil|
|000034e0| 65 6e 6f 28 63 66 5f 66 | 70 29 2c 20 4c 4f 43 4b |eno(cf_f|p), LOCK|
|000034f0| 5f 45 58 29 20 3c 20 30 | 29 20 7b 0a 58 09 09 66 |_EX) < 0|) {.X..f|
|00003500| 70 72 69 6e 74 66 28 73 | 74 64 65 72 72 2c 20 22 |printf(s|tderr, "|
|00003510| 25 73 3a 20 63 61 6e 27 | 74 20 67 65 74 20 6c 6f |%s: can'|t get lo|
|00003520| 63 6b 20 6f 6e 20 25 73 | 5c 6e 22 2c 0a 58 09 09 |ck on %s|\n",.X..|
|00003530| 09 09 70 72 6f 67 6e 61 | 6d 65 2c 20 63 66 66 69 |..progna|me, cffi|
|00003540| 6c 65 29 3b 0a 58 09 09 | 65 78 69 74 28 31 29 3b |le);.X..|exit(1);|
|00003550| 0a 58 09 7d 20 65 6c 73 | 65 20 69 66 20 28 76 65 |.X.} els|e if (ve|
|00003560| 72 62 6f 73 65 20 3e 20 | 31 29 20 7b 0a 58 09 09 |rbose > |1) {.X..|
|00003570| 73 65 74 62 75 66 28 73 | 74 64 6f 75 74 2c 20 28 |setbuf(s|tdout, (|
|00003580| 63 68 61 72 20 2a 29 4e | 55 4c 4c 29 3b 0a 58 09 |char *)N|ULL);.X.|
|00003590| 09 70 72 69 6e 74 66 28 | 22 53 74 61 72 74 20 61 |.printf(|"Start a|
|000035a0| 74 20 25 73 6c 6f 63 6b | 65 64 20 25 73 5c 6e 22 |t %slock|ed %s\n"|
|000035b0| 2c 20 63 74 69 6d 65 28 | 26 6e 6f 77 29 2c 20 63 |, ctime(|&now), c|
|000035c0| 66 66 69 6c 65 29 3b 0a | 58 09 7d 0a 58 09 63 66 |ffile);.|X.}.X.cf|
|000035d0| 20 3d 20 72 65 61 64 63 | 6f 6e 66 69 67 28 63 66 | = readc|onfig(cf|
|000035e0| 5f 66 70 29 3b 0a 58 09 | 69 66 20 28 6f 70 74 69 |_fp);.X.|if (opti|
|000035f0| 6e 64 20 3d 3d 20 61 72 | 67 63 29 20 7b 0a 58 09 |nd == ar|gc) {.X.|
|00003600| 09 2f 2a 20 66 69 67 75 | 72 65 20 6f 75 74 20 77 |./* figu|re out w|
|00003610| 68 61 74 20 77 65 20 73 | 68 6f 75 6c 64 20 62 61 |hat we s|hould ba|
|00003620| 63 6b 20 75 70 20 2a 2f | 0a 58 09 09 66 6f 72 20 |ck up */|.X..for |
|00003630| 28 63 66 70 20 3d 20 63 | 66 3b 20 63 66 70 20 21 |(cfp = c|f; cfp !|
|00003640| 3d 20 4e 55 4c 4c 3b 20 | 63 66 70 20 3d 20 63 66 |= NULL; |cfp = cf|
|00003650| 70 2d 3e 6e 65 78 74 29 | 20 7b 0a 58 09 09 09 69 |p->next)| {.X...i|
|00003660| 66 20 28 63 66 70 2d 3e | 6c 61 73 74 74 69 6d 65 |f (cfp->|lasttime|
|00003670| 20 3d 3d 20 30 29 20 7b | 0a 58 09 09 09 09 69 66 | == 0) {|.X....if|
|00003680| 20 28 64 65 62 75 67 29 | 0a 58 09 09 09 09 09 70 | (debug)|.X.....p|
|00003690| 72 69 6e 74 66 28 22 25 | 73 3a 20 6c 61 73 74 74 |rintf("%|s: lastt|
|000036a0| 69 6d 65 20 69 73 20 30 | 5c 6e 22 2c 20 63 66 70 |ime is 0|\n", cfp|
|000036b0| 2d 3e 70 61 74 68 29 3b | 0a 58 09 09 09 09 63 6f |->path);|.X....co|
|000036c0| 6e 74 69 6e 75 65 3b 0a | 58 09 09 09 7d 0a 58 09 |ntinue;.|X...}.X.|
|000036d0| 09 09 2f 2a 20 67 69 76 | 65 20 35 20 6d 69 6e 75 |../* giv|e 5 minu|
|000036e0| 74 65 73 20 6c 65 65 77 | 61 79 20 2a 2f 0a 58 09 |tes leew|ay */.X.|
|000036f0| 09 09 69 66 20 28 63 66 | 70 2d 3e 6c 61 73 74 74 |..if (cf|p->lastt|
|00003700| 69 6d 65 20 2b 20 69 6e | 74 65 72 76 61 6c 28 63 |ime + in|terval(c|
|00003710| 66 70 2d 3e 69 6e 74 65 | 72 76 61 6c 29 20 3c 20 |fp->inte|rval) < |
|00003720| 6e 6f 77 2b 33 30 30 29 | 20 7b 0a 58 09 09 09 09 |now+300)| {.X....|
|00003730| 2f 2a 20 61 64 64 20 74 | 68 69 73 20 70 61 74 68 |/* add t|his path|
|00003740| 20 74 6f 20 74 68 65 20 | 6c 69 73 74 20 2a 2f 0a | to the |list */.|
|00003750| 58 09 09 09 09 69 66 20 | 28 64 65 62 75 67 29 0a |X....if |(debug).|
|00003760| 58 09 09 09 09 09 70 72 | 69 6e 74 66 28 22 61 64 |X.....pr|intf("ad|
|00003770| 64 69 6e 67 20 25 73 5c | 6e 22 2c 20 63 66 70 2d |ding %s\|n", cfp-|
|00003780| 3e 70 61 74 68 29 3b 0a | 58 09 09 09 09 61 64 64 |>path);.|X....add|
|00003790| 70 61 74 68 28 63 66 70 | 29 3b 0a 58 09 09 09 7d |path(cfp|);.X...}|
|000037a0| 20 65 6c 73 65 20 69 66 | 20 28 64 65 62 75 67 29 | else if| (debug)|
|000037b0| 0a 58 09 09 09 70 72 69 | 6e 74 66 28 22 69 67 6e |.X...pri|ntf("ign|
|000037c0| 6f 72 69 6e 67 20 25 73 | 3a 20 6c 61 73 74 74 69 |oring %s|: lastti|
|000037d0| 6d 65 3d 25 64 20 69 6e | 74 65 72 76 61 6c 3d 25 |me=%d in|terval=%|
|000037e0| 73 20 6e 6f 77 3d 25 64 | 5c 6e 22 2c 0a 58 09 09 |s now=%d|\n",.X..|
|000037f0| 09 09 63 66 70 2d 3e 70 | 61 74 68 2c 20 63 66 70 |..cfp->p|ath, cfp|
|00003800| 2d 3e 6c 61 73 74 74 69 | 6d 65 2c 20 63 66 70 2d |->lastti|me, cfp-|
|00003810| 3e 69 6e 74 65 72 76 61 | 6c 2c 20 6e 6f 77 29 3b |>interva|l, now);|
|00003820| 0a 58 09 09 7d 0a 58 09 | 7d 20 65 6c 73 65 20 7b |.X..}.X.|} else {|
|00003830| 0a 58 09 09 66 6f 72 20 | 28 3b 20 6f 70 74 69 6e |.X..for |(; optin|
|00003840| 64 20 3c 20 61 72 67 63 | 3b 20 2b 2b 6f 70 74 69 |d < argc|; ++opti|
|00003850| 6e 64 29 20 7b 0a 58 09 | 09 09 66 6f 72 20 28 63 |nd) {.X.|..for (c|
|00003860| 66 70 20 3d 20 63 66 3b | 20 63 66 70 20 21 3d 20 |fp = cf;| cfp != |
|00003870| 4e 55 4c 4c 3b 20 63 66 | 70 20 3d 20 63 66 70 2d |NULL; cf|p = cfp-|
|00003880| 3e 6e 65 78 74 29 20 7b | 0a 58 09 09 09 09 69 66 |>next) {|.X....if|
|00003890| 20 28 63 66 70 2d 3e 6c | 61 73 74 74 69 6d 65 20 | (cfp->l|asttime |
|000038a0| 3d 3d 20 30 29 0a 58 09 | 09 09 09 09 63 6f 6e 74 |== 0).X.|....cont|
|000038b0| 69 6e 75 65 3b 0a 58 09 | 09 09 09 69 66 20 28 73 |inue;.X.|...if (s|
|000038c0| 74 72 63 6d 70 28 63 66 | 70 2d 3e 70 61 74 68 2c |trcmp(cf|p->path,|
|000038d0| 20 61 72 67 76 5b 6f 70 | 74 69 6e 64 5d 29 20 3d | argv[op|tind]) =|
|000038e0| 3d 20 30 29 20 7b 0a 58 | 09 09 09 09 09 61 64 64 |= 0) {.X|.....add|
|000038f0| 70 61 74 68 28 63 66 70 | 29 3b 0a 58 09 09 09 09 |path(cfp|);.X....|
|00003900| 09 62 72 65 61 6b 3b 0a | 58 09 09 09 09 7d 0a 58 |.break;.|X....}.X|
|00003910| 09 09 09 7d 0a 58 09 09 | 09 69 66 20 28 63 66 70 |...}.X..|.if (cfp|
|00003920| 20 3d 3d 20 4e 55 4c 4c | 29 20 7b 0a 58 09 09 09 | == NULL|) {.X...|
|00003930| 09 2f 2a 20 61 70 70 65 | 6e 64 20 6e 65 77 20 65 |./* appe|nd new e|
|00003940| 6e 74 72 79 20 74 6f 20 | 63 6f 6e 66 69 67 20 66 |ntry to |config f|
|00003950| 69 6c 65 20 2a 2f 0a 58 | 09 09 09 09 66 6f 72 20 |ile */.X|....for |
|00003960| 28 63 66 70 20 3d 20 63 | 66 3b 20 63 66 70 20 21 |(cfp = c|f; cfp !|
|00003970| 3d 20 4e 55 4c 4c 20 26 | 26 20 63 66 70 2d 3e 6e |= NULL &|& cfp->n|
|00003980| 65 78 74 20 21 3d 20 4e | 55 4c 4c 3b 0a 58 09 09 |ext != N|ULL;.X..|
|00003990| 09 09 09 20 63 66 70 20 | 3d 20 63 66 70 2d 3e 6e |... cfp |= cfp->n|
|000039a0| 65 78 74 29 0a 58 09 09 | 09 09 09 63 6f 6e 74 69 |ext).X..|...conti|
|000039b0| 6e 75 65 3b 0a 58 09 09 | 09 09 69 66 20 28 63 66 |nue;.X..|..if (cf|
|000039c0| 70 20 21 3d 20 4e 55 4c | 4c 29 20 7b 0a 58 09 09 |p != NUL|L) {.X..|
|000039d0| 09 09 09 63 66 70 2d 3e | 6e 65 78 74 20 3d 20 28 |...cfp->|next = (|
|000039e0| 73 74 72 75 63 74 20 63 | 6f 6e 66 69 67 20 2a 29 |struct c|onfig *)|
|000039f0| 0a 58 09 09 09 09 09 20 | 65 6d 61 6c 6c 6f 63 28 |.X..... |emalloc(|
|00003a00| 28 75 5f 69 6e 74 29 73 | 69 7a 65 6f 66 20 28 73 |(u_int)s|izeof (s|
|00003a10| 74 72 75 63 74 20 63 6f | 6e 66 69 67 29 29 3b 0a |truct co|nfig));.|
|00003a20| 58 09 09 09 09 09 63 66 | 70 20 3d 20 63 66 70 2d |X.....cf|p = cfp-|
|00003a30| 3e 6e 65 78 74 3b 0a 58 | 09 09 09 09 09 63 66 70 |>next;.X|.....cfp|
|00003a40| 2d 3e 6e 65 78 74 20 3d | 20 4e 55 4c 4c 3b 0a 58 |->next =| NULL;.X|
|00003a50| 09 09 09 09 09 63 66 70 | 2d 3e 6c 69 6e 65 20 3d |.....cfp|->line =|
|00003a60| 20 4e 55 4c 4c 3b 0a 58 | 09 09 09 09 09 63 66 70 | NULL;.X|.....cfp|
|00003a70| 2d 3e 69 6e 74 65 72 76 | 61 6c 20 3d 20 22 32 34 |->interv|al = "24|
|00003a80| 68 22 3b 0a 58 09 09 09 | 09 09 63 66 70 2d 3e 70 |h";.X...|..cfp->p|
|00003a90| 61 74 68 20 3d 20 61 72 | 67 76 5b 6f 70 74 69 6e |ath = ar|gv[optin|
|00003aa0| 64 5d 3b 0a 58 09 09 09 | 09 09 63 66 70 2d 3e 66 |d];.X...|..cfp->f|
|00003ab0| 69 6c 74 65 72 20 3d 20 | 22 2f 64 65 76 2f 6e 75 |ilter = |"/dev/nu|
|00003ac0| 6c 6c 22 3b 0a 58 09 09 | 09 09 7d 0a 58 09 09 09 |ll";.X..|..}.X...|
|00003ad0| 09 63 66 70 2d 3e 6c 61 | 73 74 74 69 6d 65 20 3d |.cfp->la|sttime =|
|00003ae0| 20 6e 6f 77 20 2d 20 44 | 45 4c 54 41 3b 0a 58 09 | now - D|ELTA;.X.|
|00003af0| 09 09 09 61 64 64 70 61 | 74 68 28 63 66 70 29 3b |...addpa|th(cfp);|
|00003b00| 0a 58 09 09 09 7d 0a 58 | 09 09 7d 0a 58 09 7d 0a |.X...}.X|..}.X.}.|
|00003b10| 58 0a 58 09 69 66 20 28 | 28 64 65 76 62 61 63 6b |X.X.if (|(devback|
|00003b20| 75 70 20 3d 20 67 65 74 | 64 65 76 69 63 65 28 62 |up = get|device(b|
|00003b30| 61 63 6b 75 70 2c 20 4d | 4e 54 54 41 42 29 29 20 |ackup, M|NTTAB)) |
|00003b40| 3d 3d 20 4e 55 4c 4c 20 | 26 26 0a 58 09 20 20 20 |== NULL |&&.X. |
|00003b50| 20 28 64 65 76 62 61 63 | 6b 75 70 20 3d 20 67 65 | (devbac|kup = ge|
|00003b60| 74 64 65 76 69 63 65 28 | 62 61 63 6b 75 70 2c 20 |tdevice(|backup, |
|00003b70| 4d 4f 55 4e 54 45 44 29 | 29 20 3d 3d 20 4e 55 4c |MOUNTED)|) == NUL|
|00003b80| 4c 29 20 7b 0a 58 09 09 | 66 70 72 69 6e 74 66 28 |L) {.X..|fprintf(|
|00003b90| 73 74 64 65 72 72 2c 20 | 22 25 73 3a 20 63 6f 75 |stderr, |"%s: cou|
|00003ba0| 6c 64 20 6e 6f 74 20 64 | 65 74 65 72 6d 69 6e 65 |ld not d|etermine|
|00003bb0| 20 62 61 63 6b 75 70 20 | 64 65 76 69 63 65 5c 6e | backup |device\n|
|00003bc0| 22 2c 0a 58 09 09 09 09 | 70 72 6f 67 6e 61 6d 65 |",.X....|progname|
|00003bd0| 29 3b 0a 58 09 09 65 78 | 69 74 28 31 29 3b 0a 58 |);.X..ex|it(1);.X|
|00003be0| 09 7d 0a 58 09 69 66 20 | 28 28 62 61 63 6b 75 70 |.}.X.if |((backup|
|00003bf0| 6d 6e 74 20 3d 20 67 65 | 74 70 61 74 68 28 64 65 |mnt = ge|tpath(de|
|00003c00| 76 62 61 63 6b 75 70 2c | 20 4d 4e 54 54 41 42 29 |vbackup,| MNTTAB)|
|00003c10| 29 20 3d 3d 20 4e 55 4c | 4c 20 26 26 0a 58 09 20 |) == NUL|L &&.X. |
|00003c20| 20 20 20 28 62 61 63 6b | 75 70 6d 6e 74 20 3d 20 | (back|upmnt = |
|00003c30| 67 65 74 70 61 74 68 28 | 64 65 76 62 61 63 6b 75 |getpath(|devbacku|
|00003c40| 70 2c 20 4d 4f 55 4e 54 | 45 44 29 29 20 3d 3d 20 |p, MOUNT|ED)) == |
|00003c50| 4e 55 4c 4c 29 20 7b 0a | 58 09 09 66 70 72 69 6e |NULL) {.|X..fprin|
|00003c60| 74 66 28 73 74 64 65 72 | 72 2c 20 22 25 73 3a 20 |tf(stder|r, "%s: |
|00003c70| 63 6f 75 6c 64 20 6e 6f | 74 20 64 65 74 65 72 6d |could no|t determ|
|00003c80| 69 6e 65 20 6d 6f 75 6e | 74 20 70 6f 69 6e 74 20 |ine moun|t point |
|00003c90| 66 6f 72 20 25 73 5c 6e | 22 2c 0a 58 09 09 09 09 |for %s\n|",.X....|
|00003ca0| 70 72 6f 67 6e 61 6d 65 | 2c 20 64 65 76 62 61 63 |progname|, devbac|
|00003cb0| 6b 75 70 29 3b 0a 58 09 | 09 2b 2b 65 72 72 66 6c |kup);.X.|.++errfl|
|00003cc0| 61 67 3b 0a 58 09 7d 0a | 58 09 69 66 20 28 65 72 |ag;.X.}.|X.if (er|
|00003cd0| 72 66 6c 61 67 29 0a 58 | 09 09 55 73 61 67 65 28 |rflag).X|..Usage(|
|00003ce0| 29 3b 0a 58 09 28 76 6f | 69 64 29 20 75 6d 61 73 |);.X.(vo|id) umas|
|00003cf0| 6b 28 30 29 3b 0a 58 09 | 66 6f 72 20 28 6c 70 20 |k(0);.X.|for (lp |
|00003d00| 3d 20 64 65 76 6c 69 73 | 74 3b 20 6c 70 20 21 3d |= devlis|t; lp !=|
|00003d10| 20 4e 55 4c 4c 3b 20 6c | 70 20 3d 20 6c 70 2d 3e | NULL; l|p = lp->|
|00003d20| 6e 65 78 74 29 0a 58 09 | 09 69 66 20 28 64 6f 69 |next).X.|.if (doi|
|00003d30| 74 28 6c 70 2d 3e 70 61 | 74 68 73 2c 20 6c 70 2d |t(lp->pa|ths, lp-|
|00003d40| 3e 74 65 78 74 29 29 0a | 58 09 09 09 66 6f 72 20 |>text)).|X...for |
|00003d50| 28 70 70 20 3d 20 6c 70 | 2d 3e 70 61 74 68 73 3b |(pp = lp|->paths;|
|00003d60| 20 70 70 20 21 3d 20 4e | 55 4c 4c 3b 20 70 70 20 | pp != N|ULL; pp |
|00003d70| 3d 20 70 70 2d 3e 6e 65 | 78 74 29 0a 58 09 09 09 |= pp->ne|xt).X...|
|00003d80| 09 70 70 2d 3e 63 6f 6e | 66 69 67 2d 3e 6c 61 73 |.pp->con|fig->las|
|00003d90| 74 74 69 6d 65 20 3d 20 | 6e 6f 77 3b 0a 58 09 69 |ttime = |now;.X.i|
|00003da0| 66 20 28 21 64 72 79 72 | 75 6e 29 0a 58 09 09 77 |f (!dryr|un).X..w|
|00003db0| 72 69 74 65 63 6f 6e 66 | 69 67 28 63 66 5f 66 70 |riteconf|ig(cf_fp|
|00003dc0| 2c 20 63 66 29 3b 0a 58 | 09 28 76 6f 69 64 29 20 |, cf);.X|.(void) |
|00003dd0| 66 6c 6f 63 6b 28 66 69 | 6c 65 6e 6f 28 63 66 5f |flock(fi|leno(cf_|
|00003de0| 66 70 29 2c 20 4c 4f 43 | 4b 5f 55 4e 29 3b 0a 58 |fp), LOC|K_UN);.X|
|00003df0| 09 69 66 20 28 76 65 72 | 62 6f 73 65 20 3e 20 31 |.if (ver|bose > 1|
|00003e00| 29 20 7b 0a 58 09 09 74 | 69 6d 65 28 26 6e 6f 77 |) {.X..t|ime(&now|
|00003e10| 29 3b 0a 58 09 09 70 72 | 69 6e 74 66 28 22 75 6e |);.X..pr|intf("un|
|00003e20| 6c 6f 63 6b 65 64 20 25 | 73 5c 6e 45 6e 64 20 61 |locked %|s\nEnd a|
|00003e30| 74 20 25 73 22 2c 20 63 | 66 66 69 6c 65 2c 20 63 |t %s", c|ffile, c|
|00003e40| 74 69 6d 65 28 26 6e 6f | 77 29 29 3b 0a 58 09 7d |time(&no|w));.X.}|
|00003e50| 0a 58 09 28 76 6f 69 64 | 29 20 66 63 6c 6f 73 65 |.X.(void|) fclose|
|00003e60| 28 63 66 5f 66 70 29 3b | 0a 58 23 69 66 64 65 66 |(cf_fp);|.X#ifdef|
|00003e70| 20 50 52 4f 46 0a 58 09 | 2f 2a 20 64 72 6f 70 20 | PROF.X.|/* drop |
|00003e80| 70 72 6f 66 69 6c 69 6e | 67 20 64 61 74 61 20 69 |profilin|g data i|
|00003e90| 6e 20 61 20 6b 6e 6f 77 | 6e 20 70 6c 61 63 65 20 |n a know|n place |
|00003ea0| 2a 2f 0a 58 09 63 68 64 | 69 72 28 22 2f 74 6d 70 |*/.X.chd|ir("/tmp|
|00003eb0| 22 29 3b 0a 58 23 65 6e | 64 69 66 0a 58 09 65 78 |");.X#en|dif.X.ex|
|00003ec0| 69 74 28 30 29 3b 0a 58 | 7d 0a 58 0a 58 55 73 61 |it(0);.X|}.X.XUsa|
|00003ed0| 67 65 28 29 0a 58 7b 0a | 58 09 66 70 72 69 6e 74 |ge().X{.|X.fprint|
|00003ee0| 66 28 73 74 64 65 72 72 | 2c 0a 58 22 55 73 61 67 |f(stderr|,.X"Usag|
|00003ef0| 65 3a 20 25 73 20 5b 20 | 2d 64 65 76 7a 20 2d 62 |e: %s [ |-devz -b|
|00003f00| 23 20 5d 20 5b 20 2d 63 | 20 62 61 63 6b 75 70 2e |# ] [ -c| backup.|
|00003f10| 63 6f 6e 66 20 5d 20 5b | 20 2d 6f 20 2f 62 61 63 |conf ] [| -o /bac|
|00003f20| 6b 75 70 20 5d 20 5b 20 | 2f 70 61 74 68 20 2e 2e |kup ] [ |/path ..|
|00003f30| 2e 20 5d 5c 6e 22 2c 0a | 58 09 09 09 70 72 6f 67 |. ]\n",.|X...prog|
|00003f40| 6e 61 6d 65 29 3b 0a 58 | 09 65 78 69 74 28 31 29 |name);.X|.exit(1)|
|00003f50| 3b 0a 58 7d 0a 58 0a 58 | 2f 2a 0a 58 20 2a 20 54 |;.X}.X.X|/*.X * T|
|00003f60| 68 65 20 66 69 6c 74 65 | 72 20 66 69 6c 65 73 20 |he filte|r files |
|00003f70| 63 6f 6e 74 61 69 6e 20 | 67 6c 6f 62 20 65 78 70 |contain |glob exp|
|00003f80| 72 65 73 73 69 6f 6e 73 | 2c 20 6f 6e 65 20 70 65 |ressions|, one pe|
|00003f90| 72 20 6c 69 6e 65 2e 20 | 20 57 65 20 6e 65 65 64 |r line. | We need|
|00003fa0| 20 74 6f 0a 58 20 2a 20 | 6b 65 65 70 20 74 72 61 | to.X * |keep tra|
|00003fb0| 63 6b 20 6f 66 20 77 68 | 69 63 68 20 66 69 6c 74 |ck of wh|ich filt|
|00003fc0| 65 72 20 66 69 6c 65 73 | 20 77 65 27 76 65 20 72 |er files| we've r|
|00003fd0| 65 61 64 20 69 6e 2c 20 | 73 69 6e 63 65 20 73 65 |ead in, |since se|
|00003fe0| 76 65 72 61 6c 20 70 61 | 74 68 73 0a 58 20 2a 20 |veral pa|ths.X * |
|00003ff0| 6d 61 79 20 73 68 61 72 | 65 20 74 68 65 20 73 61 |may shar|e the sa|
|00004000| 6d 65 20 66 69 6c 74 65 | 72 73 2e 0a 58 20 2a 2f |me filte|rs..X */|
|00004010| 0a 58 0a 58 73 74 72 75 | 63 74 20 66 69 6c 74 65 |.X.Xstru|ct filte|
|00004020| 72 20 7b 0a 58 09 63 68 | 61 72 09 2a 6e 61 6d 65 |r {.X.ch|ar.*name|
|00004030| 3b 0a 58 09 63 68 61 72 | 09 2a 63 6f 6e 74 65 6e |;.X.char|.*conten|
|00004040| 74 73 3b 0a 58 7d 20 66 | 69 6c 74 65 72 73 5b 35 |ts;.X} f|ilters[5|
|00004050| 30 5d 3b 0a 58 0a 58 69 | 6e 74 09 6d 61 78 66 69 |0];.X.Xi|nt.maxfi|
|00004060| 6c 74 65 72 73 20 3d 20 | 30 3b 0a 58 0a 58 2f 2a |lters = |0;.X.X/*|
|00004070| 20 72 65 74 75 72 6e 20 | 70 6f 69 6e 74 65 72 20 | return |pointer |
|00004080| 74 6f 20 63 6f 6e 74 65 | 6e 74 73 20 6f 66 20 61 |to conte|nts of a|
|00004090| 20 66 69 6c 74 65 72 20 | 66 69 6c 65 20 73 74 6f | filter |file sto|
|000040a0| 72 65 64 20 61 77 61 79 | 20 2a 2f 0a 58 0a 58 63 |red away| */.X.Xc|
|000040b0| 68 61 72 20 2a 0a 58 72 | 65 61 64 66 69 6c 74 65 |har *.Xr|eadfilte|
|000040c0| 72 28 66 69 6c 65 29 0a | 58 09 63 68 61 72 09 2a |r(file).|X.char.*|
|000040d0| 66 69 6c 65 3b 0a 58 7b | 0a 58 09 69 6e 74 09 09 |file;.X{|.X.int..|
|000040e0| 69 2c 20 66 64 3b 0a 58 | 09 73 74 72 75 63 74 20 |i, fd;.X|.struct |
|000040f0| 73 74 61 74 09 73 74 62 | 75 66 3b 0a 58 0a 58 09 |stat.stb|uf;.X.X.|
|00004100| 69 66 20 28 73 74 72 63 | 6d 70 28 66 69 6c 65 2c |if (strc|mp(file,|
|00004110| 20 22 2f 64 65 76 2f 6e | 75 6c 6c 22 29 20 3d 3d | "/dev/n|ull") ==|
|00004120| 20 30 29 0a 58 09 09 72 | 65 74 75 72 6e 20 4e 55 | 0).X..r|eturn NU|
|00004130| 4c 4c 3b 0a 58 09 66 6f | 72 20 28 69 20 3d 20 30 |LL;.X.fo|r (i = 0|
|00004140| 3b 20 69 20 3c 20 6d 61 | 78 66 69 6c 74 65 72 73 |; i < ma|xfilters|
|00004150| 0a 58 09 20 20 20 20 20 | 20 20 26 26 20 69 20 3c |.X. | && i <|
|00004160| 20 28 73 69 7a 65 6f 66 | 20 66 69 6c 74 65 72 73 | (sizeof| filters|
|00004170| 2f 73 69 7a 65 6f 66 20 | 28 73 74 72 75 63 74 20 |/sizeof |(struct |
|00004180| 66 69 6c 74 65 72 29 29 | 3b 20 2b 2b 69 29 20 7b |filter))|; ++i) {|
|00004190| 0a 58 09 09 69 66 20 28 | 73 74 72 63 6d 70 28 66 |.X..if (|strcmp(f|
|000041a0| 69 6c 65 2c 20 66 69 6c | 74 65 72 73 5b 69 5d 2e |ile, fil|ters[i].|
|000041b0| 6e 61 6d 65 29 20 3d 3d | 20 30 29 0a 58 09 09 09 |name) ==| 0).X...|
|000041c0| 72 65 74 75 72 6e 20 66 | 69 6c 74 65 72 73 5b 69 |return f|ilters[i|
|000041d0| 5d 2e 63 6f 6e 74 65 6e | 74 73 3b 0a 58 09 7d 0a |].conten|ts;.X.}.|
|000041e0| 58 09 69 66 20 28 69 20 | 3d 3d 20 28 73 69 7a 65 |X.if (i |== (size|
|000041f0| 6f 66 20 66 69 6c 74 65 | 72 73 2f 73 69 7a 65 6f |of filte|rs/sizeo|
|00004200| 66 20 28 73 74 72 75 63 | 74 20 66 69 6c 74 65 72 |f (struc|t filter|
|00004210| 29 29 29 20 7b 0a 58 09 | 09 66 70 72 69 6e 74 66 |))) {.X.|.fprintf|
|00004220| 28 73 74 64 65 72 72 2c | 20 22 25 73 3a 20 72 61 |(stderr,| "%s: ra|
|00004230| 6e 20 6f 75 74 20 6f 66 | 20 66 69 6c 74 65 72 73 |n out of| filters|
|00004240| 5c 6e 22 2c 20 70 72 6f | 67 6e 61 6d 65 29 3b 0a |\n", pro|gname);.|
|00004250| 58 09 09 65 78 69 74 28 | 31 29 3b 0a 58 09 7d 0a |X..exit(|1);.X.}.|
|00004260| 58 09 69 66 20 28 28 66 | 64 20 3d 20 6f 70 65 6e |X.if ((f|d = open|
|00004270| 28 66 69 6c 65 2c 20 4f | 5f 52 44 4f 4e 4c 59 2c |(file, O|_RDONLY,|
|00004280| 20 30 29 29 20 3c 20 30 | 29 20 7b 0a 58 09 09 66 | 0)) < 0|) {.X..f|
|00004290| 70 72 69 6e 74 66 28 73 | 74 64 65 72 72 2c 20 22 |printf(s|tderr, "|
|000042a0| 25 73 3a 20 63 61 6e 27 | 74 20 6f 70 65 6e 20 66 |%s: can'|t open f|
|000042b0| 69 6c 74 65 72 20 66 69 | 6c 65 20 25 73 5c 6e 22 |ilter fi|le %s\n"|
|000042c0| 2c 0a 58 09 09 09 09 70 | 72 6f 67 6e 61 6d 65 2c |,.X....p|rogname,|
|000042d0| 20 66 69 6c 65 29 3b 0a | 58 09 09 65 78 69 74 28 | file);.|X..exit(|
|000042e0| 31 29 3b 0a 58 09 7d 0a | 58 09 69 66 20 28 66 73 |1);.X.}.|X.if (fs|
|000042f0| 74 61 74 28 66 64 2c 20 | 26 73 74 62 75 66 29 20 |tat(fd, |&stbuf) |
|00004300| 3c 20 30 29 20 7b 0a 58 | 09 09 66 70 72 69 6e 74 |< 0) {.X|..fprint|
|00004310| 66 28 73 74 64 65 72 72 | 2c 20 22 25 73 3a 20 63 |f(stderr|, "%s: c|
|00004320| 61 6e 27 74 20 73 74 61 | 74 20 6f 70 65 6e 20 66 |an't sta|t open f|
|00004330| 69 6c 74 65 72 20 66 69 | 6c 65 20 25 73 5c 6e 22 |ilter fi|le %s\n"|
|00004340| 2c 0a 58 09 09 09 09 70 | 72 6f 67 6e 61 6d 65 2c |,.X....p|rogname,|
|00004350| 20 66 69 6c 65 29 3b 0a | 58 09 09 65 78 69 74 28 | file);.|X..exit(|
|00004360| 31 29 3b 0a 58 09 7d 0a | 58 09 66 69 6c 74 65 72 |1);.X.}.|X.filter|
|00004370| 73 5b 69 5d 2e 63 6f 6e | 74 65 6e 74 73 20 3d 20 |s[i].con|tents = |
|00004380| 65 6d 61 6c 6c 6f 63 28 | 28 75 5f 69 6e 74 29 73 |emalloc(|(u_int)s|
|00004390| 74 62 75 66 2e 73 74 5f | 73 69 7a 65 2b 31 29 3b |tbuf.st_|size+1);|
|000043a0| 0a 58 09 69 66 20 28 72 | 65 61 64 28 66 64 2c 20 |.X.if (r|ead(fd, |
|000043b0| 66 69 6c 74 65 72 73 5b | 69 5d 2e 63 6f 6e 74 65 |filters[|i].conte|
|000043c0| 6e 74 73 2c 20 73 74 62 | 75 66 2e 73 74 5f 73 69 |nts, stb|uf.st_si|
|000043d0| 7a 65 29 20 3c 20 73 74 | 62 75 66 2e 73 74 5f 73 |ze) < st|buf.st_s|
|000043e0| 69 7a 65 29 20 7b 0a 58 | 09 09 66 70 72 69 6e 74 |ize) {.X|..fprint|
|000043f0| 66 28 73 74 64 65 72 72 | 2c 20 22 25 73 3a 20 63 |f(stderr|, "%s: c|
|00004400| 6f 75 6c 64 6e 27 74 20 | 72 65 61 64 20 25 64 20 |ouldn't |read %d |
|00004410| 62 79 74 65 73 20 66 72 | 6f 6d 20 25 73 5c 6e 22 |bytes fr|om %s\n"|
|00004420| 2c 0a 58 09 09 09 09 70 | 72 6f 67 6e 61 6d 65 2c |,.X....p|rogname,|
|00004430| 20 73 74 62 75 66 2e 73 | 74 5f 73 69 7a 65 2c 20 | stbuf.s|t_size, |
|00004440| 66 69 6c 65 29 3b 0a 58 | 09 7d 0a 58 09 2a 28 66 |file);.X|.}.X.*(f|
|00004450| 69 6c 74 65 72 73 5b 69 | 5d 2e 63 6f 6e 74 65 6e |ilters[i|].conten|
|00004460| 74 73 2b 73 74 62 75 66 | 2e 73 74 5f 73 69 7a 65 |ts+stbuf|.st_size|
|00004470| 29 20 3d 20 27 5c 30 27 | 3b 0a 58 09 66 69 6c 74 |) = '\0'|;.X.filt|
|00004480| 65 72 73 5b 69 5d 2e 6e | 61 6d 65 20 3d 20 66 69 |ers[i].n|ame = fi|
|00004490| 6c 65 3b 0a 58 09 2b 2b | 6d 61 78 66 69 6c 74 65 |le;.X.++|maxfilte|
|000044a0| 72 73 3b 0a 58 09 28 76 | 6f 69 64 29 20 63 6c 6f |rs;.X.(v|oid) clo|
|000044b0| 73 65 28 66 64 29 3b 0a | 58 09 72 65 74 75 72 6e |se(fd);.|X.return|
|000044c0| 20 66 69 6c 74 65 72 73 | 5b 69 5d 2e 63 6f 6e 74 | filters|[i].cont|
|000044d0| 65 6e 74 73 3b 0a 58 7d | 0a 58 0a 58 2f 2a 0a 58 |ents;.X}|.X.X/*.X|
|000044e0| 20 2a 20 57 65 20 6d 61 | 69 6e 74 61 69 6e 20 61 | * We ma|intain a|
|000044f0| 20 74 77 6f 2d 6c 65 76 | 65 6c 20 6c 69 6e 6b 65 | two-lev|el linke|
|00004500| 64 20 6c 69 73 74 20 73 | 74 72 75 63 74 75 72 65 |d list s|tructure|
|00004510| 20 28 69 2e 65 2e 20 6c | 69 73 74 20 6f 66 20 6c | (i.e. l|ist of l|
|00004520| 69 73 74 73 29 2c 0a 58 | 20 2a 20 61 73 73 6f 63 |ists),.X| * assoc|
|00004530| 69 61 74 69 6e 67 20 70 | 61 74 68 73 20 77 69 74 |iating p|aths wit|
|00004540| 68 20 74 68 65 69 72 20 | 72 61 77 20 64 65 76 69 |h their |raw devi|
|00004550| 63 65 2e 20 20 57 68 65 | 6e 20 74 68 65 72 65 20 |ce. Whe|n there |
|00004560| 61 72 65 20 73 65 76 65 | 72 61 6c 20 70 61 74 68 |are seve|ral path|
|00004570| 73 0a 58 20 2a 20 6f 6e | 20 74 68 65 20 73 61 6d |s.X * on| the sam|
|00004580| 65 20 64 65 76 69 63 65 | 2c 20 77 65 20 77 61 6e |e device|, we wan|
|00004590| 74 20 74 6f 20 68 61 6e | 64 6c 65 20 74 68 65 6d |t to han|dle them|
|000045a0| 20 73 69 6d 75 6c 74 61 | 6e 65 6f 75 73 6c 79 20 | simulta|neously |
|000045b0| 61 6e 64 20 6f 6e 6c 79 | 0a 58 20 2a 20 64 6f 20 |and only|.X * do |
|000045c0| 74 68 65 20 69 6c 69 73 | 74 20 77 61 6c 6b 69 6e |the ilis|t walkin|
|000045d0| 67 20 6f 6e 63 65 20 70 | 65 72 20 64 65 76 69 63 |g once p|er devic|
|000045e0| 65 2e 20 20 54 68 65 20 | 72 6f 6f 74 20 6f 66 20 |e. The |root of |
|000045f0| 74 68 69 73 20 73 74 72 | 75 63 74 75 72 65 20 69 |this str|ucture i|
|00004600| 73 0a 58 20 2a 20 64 65 | 76 6c 69 73 74 2e 0a 58 |s.X * de|vlist..X|
|00004610| 20 2a 2f 0a 58 0a 58 69 | 6e 74 0a 58 61 64 64 70 | */.X.Xi|nt.Xaddp|
|00004620| 61 74 68 28 63 66 70 29 | 0a 58 09 73 74 72 75 63 |ath(cfp)|.X.struc|
|00004630| 74 20 63 6f 6e 66 69 67 | 09 2a 63 66 70 3b 0a 58 |t config|.*cfp;.X|
|00004640| 7b 0a 58 09 73 74 72 75 | 63 74 20 61 5f 64 65 76 |{.X.stru|ct a_dev|
|00004650| 09 2a 6c 70 3b 0a 58 09 | 73 74 72 75 63 74 20 61 |.*lp;.X.|struct a|
|00004660| 5f 70 61 74 68 09 2a 70 | 70 3b 0a 58 09 63 68 61 |_path.*p|p;.X.cha|
|00004670| 72 09 2a 72 61 77 64 65 | 76 69 63 65 3b 0a 58 0a |r.*rawde|vice;.X.|
|00004680| 58 09 69 66 20 28 63 66 | 70 2d 3e 70 61 74 68 20 |X.if (cf|p->path |
|00004690| 3d 3d 20 4e 55 4c 4c 20 | 7c 7c 20 2a 63 66 70 2d |== NULL ||| *cfp-|
|000046a0| 3e 70 61 74 68 20 21 3d | 20 27 2f 27 29 20 7b 0a |>path !=| '/') {.|
|000046b0| 58 09 09 66 70 72 69 6e | 74 66 28 73 74 64 65 72 |X..fprin|tf(stder|
|000046c0| 72 2c 20 22 25 73 3a 20 | 69 6c 6c 65 67 61 6c 20 |r, "%s: |illegal |
|000046d0| 70 61 74 68 3a 20 25 73 | 5c 6e 22 2c 0a 58 09 09 |path: %s|\n",.X..|
|000046e0| 09 09 70 72 6f 67 6e 61 | 6d 65 2c 0a 58 09 09 09 |..progna|me,.X...|
|000046f0| 09 63 66 70 2d 3e 70 61 | 74 68 20 3d 3d 20 4e 55 |.cfp->pa|th == NU|
|00004700| 4c 4c 20 3f 20 22 28 6e | 75 6c 6c 29 22 20 3a 20 |LL ? "(n|ull)" : |
|00004710| 63 66 70 2d 3e 70 61 74 | 68 29 3b 0a 58 09 7d 20 |cfp->pat|h);.X.} |
|00004720| 65 6c 73 65 20 69 66 20 | 28 28 72 61 77 64 65 76 |else if |((rawdev|
|00004730| 69 63 65 20 3d 20 67 65 | 74 64 65 76 69 63 65 28 |ice = ge|tdevice(|
|00004740| 63 66 70 2d 3e 70 61 74 | 68 2c 20 4d 4e 54 54 41 |cfp->pat|h, MNTTA|
|00004750| 42 29 29 20 3d 3d 20 4e | 55 4c 4c 29 20 7b 0a 58 |B)) == N|ULL) {.X|
|00004760| 09 09 66 70 72 69 6e 74 | 66 28 73 74 64 65 72 72 |..fprint|f(stderr|
|00004770| 2c 20 22 25 73 3a 20 6e | 6f 20 64 65 76 69 63 65 |, "%s: n|o device|
|00004780| 20 66 6f 72 20 25 73 5c | 6e 22 2c 0a 58 09 09 09 | for %s\|n",.X...|
|00004790| 09 70 72 6f 67 6e 61 6d | 65 2c 20 63 66 70 2d 3e |.prognam|e, cfp->|
|000047a0| 70 61 74 68 29 3b 0a 58 | 09 7d 20 65 6c 73 65 20 |path);.X|.} else |
|000047b0| 69 66 20 28 2a 72 61 77 | 64 65 76 69 63 65 20 21 |if (*raw|device !|
|000047c0| 3d 20 27 2f 27 29 20 7b | 0a 58 09 09 66 70 72 69 |= '/') {|.X..fpri|
|000047d0| 6e 74 66 28 73 74 64 65 | 72 72 2c 20 22 25 73 3a |ntf(stde|rr, "%s:|
|000047e0| 20 62 61 64 20 64 65 76 | 69 63 65 20 25 73 20 66 | bad dev|ice %s f|
|000047f0| 6f 72 20 25 73 5c 6e 22 | 2c 0a 58 09 09 09 09 70 |or %s\n"|,.X....p|
|00004800| 72 6f 67 6e 61 6d 65 2c | 20 72 61 77 64 65 76 69 |rogname,| rawdevi|
|00004810| 63 65 2c 20 63 66 70 2d | 3e 70 61 74 68 29 3b 0a |ce, cfp-|>path);.|
|00004820| 58 09 7d 20 65 6c 73 65 | 20 7b 0a 58 09 09 2f 2a |X.} else| {.X../*|
|00004830| 20 6c 69 6e 6b 20 74 68 | 65 20 70 61 74 68 2c 20 | link th|e path, |
|00004840| 64 65 76 69 63 65 20 70 | 61 69 72 20 69 6e 74 6f |device p|air into|
|00004850| 20 6c 69 73 74 73 20 2a | 2f 0a 58 09 09 66 6f 72 | lists *|/.X..for|
|00004860| 20 28 6c 70 20 3d 20 64 | 65 76 6c 69 73 74 3b 20 | (lp = d|evlist; |
|00004870| 6c 70 20 21 3d 20 4e 55 | 4c 4c 3b 20 6c 70 20 3d |lp != NU|LL; lp =|
|00004880| 20 6c 70 2d 3e 6e 65 78 | 74 29 0a 58 09 09 09 69 | lp->nex|t).X...i|
|00004890| 66 20 28 73 74 72 63 6d | 70 28 6c 70 2d 3e 74 65 |f (strcm|p(lp->te|
|000048a0| 78 74 2c 20 72 61 77 64 | 65 76 69 63 65 29 20 3d |xt, rawd|evice) =|
|000048b0| 3d 20 30 29 0a 58 09 09 | 09 09 62 72 65 61 6b 3b |= 0).X..|..break;|
|000048c0| 0a 58 09 09 70 70 20 3d | 20 28 73 74 72 75 63 74 |.X..pp =| (struct|
|000048d0| 20 61 5f 70 61 74 68 20 | 2a 29 0a 58 09 09 09 09 | a_path |*).X....|
|000048e0| 65 6d 61 6c 6c 6f 63 28 | 28 75 5f 69 6e 74 29 73 |emalloc(|(u_int)s|
|000048f0| 69 7a 65 6f 66 20 28 73 | 74 72 75 63 74 20 61 5f |izeof (s|truct a_|
|00004900| 70 61 74 68 29 29 3b 0a | 58 09 09 70 70 2d 3e 70 |path));.|X..pp->p|
|00004910| 61 74 68 20 3d 20 63 66 | 70 2d 3e 70 61 74 68 3b |ath = cf|p->path;|
|00004920| 0a 58 09 09 70 70 2d 3e | 6e 65 77 65 72 20 3d 20 |.X..pp->|newer = |
|00004930| 63 66 70 2d 3e 6c 61 73 | 74 74 69 6d 65 3b 0a 58 |cfp->las|ttime;.X|
|00004940| 09 09 70 70 2d 3e 67 6c | 6f 62 20 3d 20 72 65 61 |..pp->gl|ob = rea|
|00004950| 64 66 69 6c 74 65 72 28 | 63 66 70 2d 3e 66 69 6c |dfilter(|cfp->fil|
|00004960| 74 65 72 29 3b 0a 58 09 | 09 70 70 2d 3e 63 6f 6e |ter);.X.|.pp->con|
|00004970| 66 69 67 20 3d 20 63 66 | 70 3b 0a 58 09 09 69 66 |fig = cf|p;.X..if|
|00004980| 20 28 6c 70 20 21 3d 20 | 4e 55 4c 4c 29 0a 58 09 | (lp != |NULL).X.|
|00004990| 09 09 70 70 2d 3e 6e 65 | 78 74 20 3d 20 6c 70 2d |..pp->ne|xt = lp-|
|000049a0| 3e 70 61 74 68 73 3b 0a | 58 09 09 65 6c 73 65 20 |>paths;.|X..else |
|000049b0| 7b 0a 58 09 09 09 6c 70 | 20 3d 20 28 73 74 72 75 |{.X...lp| = (stru|
|000049c0| 63 74 20 61 5f 64 65 76 | 20 2a 29 0a 58 09 09 09 |ct a_dev| *).X...|
|000049d0| 09 65 6d 61 6c 6c 6f 63 | 28 28 75 5f 69 6e 74 29 |.emalloc|((u_int)|
|000049e0| 73 69 7a 65 6f 66 20 28 | 73 74 72 75 63 74 20 61 |sizeof (|struct a|
|000049f0| 5f 64 65 76 29 29 3b 0a | 58 09 09 09 6c 70 2d 3e |_dev));.|X...lp->|
|00004a00| 6e 65 78 74 20 3d 20 64 | 65 76 6c 69 73 74 3b 0a |next = d|evlist;.|
|00004a10| 58 09 09 09 64 65 76 6c | 69 73 74 20 3d 20 6c 70 |X...devl|ist = lp|
|00004a20| 3b 0a 58 09 09 09 6c 70 | 2d 3e 74 65 78 74 20 3d |;.X...lp|->text =|
|00004a30| 20 65 6d 61 6c 6c 6f 63 | 28 28 75 5f 69 6e 74 29 | emalloc|((u_int)|
|00004a40| 73 74 72 6c 65 6e 28 72 | 61 77 64 65 76 69 63 65 |strlen(r|awdevice|
|00004a50| 29 2b 31 29 3b 0a 58 09 | 09 09 28 76 6f 69 64 29 |)+1);.X.|..(void)|
|00004a60| 20 73 74 72 63 70 79 28 | 6c 70 2d 3e 74 65 78 74 | strcpy(|lp->text|
|00004a70| 2c 20 72 61 77 64 65 76 | 69 63 65 29 3b 0a 58 09 |, rawdev|ice);.X.|
|00004a80| 09 09 70 70 2d 3e 6e 65 | 78 74 20 3d 20 4e 55 4c |..pp->ne|xt = NUL|
|00004a90| 4c 3b 0a 58 09 09 7d 0a | 58 09 09 6c 70 2d 3e 70 |L;.X..}.|X..lp->p|
|00004aa0| 61 74 68 73 20 3d 20 70 | 70 3b 0a 58 09 7d 0a 58 |aths = p|p;.X.}.X|
|00004ab0| 7d 0a 58 0a 58 2f 2a 20 | 72 65 74 75 72 6e 20 74 |}.X.X/* |return t|
|00004ac0| 68 65 20 6e 61 6d 65 20 | 6f 66 20 74 68 65 20 72 |he name |of the r|
|00004ad0| 61 77 20 64 65 76 69 63 | 65 20 63 6f 72 72 65 73 |aw devic|e corres|
|00004ae0| 70 6f 6e 64 69 6e 67 20 | 74 6f 20 61 20 70 61 72 |ponding |to a par|
|00004af0| 74 69 63 75 6c 61 72 20 | 66 69 6c 65 20 2a 2f 0a |ticular |file */.|
|00004b00| 58 0a 58 63 68 61 72 20 | 2a 0a 58 67 65 74 64 65 |X.Xchar |*.Xgetde|
|00004b10| 76 69 63 65 28 70 61 74 | 68 2c 20 74 61 62 6c 65 |vice(pat|h, table|
|00004b20| 29 0a 58 09 63 68 61 72 | 20 2a 70 61 74 68 3b 0a |).X.char| *path;.|
|00004b30| 58 09 63 68 61 72 20 2a | 74 61 62 6c 65 3b 0a 58 |X.char *|table;.X|
|00004b40| 7b 0a 58 09 63 68 61 72 | 09 2a 63 70 2c 20 2a 73 |{.X.char|.*cp, *s|
|00004b50| 3b 0a 58 09 73 74 72 75 | 63 74 20 6d 6e 74 65 6e |;.X.stru|ct mnten|
|00004b60| 74 20 2a 6d 65 3b 0a 58 | 09 46 49 4c 45 09 2a 66 |t *me;.X|.FILE.*f|
|00004b70| 70 3b 0a 58 09 73 74 72 | 75 63 74 20 73 74 61 74 |p;.X.str|uct stat|
|00004b80| 20 73 74 70 61 74 68 2c | 20 73 74 64 65 76 3b 0a | stpath,| stdev;.|
|00004b90| 58 0a 58 09 69 66 20 28 | 6c 73 74 61 74 28 70 61 |X.X.if (|lstat(pa|
|00004ba0| 74 68 2c 20 26 73 74 70 | 61 74 68 29 20 3c 20 30 |th, &stp|ath) < 0|
|00004bb0| 29 20 7b 0a 58 09 09 66 | 70 72 69 6e 74 66 28 73 |) {.X..f|printf(s|
|00004bc0| 74 64 65 72 72 2c 20 22 | 25 73 3a 20 6c 73 74 61 |tderr, "|%s: lsta|
|00004bd0| 74 28 25 73 29 3a 20 25 | 73 5c 6e 22 2c 0a 58 09 |t(%s): %|s\n",.X.|
|00004be0| 09 09 09 70 72 6f 67 6e | 61 6d 65 2c 20 70 61 74 |...progn|ame, pat|
|00004bf0| 68 2c 20 45 4d 53 47 28 | 65 72 72 6e 6f 29 29 3b |h, EMSG(|errno));|
|00004c00| 0a 58 09 09 72 65 74 75 | 72 6e 20 4e 55 4c 4c 3b |.X..retu|rn NULL;|
|00004c10| 0a 58 09 7d 0a 58 09 69 | 66 20 28 21 28 28 73 74 |.X.}.X.i|f (!((st|
|00004c20| 70 61 74 68 2e 73 74 5f | 6d 6f 64 65 20 26 20 53 |path.st_|mode & S|
|00004c30| 5f 49 46 4d 54 29 20 26 | 20 28 53 5f 49 46 52 45 |_IFMT) &| (S_IFRE|
|00004c40| 47 20 7c 20 53 5f 49 46 | 44 49 52 29 29 29 20 7b |G | S_IF|DIR))) {|
|00004c50| 0a 58 09 09 66 70 72 69 | 6e 74 66 28 73 74 64 65 |.X..fpri|ntf(stde|
|00004c60| 72 72 2c 20 22 25 73 3a | 20 25 73 20 69 73 20 61 |rr, "%s:| %s is a|
|00004c70| 20 73 70 65 63 69 61 6c | 20 66 69 6c 65 5c 6e 22 | special| file\n"|
|00004c80| 2c 20 70 72 6f 67 6e 61 | 6d 65 2c 20 70 61 74 68 |, progna|me, path|
|00004c90| 29 3b 0a 58 09 09 72 65 | 74 75 72 6e 20 4e 55 4c |);.X..re|turn NUL|
|00004ca0| 4c 3b 0a 58 09 7d 0a 58 | 09 69 66 20 28 28 66 70 |L;.X.}.X|.if ((fp|
|00004cb0| 20 3d 20 73 65 74 6d 6e | 74 65 6e 74 28 74 61 62 | = setmn|tent(tab|
|00004cc0| 6c 65 2c 20 22 72 22 29 | 29 20 3d 3d 20 4e 55 4c |le, "r")|) == NUL|
|00004cd0| 4c 29 20 7b 0a 58 09 09 | 66 70 72 69 6e 74 66 28 |L) {.X..|fprintf(|
|00004ce0| 73 74 64 65 72 72 2c 20 | 22 25 73 3a 20 73 65 74 |stderr, |"%s: set|
|00004cf0| 6d 6e 74 65 6e 74 28 25 | 73 29 3a 20 25 73 5c 6e |mntent(%|s): %s\n|
|00004d00| 22 2c 0a 58 09 09 09 09 | 70 72 6f 67 6e 61 6d 65 |",.X....|progname|
|00004d10| 2c 20 74 61 62 6c 65 2c | 20 45 4d 53 47 28 65 72 |, table,| EMSG(er|
|00004d20| 72 6e 6f 29 29 3b 0a 58 | 09 09 72 65 74 75 72 6e |rno));.X|..return|
|00004d30| 20 4e 55 4c 4c 3b 0a 58 | 09 7d 0a 58 09 77 68 69 | NULL;.X|.}.X.whi|
|00004d40| 6c 65 20 28 28 6d 65 20 | 3d 20 67 65 74 6d 6e 74 |le ((me |= getmnt|
|00004d50| 65 6e 74 28 66 70 29 29 | 20 21 3d 20 4e 55 4c 4c |ent(fp))| != NULL|
|00004d60| 29 20 7b 0a 58 09 09 69 | 66 20 28 73 74 72 63 6d |) {.X..i|f (strcm|
|00004d70| 70 28 6d 65 2d 3e 6d 6e | 74 5f 74 79 70 65 2c 20 |p(me->mn|t_type, |
|00004d80| 4d 4e 54 54 59 50 45 5f | 34 32 29 20 3d 3d 20 30 |MNTTYPE_|42) == 0|
|00004d90| 0a 58 09 09 20 20 20 20 | 26 26 20 73 74 72 6e 63 |.X.. |&& strnc|
|00004da0| 6d 70 28 6d 65 2d 3e 6d | 6e 74 5f 66 73 6e 61 6d |mp(me->m|nt_fsnam|
|00004db0| 65 2c 20 22 2f 64 65 76 | 2f 22 2c 20 35 29 20 3d |e, "/dev|/", 5) =|
|00004dc0| 3d 20 30 0a 58 09 09 20 | 20 20 20 26 26 20 6c 73 |= 0.X.. | && ls|
|00004dd0| 74 61 74 28 6d 65 2d 3e | 6d 6e 74 5f 66 73 6e 61 |tat(me->|mnt_fsna|
|00004de0| 6d 65 2c 20 26 73 74 64 | 65 76 29 20 3d 3d 20 30 |me, &std|ev) == 0|
|00004df0| 0a 58 09 09 20 20 20 20 | 26 26 20 73 74 64 65 76 |.X.. |&& stdev|
|00004e00| 2e 73 74 5f 72 64 65 76 | 20 3d 3d 20 73 74 70 61 |.st_rdev| == stpa|
|00004e10| 74 68 2e 73 74 5f 64 65 | 76 29 20 7b 0a 58 09 09 |th.st_de|v) {.X..|
|00004e20| 09 28 76 6f 69 64 29 20 | 65 6e 64 6d 6e 74 65 6e |.(void) |endmnten|
|00004e30| 74 28 66 70 29 3b 0a 58 | 09 09 09 63 70 20 3d 20 |t(fp);.X|...cp = |
|00004e40| 65 6d 61 6c 6c 6f 63 28 | 28 75 5f 69 6e 74 29 73 |emalloc(|(u_int)s|
|00004e50| 74 72 6c 65 6e 28 6d 65 | 2d 3e 6d 6e 74 5f 66 73 |trlen(me|->mnt_fs|
|00004e60| 6e 61 6d 65 29 2b 32 29 | 3b 0a 58 09 09 09 28 76 |name)+2)|;.X...(v|
|00004e70| 6f 69 64 29 20 73 74 72 | 63 70 79 28 63 70 2c 20 |oid) str|cpy(cp, |
|00004e80| 6d 65 2d 3e 6d 6e 74 5f | 66 73 6e 61 6d 65 29 3b |me->mnt_|fsname);|
|00004e90| 0a 58 09 09 09 73 20 3d | 20 63 70 20 2b 20 73 74 |.X...s =| cp + st|
|00004ea0| 72 6c 65 6e 28 63 70 29 | 20 2b 20 31 3b 0a 58 09 |rlen(cp)| + 1;.X.|
|00004eb0| 09 09 77 68 69 6c 65 20 | 28 73 20 3e 20 63 70 20 |..while |(s > cp |
|00004ec0| 26 26 20 2a 28 73 20 2d | 20 31 29 20 21 3d 20 27 |&& *(s -| 1) != '|
|00004ed0| 2f 27 29 0a 58 09 09 09 | 09 2a 73 20 3d 20 2a 28 |/').X...|.*s = *(|
|00004ee0| 73 2d 31 29 2c 20 2d 2d | 73 3b 0a 58 09 09 09 69 |s-1), --|s;.X...i|
|00004ef0| 66 20 28 73 20 3e 20 63 | 70 29 0a 58 09 09 09 09 |f (s > c|p).X....|
|00004f00| 2a 73 20 3d 20 27 72 27 | 3b 0a 58 09 09 09 72 65 |*s = 'r'|;.X...re|
|00004f10| 74 75 72 6e 20 63 70 3b | 0a 58 09 09 7d 0a 58 09 |turn cp;|.X..}.X.|
|00004f20| 7d 0a 58 09 28 76 6f 69 | 64 29 20 65 6e 64 6d 6e |}.X.(voi|d) endmn|
|00004f30| 74 65 6e 74 28 66 70 29 | 3b 0a 58 09 72 65 74 75 |tent(fp)|;.X.retu|
|00004f40| 72 6e 20 4e 55 4c 4c 3b | 0a 58 7d 0a 58 0a 58 2f |rn NULL;|.X}.X.X/|
|00004f50| 2a 20 67 65 74 20 74 68 | 65 20 6d 6f 75 6e 74 20 |* get th|e mount |
|00004f60| 70 6f 69 6e 74 20 6f 66 | 20 74 68 65 20 66 69 6c |point of| the fil|
|00004f70| 65 73 79 73 74 65 6d 20 | 6f 6e 20 74 68 65 20 72 |esystem |on the r|
|00004f80| 61 77 20 64 65 76 69 63 | 65 20 2a 2f 0a 58 0a 58 |aw devic|e */.X.X|
|00004f90| 63 68 61 72 20 2a 0a 58 | 67 65 74 70 61 74 68 28 |char *.X|getpath(|
|00004fa0| 64 65 76 69 63 65 2c 20 | 74 61 62 6c 65 29 0a 58 |device, |table).X|
|00004fb0| 09 63 68 61 72 20 2a 64 | 65 76 69 63 65 3b 0a 58 |.char *d|evice;.X|
|00004fc0| 09 63 68 61 72 20 2a 74 | 61 62 6c 65 3b 0a 58 7b |.char *t|able;.X{|
|00004fd0| 0a 58 09 63 68 61 72 09 | 09 2a 63 70 3b 0a 58 09 |.X.char.|.*cp;.X.|
|00004fe0| 73 74 72 75 63 74 20 6d | 6e 74 65 6e 74 09 2a 6d |struct m|ntent.*m|
|00004ff0| 65 3b 0a 58 09 46 49 4c | 45 09 09 2a 66 70 3b 0a |e;.X.FIL|E..*fp;.|
|00005000| 58 09 63 68 61 72 09 09 | 64 65 76 70 61 74 68 5b |X.char..|devpath[|
|00005010| 4d 41 58 50 41 54 48 4c | 45 4e 5d 3b 0a 58 09 73 |MAXPATHL|EN];.X.s|
|00005020| 74 72 75 63 74 20 73 74 | 61 74 09 73 74 70 61 74 |truct st|at.stpat|
|00005030| 68 2c 20 73 74 64 65 76 | 3b 0a 58 09 65 78 74 65 |h, stdev|;.X.exte|
|00005040| 72 6e 20 63 68 61 72 09 | 2a 72 69 6e 64 65 78 28 |rn char.|*rindex(|
|00005050| 29 3b 0a 58 0a 58 09 28 | 76 6f 69 64 29 20 73 74 |);.X.X.(|void) st|
|00005060| 72 63 70 79 28 64 65 76 | 70 61 74 68 2c 20 64 65 |rcpy(dev|path, de|
|00005070| 76 69 63 65 29 3b 0a 58 | 09 69 66 20 28 28 63 70 |vice);.X|.if ((cp|
|00005080| 20 3d 20 72 69 6e 64 65 | 78 28 64 65 76 70 61 74 | = rinde|x(devpat|
|00005090| 68 2c 20 27 2f 27 29 29 | 20 21 3d 20 4e 55 4c 4c |h, '/'))| != NULL|
|000050a0| 29 20 7b 0a 58 09 09 2b | 2b 63 70 3b 0a 58 09 09 |) {.X..+|+cp;.X..|
|000050b0| 69 66 20 28 2a 63 70 20 | 3d 3d 20 27 72 27 29 0a |if (*cp |== 'r').|
|000050c0| 58 09 09 09 77 68 69 6c | 65 20 28 28 2a 63 70 20 |X...whil|e ((*cp |
|000050d0| 3d 20 2a 28 63 70 2b 31 | 29 29 20 21 3d 20 27 5c |= *(cp+1|)) != '\|
|000050e0| 30 27 29 0a 58 09 09 09 | 09 2b 2b 63 70 3b 0a 58 |0').X...|.++cp;.X|
|000050f0| 09 7d 0a 58 09 69 66 20 | 28 28 66 70 20 3d 20 73 |.}.X.if |((fp = s|
|00005100| 65 74 6d 6e 74 65 6e 74 | 28 74 61 62 6c 65 2c 20 |etmntent|(table, |
|00005110| 22 72 22 29 29 20 3d 3d | 20 4e 55 4c 4c 29 20 7b |"r")) ==| NULL) {|
|00005120| 0a 58 09 09 66 70 72 69 | 6e 74 66 28 73 74 64 65 |.X..fpri|ntf(stde|
|00005130| 72 72 2c 20 22 25 73 3a | 20 73 65 74 6d 6e 74 65 |rr, "%s:| setmnte|
|00005140| 6e 74 28 25 73 29 3a 20 | 25 73 5c 6e 22 2c 0a 58 |nt(%s): |%s\n",.X|
|00005150| 09 09 09 09 70 72 6f 67 | 6e 61 6d 65 2c 20 74 61 |....prog|name, ta|
|00005160| 62 6c 65 2c 20 45 4d 53 | 47 28 65 72 72 6e 6f 29 |ble, EMS|G(errno)|
|00005170| 29 3b 0a 58 09 09 72 65 | 74 75 72 6e 20 4e 55 4c |);.X..re|turn NUL|
|00005180| 4c 3b 0a 58 09 7d 0a 58 | 09 77 68 69 6c 65 20 28 |L;.X.}.X|.while (|
|00005190| 28 6d 65 20 3d 20 67 65 | 74 6d 6e 74 65 6e 74 28 |(me = ge|tmntent(|
|000051a0| 66 70 29 29 20 21 3d 20 | 4e 55 4c 4c 29 20 7b 0a |fp)) != |NULL) {.|
|000051b0| 58 09 09 69 66 20 28 73 | 74 72 63 6d 70 28 6d 65 |X..if (s|trcmp(me|
|000051c0| 2d 3e 6d 6e 74 5f 74 79 | 70 65 2c 20 4d 4e 54 54 |->mnt_ty|pe, MNTT|
|000051d0| 59 50 45 5f 34 32 29 20 | 3d 3d 20 30 0a 58 09 09 |YPE_42) |== 0.X..|
|000051e0| 20 20 20 20 26 26 20 73 | 74 72 63 6d 70 28 6d 65 | && s|trcmp(me|
|000051f0| 2d 3e 6d 6e 74 5f 66 73 | 6e 61 6d 65 2c 20 64 65 |->mnt_fs|name, de|
|00005200| 76 70 61 74 68 29 20 3d | 3d 20 30 0a 58 09 09 20 |vpath) =|= 0.X.. |
|00005210| 20 20 20 26 26 20 6c 73 | 74 61 74 28 6d 65 2d 3e | && ls|tat(me->|
|00005220| 6d 6e 74 5f 66 73 6e 61 | 6d 65 2c 20 26 73 74 64 |mnt_fsna|me, &std|
|00005230| 65 76 29 20 3d 3d 20 30 | 0a 58 09 09 20 20 20 20 |ev) == 0|.X.. |
|00005240| 26 26 20 6c 73 74 61 74 | 28 6d 65 2d 3e 6d 6e 74 |&& lstat|(me->mnt|
|00005250| 5f 64 69 72 2c 20 26 73 | 74 70 61 74 68 29 20 3d |_dir, &s|tpath) =|
|00005260| 3d 20 30 0a 58 09 09 20 | 20 20 20 26 26 20 73 74 |= 0.X.. | && st|
|00005270| 64 65 76 2e 73 74 5f 72 | 64 65 76 20 3d 3d 20 73 |dev.st_r|dev == s|
|00005280| 74 70 61 74 68 2e 73 74 | 5f 64 65 76 29 20 7b 0a |tpath.st|_dev) {.|
|00005290| 58 09 09 09 28 76 6f 69 | 64 29 20 65 6e 64 6d 6e |X...(voi|d) endmn|
|000052a0| 74 65 6e 74 28 66 70 29 | 3b 0a 58 09 09 09 63 70 |tent(fp)|;.X...cp|
|000052b0| 20 3d 20 65 6d 61 6c 6c | 6f 63 28 28 75 5f 69 6e | = emall|oc((u_in|
|000052c0| 74 29 73 74 72 6c 65 6e | 28 6d 65 2d 3e 6d 6e 74 |t)strlen|(me->mnt|
|000052d0| 5f 64 69 72 29 2b 31 29 | 3b 0a 58 09 09 09 28 76 |_dir)+1)|;.X...(v|
|000052e0| 6f 69 64 29 20 73 74 72 | 63 70 79 28 63 70 2c 20 |oid) str|cpy(cp, |
|000052f0| 6d 65 2d 3e 6d 6e 74 5f | 64 69 72 29 3b 0a 58 09 |me->mnt_|dir);.X.|
|00005300| 09 09 72 65 74 75 72 6e | 20 63 70 3b 0a 58 09 09 |..return| cp;.X..|
|00005310| 7d 0a 58 09 7d 0a 58 09 | 28 76 6f 69 64 29 20 65 |}.X.}.X.|(void) e|
|00005320| 6e 64 6d 6e 74 65 6e 74 | 28 66 70 29 3b 0a 58 09 |ndmntent|(fp);.X.|
|00005330| 72 65 74 75 72 6e 20 4e | 55 4c 4c 3b 0a 58 7d 0a |return N|ULL;.X}.|
|00005340| 58 0a 58 23 64 65 66 69 | 6e 65 20 73 62 6c 6f 63 |X.X#defi|ne sbloc|
|00005350| 6b 09 73 62 5f 75 6e 2e | 75 5f 73 62 6c 6f 63 6b |k.sb_un.|u_sblock|
|00005360| 0a 58 0a 58 73 74 72 75 | 63 74 20 69 69 6e 66 6f |.X.Xstru|ct iinfo|
|00005370| 20 7b 0a 58 09 69 6e 74 | 09 69 6e 75 6d 3b 09 09 | {.X.int|.inum;..|
|00005380| 09 2f 2a 20 6d 75 73 74 | 20 62 65 20 69 6e 74 20 |./* must| be int |
|00005390| 73 6f 20 63 61 6e 20 62 | 65 20 2d 76 65 20 74 6f |so can b|e -ve to|
|000053a0| 6f 20 2a 2f 0a 58 09 75 | 5f 69 6e 74 09 62 6c 6b |o */.X.u|_int.blk|
|000053b0| 73 3b 0a 58 09 74 69 6d | 65 5f 74 09 6d 74 69 6d |s;.X.tim|e_t.mtim|
|000053c0| 65 3b 0a 58 7d 3b 0a 58 | 0a 58 69 6e 74 0a 58 63 |e;.X};.X|.Xint.Xc|
|000053d0| 6d 70 69 69 6e 66 6f 28 | 69 69 70 31 2c 20 69 69 |mpiinfo(|iip1, ii|
|000053e0| 70 32 29 0a 58 09 72 65 | 67 69 73 74 65 72 20 73 |p2).X.re|gister s|
|000053f0| 74 72 75 63 74 20 69 69 | 6e 66 6f 20 2a 69 69 70 |truct ii|nfo *iip|
|00005400| 31 2c 20 2a 69 69 70 32 | 3b 0a 58 7b 0a 58 09 72 |1, *iip2|;.X{.X.r|
|00005410| 65 74 75 72 6e 20 69 69 | 70 31 2d 3e 6d 74 69 6d |eturn ii|p1->mtim|
|00005420| 65 20 2d 20 69 69 70 32 | 2d 3e 6d 74 69 6d 65 3b |e - iip2|->mtime;|
|00005430| 0a 58 7d 0a 58 0a 58 73 | 74 72 75 63 74 20 69 69 |.X}.X.Xs|truct ii|
|00005440| 6e 66 6f 09 2a 73 74 61 | 63 6b 5b 32 5d 3b 0a 58 |nfo.*sta|ck[2];.X|
|00005450| 6c 6f 6e 67 09 09 73 74 | 61 63 6b 73 69 7a 65 5b |long..st|acksize[|
|00005460| 32 5d 3b 0a 58 6c 6f 6e | 67 09 09 6e 65 65 64 73 |2];.Xlon|g..needs|
|00005470| 70 61 63 65 5b 32 5d 3b | 0a 58 69 6e 74 09 09 74 |pace[2];|.Xint..t|
|00005480| 6f 70 20 3d 20 2d 31 3b | 0a 58 0a 58 63 68 61 72 |op = -1;|.X.Xchar|
|00005490| 09 09 2a 64 69 72 6d 61 | 73 6b 3b 0a 58 69 6e 74 |..*dirma|sk;.Xint|
|000054a0| 09 09 6d 75 73 74 66 72 | 65 65 3b 0a 58 0a 58 23 |..mustfr|ee;.X.X#|
|000054b0| 64 65 66 69 6e 65 09 53 | 45 54 28 76 2c 69 29 09 |define.S|ET(v,i).|
|000054c0| 28 28 76 29 5b 28 69 29 | 2f 42 49 54 53 50 45 52 |((v)[(i)|/BITSPER|
|000054d0| 42 59 54 45 5d 20 7c 3d | 20 28 31 3c 3c 28 28 69 |BYTE] |=| (1<<((i|
|000054e0| 29 25 42 49 54 53 50 45 | 52 42 59 54 45 29 29 29 |)%BITSPE|RBYTE)))|
|000054f0| 0a 58 23 64 65 66 69 6e | 65 09 54 53 54 28 76 2c |.X#defin|e.TST(v,|
|00005500| 69 29 09 28 28 76 29 5b | 28 69 29 2f 42 49 54 53 |i).((v)[|(i)/BITS|
|00005510| 50 45 52 42 59 54 45 5d | 20 26 20 28 31 3c 3c 28 |PERBYTE]| & (1<<(|
|00005520| 28 69 29 25 42 49 54 53 | 50 45 52 42 59 54 45 29 |(i)%BITS|PERBYTE)|
|00005530| 29 29 0a 58 0a 58 69 6e | 74 0a 58 64 6f 69 74 28 |)).X.Xin|t.Xdoit(|
|00005540| 70 61 74 68 2c 20 64 65 | 76 29 0a 58 09 73 74 72 |path, de|v).X.str|
|00005550| 75 63 74 20 61 5f 70 61 | 74 68 09 2a 70 61 74 68 |uct a_pa|th.*path|
|00005560| 3b 0a 58 09 63 68 61 72 | 09 09 2a 64 65 76 3b 0a |;.X.char|..*dev;.|
|00005570| 58 7b 0a 58 09 72 65 67 | 69 73 74 65 72 20 73 74 |X{.X.reg|ister st|
|00005580| 72 75 63 74 20 69 69 6e | 66 6f 09 2a 73 74 3b 0a |ruct iin|fo.*st;.|
|00005590| 58 09 72 65 67 69 73 74 | 65 72 20 69 6e 74 09 69 |X.regist|er int.i|
|000055a0| 2c 20 69 6e 75 6d 3b 0a | 58 09 69 6e 74 09 66 64 |, inum;.|X.int.fd|
|000055b0| 2c 20 68 69 77 61 74 65 | 72 2c 20 6c 6f 77 61 74 |, hiwate|r, lowat|
|000055c0| 65 72 3b 0a 58 09 75 5f | 69 6e 74 09 6e 66 69 6c |er;.X.u_|int.nfil|
|000055d0| 65 73 3b 0a 58 09 75 6e | 69 6f 6e 20 7b 20 73 74 |es;.X.un|ion { st|
|000055e0| 72 75 63 74 20 66 73 20 | 75 5f 73 62 6c 6f 63 6b |ruct fs |u_sblock|
|000055f0| 3b 20 63 68 61 72 20 64 | 75 6d 6d 79 5b 53 42 53 |; char d|ummy[SBS|
|00005600| 49 5a 45 5d 3b 20 7d 20 | 73 62 5f 75 6e 3b 0a 58 |IZE]; } |sb_un;.X|
|00005610| 09 63 68 61 72 09 2a 62 | 69 74 76 65 63 2c 20 2a |.char.*b|itvec, *|
|00005620| 64 69 72 76 65 63 2c 20 | 70 61 74 68 62 75 66 5b |dirvec, |pathbuf[|
|00005630| 4d 41 58 50 41 54 48 4c | 45 4e 5d 3b 0a 58 09 73 |MAXPATHL|EN];.X.s|
|00005640| 74 72 75 63 74 20 61 5f | 70 61 74 68 09 2a 70 70 |truct a_|path.*pp|
|00005650| 3b 0a 58 09 73 74 72 75 | 63 74 20 73 74 61 74 66 |;.X.stru|ct statf|
|00005660| 73 09 66 73 62 75 66 3b | 0a 58 09 65 78 74 65 72 |s.fsbuf;|.X.exter|
|00005670| 6e 20 69 6e 74 20 69 74 | 65 73 74 28 29 2c 20 6d |n int it|est(), m|
|00005680| 6b 62 61 63 6b 75 70 28 | 29 2c 20 72 6d 62 61 63 |kbackup(|), rmbac|
|00005690| 6b 75 70 28 29 3b 0a 58 | 09 65 78 74 65 72 6e 20 |kup();.X|.extern |
|000056a0| 63 68 61 72 20 2a 63 61 | 6c 6c 6f 63 28 29 3b 0a |char *ca|lloc();.|
|000056b0| 58 0a 58 09 69 66 20 28 | 64 65 62 75 67 29 0a 58 |X.X.if (|debug).X|
|000056c0| 09 09 70 72 69 6e 74 66 | 28 22 64 6f 69 6e 67 20 |..printf|("doing |
|000056d0| 25 73 5c 6e 22 2c 20 64 | 65 76 29 3b 0a 58 09 69 |%s\n", d|ev);.X.i|
|000056e0| 66 20 28 28 66 64 20 3d | 20 6f 70 65 6e 28 64 65 |f ((fd =| open(de|
|000056f0| 76 2c 20 4f 5f 52 44 4f | 4e 4c 59 2c 20 30 29 29 |v, O_RDO|NLY, 0))|
|00005700| 20 3c 20 30 29 20 7b 0a | 58 09 09 66 70 72 69 6e | < 0) {.|X..fprin|
|00005710| 74 66 28 73 74 64 65 72 | 72 2c 20 22 25 73 3a 20 |tf(stder|r, "%s: |
|00005720| 6f 70 65 6e 28 25 73 29 | 3a 20 25 73 5c 6e 22 2c |open(%s)|: %s\n",|
|00005730| 0a 58 09 09 09 09 70 72 | 6f 67 6e 61 6d 65 2c 20 |.X....pr|ogname, |
|00005740| 64 65 76 2c 20 45 4d 53 | 47 28 65 72 72 6e 6f 29 |dev, EMS|G(errno)|
|00005750| 29 3b 0a 58 09 09 72 65 | 74 75 72 6e 20 30 3b 0a |);.X..re|turn 0;.|
|00005760| 58 09 7d 0a 58 09 69 66 | 20 28 62 72 65 61 64 28 |X.}.X.if| (bread(|
|00005770| 66 64 2c 20 53 42 4c 4f | 43 4b 2c 20 28 63 68 61 |fd, SBLO|CK, (cha|
|00005780| 72 20 2a 29 26 73 62 6c | 6f 63 6b 2c 20 28 6c 6f |r *)&sbl|ock, (lo|
|00005790| 6e 67 29 20 53 42 53 49 | 5a 45 29 20 3c 20 30 29 |ng) SBSI|ZE) < 0)|
|000057a0| 20 7b 0a 58 09 09 66 70 | 72 69 6e 74 66 28 73 74 | {.X..fp|rintf(st|
|000057b0| 64 65 72 72 2c 20 22 25 | 73 3a 20 63 61 6e 27 74 |derr, "%|s: can't|
|000057c0| 20 72 65 61 64 20 73 75 | 70 65 72 62 6c 6f 63 6b | read su|perblock|
|000057d0| 20 66 72 6f 6d 20 25 73 | 3a 20 25 73 5c 6e 22 2c | from %s|: %s\n",|
|000057e0| 0a 58 09 09 09 09 70 72 | 6f 67 6e 61 6d 65 2c 20 |.X....pr|ogname, |
|000057f0| 64 65 76 2c 20 45 4d 53 | 47 28 65 72 72 6e 6f 29 |dev, EMS|G(errno)|
|00005800| 29 3b 0a 58 09 09 72 65 | 74 75 72 6e 20 30 3b 0a |);.X..re|turn 0;.|
|00005810| 58 09 7d 0a 58 09 28 76 | 6f 69 64 29 20 63 6c 6f |X.}.X.(v|oid) clo|
|00005820| 73 65 28 66 64 29 3b 0a | 58 09 6e 66 69 6c 65 73 |se(fd);.|X.nfiles|
|00005830| 20 3d 20 73 62 6c 6f 63 | 6b 2e 66 73 5f 69 70 67 | = sbloc|k.fs_ipg|
|00005840| 20 2a 20 73 62 6c 6f 63 | 6b 2e 66 73 5f 6e 63 67 | * sbloc|k.fs_ncg|
|00005850| 3b 0a 58 09 73 74 61 63 | 6b 5b 2b 2b 74 6f 70 5d |;.X.stac|k[++top]|
|00005860| 20 3d 20 28 73 74 72 75 | 63 74 20 69 69 6e 66 6f | = (stru|ct iinfo|
|00005870| 20 2a 29 63 61 6c 6c 6f | 63 28 6e 66 69 6c 65 73 | *)callo|c(nfiles|
|00005880| 2c 20 73 69 7a 65 6f 66 | 20 28 73 74 72 75 63 74 |, sizeof| (struct|
|00005890| 20 69 69 6e 66 6f 29 29 | 3b 0a 58 09 73 74 61 63 | iinfo))|;.X.stac|
|000058a0| 6b 73 69 7a 65 5b 74 6f | 70 5d 20 3d 20 30 3b 0a |ksize[to|p] = 0;.|
|000058b0| 58 09 6e 65 65 64 73 70 | 61 63 65 5b 74 6f 70 5d |X.needsp|ace[top]|
|000058c0| 20 3d 20 30 3b 0a 58 09 | 64 69 72 76 65 63 20 3d | = 0;.X.|dirvec =|
|000058d0| 20 63 61 6c 6c 6f 63 28 | 28 6e 66 69 6c 65 73 2f | calloc(|(nfiles/|
|000058e0| 42 49 54 53 50 45 52 42 | 59 54 45 29 2b 31 2c 20 |BITSPERB|YTE)+1, |
|000058f0| 31 29 3b 0a 58 09 64 69 | 72 6d 61 73 6b 20 3d 20 |1);.X.di|rmask = |
|00005900| 64 69 72 76 65 63 3b 0a | 58 09 69 66 20 28 74 6f |dirvec;.|X.if (to|
|00005910| 70 20 3d 3d 20 30 29 20 | 7b 0a 58 09 09 2f 2a 20 |p == 0) |{.X../* |
|00005920| 66 69 67 75 72 65 20 6f | 75 74 20 74 68 65 20 6f |figure o|ut the o|
|00005930| 6c 64 65 73 74 20 6c 61 | 73 74 74 69 6d 65 20 62 |ldest la|sttime b|
|00005940| 65 66 6f 72 65 20 69 2d | 6c 69 73 74 20 77 61 6c |efore i-|list wal|
|00005950| 6b 20 2a 2f 0a 58 09 09 | 6c 61 73 74 74 69 6d 65 |k */.X..|lasttime|
|00005960| 20 3d 20 6e 6f 77 3b 0a | 58 09 09 66 6f 72 20 28 | = now;.|X..for (|
|00005970| 70 70 20 3d 20 70 61 74 | 68 3b 20 70 70 20 21 3d |pp = pat|h; pp !=|
|00005980| 20 4e 55 4c 4c 3b 20 70 | 70 20 3d 20 70 70 2d 3e | NULL; p|p = pp->|
|00005990| 6e 65 78 74 29 0a 58 09 | 09 09 69 66 20 28 70 70 |next).X.|..if (pp|
|000059a0| 2d 3e 6e 65 77 65 72 20 | 3c 20 6c 61 73 74 74 69 |->newer |< lastti|
|000059b0| 6d 65 29 0a 58 09 09 09 | 09 6c 61 73 74 74 69 6d |me).X...|.lasttim|
|000059c0| 65 20 3d 20 70 70 2d 3e | 6e 65 77 65 72 3b 0a 58 |e = pp->|newer;.X|
|000059d0| 09 7d 0a 58 09 69 66 20 | 28 64 65 62 75 67 29 0a |.}.X.if |(debug).|
|000059e0| 58 09 09 70 72 69 6e 74 | 66 28 22 25 73 3a 20 73 |X..print|f("%s: s|
|000059f0| 63 61 6e 20 25 64 20 69 | 6e 6f 64 65 73 5c 6e 22 |can %d i|nodes\n"|
|00005a00| 2c 20 64 65 76 2c 20 6e | 66 69 6c 65 73 29 3b 0a |, dev, n|files);.|
|00005a10| 58 09 28 76 6f 69 64 29 | 20 69 6c 77 28 64 65 76 |X.(void)| ilw(dev|
|00005a20| 2c 20 69 74 65 73 74 2c | 20 31 29 3b 0a 58 09 69 |, itest,| 1);.X.i|
|00005a30| 66 20 28 76 65 72 62 6f | 73 65 29 0a 58 09 09 70 |f (verbo|se).X..p|
|00005a40| 72 69 6e 74 66 28 22 25 | 73 3a 20 66 6f 75 6e 64 |rintf("%|s: found|
|00005a50| 20 25 64 20 63 61 6e 64 | 69 64 61 74 65 20 66 69 | %d cand|idate fi|
|00005a60| 6c 65 73 2c 20 77 69 74 | 68 20 25 64 20 62 6c 6f |les, wit|h %d blo|
|00005a70| 63 6b 73 20 74 6f 74 61 | 6c 5c 6e 22 2c 0a 58 09 |cks tota|l\n",.X.|
|00005a80| 09 09 20 20 20 20 20 20 | 64 65 76 2c 20 73 74 61 |.. |dev, sta|
|00005a90| 63 6b 73 69 7a 65 5b 74 | 6f 70 5d 2c 20 6e 65 65 |cksize[t|op], nee|
|00005aa0| 64 73 70 61 63 65 5b 74 | 6f 70 5d 29 3b 0a 58 09 |dspace[t|op]);.X.|
|00005ab0| 69 66 20 28 73 74 61 63 | 6b 73 69 7a 65 5b 74 6f |if (stac|ksize[to|
|00005ac0| 70 5d 20 3d 3d 20 30 29 | 20 7b 0a 58 09 09 28 76 |p] == 0)| {.X..(v|
|00005ad0| 6f 69 64 29 20 66 72 65 | 65 28 64 69 72 76 65 63 |oid) fre|e(dirvec|
|00005ae0| 29 3b 0a 58 09 09 28 76 | 6f 69 64 29 20 66 72 65 |);.X..(v|oid) fre|
|00005af0| 65 28 28 63 68 61 72 20 | 2a 29 73 74 61 63 6b 5b |e((char |*)stack[|
|00005b00| 74 6f 70 2d 2d 5d 29 3b | 0a 58 09 09 72 65 74 75 |top--]);|.X..retu|
|00005b10| 72 6e 20 30 3b 0a 58 09 | 7d 0a 58 09 62 69 74 76 |rn 0;.X.|}.X.bitv|
|00005b20| 65 63 20 3d 20 63 61 6c | 6c 6f 63 28 28 6e 66 69 |ec = cal|loc((nfi|
|00005b30| 6c 65 73 2f 42 49 54 53 | 50 45 52 42 59 54 45 29 |les/BITS|PERBYTE)|
|00005b40| 2b 31 2c 20 31 29 3b 0a | 58 09 69 66 20 28 74 6f |+1, 1);.|X.if (to|
|00005b50| 70 20 3d 3d 20 30 29 20 | 7b 0a 58 09 09 2f 2a 0a |p == 0) |{.X../*.|
|00005b60| 58 09 09 20 2a 20 54 68 | 69 73 20 69 73 20 74 68 |X.. * Th|is is th|
|00005b70| 65 20 66 69 6c 65 73 79 | 73 74 65 6d 20 77 65 20 |e filesy|stem we |
|00005b80| 77 61 6e 74 20 74 6f 20 | 62 61 63 6b 20 75 70 2e |want to |back up.|
|00005b90| 0a 58 09 09 20 2a 20 46 | 69 72 73 74 20 6d 61 6b |.X.. * F|irst mak|
|00005ba0| 65 20 73 75 72 65 20 74 | 68 65 72 65 20 69 73 20 |e sure t|here is |
|00005bb0| 65 6e 6f 75 67 68 20 66 | 72 65 65 20 73 70 61 63 |enough f|ree spac|
|00005bc0| 65 20 69 6e 20 74 68 65 | 20 62 61 63 6b 75 70 0a |e in the| backup.|
|00005bd0| 58 09 09 20 2a 20 66 69 | 6c 65 73 79 73 74 65 6d |X.. * fi|lesystem|
|00005be0| 20 28 69 66 20 6e 6f 74 | 2c 20 63 61 6c 6c 20 6d | (if not|, call m|
|00005bf0| 79 73 65 6c 66 20 72 65 | 63 75 72 73 69 76 65 6c |yself re|cursivel|
|00005c00| 79 29 2c 20 74 68 65 6e | 20 72 75 6e 0a 58 09 09 |y), then| run.X..|
|00005c10| 20 2a 20 61 20 66 69 6c | 65 20 74 72 65 65 20 77 | * a fil|e tree w|
|00005c20| 61 6c 6b 65 72 20 74 6f | 20 63 6f 70 79 20 74 68 |alker to| copy th|
|00005c30| 65 20 69 6e 64 69 63 61 | 74 65 64 20 66 69 6c 65 |e indica|ted file|
|00005c40| 73 20 74 6f 20 74 68 65 | 0a 58 09 09 20 2a 20 62 |s to the|.X.. * b|
|00005c50| 61 63 6b 75 70 20 66 69 | 6c 65 73 79 73 74 65 6d |ackup fi|lesystem|
|00005c60| 2e 0a 58 09 09 20 2a 2f | 0a 58 09 09 69 66 20 28 |..X.. */|.X..if (|
|00005c70| 73 74 61 74 66 73 28 62 | 61 63 6b 75 70 2c 20 26 |statfs(b|ackup, &|
|00005c80| 66 73 62 75 66 29 20 3c | 20 30 29 20 7b 0a 58 09 |fsbuf) <| 0) {.X.|
|00005c90| 09 09 66 70 72 69 6e 74 | 66 28 73 74 64 65 72 72 |..fprint|f(stderr|
|00005ca0| 2c 20 22 25 73 3a 20 73 | 74 61 74 66 73 28 25 73 |, "%s: s|tatfs(%s|
|00005cb0| 29 3a 20 25 73 5c 6e 22 | 2c 0a 58 09 09 09 09 09 |): %s\n"|,.X.....|
|00005cc0| 70 72 6f 67 6e 61 6d 65 | 2c 20 62 61 63 6b 75 70 |progname|, backup|
|00005cd0| 2c 20 45 4d 53 47 28 65 | 72 72 6e 6f 29 29 3b 0a |, EMSG(e|rrno));.|
|00005ce0| 58 09 09 09 65 78 69 74 | 28 31 29 3b 0a 58 09 09 |X...exit|(1);.X..|
|00005cf0| 7d 0a 58 09 09 68 69 77 | 61 74 65 72 20 3d 20 28 |}.X..hiw|ater = (|
|00005d00| 66 73 62 75 66 2e 66 5f | 62 6c 6f 63 6b 73 2d 66 |fsbuf.f_|blocks-f|
|00005d10| 73 62 75 66 2e 66 5f 62 | 66 72 65 65 0a 58 09 09 |sbuf.f_b|free.X..|
|00005d20| 09 20 20 20 09 09 20 2b | 66 73 62 75 66 2e 66 5f |. .. +|fsbuf.f_|
|00005d30| 62 61 76 61 69 6c 29 2a | 48 49 57 41 54 45 52 2f |bavail)*|HIWATER/|
|00005d40| 31 30 30 3b 0a 58 09 09 | 69 66 20 28 66 73 62 75 |100;.X..|if (fsbu|
|00005d50| 66 2e 66 5f 62 6c 6f 63 | 6b 73 20 2d 20 66 73 62 |f.f_bloc|ks - fsb|
|00005d60| 75 66 2e 66 5f 62 66 72 | 65 65 20 2b 20 6e 65 65 |uf.f_bfr|ee + nee|
|00005d70| 64 73 70 61 63 65 5b 74 | 6f 70 5d 20 3e 20 68 69 |dspace[t|op] > hi|
|00005d80| 77 61 74 65 72 29 20 7b | 0a 58 09 09 09 2f 2a 20 |water) {|.X.../* |
|00005d90| 6e 65 65 64 20 74 6f 20 | 66 72 65 65 20 73 6f 6d |need to |free som|
|00005da0| 65 20 73 70 61 63 65 20 | 2a 2f 0a 58 09 09 09 73 |e space |*/.X...s|
|00005db0| 74 72 75 63 74 20 61 5f | 70 61 74 68 09 62 61 63 |truct a_|path.bac|
|00005dc0| 6b 75 70 64 65 73 63 3b | 0a 58 09 09 09 2f 2a 0a |kupdesc;|.X.../*.|
|00005dd0| 58 09 09 09 20 2a 20 49 | 66 20 79 6f 75 20 77 61 |X... * I|f you wa|
|00005de0| 6e 74 20 74 6f 20 66 72 | 65 65 20 73 6f 20 66 72 |nt to fr|ee so fr|
|00005df0| 65 65 20 73 70 61 63 65 | 20 77 69 6c 6c 20 62 65 |ee space| will be|
|00005e00| 20 61 74 0a 58 09 09 09 | 20 2a 20 4c 4f 57 41 54 | at.X...| * LOWAT|
|00005e10| 45 52 20 61 66 74 65 72 | 20 62 61 63 6b 75 70 20 |ER after| backup |
|00005e20| 66 69 6e 69 73 68 65 73 | 2c 20 74 68 65 6e 20 65 |finishes|, then e|
|00005e30| 6e 61 62 6c 65 20 74 68 | 65 0a 58 09 09 09 20 2a |nable th|e.X... *|
|00005e40| 20 6e 65 78 74 20 6c 69 | 6e 65 20 61 6e 64 20 64 | next li|ne and d|
|00005e50| 6f 20 73 2f 68 69 77 61 | 74 65 72 2f 6c 6f 77 61 |o s/hiwa|ter/lowa|
|00005e60| 74 65 72 2f 20 69 6e 20 | 74 68 65 0a 58 09 09 09 |ter/ in |the.X...|
|00005e70| 20 2a 20 66 6f 6c 6c 6f | 77 69 6e 67 20 6c 69 6e | * follo|wing lin|
|00005e80| 65 20 64 65 66 69 6e 69 | 6e 67 20 6d 75 73 74 66 |e defini|ng mustf|
|00005e90| 72 65 65 2e 0a 58 09 09 | 09 20 2a 2f 0a 58 09 09 |ree..X..|. */.X..|
|00005ea0| 09 2f 2a 20 6c 6f 77 61 | 74 65 72 20 3d 20 2b 28 |./* lowa|ter = +(|
|00005eb0| 68 69 77 61 74 65 72 2a | 4c 4f 57 41 54 45 52 29 |hiwater*|LOWATER)|
|00005ec0| 2f 48 49 57 41 54 45 52 | 3b 20 2a 2f 0a 58 09 09 |/HIWATER|; */.X..|
|00005ed0| 09 6d 75 73 74 66 72 65 | 65 20 3d 20 66 73 62 75 |.mustfre|e = fsbu|
|00005ee0| 66 2e 66 5f 62 6c 6f 63 | 6b 73 20 2d 20 66 73 62 |f.f_bloc|ks - fsb|
|00005ef0| 75 66 2e 66 5f 62 66 72 | 65 65 0a 58 09 09 09 09 |uf.f_bfr|ee.X....|
|00005f00| 09 09 20 20 2b 20 6e 65 | 65 64 73 70 61 63 65 5b |.. + ne|edspace[|
|00005f10| 74 6f 70 5d 20 2d 20 68 | 69 77 61 74 65 72 3b 0a |top] - h|iwater;.|
|00005f20| 58 09 09 09 2f 2a 20 73 | 65 6c 65 63 74 20 61 6c |X.../* s|elect al|
|00005f30| 6c 20 66 69 6c 65 73 20 | 2a 2f 0a 58 09 09 09 6c |l files |*/.X...l|
|00005f40| 61 73 74 74 69 6d 65 20 | 3d 20 30 3b 0a 58 09 09 |asttime |= 0;.X..|
|00005f50| 09 6d 61 78 73 69 7a 65 | 20 3d 20 73 62 6c 6f 63 |.maxsize| = sbloc|
|00005f60| 6b 2e 66 73 5f 64 73 69 | 7a 65 20 2a 20 44 45 56 |k.fs_dsi|ze * DEV|
|00005f70| 5f 42 53 49 5a 45 3b 0a | 58 09 09 09 62 61 63 6b |_BSIZE;.|X...back|
|00005f80| 75 70 64 65 73 63 2e 70 | 61 74 68 20 3d 20 62 61 |updesc.p|ath = ba|
|00005f90| 63 6b 75 70 3b 0a 58 09 | 09 09 62 61 63 6b 75 70 |ckup;.X.|..backup|
|00005fa0| 64 65 73 63 2e 6e 65 78 | 74 20 3d 20 4e 55 4c 4c |desc.nex|t = NULL|
|00005fb0| 3b 0a 58 09 09 09 62 61 | 63 6b 75 70 64 65 73 63 |;.X...ba|ckupdesc|
|00005fc0| 2e 67 6c 6f 62 20 3d 20 | 4e 55 4c 4c 3b 0a 58 09 |.glob = |NULL;.X.|
|00005fd0| 09 09 62 61 63 6b 75 70 | 64 65 73 63 2e 6e 65 77 |..backup|desc.new|
|00005fe0| 65 72 20 3d 20 6c 61 73 | 74 74 69 6d 65 3b 0a 58 |er = las|ttime;.X|
|00005ff0| 09 09 09 69 66 20 28 21 | 64 6f 69 74 28 26 62 61 |...if (!|doit(&ba|
|00006000| 63 6b 75 70 64 65 73 63 | 2c 20 64 65 76 62 61 63 |ckupdesc|, devbac|
|00006010| 6b 75 70 29 29 20 7b 0a | 58 09 09 09 09 66 70 72 |kup)) {.|X....fpr|
|00006020| 69 6e 74 66 28 73 74 64 | 65 72 72 2c 0a 58 09 09 |intf(std|err,.X..|
|00006030| 09 09 09 22 25 73 3a 20 | 43 61 6e 27 74 20 77 61 |..."%s: |Can't wa|
|00006040| 6c 6b 20 25 73 20 74 6f | 20 66 72 65 65 20 73 70 |lk %s to| free sp|
|00006050| 61 63 65 5c 6e 22 2c 0a | 58 09 09 09 09 09 09 70 |ace\n",.|X......p|
|00006060| 72 6f 67 6e 61 6d 65 2c | 20 62 61 63 6b 75 70 29 |rogname,| backup)|
|00006070| 3b 0a 58 09 09 09 09 65 | 78 69 74 28 31 29 3b 0a |;.X....e|xit(1);.|
|00006080| 58 09 09 09 7d 0a 58 09 | 09 7d 0a 58 09 09 66 6f |X...}.X.|.}.X..fo|
|00006090| 72 20 28 69 20 3d 20 30 | 2c 20 73 74 20 3d 20 73 |r (i = 0|, st = s|
|000060a0| 74 61 63 6b 5b 74 6f 70 | 5d 3b 20 69 20 3c 20 6e |tack[top|]; i < n|
|000060b0| 66 69 6c 65 73 3b 20 2b | 2b 69 2c 20 2b 2b 73 74 |files; +|+i, ++st|
|000060c0| 29 20 7b 0a 58 09 09 09 | 69 66 20 28 73 74 2d 3e |) {.X...|if (st->|
|000060d0| 6d 74 69 6d 65 20 3e 20 | 30 29 20 7b 0a 58 09 09 |mtime > |0) {.X..|
|000060e0| 09 09 53 45 54 28 62 69 | 74 76 65 63 2c 20 73 74 |..SET(bi|tvec, st|
|000060f0| 2d 3e 69 6e 75 6d 29 3b | 0a 58 09 09 09 7d 0a 58 |->inum);|.X...}.X|
|00006100| 09 09 7d 0a 58 09 09 66 | 6f 72 20 28 3b 20 70 61 |..}.X..f|or (; pa|
|00006110| 74 68 20 21 3d 20 4e 55 | 4c 4c 3b 20 70 61 74 68 |th != NU|LL; path|
|00006120| 20 3d 20 70 61 74 68 2d | 3e 6e 65 78 74 29 20 7b | = path-|>next) {|
|00006130| 0a 58 09 09 09 69 66 20 | 28 63 68 64 69 72 28 70 |.X...if |(chdir(p|
|00006140| 61 74 68 2d 3e 70 61 74 | 68 29 20 3c 20 30 29 20 |ath->pat|h) < 0) |
|00006150| 7b 0a 58 09 09 09 09 66 | 70 72 69 6e 74 66 28 73 |{.X....f|printf(s|
|00006160| 74 64 65 72 72 2c 20 22 | 25 73 3a 20 63 68 64 69 |tderr, "|%s: chdi|
|00006170| 72 28 25 73 29 3a 20 25 | 73 5c 6e 22 2c 0a 58 09 |r(%s): %|s\n",.X.|
|00006180| 09 09 09 09 70 72 6f 67 | 6e 61 6d 65 2c 20 70 61 |....prog|name, pa|
|00006190| 74 68 2d 3e 70 61 74 68 | 2c 20 45 4d 53 47 28 65 |th->path|, EMSG(e|
|000061a0| 72 72 6e 6f 29 29 3b 0a | 58 09 09 09 09 65 78 69 |rrno));.|X....exi|
|000061b0| 74 28 31 29 3b 0a 58 09 | 09 09 7d 0a 58 09 09 09 |t(1);.X.|..}.X...|
|000061c0| 28 76 6f 69 64 29 20 73 | 70 72 69 6e 74 66 28 70 |(void) s|printf(p|
|000061d0| 61 74 68 62 75 66 2c 20 | 22 25 73 2f 22 2c 20 70 |athbuf, |"%s/", p|
|000061e0| 61 74 68 2d 3e 70 61 74 | 68 29 3b 0a 58 09 09 09 |ath->pat|h);.X...|
|000061f0| 6c 61 73 74 74 69 6d 65 | 20 3d 20 70 61 74 68 2d |lasttime| = path-|
|00006200| 3e 6e 65 77 65 72 3b 0a | 58 09 09 09 69 66 20 28 |>newer;.|X...if (|
|00006210| 76 65 72 62 6f 73 65 29 | 0a 58 09 09 09 09 70 72 |verbose)|.X....pr|
|00006220| 69 6e 74 66 28 22 25 73 | 3a 20 73 65 6c 65 63 74 |intf("%s|: select|
|00006230| 20 6d 74 69 6d 65 20 77 | 69 74 68 69 6e 20 25 64 | mtime w|ithin %d|
|00006240| 20 73 65 63 20 69 6e 20 | 25 73 5c 6e 22 2c 0a 58 | sec in |%s\n",.X|
|00006250| 09 09 09 09 09 20 20 20 | 20 64 65 76 2c 20 6e 6f |..... | dev, no|
|00006260| 77 20 2d 20 6c 61 73 74 | 74 69 6d 65 2c 20 70 61 |w - last|time, pa|
|00006270| 74 68 2d 3e 70 61 74 68 | 29 3b 0a 58 09 09 09 77 |th->path|);.X...w|
|00006280| 61 6c 6b 28 70 61 74 68 | 62 75 66 2c 20 70 61 74 |alk(path|buf, pat|
|00006290| 68 62 75 66 20 2b 20 73 | 74 72 6c 65 6e 28 70 61 |hbuf + s|trlen(pa|
|000062a0| 74 68 62 75 66 29 2c 20 | 70 61 74 68 2d 3e 67 6c |thbuf), |path->gl|
|000062b0| 6f 62 2c 0a 58 09 09 09 | 09 20 20 20 20 20 20 6d |ob,.X...|. m|
|000062c0| 6b 62 61 63 6b 75 70 2c | 20 62 69 74 76 65 63 2c |kbackup,| bitvec,|
|000062d0| 20 64 69 72 76 65 63 29 | 3b 0a 58 09 09 7d 0a 58 | dirvec)|;.X..}.X|
|000062e0| 09 7d 20 65 6c 73 65 20 | 7b 0a 58 09 09 2f 2a 0a |.} else |{.X../*.|
|000062f0| 58 09 09 20 2a 20 54 68 | 69 73 20 69 73 20 74 68 |X.. * Th|is is th|
|00006300| 65 20 62 61 63 6b 75 70 | 20 66 69 6c 65 73 79 73 |e backup| filesys|
|00006310| 74 65 6d 2e 0a 58 09 09 | 20 2a 20 53 6f 72 74 20 |tem..X..| * Sort |
|00006320| 74 68 65 20 69 6e 6f 64 | 65 73 20 73 65 6c 65 63 |the inod|es selec|
|00006330| 74 65 64 20 69 6e 74 6f | 20 6f 6c 64 65 73 74 2d |ted into| oldest-|
|00006340| 66 69 72 73 74 2c 20 74 | 68 65 6e 20 72 75 6e 0a |first, t|hen run.|
|00006350| 58 09 09 20 2a 20 61 20 | 66 69 6c 65 20 74 72 65 |X.. * a |file tre|
|00006360| 65 20 77 61 6c 6b 65 72 | 20 74 6f 20 64 65 6c 65 |e walker| to dele|
|00006370| 74 65 20 74 68 65 20 66 | 69 6c 65 73 20 75 6e 74 |te the f|iles unt|
|00006380| 69 6c 20 77 65 20 68 61 | 76 65 0a 58 09 09 20 2a |il we ha|ve.X.. *|
|00006390| 20 65 6e 6f 75 67 68 20 | 73 70 61 63 65 20 2a 61 | enough |space *a|
|000063a0| 6e 64 2a 20 61 72 65 20 | 75 6e 64 65 72 20 74 68 |nd* are |under th|
|000063b0| 65 20 6c 6f 77 20 77 61 | 74 65 72 20 6d 61 72 6b |e low wa|ter mark|
|000063c0| 2e 0a 58 09 09 20 2a 2f | 0a 58 0a 58 09 09 2f 2a |..X.. */|.X.X../*|
|000063d0| 20 61 73 73 65 72 74 20 | 73 74 72 63 6d 70 28 70 | assert |strcmp(p|
|000063e0| 61 74 68 2d 3e 70 61 74 | 68 2c 20 62 61 63 6b 75 |ath->pat|h, backu|
|000063f0| 70 29 20 3d 3d 20 30 20 | 2a 2f 0a 58 09 09 2f 2a |p) == 0 |*/.X../*|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.