Browse Source

Plan 9 from Bell Labs 2003-09-19

David du Colombier 20 years ago
parent
commit
2d4f830104

+ 79 - 73
dist/replica/plan9.db

@@ -2926,7 +2926,7 @@ rc/bin/9fs - 775 sys sys 1042305252 869
 rc/bin/B - 775 sys sys 945617206 645
 rc/bin/C - 775 sys sys 1045493437 788
 rc/bin/Kill - 775 sys sys 1018637942 115
-rc/bin/a: - 775 sys sys 1015089505 204
+rc/bin/a: - 775 sys sys 1063856406 255
 rc/bin/ape - 20000000775 sys sys 954039414 0
 rc/bin/ape/ar89 - 775 sys sys 945617285 308
 rc/bin/ape/c89 - 775 sys sys 945617285 39
@@ -3136,7 +3136,7 @@ sys/doc/contents.ms - 664 sys sys 1019916701 4920
 sys/doc/contents.ps - 664 sys sys 1019916845 232629
 sys/doc/docfonts - 664 sys sys 1038117516 208
 sys/doc/fonts - 664 sys sys 944959649 137
-sys/doc/fossil.ms - 664 sys sys 1050623502 31400
+sys/doc/fossil.ms - 664 sys sys 1063856349 31400
 sys/doc/fossil.pdf - 664 sys sys 1042123169 63200
 sys/doc/fossil.ps - 664 sys sys 1042123131 313750
 sys/doc/fs - 20000000775 sys sys 945616779 0
@@ -3208,13 +3208,13 @@ sys/doc/prog4.ms - 664 sys sys 1019932830 16485
 sys/doc/prog4.ps - 664 sys sys 1019932831 271581
 sys/doc/ps - 664 sys sys 944959649 1739
 sys/doc/rc.html - 664 sys sys 1019922810 39710
-sys/doc/rc.ms - 664 sys sys 953237029 34368
+sys/doc/rc.ms - 664 sys sys 1063856321 34373
 sys/doc/rc.ps - 664 sys sys 960837920 337955
 sys/doc/release3.html - 664 sys sys 1019922810 6329
 sys/doc/release3.ms - 664 sys sys 961261276 5492
 sys/doc/release3.ps - 664 sys sys 961261277 230682
 sys/doc/release4.html - 664 sys sys 1019922810 5869
-sys/doc/release4.ms - 664 sys sys 1020100479 5056
+sys/doc/release4.ms - 664 sys sys 1063856338 5160
 sys/doc/release4.ps - 664 sys sys 1020100480 230580
 sys/doc/sam - 20000000775 sys sys 945617037 0
 sys/doc/sam/fig1.bm - 464 sys sys 944959645 42200
@@ -3267,7 +3267,7 @@ sys/doc/venti/venti.pdf - 755 sys sys 1020384352 139090
 sys/doc/venti/venti.ps - 664 sys sys 1019852320 2012620
 sys/games - 20000000775 sys sys 952648872 0
 sys/games/lib - 20000000775 sys sys 952648879 0
-sys/games/lib/fortunes - 664 sys sys 1063072455 244492
+sys/games/lib/fortunes - 664 sys sys 1063856231 244987
 sys/include - 20000000775 sys sys 1016902416 0
 sys/include/9p.h - 664 sys sys 1044836327 4309
 sys/include/String.h - 664 sys sys 1055701304 1291
@@ -3375,16 +3375,16 @@ sys/lib/acid/alef - 664 sys sys 944955985 2293
 sys/lib/acid/alpha - 664 sys sys 944955985 4849
 sys/lib/acid/arm - 664 sys sys 984696197 1842
 sys/lib/acid/coverage - 664 sys sys 944955985 1746
-sys/lib/acid/kernel - 664 sys sys 1020313817 4737
+sys/lib/acid/kernel - 664 sys sys 1063858104 4994
 sys/lib/acid/leak - 664 sys sys 1048637057 2185
 sys/lib/acid/mips - 664 sys sys 944955985 5472
 sys/lib/acid/network - 664 sys sys 1020313817 2499
-sys/lib/acid/pool - 664 sys sys 1016833869 4244
+sys/lib/acid/pool - 664 sys sys 1063858105 4898
 sys/lib/acid/port - 664 sys sys 1049580489 8902
 sys/lib/acid/power - 664 sys sys 969499633 3058
 sys/lib/acid/sparc - 664 sys sys 944955986 5339
 sys/lib/acid/syscall - 664 sys sys 1016926088 5353
-sys/lib/acid/thread - 664 sys sys 1046363154 5848
+sys/lib/acid/thread - 664 sys sys 1063858106 5979
 sys/lib/acid/transcript - 775 sys sys 954614670 752
 sys/lib/acid/trump - 664 sys sys 1014924361 3177
 sys/lib/acid/truss - 664 sys sys 1036381004 5271
@@ -3402,7 +3402,7 @@ sys/lib/dist/bin/386 - 20000000775 sys sys 1018720418 0
 sys/lib/dist/cdstub - 20000000555 sys sys 1018640690 0
 sys/lib/dist/cdstub/bootdisk.img - 664 sys sys 1019324215 0
 sys/lib/dist/cmd - 20000000775 sys sys 1018641008 0
-sys/lib/dist/cmd/bargraph.c - 664 sys sys 1018469727 5287
+sys/lib/dist/cmd/bargraph.c - 664 sys sys 1063858117 5849
 sys/lib/dist/cmd/bflz.c - 664 sys sys 1033073375 6115
 sys/lib/dist/cmd/bzfs - 20000000775 sys sys 1018641007 0
 sys/lib/dist/cmd/bzfs/bzfs.h - 664 sys sys 1018469727 223
@@ -3435,35 +3435,44 @@ sys/lib/dist/pc/glenda/tmp - 20000000775 sys sys 1018469723 0
 sys/lib/dist/pc/inst - 20000000775 sys sys 1018721419 0
 sys/lib/dist/pc/inst/bootfloppy - 775 sys sys 1019240165 899
 sys/lib/dist/pc/inst/bootplan9 - 775 sys sys 1019534696 1584
-sys/lib/dist/pc/inst/bootsetup - 775 sys sys 1032990667 3034
+sys/lib/dist/pc/inst/bootsetup - 775 sys sys 1063856192 3551
 sys/lib/dist/pc/inst/bootwin9x - 775 sys sys 1020384273 2525
 sys/lib/dist/pc/inst/bootwinnt - 775 sys sys 1019240165 1041
 sys/lib/dist/pc/inst/configarch - 775 sys sys 1018640312 636
 sys/lib/dist/pc/inst/configdist - 775 sys sys 1019322595 400
 sys/lib/dist/pc/inst/configether - 775 sys sys 1019240165 1238
+sys/lib/dist/pc/inst/configfs - 775 sys sys 1063856192 538
 sys/lib/dist/pc/inst/configip - 775 sys sys 1018469719 1132
 sys/lib/dist/pc/inst/confignet - 775 sys sys 1019322596 1301
 sys/lib/dist/pc/inst/configppp - 775 sys sys 1019058714 1402
 sys/lib/dist/pc/inst/copydist - 775 sys sys 1019917500 703
-sys/lib/dist/pc/inst/defs - 664 sys sys 1032795309 2599
-sys/lib/dist/pc/inst/download - 775 sys sys 1019240166 1146
+sys/lib/dist/pc/inst/defs - 664 sys sys 1063856187 2728
+sys/lib/dist/pc/inst/download - 775 sys sys 1063856193 1237
 sys/lib/dist/pc/inst/finish - 775 sys sys 1032990669 266
+sys/lib/dist/pc/inst/fmtfossil - 775 sys sys 1063856193 1990
+sys/lib/dist/pc/inst/fmtventi - 775 sys sys 1063856189 3345
 sys/lib/dist/pc/inst/gui - 775 sys sys 1032539034 79
-sys/lib/dist/pc/inst/halt - 775 sys sys 1033009553 353
+sys/lib/dist/pc/inst/halt - 775 sys sys 1063856192 497
 sys/lib/dist/pc/inst/hasmbr - 775 sys sys 1018469719 171
 sys/lib/dist/pc/inst/hdrs - 775 sys sys 1018469719 106
 sys/lib/dist/pc/inst/is9660 - 775 sys sys 1018469719 307
 sys/lib/dist/pc/inst/isext2 - 775 sys sys 1018469719 204
 sys/lib/dist/pc/inst/isfat - 775 sys sys 1018469719 457
+sys/lib/dist/pc/inst/isfossil - 775 sys sys 1063856189 385
 sys/lib/dist/pc/inst/iskfs - 775 sys sys 1018469719 183
-sys/lib/dist/pc/inst/main - 775 sys sys 1019240166 1867
+sys/lib/dist/pc/inst/isventi - 775 sys sys 1063856189 228
+sys/lib/dist/pc/inst/isventiarenas - 775 sys sys 1063856189 258
+sys/lib/dist/pc/inst/isventiisect - 775 sys sys 1063856190 256
+sys/lib/dist/pc/inst/main - 775 sys sys 1063856189 1952
 sys/lib/dist/pc/inst/mainloop - 775 sys sys 1019058715 532
 sys/lib/dist/pc/inst/mkini.awk - 664 sys sys 1019917495 1163
 sys/lib/dist/pc/inst/mountdist - 775 sys sys 1045504304 4889
-sys/lib/dist/pc/inst/mountfs - 775 sys sys 1019661617 2435
+sys/lib/dist/pc/inst/mountfossil - 775 sys sys 1063856193 3556
+sys/lib/dist/pc/inst/mountfs - 775 sys sys 1063856188 217
+sys/lib/dist/pc/inst/mountkfs - 775 sys sys 1063856188 2481
 sys/lib/dist/pc/inst/moveoldfs - 775 sys sys 1018469719 1361
-sys/lib/dist/pc/inst/partdisk - 775 sys sys 1019058715 1588
-sys/lib/dist/pc/inst/prepdisk - 775 sys sys 1019058715 878
+sys/lib/dist/pc/inst/partdisk - 775 sys sys 1063856191 1828
+sys/lib/dist/pc/inst/prepdisk - 775 sys sys 1063856190 1604
 sys/lib/dist/pc/inst/replcfg - 775 sys sys 1019533019 395
 sys/lib/dist/pc/inst/startether - 775 sys sys 1018640315 513
 sys/lib/dist/pc/inst/startppp - 775 sys sys 1019058715 577
@@ -3474,17 +3483,17 @@ sys/lib/dist/pc/inst/stopppp - 775 sys sys 1018469719 250
 sys/lib/dist/pc/inst/textonly - 775 sys sys 1032539034 154
 sys/lib/dist/pc/inst/watchfd - 775 sys sys 1019322599 315
 sys/lib/dist/pc/inst/xxx - 775 sys sys 1018469719 160
-sys/lib/dist/pc/mkfile - 664 sys sys 1032838501 1998
+sys/lib/dist/pc/mkfile - 664 sys sys 1063856155 2026
 sys/lib/dist/pc/plan9.ini - 664 sys sys 1020361168 512
 sys/lib/dist/pc/plan9.ini.blank - 664 sys sys 1018469720 512
 sys/lib/dist/pc/plan9.ini.cd - 664 sys sys 1045500125 343
 sys/lib/dist/pc/plan9.ini.vmware - 664 sys sys 1045500078 168
-sys/lib/dist/pc/proto - 664 sys sys 1033073499 3916
+sys/lib/dist/pc/proto - 664 sys sys 1063856156 4312
 sys/lib/dist/pc/sub - 20000000775 sys sys 1018640631 0
 sys/lib/dist/pc/sub/a: - 775 sys sys 1018469726 481
 sys/lib/dist/pc/sub/bind - 775 sys sys 1018469726 207
 sys/lib/dist/pc/sub/boota: - 664 sys sys 1032058333 532
-sys/lib/dist/pc/sub/bunzip2 - 664 sys sys 1018469726 41
+sys/lib/dist/pc/sub/bunzip2 - 664 sys sys 1063856127 46
 sys/lib/dist/pc/sub/common - 664 sys sys 1018469726 2370
 sys/lib/dist/pc/sub/compactdb - 775 sys sys 1019322641 24
 sys/lib/dist/pc/sub/local - 664 sys sys 1018469726 117
@@ -3492,9 +3501,9 @@ sys/lib/dist/pc/sub/mkdir - 775 sys sys 1018469726 58
 sys/lib/dist/pc/sub/ndist - 775 sys sys 1018640631 354
 sys/lib/dist/pc/sub/pci - 775 sys sys 1018469726 52
 sys/lib/dist/pc/sub/pwd - 664 sys sys 1018469726 59
-sys/lib/dist/pc/sub/ramfs - 775 sys sys 1018469726 44
+sys/lib/dist/pc/sub/ramfs - 775 sys sys 1063856126 48
 sys/lib/dist/pc/sub/sleep - 664 sys sys 1018469726 118
-sys/lib/dist/pc/sub/termrc - 664 sys sys 1032990663 1632
+sys/lib/dist/pc/sub/termrc - 664 sys sys 1063856126 1965
 sys/lib/dist/pc/sub/unmount - 664 sys sys 1018469726 46
 sys/lib/dist/pc/sub/users - 664 sys sys 1018469726 103
 sys/lib/dist/pc/sub/vmware - 775 sys sys 1033073493 132
@@ -3752,7 +3761,7 @@ sys/lib/lp - 20000000775 sys sys 954037460 0
 sys/lib/lp/bin - 20000000775 sys sys 959999531 0
 sys/lib/lp/bin/UNLOCK - 775 sys sys 954037458 25
 sys/lib/lp/bin/kill_xerox-4512 - 775 sys sys 954037458 92
-sys/lib/lp/bin/lpscratch - 775 sys sys 960142626 874
+sys/lib/lp/bin/lpscratch - 775 sys sys 1063856100 908
 sys/lib/lp/bin/lpsend.rc - 775 sys sys 954037458 361
 sys/lib/lp/bin/true - 775 sys sys 954037458 18
 sys/lib/lp/daemon - 20000000775 sys sys 1015012112 0
@@ -3852,7 +3861,7 @@ sys/lib/man/preface4 - 664 sys sys 1020082276 1758
 sys/lib/man/secindex - 775 sys sys 956337727 322
 sys/lib/man/title - 664 sys sys 1019915894 746
 sys/lib/man/trademarks - 664 sys sys 958527089 1838
-sys/lib/mimetype - 664 sys sys 1045933187 5318
+sys/lib/mimetype - 664 sys sys 1063856077 5336
 sys/lib/newuser - 775 sys sys 1018386991 1229
 sys/lib/plumb - 20000000775 sys sys 944957365 0
 sys/lib/plumb/basic - 664 sys sys 1032058379 2908
@@ -4257,10 +4266,6 @@ sys/lib/sysconfig/auth/files/tcp567 - 775 sys sys 1016833537 34
 sys/lib/sysconfig/auth/mkfile - 664 sys sys 1016833657 2937
 sys/lib/sysconfig/blast - 20000000775 sys sys 1059490895 0
 sys/lib/sysconfig/blast/boot - 775 sys sys 1059490900 571
-sys/lib/sysconfig/fl - 20000000775 sys sys 1042004836 0
-sys/lib/sysconfig/fl/boot - 775 sys sys 1048637071 773
-sys/lib/sysconfig/fl/flproto - 664 sys sys 1048637070 137
-sys/lib/sysconfig/fl/venti.conf - 664 sys sys 1042004837 139
 sys/lib/sysconfig/proto - 20000000775 sys sys 959740591 0
 sys/lib/sysconfig/proto/allproto - 664 sys sys 945018241 2
 sys/lib/sysconfig/proto/armpaqproto - 664 sys sys 1037173885 2270
@@ -4918,11 +4923,11 @@ sys/man/8/aan - 664 sys sys 1045501064 1670
 sys/man/8/aliasmail - 664 sys sys 1055701148 1353
 sys/man/8/apm - 664 sys sys 1017679308 1811
 sys/man/8/auth - 664 sys sys 1035838620 4062
-sys/man/8/boot - 664 sys sys 1063855776 8354
+sys/man/8/boot - 664 sys sys 1063858248 8362
 sys/man/8/booting - 664 sys sys 1015024984 4136
 sys/man/8/checkarenas - 664 sys sys 1019866709 669
 sys/man/8/cpurc - 664 sys sys 971455510 1275
-sys/man/8/cron - 664 sys sys 944959679 1750
+sys/man/8/cron - 664 sys sys 1063858596 1867
 sys/man/8/dhcpd - 664 sys sys 1032654987 5237
 sys/man/8/drawterm - 664 sys sys 958419689 2458
 sys/man/8/fossilcons - 664 sys sys 1063855784 14700
@@ -4970,7 +4975,7 @@ sys/man/8/tlssrv - 664 sys sys 1037580152 2594
 sys/man/8/udpecho - 664 sys sys 954305553 303
 sys/man/8/update - 664 sys sys 961259288 2336
 sys/man/8/venti - 664 sys sys 1055707404 5274
-sys/man/8/ventiaux - 664 sys sys 1055707404 10528
+sys/man/8/ventiaux - 664 sys sys 1063855987 10487
 sys/man/8/vga - 664 sys sys 959698505 3557
 sys/man/fonts - 664 sys sys 944959700 218
 sys/man/index.html - 664 sys sys 1019918444 1859
@@ -5086,18 +5091,17 @@ sys/src/9/bitsy/uartsa1110.c - 664 sys sys 1037029045 8530
 sys/src/9/bitsy/wavelan.c - 664 sys sys 1053340976 27266
 sys/src/9/bitsy/wavelan.h - 664 sys sys 1037029076 27
 sys/src/9/boot - 20000000775 sys sys 1018556557 0
-sys/src/9/boot/aux.c - 664 sys sys 1015012529 2520
-sys/src/9/boot/boot.c - 664 sys sys 1055700840 5316
-sys/src/9/boot/boot.h - 664 sys sys 1055703887 1773
+sys/src/9/boot/aux.c - 664 sys sys 1063857702 2579
+sys/src/9/boot/boot.c - 664 sys sys 1063857658 5334
+sys/src/9/boot/boot.h - 664 sys sys 1063857659 1785
 sys/src/9/boot/bootauth.c - 664 sys sys 1039763726 1097
-sys/src/9/boot/bootcache.c - 664 sys sys 1039763729 1518
-sys/src/9/boot/bootip.c - 664 sys sys 1055703889 3414
+sys/src/9/boot/bootcache.c - 664 sys sys 1063857645 1579
+sys/src/9/boot/bootip.c - 664 sys sys 1063857634 3405
 sys/src/9/boot/bootmkfile - 664 sys sys 1032053196 390
 sys/src/9/boot/doauthenticate.c - 664 sys sys 1015012529 2300
 sys/src/9/boot/embed.c - 664 sys sys 1039763720 1191
 sys/src/9/boot/getpasswd.c - 664 sys sys 957373373 654
-sys/src/9/boot/libboot.a8 - 664 sys sys 1062721685 54780
-sys/src/9/boot/local.c - 664 sys sys 1039763718 2041
+sys/src/9/boot/local.c - 664 sys sys 1063857543 5325
 sys/src/9/boot/mkboot - 775 sys sys 1045504382 1935
 sys/src/9/boot/nopsession.c - 664 sys sys 957373374 843
 sys/src/9/boot/paq.c - 664 sys sys 1039763722 1099
@@ -5118,9 +5122,9 @@ sys/src/9/ip/igmp.c - 664 sys sys 1055700768 5175
 sys/src/9/ip/il.c - 664 sys sys 1055700772 26893
 sys/src/9/ip/inferno.c - 664 sys sys 1022588098 517
 sys/src/9/ip/ip.c - 664 sys sys 1047951326 15285
-sys/src/9/ip/ip.h - 664 sys sys 1054391400 16066
+sys/src/9/ip/ip.h - 664 sys sys 1063857527 16054
 sys/src/9/ip/ipaux.c - 664 sys sys 1049423191 12798
-sys/src/9/ip/ipifc.c - 664 sys sys 1048288617 37843
+sys/src/9/ip/ipifc.c - 664 sys sys 1063857527 37499
 sys/src/9/ip/ipmux.c - 664 sys sys 1047260566 15362
 sys/src/9/ip/iproute.c - 664 sys sys 1049423192 14763
 sys/src/9/ip/ipv6.c - 664 sys sys 1047951328 14433
@@ -5136,7 +5140,7 @@ sys/src/9/ip/rudp.c - 664 sys sys 1055700790 21415
 sys/src/9/ip/tcp.c - 664 sys sys 1055700797 65217
 sys/src/9/ip/tripmedium.c - 664 sys sys 1045063515 7136
 sys/src/9/ip/udp.c - 664 sys sys 1055700791 13069
-sys/src/9/mkfile - 664 sys sys 1017795039 191
+sys/src/9/mkfile - 664 sys sys 1063857477 205
 sys/src/9/mtx - 20000000775 sys sys 1018721288 0
 sys/src/9/mtx/clock.c - 664 sys sys 1032053278 1293
 sys/src/9/mtx/cycintr.c - 664 sys sys 1018721285 230
@@ -5185,8 +5189,8 @@ sys/src/9/pc/devlpt.c - 664 sys sys 1015014514 4420
 sys/src/9/pc/devpccard.c - 664 sys sys 1048644060 39977
 sys/src/9/pc/devrtc.c - 664 sys sys 1015014515 7167
 sys/src/9/pc/devtv.c - 664 sys sys 1032052915 45652
-sys/src/9/pc/devusb.c - 664 sys sys 1048644072 17991
-sys/src/9/pc/devvga.c - 664 sys sys 1039753498 8625
+sys/src/9/pc/devusb.c - 664 sys sys 1063857423 18352
+sys/src/9/pc/devvga.c - 664 sys sys 1063857412 8714
 sys/src/9/pc/dma.c - 664 sys sys 1015014515 4736
 sys/src/9/pc/ether2000.c - 664 sys sys 1017854323 2839
 sys/src/9/pc/ether2114x.c - 664 sys sys 1034021961 38762
@@ -5200,7 +5204,7 @@ sys/src/9/pc/ether83815.c - 664 sys sys 1026847640 23050
 sys/src/9/pc/ether8390.c - 664 sys sys 1015014517 17548
 sys/src/9/pc/ether8390.h - 664 sys sys 1015014517 1511
 sys/src/9/pc/etherec2t.c - 664 sys sys 1020284820 4038
-sys/src/9/pc/etherelnk3.c - 664 sys sys 1059064966 48481
+sys/src/9/pc/etherelnk3.c - 664 sys sys 1063857363 48522
 sys/src/9/pc/etherga620.c - 664 sys sys 1032052917 28786
 sys/src/9/pc/etherga620fw.h - 644 sys sys 1026847642 222295
 sys/src/9/pc/etherif.h - 664 sys sys 1045063564 961
@@ -5258,8 +5262,8 @@ sys/src/9/pc/sdscsi.c - 664 sys sys 1055689892 7406
 sys/src/9/pc/trap.c - 664 sys sys 1056299507 19012
 sys/src/9/pc/uarti8250.c - 664 sys sys 1060266726 12826
 sys/src/9/pc/uartpci.c - 664 sys sys 1015014524 2709
-sys/src/9/pc/usb.h - 664 sys sys 1015014524 3505
-sys/src/9/pc/usbuhci.c - 664 sys sys 1026847653 30686
+sys/src/9/pc/usb.h - 664 sys sys 1063857246 3566
+sys/src/9/pc/usbuhci.c - 664 sys sys 1063857239 30688
 sys/src/9/pc/vga.c - 664 sys sys 1039753497 4963
 sys/src/9/pc/vga3dfx.c - 664 sys sys 1026847654 4837
 sys/src/9/pc/vgaark2000pv.c - 664 sys sys 1015014524 3416
@@ -5282,7 +5286,7 @@ sys/src/9/pc/vgasavage.c - 664 sys sys 1046203931 16194
 sys/src/9/pc/vgat2r4.c - 664 sys sys 1015014528 10355
 sys/src/9/pc/vgatvp3020.c - 664 sys sys 1015014528 4491
 sys/src/9/pc/vgatvp3026.c - 664 sys sys 1015014528 3940
-sys/src/9/pc/vgavmware.c - 664 sys sys 1020284822 6334
+sys/src/9/pc/vgavmware.c - 664 sys sys 1063858321 6398
 sys/src/9/pc/vgax.c - 664 sys sys 1015014528 1655
 sys/src/9/pc/wavelan.c - 664 sys sys 1056299581 27253
 sys/src/9/pc/wavelan.h - 664 sys sys 1055700615 6151
@@ -5318,7 +5322,7 @@ sys/src/9/port/devroot.c - 664 sys sys 1048912313 4015
 sys/src/9/port/devsd.c - 664 sys sys 1055688396 28669
 sys/src/9/port/devsdp.c - 664 sys sys 1057323393 44800
 sys/src/9/port/devsegment.c - 664 sys sys 1017679394 9600
-sys/src/9/port/devsrv.c - 664 sys sys 1014931174 5146
+sys/src/9/port/devsrv.c - 664 sys sys 1063856594 5197
 sys/src/9/port/devssl.c - 664 sys sys 1045063590 26100
 sys/src/9/port/devtinyfs.c - 664 sys sys 1015278339 15347
 sys/src/9/port/devtls.c - 664 sys sys 1055688453 43764
@@ -5332,13 +5336,14 @@ sys/src/9/port/latin1.c - 664 sys sys 1015278339 1418
 sys/src/9/port/latin1.h - 664 sys sys 1015278339 3524
 sys/src/9/port/lib.h - 664 sys sys 1014931175 5676
 sys/src/9/port/log.c - 664 sys sys 1014931175 2860
-sys/src/9/port/master - 664 sys sys 1057838456 479
+sys/src/9/port/master - 664 sys sys 1063856961 516
+sys/src/9/port/master.local - 664 sys sys 1063856961 130
 sys/src/9/port/mkbootrules - 775 sys sys 1055700518 923
 sys/src/9/port/mkdevc - 775 sys sys 1055700518 3446
 sys/src/9/port/mkdevlist - 775 sys sys 1055700519 510
 sys/src/9/port/mkerrstr - 775 sys sys 1015278340 75
 sys/src/9/port/mkextract - 775 sys sys 1039753334 435
-sys/src/9/port/mkfile - 664 sys sys 1045531976 266
+sys/src/9/port/mkfile - 664 sys sys 1063856960 350
 sys/src/9/port/mkroot - 775 sys sys 1039753334 235
 sys/src/9/port/mkrootall - 775 sys sys 1055954696 386
 sys/src/9/port/mkrootc - 775 sys sys 1055954695 717
@@ -5355,8 +5360,8 @@ sys/src/9/port/portfns.h - 664 sys sys 1060266745 10822
 sys/src/9/port/portmkfile - 664 sys sys 1055700523 2057
 sys/src/9/port/print.c - 664 sys sys 1014931178 227
 sys/src/9/port/proc.c - 664 sys sys 1055688525 24316
-sys/src/9/port/qio.c - 664 sys sys 1047260594 23281
-sys/src/9/port/qlock.c - 664 sys sys 1055688539 3311
+sys/src/9/port/qio.c - 664 sys sys 1063857200 23407
+sys/src/9/port/qlock.c - 664 sys sys 1063857173 3311
 sys/src/9/port/rdb.c - 664 sys sys 1018721202 1698
 sys/src/9/port/realtimesub.c - 664 sys sys 1055688540 9185
 sys/src/9/port/rebootcmd.c - 664 sys sys 1015278340 1561
@@ -6132,7 +6137,7 @@ sys/src/ape/lib/bsd/getprotobyname.c - 664 sys sys 1014921995 1498
 sys/src/ape/lib/bsd/getservbyaddr.c - 664 sys sys 1014921995 308
 sys/src/ape/lib/bsd/getservbyname.c - 664 sys sys 1014921995 1595
 sys/src/ape/lib/bsd/getsockname.c - 664 sys sys 1014921995 847
-sys/src/ape/lib/bsd/gettimeofday.c - 664 sys sys 1014921995 247
+sys/src/ape/lib/bsd/gettimeofday.c - 664 sys sys 1063858406 756
 sys/src/ape/lib/bsd/inet_addr.c - 664 sys sys 1014921995 770
 sys/src/ape/lib/bsd/inet_ntoa.c - 664 sys sys 1014921995 382
 sys/src/ape/lib/bsd/ioctl.c - 664 sys sys 1014921995 561
@@ -6578,7 +6583,7 @@ sys/src/cmd/9nfs/xfile.c - 664 sys sys 1017337816 1847
 sys/src/cmd/aan.c - 664 sys sys 1019856827 9758
 sys/src/cmd/acid - 20000000775 sys sys 944960739 0
 sys/src/cmd/acid/acid.h - 664 sys sys 1046198958 4354
-sys/src/cmd/acid/builtin.c - 664 sys sys 1014924908 19979
+sys/src/cmd/acid/builtin.c - 664 sys sys 1063859225 19980
 sys/src/cmd/acid/dbg.y - 664 sys sys 1046198962 5450
 sys/src/cmd/acid/dot.c - 664 sys sys 944960739 2161
 sys/src/cmd/acid/exec.c - 664 sys sys 1016833876 8187
@@ -6660,7 +6665,7 @@ sys/src/cmd/auth/changeuser.c - 664 sys sys 1015008431 2933
 sys/src/cmd/auth/convbio.c - 664 sys sys 1015008432 2212
 sys/src/cmd/auth/convkeys.c - 664 sys sys 1015008430 2347
 sys/src/cmd/auth/convkeys2.c - 664 sys sys 1015008432 2401
-sys/src/cmd/auth/cron.c - 664 sys sys 1025352270 11010
+sys/src/cmd/auth/cron.c - 664 sys sys 1063858528 11410
 sys/src/cmd/auth/debug.c - 664 sys sys 1044839697 7324
 sys/src/cmd/auth/disable - 775 sys sys 1015008431 146
 sys/src/cmd/auth/enable - 775 sys sys 1015008430 134
@@ -6798,7 +6803,7 @@ sys/src/cmd/aux/rdwr.c - 664 sys sys 1016833876 811
 sys/src/cmd/aux/reboot.c - 664 sys sys 1014925091 1411
 sys/src/cmd/aux/searchfs.c - 664 sys sys 1014925091 18176
 sys/src/cmd/aux/stub.c - 664 sys sys 1032468954 2637
-sys/src/cmd/aux/timesync.c - 664 sys sys 1058474964 24413
+sys/src/cmd/aux/timesync.c - 664 sys sys 1063897024 24500
 sys/src/cmd/aux/trampoline.c - 664 sys sys 1034780422 3571
 sys/src/cmd/aux/typepasswd.c - 664 sys sys 1014925091 1761
 sys/src/cmd/aux/unlock - 664 sys sys 944960793 0
@@ -7271,7 +7276,7 @@ sys/src/cmd/fossil/archive.c - 664 sys sys 1061530723 9109
 sys/src/cmd/fossil/build - 664 sys sys 1042005505 449
 sys/src/cmd/fossil/buildsh - 775 sys sys 1042005505 561
 sys/src/cmd/fossil/bwatch.c - 664 sys sys 1042005505 6754
-sys/src/cmd/fossil/cache.c - 664 sys sys 1063855213 43214
+sys/src/cmd/fossil/cache.c - 664 sys sys 1063859017 43398
 sys/src/cmd/fossil/conf.rc - 775 sys sys 1055703747 1407
 sys/src/cmd/fossil/dat.h - 664 sys sys 1061530727 7851
 sys/src/cmd/fossil/deadlock - 775 sys sys 1042005506 413
@@ -9130,7 +9135,7 @@ sys/src/cmd/ip/dhcpd/dat.h - 664 sys sys 1032655000 2503
 sys/src/cmd/ip/dhcpd/db.c - 664 sys sys 1032655001 7484
 sys/src/cmd/ip/dhcpd/dhcpd.c - 664 sys sys 1050714684 32770
 sys/src/cmd/ip/dhcpd/dhcpleases.c - 664 sys sys 1032655001 779
-sys/src/cmd/ip/dhcpd/mkfile - 664 sys sys 1050714681 423
+sys/src/cmd/ip/dhcpd/mkfile - 664 sys sys 1063897571 433
 sys/src/cmd/ip/dhcpd/ndb.c - 664 sys sys 1063855141 6025
 sys/src/cmd/ip/dhcpd/ping.c - 664 sys sys 956275654 1881
 sys/src/cmd/ip/dhcpd/testlook.c - 664 sys sys 950389140 4640
@@ -9143,6 +9148,7 @@ sys/src/cmd/ip/ftpfs/ftpfs.c - 664 sys sys 1048285493 13555
 sys/src/cmd/ip/ftpfs/ftpfs.h - 664 sys sys 1048312051 2328
 sys/src/cmd/ip/ftpfs/mkfile - 664 sys sys 1048312050 173
 sys/src/cmd/ip/ftpfs/proto.c - 664 sys sys 1048285496 29321
+sys/src/cmd/ip/gizzard.c - 664 sys sys 1063897565 8950
 sys/src/cmd/ip/glob.c - 664 sys sys 1015013111 2968
 sys/src/cmd/ip/glob.h - 664 sys sys 1015090252 270
 sys/src/cmd/ip/gping.c - 664 sys sys 1015013112 20476
@@ -9179,7 +9185,7 @@ sys/src/cmd/ip/imap4d/imap4d.c - 664 sys sys 1045505233 40500
 sys/src/cmd/ip/imap4d/imap4d.h - 664 sys sys 1015013076 6697
 sys/src/cmd/ip/imap4d/list.c - 664 sys sys 1015013076 7619
 sys/src/cmd/ip/imap4d/mbox.c - 664 sys sys 1015013077 16842
-sys/src/cmd/ip/imap4d/mkfile - 664 sys sys 1032059772 355
+sys/src/cmd/ip/imap4d/mkfile - 664 sys sys 1063897579 332
 sys/src/cmd/ip/imap4d/msg.c - 664 sys sys 1055699143 31357
 sys/src/cmd/ip/imap4d/mutf7.c - 664 sys sys 1015013077 2724
 sys/src/cmd/ip/imap4d/nodes.c - 664 sys sys 1015013077 3173
@@ -9188,7 +9194,7 @@ sys/src/cmd/ip/imap4d/store.c - 664 sys sys 1015013077 1910
 sys/src/cmd/ip/imap4d/utils.c - 664 sys sys 1015013077 2481
 sys/src/cmd/ip/ipconfig.c - 664 sys sys 1060189236 29311
 sys/src/cmd/ip/measure.c - 664 sys sys 944961011 3733
-sys/src/cmd/ip/mkfile - 664 sys sys 1038443023 1222
+sys/src/cmd/ip/mkfile - 664 sys sys 1063897563 1250
 sys/src/cmd/ip/ping.c - 664 sys sys 1061496964 5552
 sys/src/cmd/ip/ppp - 20000000775 sys sys 988249980 0
 sys/src/cmd/ip/ppp/block.c - 664 sys sys 1015090266 5353
@@ -9197,7 +9203,7 @@ sys/src/cmd/ip/ppp/doclient - 775 sys sys 944961007 50
 sys/src/cmd/ip/ppp/doserve - 775 sys sys 944961009 91
 sys/src/cmd/ip/ppp/dotest - 775 sys sys 944961006 152
 sys/src/cmd/ip/ppp/ipaux.c - 664 sys sys 1015090266 2326
-sys/src/cmd/ip/ppp/mkfile - 664 sys sys 1032059844 378
+sys/src/cmd/ip/ppp/mkfile - 664 sys sys 1063897576 352
 sys/src/cmd/ip/ppp/mppc.c - 664 sys sys 1015090267 16624
 sys/src/cmd/ip/ppp/ppp.c - 664 sys sys 1063855083 59501
 sys/src/cmd/ip/ppp/ppp.h - 664 sys sys 1050360942 8225
@@ -9246,7 +9252,7 @@ sys/src/cmd/ip/snoopy/udp.c - 664 sys sys 1055699195 1718
 sys/src/cmd/ip/telnet.c - 664 sys sys 1015013113 8547
 sys/src/cmd/ip/telnet.h - 664 sys sys 1015090250 5902
 sys/src/cmd/ip/telnetd.c - 664 sys sys 1032060109 11731
-sys/src/cmd/ip/tftpd.c - 664 sys sys 1063855054 7166
+sys/src/cmd/ip/tftpd.c - 664 sys sys 1063897567 7186
 sys/src/cmd/ip/traceroute.c - 664 sys sys 1032060124 9370
 sys/src/cmd/ip/udpecho.c - 664 sys sys 1050714674 855
 sys/src/cmd/join.c - 664 sys sys 944961364 7488
@@ -9455,10 +9461,10 @@ sys/src/cmd/ndb/dnnotify.c - 664 sys sys 1055701929 3062
 sys/src/cmd/ndb/dnresolve.c - 664 sys sys 1055701926 15331
 sys/src/cmd/ndb/dns.c - 664 sys sys 1063855017 15261
 sys/src/cmd/ndb/dns.h - 664 sys sys 1063855018 8983
-sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1060663185 8430
+sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1063861697 8449
 sys/src/cmd/ndb/dnserver.c - 664 sys sys 1021579994 3687
 sys/src/cmd/ndb/dnsquery.c - 664 sys sys 1014926160 2108
-sys/src/cmd/ndb/dnstcp.c - 664 sys sys 1056171180 7066
+sys/src/cmd/ndb/dnstcp.c - 664 sys sys 1063861697 7085
 sys/src/cmd/ndb/dnudpserver.c - 664 sys sys 1055701924 5277
 sys/src/cmd/ndb/ipquery.c - 664 sys sys 960335375 760
 sys/src/cmd/ndb/mkdb.c - 664 sys sys 957402054 2886
@@ -10096,11 +10102,11 @@ sys/src/cmd/ssh/msg.c - 664 sys sys 1062091016 8023
 sys/src/cmd/ssh/pubkey.c - 664 sys sys 1019928902 3974
 sys/src/cmd/ssh/scp.c - 664 sys sys 1048644598 13757
 sys/src/cmd/ssh/smsg.c - 664 sys sys 1062091015 6135
-sys/src/cmd/ssh/ssh.c - 664 sys sys 1062091019 9635
+sys/src/cmd/ssh/ssh.c - 664 sys sys 1063858802 9635
 sys/src/cmd/ssh/ssh.h - 664 sys sys 1048179595 6054
 sys/src/cmd/ssh/sshnet.c - 664 sys sys 1062091019 17661
 sys/src/cmd/ssh/sshserve.c - 664 sys sys 1062091020 5786
-sys/src/cmd/ssh/util.c - 664 sys sys 1048644598 4478
+sys/src/cmd/ssh/util.c - 664 sys sys 1063858753 4478
 sys/src/cmd/stats.c - 664 sys sys 1056035464 27570
 sys/src/cmd/strings.c - 664 sys sys 944961364 1216
 sys/src/cmd/strip.c - 664 sys sys 1014926661 3306
@@ -10202,7 +10208,7 @@ sys/src/cmd/time.c - 664 sys sys 1014926662 1546
 sys/src/cmd/tlsclient.c - 664 sys sys 1024375149 1631
 sys/src/cmd/tlssrv.c - 664 sys sys 1018720167 3254
 sys/src/cmd/touch.c - 664 sys sys 1018387005 893
-sys/src/cmd/tprof.c - 664 sys sys 1014926662 2603
+sys/src/cmd/tprof.c - 664 sys sys 1063858806 2716
 sys/src/cmd/tr.c - 664 sys sys 944961464 6008
 sys/src/cmd/troff - 20000000775 sys sys 944961294 0
 sys/src/cmd/troff/FIXES - 644 sys sys 944961293 24982
@@ -10494,9 +10500,9 @@ sys/src/cmd/upas/filterkit/readaddrs.c - 664 sys sys 1018549521 1381
 sys/src/cmd/upas/filterkit/token.c - 664 sys sys 1018549521 1312
 sys/src/cmd/upas/fs - 20000000775 sys sys 988250018 0
 sys/src/cmd/upas/fs/dat.h - 664 sys sys 1047490337 4267
-sys/src/cmd/upas/fs/fs.c - 664 sys sys 1045505917 27332
+sys/src/cmd/upas/fs/fs.c - 664 sys sys 1063896947 27346
 sys/src/cmd/upas/fs/imap4.c - 664 sys sys 1061779754 18103
-sys/src/cmd/upas/fs/mbox.c - 664 sys sys 1047490342 28282
+sys/src/cmd/upas/fs/mbox.c - 664 sys sys 1063858849 28505
 sys/src/cmd/upas/fs/mkfile - 664 sys sys 1047490336 321
 sys/src/cmd/upas/fs/plan9.c - 664 sys sys 1047490343 7464
 sys/src/cmd/upas/fs/pop3.c - 664 sys sys 1063854740 12408
@@ -10536,7 +10542,7 @@ sys/src/cmd/upas/pop3/pop3.c - 664 sys sys 1063854524 14283
 sys/src/cmd/upas/q - 20000000775 sys sys 988250019 0
 sys/src/cmd/upas/q/mkfile - 664 sys sys 1031707299 290
 sys/src/cmd/upas/q/qer.c - 664 sys sys 1014926528 3179
-sys/src/cmd/upas/q/runq.c - 664 sys sys 1038186990 11851
+sys/src/cmd/upas/q/runq.c - 664 sys sys 1063858968 11982
 sys/src/cmd/upas/scanmail - 20000000775 sys sys 988250021 0
 sys/src/cmd/upas/scanmail/common.c - 664 sys sys 1015013177 12385
 sys/src/cmd/upas/scanmail/mkfile - 664 sys sys 1031707308 362
@@ -10943,7 +10949,7 @@ sys/src/lib9p/parse.c - 664 sys sys 1032324435 2050
 sys/src/lib9p/post.c - 664 sys sys 1044429937 364
 sys/src/lib9p/post.h - 664 sys sys 1029850260 201
 sys/src/lib9p/ramfs.c - 664 sys sys 1030450927 2534
-sys/src/lib9p/req.c - 664 sys sys 1044429938 1551
+sys/src/lib9p/req.c - 664 sys sys 1063859068 1637
 sys/src/lib9p/srv.c - 664 sys sys 1050583820 16705
 sys/src/lib9p/tpost.c - 664 sys sys 1044429939 324
 sys/src/lib9p/uid.c - 664 sys sys 1015023311 517
@@ -11229,7 +11235,7 @@ sys/src/libc/arm/tas.s - 664 sys sys 984709514 62
 sys/src/libc/arm/vlop.s - 664 sys sys 984709514 262
 sys/src/libc/arm/vlrt.c - 664 sys sys 984709514 8865
 sys/src/libc/fmt - 20000000775 sys sys 1014927318 0
-sys/src/libc/fmt/dofmt.c - 664 sys sys 1039753802 8626
+sys/src/libc/fmt/dofmt.c - 664 sys sys 1063859138 8582
 sys/src/libc/fmt/dorfmt.c - 664 sys sys 1014927313 777
 sys/src/libc/fmt/errfmt.c - 664 sys sys 1016731560 175
 sys/src/libc/fmt/fltfmt.c - 664 sys sys 1034952854 4339
@@ -11238,7 +11244,7 @@ sys/src/libc/fmt/fmtdef.h - 664 sys sys 1018029975 1808
 sys/src/libc/fmt/fmtfd.c - 664 sys sys 1014927314 508
 sys/src/libc/fmt/fmtlock.c - 664 sys sys 1014927314 134
 sys/src/libc/fmt/fmtprint.c - 664 sys sys 1014927314 465
-sys/src/libc/fmt/fmtquote.c - 664 sys sys 1034959808 4732
+sys/src/libc/fmt/fmtquote.c - 664 sys sys 1063859096 4705
 sys/src/libc/fmt/fmtrune.c - 664 sys sys 1014927314 314
 sys/src/libc/fmt/fmtstr.c - 664 sys sys 1048801026 140
 sys/src/libc/fmt/fmtvprint.c - 664 sys sys 1014927315 449

+ 84 - 0
dist/replica/plan9.log

@@ -13258,3 +13258,87 @@
 1063855914 48 c sys/src/cmd/plumb/match.c - 664 sys sys 1063854983 8191
 1063855914 49 c sys/src/cmd/sam/mesg.c - 664 sys sys 1063854937 14046
 1063855914 50 d sys/src/cmd/dict/mkindex - 775 sys sys 944960881 0
+1063857716 0 c rc/bin/a: - 775 sys sys 1063856406 255
+1063857716 1 c sys/doc/rc.ms - 664 sys sys 1063856321 34373
+1063857716 2 c sys/doc/release4.ms - 664 sys sys 1063856338 5160
+1063857716 3 c sys/doc/fossil.ms - 664 sys sys 1063856349 31400
+1063857716 4 c sys/games/lib/fortunes - 664 sys sys 1063856231 244987
+1063857716 5 c sys/lib/dist/pc/inst/bootsetup - 775 sys sys 1063856192 3551
+1063857716 6 a sys/lib/dist/pc/inst/configfs - 775 sys sys 1063856192 538
+1063857716 7 c sys/lib/dist/pc/inst/defs - 664 sys sys 1063856187 2728
+1063857716 8 c sys/lib/dist/pc/inst/download - 775 sys sys 1063856193 1237
+1063857716 9 a sys/lib/dist/pc/inst/fmtfossil - 775 sys sys 1063856193 1990
+1063857716 10 a sys/lib/dist/pc/inst/fmtventi - 775 sys sys 1063856189 3345
+1063857716 11 c sys/lib/dist/pc/inst/halt - 775 sys sys 1063856192 497
+1063857716 12 a sys/lib/dist/pc/inst/isfossil - 775 sys sys 1063856189 385
+1063857716 13 a sys/lib/dist/pc/inst/isventi - 775 sys sys 1063856189 228
+1063857716 14 a sys/lib/dist/pc/inst/isventiarenas - 775 sys sys 1063856189 258
+1063857716 15 a sys/lib/dist/pc/inst/isventiisect - 775 sys sys 1063856190 256
+1063857716 16 c sys/lib/dist/pc/inst/main - 775 sys sys 1063856189 1952
+1063857716 17 a sys/lib/dist/pc/inst/mountfossil - 775 sys sys 1063856193 3556
+1063857716 18 c sys/lib/dist/pc/inst/mountfs - 775 sys sys 1063856188 217
+1063857716 19 a sys/lib/dist/pc/inst/mountkfs - 775 sys sys 1063856188 2481
+1063857716 20 c sys/lib/dist/pc/inst/partdisk - 775 sys sys 1063856191 1828
+1063857716 21 c sys/lib/dist/pc/inst/prepdisk - 775 sys sys 1063856190 1604
+1063857716 22 c sys/lib/dist/pc/mkfile - 664 sys sys 1063856155 2026
+1063857716 23 c sys/lib/dist/pc/proto - 664 sys sys 1063856156 4312
+1063857716 24 c sys/lib/dist/pc/sub/bunzip2 - 664 sys sys 1063856127 46
+1063857716 25 c sys/lib/dist/pc/sub/ramfs - 775 sys sys 1063856126 48
+1063857716 26 c sys/lib/dist/pc/sub/termrc - 664 sys sys 1063856126 1965
+1063857716 27 c sys/lib/lp/bin/lpscratch - 775 sys sys 1063856100 908
+1063857716 28 c sys/lib/mimetype - 664 sys sys 1063856077 5336
+1063857716 29 c sys/man/8/ventiaux - 664 sys sys 1063855987 10487
+1063857716 30 c sys/src/9/boot/aux.c - 664 sys sys 1063857702 2579
+1063857716 31 c sys/src/9/boot/boot.c - 664 sys sys 1063857658 5334
+1063857716 32 c sys/src/9/boot/boot.h - 664 sys sys 1063857659 1785
+1063857716 33 c sys/src/9/boot/bootcache.c - 664 sys sys 1063857645 1579
+1063857716 34 c sys/src/9/boot/bootip.c - 664 sys sys 1063857634 3405
+1063857716 35 c sys/src/9/boot/local.c - 664 sys sys 1063857543 5325
+1063857716 36 c sys/src/9/ip/ip.h - 664 sys sys 1063857527 16054
+1063857716 37 c sys/src/9/ip/ipifc.c - 664 sys sys 1063857527 37499
+1063857716 38 c sys/src/9/mkfile - 664 sys sys 1063857477 205
+1063857716 39 c sys/src/9/pc/devusb.c - 664 sys sys 1063857423 18352
+1063857716 40 c sys/src/9/pc/devvga.c - 664 sys sys 1063857412 8714
+1063857716 41 c sys/src/9/pc/etherelnk3.c - 664 sys sys 1063857363 48522
+1063857716 42 c sys/src/9/pc/usb.h - 664 sys sys 1063857246 3566
+1063857716 43 c sys/src/9/pc/usbuhci.c - 664 sys sys 1063857239 30688
+1063857716 44 c sys/src/9/port/devsrv.c - 664 sys sys 1063856594 5197
+1063857716 45 c sys/src/9/port/master - 664 sys sys 1063856961 516
+1063857716 46 c sys/src/9/port/mkfile - 664 sys sys 1063856960 350
+1063857716 47 c sys/src/9/port/qio.c - 664 sys sys 1063857200 23407
+1063857716 48 c sys/src/9/port/qlock.c - 664 sys sys 1063857173 3311
+1063857716 49 a sys/src/9/port/master.local - 664 sys sys 1063856961 130
+1063857716 50 d sys/lib/sysconfig/fl - 20000000775 sys sys 1042004836 0
+1063857716 51 d sys/lib/sysconfig/fl/boot - 775 sys sys 1048637071 0
+1063857716 52 d sys/lib/sysconfig/fl/flproto - 664 sys sys 1048637070 0
+1063857716 53 d sys/lib/sysconfig/fl/venti.conf - 664 sys sys 1042004837 0
+1063857716 54 d sys/src/9/boot/libboot.a8 - 664 sys sys 1062721685 0
+1063859516 0 c sys/lib/acid/kernel - 664 sys sys 1063858104 4994
+1063859516 1 c sys/lib/acid/pool - 664 sys sys 1063858105 4898
+1063859516 2 c sys/lib/acid/thread - 664 sys sys 1063858106 5979
+1063859516 3 c sys/lib/dist/cmd/bargraph.c - 664 sys sys 1063858117 5849
+1063859516 4 c sys/man/8/boot - 664 sys sys 1063858248 8362
+1063859516 5 c sys/man/8/cron - 664 sys sys 1063858596 1867
+1063859516 6 c sys/src/9/pc/vgavmware.c - 664 sys sys 1063858321 6398
+1063859516 7 c sys/src/ape/lib/bsd/gettimeofday.c - 664 sys sys 1063858406 756
+1063859516 8 c sys/src/cmd/acid/builtin.c - 664 sys sys 1063859225 19980
+1063859516 9 c sys/src/cmd/auth/cron.c - 664 sys sys 1063858528 11410
+1063859516 10 c sys/src/cmd/ssh/ssh.c - 664 sys sys 1063858802 9635
+1063859516 11 c sys/src/cmd/ssh/util.c - 664 sys sys 1063858753 4478
+1063859516 12 c sys/src/cmd/upas/fs/mbox.c - 664 sys sys 1063858849 28505
+1063859516 13 c sys/src/cmd/upas/q/runq.c - 664 sys sys 1063858968 11982
+1063859516 14 c sys/src/cmd/fossil/cache.c - 664 sys sys 1063859017 43398
+1063859516 15 c sys/src/cmd/tprof.c - 664 sys sys 1063858806 2716
+1063859516 16 c sys/src/lib9p/req.c - 664 sys sys 1063859068 1637
+1063859516 17 c sys/src/libc/fmt/dofmt.c - 664 sys sys 1063859138 8582
+1063859516 18 c sys/src/libc/fmt/fmtquote.c - 664 sys sys 1063859096 4705
+1063861713 0 c sys/src/cmd/ndb/dnsdebug.c - 664 sys sys 1063861697 8449
+1063861713 1 c sys/src/cmd/ndb/dnstcp.c - 664 sys sys 1063861697 7085
+1063897300 0 c sys/src/cmd/aux/timesync.c - 664 sys sys 1063897024 24500
+1063897300 1 c sys/src/cmd/upas/fs/fs.c - 664 sys sys 1063896947 27346
+1063899104 0 c sys/src/cmd/ip/dhcpd/mkfile - 664 sys sys 1063897571 433
+1063899104 1 a sys/src/cmd/ip/gizzard.c - 664 sys sys 1063897565 8950
+1063899104 2 c sys/src/cmd/ip/imap4d/mkfile - 664 sys sys 1063897579 332
+1063899104 3 c sys/src/cmd/ip/mkfile - 664 sys sys 1063897563 1250
+1063899104 4 c sys/src/cmd/ip/ppp/mkfile - 664 sys sys 1063897576 352
+1063899104 5 c sys/src/cmd/ip/tftpd.c - 664 sys sys 1063897567 7186

+ 20 - 0
sys/lib/acid/kernel

@@ -249,6 +249,26 @@ defn up() {
 	return mach.externup;
 }
 
+defn intrcount() {
+	local p, pp, t, i, j;
+
+	p = intrtimes;
+	i=0;
+	loop 1,256 do {
+		pp = p[i];
+		i=i+1;
+		if pp != 0 then {
+			j=0;
+			t=0;
+			loop 1,1000 do {
+				t = t+pp[j];
+				j=j+1;
+			}
+			print(itoa(i, "%5d"), " ", itoa(t, "%11d"), "\n");
+		}
+	}
+}
+
 print("/sys/lib/acid/kernel");
 
 defn needacid(s){

+ 53 - 1
sys/lib/acid/pool

@@ -206,7 +206,7 @@ checkarena(arena)
 
 	atail = A2TB(arena);
 	complex Bhdr arena;
-	b = a;
+	b = arena;
 	while b.magic != ARENATAIL_MAGIC && b < atail do {
 		checkblock(b);
 		if B2NB(b) == b then {
@@ -225,6 +225,7 @@ defn
 checkpool(p)
 {
 	complex Pool p;
+	local a;
 	a = p.arenalist;
 
 	while a != 0 do {
@@ -252,3 +253,54 @@ dumptree(f)
 {
 	gendumptree(f, 0, "*");
 }
+
+defn
+poolwhopointsat(p, addr)
+{
+	complex Pool p;
+	local a;
+
+	a = p.arenalist;
+	while a != 0 do {
+		complex Arena a;
+		arenawhopointsat(a, addr);
+		a = a.down;
+	}
+}
+
+defn 
+arenawhopointsat(arena, addr)
+{
+	local atail, b;
+
+	atail = A2TB(arena);
+	complex Bhdr arena;
+	b = arena;
+	while b < atail do {
+		if *b == addr then 
+			print(b\X, "\n");
+		b = b+4;
+	}
+}
+
+defn
+whopointsat(addr)
+{
+	poolwhopointsat(*mainmem, addr);
+}
+
+defn
+blockhdr(addr)
+{
+	addr = addr & ~3;
+
+	while *addr != FREE_MAGIC 
+		&& *addr !=  ARENA_MAGIC
+		&& *addr != UNKEMPT_MAGIC
+		&& *addr != KEMPT_MAGIC
+		&& *addr != ARENATAIL_MAGIC
+	do
+		addr = addr-4;
+	return addr;
+}
+

+ 10 - 2
sys/lib/acid/thread

@@ -75,6 +75,12 @@ defn fnname(a){
 	return itoa(a, "%x");
 }
 
+stkignorelist = {};
+
+defn stkignore(s){
+	append stkignorelist, s;
+}
+
 defn threadstkline(T){
 	local stk, frame, pc, pc0, file, lastpc0, s, sym, i, stop;
 
@@ -91,14 +97,16 @@ defn threadstkline(T){
 	while stk && !stop do {
 		file = pcfile(pc);
 		if !regexp("^/sys/src/libc/", file)
-		&& !regexp("^/sys/src/libthread/", file) then
+		&& !regexp("^/sys/src/libthread/", file) 
+		&& match(file, stkignore)==-1 then
 			stop = 1;
 		else{
 			lastpc0 = pc0;
 			frame = head stk;
 			stk = tail stk;
-			pc0 = frame[0];
+			nextframe = head stk;
 			pc = frame[1];
+			pc0 = nextframe[0];
 		}
 	}
 	file = pcfile(pc);

+ 60 - 29
sys/lib/dist/cmd/bargraph.c

@@ -7,10 +7,11 @@
 enum {PNCTL=3};
 
 static char* rdenv(char*);
-void newwin(char*);
+int newwin(char*);
 Rectangle screenrect(void);
 
 int nokill;
+int textmode;
 char *title;
 
 Image *light;
@@ -27,26 +28,51 @@ initcolor(void)
 
 Rectangle rbar;
 Point ptext;
-long n, d;
+vlong n, d;
 int last;
 int lastp;
+int first = 1;
+
+char backup[80];
 
 void
 drawbar(void)
 {
-	int i;
+	int i, j;
 	int p;
-	char buf[10];
+	char buf[10], bar[100];
 
 	if(n > d || n < 0 || d <= 0)
 		return;
 
-	i = (Dx(rbar)*(vlong)n)/d;
+	i = (Dx(rbar)*n)/d;
 	p = (n*100LL)/d;
 
 	if(lastp == p && last == i)
 		return;
 
+	if(textmode){
+		bar[0] = '|';
+		for(j=0; j<i; j++)
+			bar[j+1] = '#';
+		for(; j<60; j++)
+			bar[j+1] = '-';
+		bar[61] = '|';
+		bar[62] = ' ';
+		sprint(bar+63, "%3d%%", p);
+		if(first)
+			first = 0;
+		else{
+			for(i=0; i<strlen(bar); i++)
+				backup[i] = '\b';
+			write(1, backup, i);
+		}
+		write(1, bar, strlen(bar));
+		lastp = p;
+		last = i;
+		return;
+	}
+		
 	if(lastp != p){
 		sprint(buf, "%d%%", p);
 		
@@ -100,7 +126,7 @@ bar(Biobuf *b)
 	parent = getpid();
 
 	die = 0;
-	switch(child = rfork(RFMEM|RFPROC)) {
+	if(!textmode) switch(child = rfork(RFMEM|RFPROC)) {
 	case 0:
 		sleep(1000);
 		while(!die && (k = eread(Ekeyboard|Emouse, &e))) {
@@ -117,8 +143,8 @@ bar(Biobuf *b)
 		p[Blinelen(b)-1] = '\0';
 		if(tokenize(p, f, 2) != 2)
 			continue;
-		n = atol(f[0]);
-		d = atol(f[1]);
+		n = strtoll(f[0], 0, 0);
+		d = strtoll(f[1], 0, 0);
 		drawbar();
 	}
 	postnote(PNCTL, child, "kill");
@@ -129,7 +155,7 @@ bar(Biobuf *b)
 void
 usage(void)
 {
-	fprint(2, "usage: bargraph [-w minx,miny,maxx,maxy] 'title'\n");
+	fprint(2, "usage: bargraph [-kt] [-w minx,miny,maxx,maxy] 'title'\n");
 	exits("usage");
 }
 
@@ -140,12 +166,15 @@ main(int argc, char **argv)
 	char *p, *q;
 	int lfd;
 
-	p = "0,0,200,40";
+	p = "0,0,200,60";
 	
 	ARGBEGIN{
 	case 'w':
 		p = ARGF();
 		break;
+	case 't':
+		textmode = 1;
+		break;
 	case 'k':
 		nokill = 1;
 		break;
@@ -162,15 +191,16 @@ main(int argc, char **argv)
 
 	while(q = strchr(p, ','))
 		*q = ' ';
-	newwin(p);
-
-	initdraw(0, 0, "bar");
-	initcolor();
-
-	einit(Emouse|Ekeyboard);
-
 	Binit(&b, lfd, OREAD);
-	eresized(0);
+	if(textmode || newwin(p) < 0){
+		textmode = 1;
+		rbar = Rect(0, 0, 60, 1);
+	}else{
+		initdraw(0, 0, "bar");
+		initcolor();
+		einit(Emouse|Ekeyboard);
+		eresized(0);
+	}
 	bar(&b);
 }
 
@@ -198,7 +228,7 @@ rdenv(char *name)
 	return v;
 }
 
-void
+int
 newwin(char *win)
 {
 	char *srv, *mntsrv;
@@ -207,8 +237,8 @@ newwin(char *win)
 
 	switch(rfork(RFFDG|RFPROC|RFNAMEG|RFENVG|RFNOTEG|RFNOWAIT)){
 	case -1:
-		fprint(2, "page: can't fork: %r\n");
-		exits("no fork");
+		fprint(2, "bargraph: can't fork: %r\n");
+		return -1;
 	case 0:
 		break;
 	default:
@@ -219,8 +249,8 @@ newwin(char *win)
 	if(srv == 0){
 		mntsrv = rdenv("/mnt/term/env/wsys");
 		if(mntsrv == 0){
-			fprint(2, "page: can't find $wsys\n");
-			exits("srv");
+			fprint(2, "bargraph: can't find $wsys\n");
+			return -1;
 		}
 		srv = malloc(strlen(mntsrv)+10);
 		sprint(srv, "/mnt/term%s", mntsrv);
@@ -231,13 +261,13 @@ newwin(char *win)
 	srvfd = open(srv, ORDWR);
 	free(srv);
 	if(srvfd == -1){
-		fprint(2, "page: can't open %s: %r\n", srv);
-		exits("no srv");
+		fprint(2, "bargraph: can't open %s: %r\n", srv);
+		return -1;
 	}
 	sprint(spec, "new -r %s", win);
 	if(mount(srvfd, -1, "/mnt/wsys", 0, spec) == -1){
-		fprint(2, "page: can't mount /mnt/wsys: %r (spec=%s)\n", spec);
-		exits("no mount");
+		fprint(2, "bargraph: can't mount /mnt/wsys: %r (spec=%s)\n", spec);
+		return -1;
 	}
 	close(srvfd);
 	unmount("/mnt/acme", "/dev");
@@ -245,8 +275,8 @@ newwin(char *win)
 	cons = open("/dev/cons", OREAD);
 	if(cons==-1){
 	NoCons:
-		fprint(2, "page: can't open /dev/cons: %r");
-		exits("no cons");
+		fprint(2, "bargraph: can't open /dev/cons: %r");
+		return -1;
 	}
 	dup(cons, 0);
 	close(cons);
@@ -257,6 +287,7 @@ newwin(char *win)
 	dup(cons, 2);
 	close(cons);
 //	wctlfd = open("/dev/wctl", OWRITE);
+	return 0;
 }
 
 Rectangle

+ 4 - 3
sys/man/8/boot

@@ -304,11 +304,12 @@ The loopback interface is still configured.
 same as the last but specify alternate venti service and web addresses.
 The loopback interface is still configured.
 .TP
-.B tcp!135.104.9.2!17034
+.B tcp!135.104.9.2!17034 \fR[ \fIargs\fR ]
 the network address of a venti server running on a separate machine.
 .I Boot
-will configure the IP stack by passing any remaining
-boot arguments to
+will configure the IP stack by passing
+.IR args ,
+if any, to
 .IR ipconfig (8).
 .PP
 If the disk is not a

+ 10 - 0
sys/man/8/cron

@@ -86,6 +86,16 @@ The user's profile is run with
 .B $service
 set to
 .BR rx .
+If
+.I host
+is
+set to
+.BR local ,
+.I cron
+will run the command as
+.I user
+on the local machine without using
+.BR rx .
 .PP
 .I Cron
 is not a reliable service.

+ 20 - 15
sys/src/9/boot/aux.c

@@ -109,8 +109,10 @@ setenv(char *name, char *val)
 
 	snprint(ename, sizeof ename, "#e/%s", name);
 	f = create(ename, 1, 0666);
-	if(f < 0)
+	if(f < 0){
+		fprint(2, "create %s: %r\n", ename);
 		return;
+	}
 	write(f, val, strlen(val));
 	close(f);
 }
@@ -138,13 +140,13 @@ srvcreate(char *name, int fd)
 	close(f);
 }
 
-static int
+void
 catchint(void *a, char *note)
 {
 	USED(a);
 	if(strcmp(note, "alarm") == 0)
-		return 1;
-	return 0;
+		noted(NCONT);
+	noted(NDFLT);
 }
 
 int
@@ -153,21 +155,24 @@ outin(char *prompt, char *def, int len)
 	int n;
 	char buf[256];
 
-	atnotify(catchint, 1);
-	if(cpuflag)
+	if(len >= sizeof buf)
+		len = sizeof(buf)-1;
+
+	if(cpuflag){
+		notify(catchint);
 		alarm(15*1000);
-	do{
-		print("%s[%s]: ", prompt, *def ? def : "no default");
-		n = read(0, buf, len);
-		if(cpuflag)
-			alarm(15*1000);
-	}while(n==0);
-	if(cpuflag)
+	}
+	print("%s[%s]: ", prompt, *def ? def : "no default");
+	memset(buf, 0, sizeof buf);
+	n = read(0, buf, len);
+	if(cpuflag){
 		alarm(0);
-	atnotify(catchint, 0);
+		notify(0);
+	}
+
 	if(n < 0)
 		return 1;
-	if(n != 1){
+	if(n > 1){
 		buf[n-1] = 0;
 		strcpy(def, buf);
 	}

+ 3 - 3
sys/src/9/boot/boot.c

@@ -39,10 +39,10 @@ boot(int argc, char *argv[])
 	bind("#c", "/dev", MAFTER);
 	/*
 	 * init will reinitialize its namespace.
-	 * #ec gets us plan9.ini settings.
+	 * #ec gets us plan9.ini settings (*var variables).
 	 */
-	bind("#ec", "/env", MREPL|MCREATE);
-	bind("#e", "/env", MAFTER);
+	bind("#ec", "/env", MREPL);
+	bind("#e", "/env", MBEFORE|MCREATE);
 	bind("#s", "/srv", MREPL|MCREATE);
 #ifdef DEBUG
 	print("argc=%d\n", argc);

+ 1 - 1
sys/src/9/boot/boot.h

@@ -70,7 +70,7 @@ extern int	connectpaq(void);
 extern void	configembed(Method*);
 extern int	connectembed(void);
 
-extern void	configip(void);
+extern void	configip(int, char**, int);
 
 /* hack for passing authentication address */
 extern char	*authaddr;

+ 2 - 0
sys/src/9/boot/bootcache.c

@@ -39,6 +39,8 @@ cache(int fd)
 				bd[i-4] = 0;
 			else if(strcmp("fs", &bd[i-2]) == 0)
 				bd[i-2] = 0;
+			else if(strcmp("fossil", &bd[i-6]) == 0)
+				bd[i-6] = 0;
 			sprint(partition, "%scache", bd);
 			if(stat(partition, statbuf, sizeof statbuf) < 0)
 				*bd = 0;

+ 7 - 10
sys/src/9/boot/bootip.c

@@ -12,8 +12,9 @@ static int isvalidip(uchar*);
 static void netndb(char*, uchar*);
 static void netenv(char*, uchar*);
 
+
 void
-configip(void)
+configip(int bargc, char **bargv, int needfs)
 {
 	int argc, pid;
 	char **argv, *p;
@@ -56,7 +57,6 @@ configip(void)
 	bind("#l3", mpoint, MAFTER);
 	werrstr("");
 
-	print("ip...");
 	/* let ipconfig configure the ip interface */
 	switch(pid = fork()){
 	case -1:
@@ -81,6 +81,9 @@ configip(void)
 		free(w);
 	}
 
+	if(!needfs)
+		return;
+
 	/* if we didn't get a file and auth server, query user */
 	netndb("fs", fsip);
 	if(!isvalidip(fsip))
@@ -113,13 +116,7 @@ setauthaddr(char *proto, int port)
 void
 configtcp(Method*)
 {
-	sleep(100);
-	print("t");
-	sleep(100);
-	configip();
-	sleep(100);
-	print(".");
-	sleep(100);
+	configip(bargc, bargv, 1);
 	setauthaddr("tcp", 567);
 }
 
@@ -135,7 +132,7 @@ connecttcp(void)
 void
 configil(Method*)
 {
-	configip();
+	configip(bargc, bargv, 1);
 	setauthaddr("tcp", 567);
 }
 

+ 6 - 3
sys/src/9/pc/vgavmware.c

@@ -214,9 +214,12 @@ vmfifowr(Vmware *vm, ulong v)
 		vmwait(vm);
 
 	mm[mm[FifoNextCmd]/sizeof(ulong)] = v;
-	mm[FifoNextCmd] += sizeof(ulong);
-	if(mm[FifoNextCmd]==mm[FifoMax])
-		mm[FifoNextCmd] = mm[FifoMin];
+
+	/* must do this way so mm[FifoNextCmd] is never mm[FifoMax] */
+	v = mm[FifoNextCmd] + sizeof(ulong);
+	if(v == mm[FifoMax])
+		v = mm[FifoMin];
+	mm[FifoNextCmd] = v;
 }
 
 static void

+ 34 - 2
sys/src/ape/lib/bsd/gettimeofday.c

@@ -1,12 +1,44 @@
 #include <sys/types.h>
 #include <time.h>
 #include <sys/time.h>
+#include <string.h>
+#include "sys9.h"
+
+typedef unsigned long long uvlong;
+typedef long long vlong;
+typedef unsigned char uchar;
+
+static uvlong order = 0x0001020304050607ULL;
+
+static void
+be2vlong(vlong *to, uchar *f)
+{
+	uchar *t, *o;
+	int i;
+
+	t = (uchar*)to;
+	o = (uchar*)&order;
+	for(i = 0; i < 8; i++)
+		t[o[i]] = f[i];
+}
 
 int
 gettimeofday(struct timeval *tp, struct timezone *tzp)
 {
-	tp->tv_sec = time(0);
-	tp->tv_usec = 0;
+	int f;
+	uchar b[8];
+	vlong t;
+
+	memset(b, 0, sizeof b);
+	f = _OPEN("/dev/time", 0);
+	if(f >= 0) {
+		_PREAD(f, b, sizeof(b), 0);
+		_CLOSE(f);
+	}
+	be2vlong(&t, b);
+
+	tp->tv_sec = t/1000000000;
+	tp->tv_usec = (t/1000)%1000000;
 
 	if(tzp) {
 		tzp->tz_minuteswest = 240;

+ 1 - 1
sys/src/cmd/acid/builtin.c

@@ -883,7 +883,7 @@ regexp(Node *r, Node *args)
 	free(rp);
 }
 
-char vfmt[] = "aBbcCdDfFgGiIoOqQrRsuUVxXYZ";
+char vfmt[] = "aBbcCdDfFgGiIoOqQrRsSuUVxXYZ";
 
 void
 fmt(Node *r, Node *args)

+ 12 - 1
sys/src/cmd/auth/cron.c

@@ -466,6 +466,18 @@ rexec(User *user, Job *j)
 	 * remote call, auth, cmd with no i/o
 	 * give it 2 min to complete
 	 */
+	if(strcmp(j->host, "local") == 0){
+		if(becomeuser(user->name) < 0){
+			syslog(0, CRONLOG, "%s: can't change uid for %s on %s: %r", user->name, j->cmd, j->host);
+			_exits(0);
+		}
+syslog(0, CRONLOG, "%s: ran '%s' on %s", user->name, j->cmd, j->host);
+		execl("/bin/rc", "rc", "-c", buf, nil);
+		syslog(0, CRONLOG, "%s: exec failed for %s on %s: %r",
+			user->name, j->cmd, j->host);
+		_exits(0);
+	}
+
 	alarm(2*60*1000);
 	fd = call(j->host);
 	if(fd < 0){
@@ -606,7 +618,6 @@ becomeuser(char *new)
 {
 	char *cap;
 	int rv;
-
 	cap = mkcap(getuser(), new);
 	if(cap == nil)
 		return -1;

+ 20 - 10
sys/src/cmd/aux/timesync.c

@@ -41,6 +41,7 @@ vlong avgdelay;
 vlong lastutc;
 uchar rootid[4];
 char *sysid;
+int myprec;
 
 // list of time samples
 typedef struct Sample Sample;
@@ -81,7 +82,6 @@ struct NTPserver
 	uchar	precision;
 	vlong	rootdelay;
 	vlong	rootdisp;
-	vlong	disp;
 	vlong	rtt;
 	vlong	dt;
 };
@@ -100,6 +100,7 @@ static void	background(void);
 static int	caperror(vlong dhz, int tsecs, vlong taccuracy);
 static long	fstime(void);
 static int	gettime(vlong *nsec, uvlong *ticks, uvlong *hz); // returns time, ticks, hz
+static int	getclockprecision(vlong);
 static void	hnputts(void *p, vlong nsec);
 static void	hnputts(void *p, vlong nsec);
 static void	inittime(void);
@@ -265,6 +266,7 @@ main(int argc, char **argv)
 	gettime(0, 0, &hz);
 	minhz = hz - (hz>>2);
 	maxhz = hz + (hz>>2);
+	myprec = getclockprecision(hz);
 
 	// convert the accuracy from nanoseconds to ticks
 	taccuracy = hz*accuracy/SEC;
@@ -971,12 +973,7 @@ ntpsample(void)
 	for(tns = ntpservers; tns != nil; tns = tns->next){
 		if(ntptimediff(tns) < 0)
 			continue;
-		if(tns->stratum == 0)
-			x = 0xff;
-		else
-			x = tns->stratum;
-		x *= SEC;
-		x += (vabs(tns->rootdelay+tns->rtt)>>1) + tns->rootdisp + tns->rtt;
+		x = vabs(tns->rootdisp) + (vabs(tns->rtt+tns->rootdelay)>>1);
 		if(debug)
 			fprint(2, "ntp %s rootdelay %lld rootdisp %lld metric %lld\n",
 				tns->name, tns->rootdelay, tns->rootdisp, x);
@@ -991,10 +988,9 @@ ntpsample(void)
 
 	// save data for our server
 	rootdisp = ns->rootdisp;
-	rootdelay = ns->rootdelay+ns->rtt;
+	rootdelay = ns->rootdelay;
 	mydelay = ns->rtt;
-	x = vabs(ns->dt);
-	mydisp = ns->disp+avgerr;
+	mydisp = avgerr;
 	if(ns->stratum == 0)
 		stratum = 0;
 	else
@@ -1100,6 +1096,7 @@ ntpserver(char *servenet)
 
 		ntp->mode = (vers<<3)|4;
 		ntp->stratum = stratum;
+		ntp->precision = myprec;
 		hnputfp(ntp->rootdelay, rootdelay + mydelay);
 		hnputfp(ntp->rootdisp, rootdisp + mydisp);
 		hnputts(ntp->refts, lastutc);
@@ -1286,3 +1283,16 @@ background(void)
 	}
 	inbackground = 1;
 }
+
+static int
+getclockprecision(vlong hz)
+{
+	int i;
+
+	i = 8;
+	while(hz > 0){
+		i--;
+		hz >>= 1;
+	}
+	return i;
+}

+ 9 - 1
sys/src/cmd/fossil/cache.c

@@ -2062,8 +2062,16 @@ flushThread(void *a)
 		vtSleep(c->flush);
 		vtUnlock(c->lk);
 		for(i=0; i<FlushSize; i++)
-			if(!cacheFlushBlock(c))
+			if(!cacheFlushBlock(c)){
+				/*
+				 * If i==0, could be someone is waking us repeatedly
+				 * to flush the cache but there's no work to do.
+				 * Pause a little.
+				 */
+				if(i==0)
+					sleep(250);
 				break;
+			}
 		if(i==0 && c->ndirty){
 			/*
 			 * All the blocks are being written right now -- there's nothing to do.

+ 1 - 1
sys/src/cmd/ip/dhcpd/mkfile

@@ -14,7 +14,7 @@ IOFILES=\
 	db.$O\
 	ping.$O\
 
-HFILES=dat.h
+HFILES=dat.h ../dhcp.h
 
 BIN=/$objtype/bin/ip
 

+ 467 - 0
sys/src/cmd/ip/gizzard.c

@@ -0,0 +1,467 @@
+#include <u.h>
+#include <libc.h>
+#include <ctype.h>
+#include <bio.h>
+#include <ndb.h>
+#include <ip.h>
+
+Biobuf in;
+
+void
+usage(void)
+{
+	fprint(2, "usage: %s [-x netroot]\n", argv0);
+	exits("usage");
+}
+
+char *vec[] =
+{
+	"ip",
+	"ipmask",
+	"dns",
+	"dom",
+	"auth",
+	"authdom",
+	"fs",
+	"sys",
+	"ipgw",
+	"ntp",
+};
+
+char *outvec[] =
+{
+	"ipgw",
+	"dns",
+	"auth",
+	"fs",
+	"ntp",
+	0
+};
+
+enum
+{
+	Tnone,
+	Tip,
+	Tdom,
+	Tmask,
+	Tstring,
+};
+
+typedef struct Attribute Attribute;
+typedef void (Helper)(Attribute*);
+
+struct Attribute
+{
+	char *attr;
+	char *desc;
+	int type;
+	int multiple;
+	Helper *helper;
+};
+
+Helper authdomhelper, authhelper, fshelper;
+
+Attribute expl[] =
+{
+	{ "ip", "ip address on this interface", Tip, 0, nil },
+	{ "ipmask", "ip mask on this interface", Tmask, 0, nil },
+	{ "dns", "domain name server", Tdom, 1, nil },
+	{ "dom", "domain name", Tdom, 0, nil },
+	{ "auth", "authentication server", Tdom, 0, authhelper },
+	{ "authdom", "authentication domain", Tstring, 0, authdomhelper },
+	{ "fs", "file server", Tdom, 0, fshelper },
+	{ "sys", "your system name", Tstring, 0, nil },
+	{ "ipgw", "ip gateway on this network", 0, nil },
+	{ "ntp", "network time server", Tdom, 0, nil },
+	{ 0 },
+};
+
+char *authserver;
+
+Ndbtuple*
+find(char *attr, Ndbtuple *t1, Ndbtuple *t2, Ndbtuple *t3)
+{
+	for(; t1; t1 = t1->entry)
+		if(strcmp(attr, t1->attr) == 0)
+			return t1;
+	for(; t2; t2 = t2->entry)
+		if(strcmp(attr, t2->attr) == 0)
+			return t2;
+	for(; t3; t3 = t3->entry)
+		if(strcmp(attr, t3->attr) == 0)
+			return t3;
+	return nil;
+}
+
+Ndbtuple*
+findnext(Ndbtuple *t, char *attr, Ndbtuple *t1, Ndbtuple *t2, Ndbtuple *t3)
+{
+	if(t == nil)
+		return find(attr, t1, t2, t3);
+	for(; t1; t1 = t1->entry)
+		if(t1 == t)
+			return find(attr, t->entry, t2, t3);
+	for(; t2; t2 = t2->entry)
+		if(t2 == t)
+			return find(attr, t->entry, t3, nil);
+	for(; t3; t3 = t3->entry)
+		if(t3 == t)
+			return find(attr, t->entry, nil, nil);
+	return nil;
+}
+
+Ndbtuple*
+newtuple(char *attr, char *val)
+{
+	Ndbtuple *nt;
+
+	nt = malloc(sizeof *nt);
+	nt->entry = nt->line = nil;
+	strncpy(nt->attr, attr, Ndbalen-1);
+	nt->attr[Ndbalen-1] = 0;
+	strncpy(nt->val, val, Ndbvlen-1);
+	nt->attr[Ndbvlen-1] = 0;
+	return nt;
+}
+
+Ndbtuple*
+duptuple(Ndbtuple *t)
+{
+	Ndbtuple *nt;
+
+	nt = malloc(sizeof *nt);
+	nt->entry = nt->line = nil;
+	strcpy(nt->val, t->val);
+	strcpy(nt->attr, t->attr);
+	return nt;
+}
+
+Ndbtuple*
+concat(Ndbtuple *t1, Ndbtuple *t2)
+{
+	Ndbtuple *t;
+
+	if(t1 == nil)
+		return t2;
+	if(t2 == nil)
+		return t1;
+
+	t = t1;
+	for(; t1->entry != nil; t1 = t1->entry)
+		;
+	t1->entry = t1->line = t2;
+	return t;
+}
+
+void
+removetuple(Ndbtuple **l, Ndbtuple *nt)
+{
+	Ndbtuple *t;
+
+	while(*l != nil){
+		t = *l;
+		if(strcmp(t->attr, nt->attr) == 0
+		&& strcmp(t->val, nt->val) == 0){
+			*l = t->entry;
+			free(t);
+		} else
+			l = &t->entry;
+	}
+}
+
+void
+help(Attribute *e)
+{
+	if(e->helper){
+		print("--------------------------------\n");
+		(*e->helper)(e);
+		print("--------------------------------\n");
+	}
+}
+
+Ndbtuple*
+need(int must, char *attr)
+{
+	char *p;
+	uchar ip[IPaddrlen];
+	int i;
+	Attribute *e;
+	Ndbtuple *first, **l, *t;
+
+	e = nil;
+	for(i = 0; expl[i].attr != nil; i++){
+		if(strcmp(expl[i].attr, attr) == 0){
+			e = &expl[i];
+			break;
+		}
+	}
+	if(e == nil)
+		return nil;
+
+	first = nil;
+	l = &first;
+	for(;;){
+		if(first != nil)
+			must = 0;
+		print("Enter%s %s (type ? for help%s)? ", first!=nil ? " another" : "",
+			e->desc, must!=0 ? "" : ", return to skip");
+
+		p = Brdline(&in, '\n');
+		p[Blinelen(&in)-1] = 0;
+		while(*p == ' ' || *p == '\t')
+			p++;
+
+		if(*p == '?'){
+			help(e);
+			continue;
+		}
+
+		if(*p == 0){
+			if(must)
+				continue;
+			else
+				break;
+		}
+		t = nil;
+		switch(e->type){
+		case Tip:
+			parseip(ip, p);
+			if(ipcmp(ip, IPnoaddr) == 0){
+				print("!not an IP address\n");
+				break;
+			}
+			t = newtuple(attr, p);
+			break;
+		case Tdom:
+			if(strchr(p, '.') == nil && strchr(p, ':') == nil){
+				print("!not an IP address or domain name\n");
+				break;
+			}
+			t = newtuple(attr, p);
+			break;
+		case Tmask:
+			parseipmask(ip, p);
+			if(ipcmp(ip, IPnoaddr) == 0){
+				print("!not an IP mask\n");
+				break;
+			}
+			t = newtuple(attr, p);
+			break;
+		case Tstring:
+			if(strchr(p, ' ')){
+				print("!the string cannot contain spaces\n");
+				break;
+			}
+			t = newtuple(attr, p);
+			break;
+		}
+		if(t != nil){
+			*l = t;
+			l = &t->entry;
+		}
+	}
+
+	return first;	
+}
+
+void
+printnet(Ndbtuple *ndb, Ndbtuple *local, Ndbtuple *added)
+{
+	uchar ip[IPaddrlen];
+	uchar mask[IPaddrlen];
+	uchar net[IPaddrlen];
+	Ndbtuple *t;
+	char **l;
+
+	/* some little calculations */
+	t = find("ip", ndb, local, added);
+	if(t == nil)
+		return;
+	parseip(ip, t->val);
+	t = find("ipmask", ndb, local, added);
+	if(t != nil)
+		parseipmask(mask, t->val);
+	else
+		ipmove(mask, defmask(ip));
+	maskip(ip, mask, net);
+
+	/* print out a sample network database */
+	print("ipnet=mynet ip=%I ipmask=%M\n", net, mask);
+	for(l = outvec; *l; l++){
+		t = nil;
+		while((t = findnext(t, *l, added, ndb, local)) != nil)
+			print("	%s=%s\n", t->attr, t->val);
+	}
+}
+
+void
+printauthdom(Ndbtuple *ndb, Ndbtuple *local, Ndbtuple *added)
+{
+	Ndbtuple *t, *nt;
+
+	t = find("authdom", ndb, local, added);
+	if(t == nil)
+		return;
+	nt = nil;
+	print("authdom=%s\n", t->val);
+	while((nt = findnext(nt, "auth", ndb, local, added)) != nil)
+		print("\tauth=%s\n", nt->val);
+}
+
+void
+printhost(Ndbtuple *added)
+{
+	uchar ip[IPaddrlen];
+	Ndbtuple *t;
+	char **l;
+
+	t = find("ip", added, nil, nil);
+	if(t == nil)
+		return;
+	parseip(ip, t->val);
+	print("ip=%I\n", ip);
+	for(l = outvec; *l; l++){
+		t = nil;
+		while((t = findnext(t, *l, added, nil, nil)) != nil)
+			print("	%s=%s\n", t->attr, t->val);
+	}
+}
+
+void
+main(int argc, char **argv)
+{
+	Ndbs s;
+	char *net;
+	char ndbfile[128];
+	char authdomval[Ndbvlen];
+	Ndb *db, *netdb;
+	Ndbtuple *ndb, *local, *added, *nt, *t, *xt;
+
+	fmtinstall('I', eipfmt);
+	fmtinstall('M', eipfmt);
+
+	db = ndbopen("/lib/ndb/local");
+	Binit(&in, 0, OREAD);
+
+	net = "/net";
+	ARGBEGIN {
+	case 'x':
+		net = ARGF();
+		if(net == nil)
+			usage();
+		break;
+	} ARGEND;
+
+	/* see what ipconfig knows */
+	snprint(ndbfile, sizeof ndbfile, "%s/ndb", net);
+	netdb = ndbopen(ndbfile);
+	ndb = ndbparse(netdb);
+	added = nil;
+
+	/* ask user for ip address */
+	t = find("ip", ndb, added, nil);
+	if(t == nil){
+		t = need(1, "ip");
+		added = concat(added, t);
+	}
+	if(t == nil)
+		sysfatal("cannot continue without your ip address");
+
+	/* see what the database knows */
+	local = ndbipinfo(db, "ip", t->val, vec, nelem(vec));
+
+	/* get hostname */
+	t = find("sys", ndb, local, added);
+	if(t == nil){
+		t = need(1, "sys");
+		added = concat(added, t);
+	}
+
+	/* get auth server */
+	t = find("auth", ndb, local, added);
+	if(t == nil){
+		t = need(0, "auth");
+		added = concat(added, t);
+	}
+	if(t != nil){
+		authserver = t->val;
+		xt = ndbgetval(db, &s, "auth", t->val, "authdom", authdomval);
+		for(nt = find("authdom", xt, nil, nil); nt != nil;
+		    nt = find("authdom", nt->entry, nil, nil))
+			local = concat(local, duptuple(nt));
+		ndbfree(xt);
+		if(xt == nil){
+			t = need(1, "authdom");
+			added = concat(added, t);
+		}
+	}
+
+	/* look for things we need */
+	if(find("ipmask", added, ndb, local) == nil){
+		t = need(0, "ipmask");
+		added = concat(added, t);
+	}
+	if(find("dns", added, ndb, local) == nil){
+		t = need(0, "dns");
+		added = concat(added, t);
+	}
+	if(find("ntp", added, ndb, local) == nil){
+		t = need(0, "ntp");
+		added = concat(added, t);
+	}
+	if(find("fs", added, ndb, local) == nil){
+		t = need(0, "fs");
+		added = concat(added, t);
+	}
+
+	/* remove redundancy */
+	for(t = local; t != nil; t = t->entry)
+		removetuple(&ndb, t);
+
+	print("======================================\n");
+	print("recomended additions to /lib/ndb/local\n");
+	print("======================================\n");
+
+	if(added != nil)
+		printnet(ndb, local, added);
+	printauthdom(ndb, local, added);
+	printhost(added);
+
+	exits(0);
+}
+
+void
+authentication(void)
+{
+	print("\tPlan 9 systems that accept connections from other Plan 9\n");
+	print("\tsystems need to authenticate to each other.  A set of secrets\n");
+	print("\tand authentication servers to validate those secrets is\n");
+	print("\tidentified by a string called an 'authentication domain'.\n");
+	print("\tIf you expect anyone to 'cpu' to or 'import' from your machine,\n");
+	print("\tyour machine must know its authentication domain and the\n");
+	print("\tauthentication server(s) that validate keys for it.\n");
+}
+
+void
+authdomhelper(Attribute *)
+{
+	authentication();
+	print("\n\tEnter the authentication domain that is served by the\n");
+	print("\tauthentication server '%s'.\n", authserver);
+}
+
+void
+authhelper(Attribute *)
+{
+	authentication();
+	print("\n\tEnter the name or address of the default authentication server\n");
+	print("\tto be used by this system.\n");
+}
+
+void
+fshelper(Attribute *)
+{
+	print("\tThis is only important if you are going to run diskless from\n");
+	print("\ta remote server, i.e., if you wish to answer 'il' or 'tcp' to the\n");
+	print("\t'root is from:' boot prompt.\n");
+}

+ 0 - 1
sys/src/cmd/ip/imap4d/mkfile

@@ -27,6 +27,5 @@ UPDATE=\
 	mkfile\
 	$HFILES\
 	${OFILES:%.$O=%.c}\
-	${TARG:%=/386/bin/%}\
 
 </sys/src/cmd/mkone

+ 2 - 1
sys/src/cmd/ip/mkfile

@@ -2,6 +2,7 @@
 
 TARG = 	dhcpclient\
 	ftpd\
+	gizzard\
 	gping\
 	hogports\
 	ipconfig\
@@ -22,13 +23,13 @@ TARG = 	dhcpclient\
 DIRS=ftpfs dhcpd httpd ppp imap4d snoopy
 
 BIN=/$objtype/bin/ip
+HFILES=dhcp.h arp.h bootp.h glob.h telnet.h
 
 UPDATE=\
 	mkfile\
 	$HFILES\
 	${OFILES:%.$O=%.c}\
 	${TARG:%=%.c}\
-	${TARG:%=/386/bin/ip/%}\
 
 </sys/src/cmd/mkmany
 

+ 0 - 1
sys/src/cmd/ip/ppp/mkfile

@@ -17,7 +17,6 @@ UPDATE=\
 	mkfile\
 	$HFILES\
 	${OFILES:%.$O=%.c}\
-	${TARG:%=/386/bin/ip/%}\
 
 </sys/src/cmd/mkone
 

+ 3 - 2
sys/src/cmd/ip/tftpd.c

@@ -160,8 +160,9 @@ doserve(int fd)
 	}
 
 	if(restricted){
-		if(strncmp(bigbuf+2, "../", 3) == 0 || strstr(bigbuf+2, "/../") ||
-		  (bigbuf[2] == '/' && strncmp(bigbuf+2, dirsl, dirsllen) != 0)){
+		if(bigbuf[2] == '#' ||
+		  strncmp(bigbuf+2, "../", 3)==0 || strstr(bigbuf+2, "/../") ||
+		  (bigbuf[2] == '/' && strncmp(bigbuf+2, dirsl, dirsllen)!=0)){
 			nak(fd, 4, "Permission denied");
 			close(fd);
 			syslog(dbg, flog, "bad request %d from %s file %s", op, raddr, bigbuf+2);

+ 1 - 0
sys/src/cmd/ndb/dnsdebug.c

@@ -23,6 +23,7 @@ int	debug;
 int	cachedb;
 ulong	now;
 int	testing;
+int traceactivity;
 char	*trace;
 int	needrefresh;
 int	resolver;

+ 1 - 0
sys/src/cmd/ndb/dnstcp.c

@@ -13,6 +13,7 @@ char	*dbfile;
 int	debug;
 int	cachedb = 1;
 int	testing;
+int traceactivity;
 int	needrefresh;
 int 	resolver;
 char	mntpt[Maxpath];

+ 1 - 1
sys/src/cmd/ssh/util.c

@@ -60,7 +60,7 @@ erealloc(void *v, long n)
 }
 
 
-static int killpid[16];
+static int killpid[32];
 static int nkillpid;
 void
 atexitkiller(void)

+ 9 - 4
sys/src/cmd/tprof.c

@@ -50,14 +50,19 @@ main(int argc, char *argv[])
 	Biobuf outbuf;
 	Fhdr f;
 	struct COUNTER *cp;
-	char file[128];
+	char filebuf[128], *file;
 
-	if(argc != 2)
-		error(0, "usage: tprof pid");
+	if(argc != 2 && argc != 3)
+		error(0, "usage: tprof pid [binary]");
 	/*
 	 * Read symbol table
 	 */
-	sprint(file, "/proc/%s/text", argv[1]);
+	if(argc == 2){
+		file = filebuf;
+		snprint(filebuf, sizeof filebuf, "/proc/%s/text", argv[1]);
+	}else
+		file = argv[2];
+
 	fd = open(file, OREAD);
 	if(fd < 0)
 		error(1, file);

+ 1 - 1
sys/src/cmd/upas/fs/fs.c

@@ -1670,7 +1670,7 @@ post(char *name, char *envname, int srvfd)
 
 	fd = create(name, OWRITE, 0600);
 	if(fd < 0)
-		return;
+		error("post failed");
 	sprint(buf, "%d",srvfd);
 	if(write(fd, buf, strlen(buf)) != strlen(buf))
 		error("srv write");

+ 8 - 3
sys/src/cmd/upas/fs/mbox.c

@@ -291,7 +291,12 @@ parseheaders(Message *m, int justmime, Mailbox *mb, int addfrom)
 	// for pop3 messages, the best we can do is 
 	// use the From: information and the RFC822 date.
 	//
-	if(m->unixdate == nil){
+	if(m->unixdate == nil || strcmp(s_to_c(m->unixdate), "???") == 0
+	|| strcmp(s_to_c(m->unixdate), "Thu Jan 1 00:00:00 GMT 1970") == 0){
+		if(m->unixdate){
+			s_free(m->unixdate);
+			m->unixdate = nil;
+		}
 		// look for the date in the first Received: line.
 		// it's likely to be the right time zone (it's
 	 	// the local system) and in a convenient format.
@@ -329,7 +334,7 @@ parseheaders(Message *m, int justmime, Mailbox *mb, int addfrom)
 	}
 
 	m->unixheader = s_copy("From ");
-	if(m->unixfrom)
+	if(m->unixfrom && strcmp(s_to_c(m->unixfrom), "???") != 0)
 		s_append(m->unixheader, s_to_c(m->unixfrom));
 	else if(m->from822)
 		s_append(m->unixheader, s_to_c(m->from822));
@@ -340,7 +345,7 @@ parseheaders(Message *m, int justmime, Mailbox *mb, int addfrom)
 	if(m->unixdate)
 		s_append(m->unixheader, s_to_c(m->unixdate));
 	else
-		s_append(m->unixheader, "Thu Jan  1 00:00:00 EST 1970");
+		s_append(m->unixheader, "Thu Jan  1 00:00:00 GMT 1970");
 
 	s_append(m->unixheader, "\n");
 }

+ 5 - 1
sys/src/cmd/upas/q/runq.c

@@ -35,6 +35,7 @@ int	npid = 50;
 int	sflag;			/* single thread per directory */
 int	aflag;			/* all directories */
 int	Eflag;			/* ignore E.xxxxxx dates */
+int	Rflag;			/* no giving up, ever */
 
 void
 usage(void)
@@ -62,6 +63,9 @@ main(int argc, char **argv)
 	case 'E':
 		Eflag++;
 		break;
+	case 'R':	/* no giving up -- just leave stuff in the queue */
+		Rflag++;
+		break;
 	case 'a':
 		aflag++;
 		break;
@@ -467,7 +471,7 @@ dofile(Dir *dp)
 		if(wm->msg[0]){
 			if(debug)
 				fprint(2, "[%d] wm->msg == %s\n", getpid(), wm->msg);
-			if(strstr(wm->msg, "Retry")==0){
+			if(!Rflag && strstr(wm->msg, "Retry")==0){
 				/* return the message and remove it */
 				if(returnmail(av, dp->name, wm->msg) == 0)
 					remmatch(dp->name);

+ 5 - 0
sys/src/lib9p/req.c

@@ -66,6 +66,8 @@ if(chatty9p > 1)
 void
 closereq(Req *r)
 {
+	int i;
+
 	if(r == nil)
 		return;
 
@@ -81,6 +83,9 @@ if(chatty9p > 1)
 			closefid(r->afid);
 		if(r->oldreq)
 			closereq(r->oldreq);
+		for(i=0; i<r->nflush; i++)
+			respond(r->flush[i], nil);
+		free(r->flush);
 		switch(r->ifcall.type){
 		case Tstat:
 			free(r->ofcall.stat);

+ 7 - 7
sys/src/libc/fmt/dofmt.c

@@ -239,18 +239,18 @@ _runefmt(Fmt *f)
 int
 fmtstrcpy(Fmt *f, char *s)
 {
-	int p, i;
+	int i, j;
+	Rune r;
+
 	if(!s)
 		return _fmtcpy(f, "<nil>", 5, 5);
 	/* if precision is specified, make sure we don't wander off the end */
 	if(f->flags & FmtPrec){
-		p = f->prec;
-		for(i = 0; i < p; i++)
-			if(s[i] == 0)
-				break;
-		return _fmtcpy(f, s, utfnlen(s, i), i);	/* BUG?: won't print a partial rune at end */
+		i = 0;
+		for(j=0; j<f->prec && s[i]; j++)
+			i += chartorune(&r, s+i);
+		return _fmtcpy(f, s, j, i);
 	}
-
 	return _fmtcpy(f, s, utflen(s), strlen(s));
 }
 

+ 6 - 4
sys/src/libc/fmt/fmtquote.c

@@ -33,7 +33,7 @@ _quotesetup(char *s, Rune *r, int nin, int nout, Quoteinfo *q, int sharp, int ru
 		q->nbytesout = 2;
 		q->nrunesout = 2;
 	}
-	for(; nin!=0; nin-=w){
+	for(; nin!=0; nin--){
 		if(s)
 			w = chartorune(&c, s);
 		else{
@@ -168,12 +168,14 @@ qstrfmt(char *sin, Rune *rin, Quoteinfo *q, Fmt *f)
 int
 _quotestrfmt(int runesin, Fmt *f)
 {
-	int outlen;
+	int nin, outlen;
 	Rune *r;
 	char *s;
 	Quoteinfo q;
 
-	f->flags &= ~FmtPrec;	/* ignored for %q %Q, so disable for %s %S in easy case */
+	nin = -1;
+	if(f->flags&FmtPrec)
+		nin = f->prec;
 	if(runesin){
 		r = va_arg(f->args, Rune *);
 		s = nil;
@@ -191,7 +193,7 @@ _quotestrfmt(int runesin, Fmt *f)
 	else
 		outlen = (char*)f->stop - (char*)f->to;
 
-	_quotesetup(s, r, -1, outlen, &q, f->flags&FmtSharp, f->runes);
+	_quotesetup(s, r, nin, outlen, &q, f->flags&FmtSharp, f->runes);
 //print("bytes in %d bytes out %d runes in %d runesout %d\n", q.nbytesin, q.nbytesout, q.nrunesin, q.nrunesout);
 
 	if(runesin){