home *** CD-ROM | disk | FTP | other *** search
open in:
MacOS 8.1
|
Win98
|
DOS
browse contents |
view JSON data
|
view as text
This file was processed as: SHell self-extracting ARchive
(archive/shar).
Confidence | Program | Detection | Match Type | Support
|
---|
100%
| dexvert
| SHell self-extracting ARchive (archive/shar)
| magic
| Supported |
1%
| dexvert
| Text File (text/txt)
| fallback
| Supported |
100%
| file
| POSIX shell script text executable
| default
| |
99%
| file
| C source text
| default
| |
98%
| file
| a /bin/sh script, ASCII text executable
| default (weak)
| |
100%
| perlTextCheck
| Likely Text (Perl)
| default
| |
100%
| siegfried
| fmt/329 Shell Archive Format
| default
| |
100%
| gt2
| Shell Skript: '/bin/sh'
| default (weak)
| |
100%
| detectItEasy
| Format: Plain text[LF]
| default
| |
100%
| binwalkID
| Executable script, shebang: "/bin/sh"
| default (weak)
| |
100%
| xdgMime
| application/x-shellscript
| default (weak)
|
|
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 23 21 20 2f 62 69 6e 2f | 73 68 0a 23 20 54 68 69 |#! /bin/|sh.# Thi|
|00000010| 73 20 69 73 20 61 20 73 | 68 65 6c 6c 20 61 72 63 |s is a s|hell arc|
|00000020| 68 69 76 65 2e 20 20 52 | 65 6d 6f 76 65 20 61 6e |hive. R|emove an|
|00000030| 79 74 68 69 6e 67 20 62 | 65 66 6f 72 65 20 74 68 |ything b|efore th|
|00000040| 69 73 20 6c 69 6e 65 2c | 20 74 68 65 6e 20 75 6e |is line,| then un|
|00000050| 70 61 63 6b 0a 23 20 69 | 74 20 62 79 20 73 61 76 |pack.# i|t by sav|
|00000060| 69 6e 67 20 69 74 20 69 | 6e 74 6f 20 61 20 66 69 |ing it i|nto a fi|
|00000070| 6c 65 20 61 6e 64 20 74 | 79 70 69 6e 67 20 22 73 |le and t|yping "s|
|00000080| 68 20 66 69 6c 65 22 2e | 20 20 54 6f 20 6f 76 65 |h file".| To ove|
|00000090| 72 77 72 69 74 65 20 65 | 78 69 73 74 69 6e 67 0a |rwrite e|xisting.|
|000000a0| 23 20 66 69 6c 65 73 2c | 20 74 79 70 65 20 22 73 |# files,| type "s|
|000000b0| 68 20 66 69 6c 65 20 2d | 63 22 2e 20 20 59 6f 75 |h file -|c". You|
|000000c0| 20 63 61 6e 20 61 6c 73 | 6f 20 66 65 65 64 20 74 | can als|o feed t|
|000000d0| 68 69 73 20 61 73 20 73 | 74 61 6e 64 61 72 64 20 |his as s|tandard |
|000000e0| 69 6e 70 75 74 20 76 69 | 61 0a 23 20 75 6e 73 68 |input vi|a.# unsh|
|000000f0| 61 72 2c 20 6f 72 20 62 | 79 20 74 79 70 69 6e 67 |ar, or b|y typing|
|00000100| 20 22 73 68 20 3c 66 69 | 6c 65 22 2c 20 65 2e 67 | "sh <fi|le", e.g|
|00000110| 2e 2e 20 20 49 66 20 74 | 68 69 73 20 61 72 63 68 |.. If t|his arch|
|00000120| 69 76 65 20 69 73 20 63 | 6f 6d 70 6c 65 74 65 2c |ive is c|omplete,|
|00000130| 20 79 6f 75 0a 23 20 77 | 69 6c 6c 20 73 65 65 20 | you.# w|ill see |
|00000140| 74 68 65 20 66 6f 6c 6c | 6f 77 69 6e 67 20 6d 65 |the foll|owing me|
|00000150| 73 73 61 67 65 20 61 74 | 20 74 68 65 20 65 6e 64 |ssage at| the end|
|00000160| 3a 0a 23 09 09 22 45 6e | 64 20 6f 66 20 73 68 65 |:.#.."En|d of she|
|00000170| 6c 6c 20 61 72 63 68 69 | 76 65 2e 22 0a 23 20 43 |ll archi|ve.".# C|
|00000180| 6f 6e 74 65 6e 74 73 3a | 20 20 4d 61 6b 65 66 69 |ontents:| Makefi|
|00000190| 6c 65 20 6f 62 6a 65 63 | 74 2e 64 65 66 73 20 6f |le objec|t.defs o|
|000001a0| 6f 73 65 72 76 65 72 2e | 64 65 66 73 20 6f 6f 73 |oserver.|defs oos|
|000001b0| 65 72 76 65 72 2e 63 20 | 6f 6f 63 6c 69 65 6e 74 |erver.c |ooclient|
|000001c0| 2e 63 0a 23 20 57 72 61 | 70 70 65 64 20 62 79 20 |.c.# Wra|pped by |
|000001d0| 72 70 64 40 45 52 4e 53 | 54 2e 4d 41 43 48 2e 43 |rpd@ERNS|T.MACH.C|
|000001e0| 53 2e 43 4d 55 2e 45 44 | 55 20 6f 6e 20 4d 6f 6e |S.CMU.ED|U on Mon|
|000001f0| 20 44 65 63 20 20 32 20 | 31 36 3a 30 37 3a 30 31 | Dec 2 |16:07:01|
|00000200| 20 31 39 39 31 0a 50 41 | 54 48 3d 2f 62 69 6e 3a | 1991.PA|TH=/bin:|
|00000210| 2f 75 73 72 2f 62 69 6e | 3a 2f 75 73 72 2f 75 63 |/usr/bin|:/usr/uc|
|00000220| 62 20 3b 20 65 78 70 6f | 72 74 20 50 41 54 48 0a |b ; expo|rt PATH.|
|00000230| 69 66 20 74 65 73 74 20 | 2d 66 20 4d 61 6b 65 66 |if test |-f Makef|
|00000240| 69 6c 65 20 2d 61 20 22 | 24 7b 31 7d 22 20 21 3d |ile -a "|${1}" !=|
|00000250| 20 22 2d 63 22 20 3b 20 | 74 68 65 6e 20 0a 20 20 | "-c" ; |then . |
|00000260| 65 63 68 6f 20 73 68 61 | 72 3a 20 57 69 6c 6c 20 |echo sha|r: Will |
|00000270| 6e 6f 74 20 6f 76 65 72 | 2d 77 72 69 74 65 20 65 |not over|-write e|
|00000280| 78 69 73 74 69 6e 67 20 | 66 69 6c 65 20 5c 22 4d |xisting |file \"M|
|00000290| 61 6b 65 66 69 6c 65 5c | 22 0a 65 6c 73 65 0a 65 |akefile\|".else.e|
|000002a0| 63 68 6f 20 73 68 61 72 | 3a 20 45 78 74 72 61 63 |cho shar|: Extrac|
|000002b0| 74 69 6e 67 20 5c 22 4d | 61 6b 65 66 69 6c 65 5c |ting \"M|akefile\|
|000002c0| 22 20 5c 28 34 34 34 20 | 63 68 61 72 61 63 74 65 |" \(444 |characte|
|000002d0| 72 73 5c 29 0a 73 65 64 | 20 22 73 2f 5e 58 2f 2f |rs\).sed| "s/^X//|
|000002e0| 22 20 3e 4d 61 6b 65 66 | 69 6c 65 20 3c 3c 27 45 |" >Makef|ile <<'E|
|000002f0| 4e 44 5f 4f 46 5f 4d 61 | 6b 65 66 69 6c 65 27 0a |ND_OF_Ma|kefile'.|
|00000300| 58 61 6c 6c 20 3a 20 6f | 6f 73 65 72 76 65 72 20 |Xall : o|oserver |
|00000310| 6f 6f 63 6c 69 65 6e 74 | 0a 58 0a 58 6f 6f 73 65 |ooclient|.X.Xoose|
|00000320| 72 76 65 72 20 3a 20 6f | 6f 73 65 72 76 65 72 2e |rver : o|oserver.|
|00000330| 6f 20 6f 6f 73 65 72 76 | 65 72 53 65 72 76 65 72 |o ooserv|erServer|
|00000340| 2e 6f 20 6f 62 6a 65 63 | 74 53 65 72 76 65 72 2e |.o objec|tServer.|
|00000350| 6f 0a 58 09 24 28 43 43 | 29 20 2d 6f 20 24 40 20 |o.X.$(CC|) -o $@ |
|00000360| 6f 6f 73 65 72 76 65 72 | 2e 6f 20 6f 6f 73 65 72 |ooserver|.o ooser|
|00000370| 76 65 72 53 65 72 76 65 | 72 2e 6f 20 6f 62 6a 65 |verServe|r.o obje|
|00000380| 63 74 53 65 72 76 65 72 | 2e 6f 20 2d 6c 74 68 72 |ctServer|.o -lthr|
|00000390| 65 61 64 73 20 2d 6c 6d | 61 63 68 0a 58 0a 58 6f |eads -lm|ach.X.Xo|
|000003a0| 6f 63 6c 69 65 6e 74 20 | 3a 20 6f 6f 63 6c 69 65 |oclient |: ooclie|
|000003b0| 6e 74 2e 6f 20 6f 6f 73 | 65 72 76 65 72 55 73 65 |nt.o oos|erverUse|
|000003c0| 72 2e 6f 20 6f 62 6a 65 | 63 74 55 73 65 72 2e 6f |r.o obje|ctUser.o|
|000003d0| 0a 58 09 24 28 43 43 29 | 20 2d 6f 20 24 40 20 6f |.X.$(CC)| -o $@ o|
|000003e0| 6f 63 6c 69 65 6e 74 2e | 6f 20 6f 6f 73 65 72 76 |oclient.|o ooserv|
|000003f0| 65 72 55 73 65 72 2e 6f | 20 6f 62 6a 65 63 74 55 |erUser.o| objectU|
|00000400| 73 65 72 2e 6f 20 2d 6c | 6d 61 63 68 0a 58 0a 58 |ser.o -l|mach.X.X|
|00000410| 6f 6f 63 6c 69 65 6e 74 | 2e 6f 20 3a 20 6f 6f 73 |ooclient|.o : oos|
|00000420| 65 72 76 65 72 2e 68 20 | 6f 62 6a 65 63 74 2e 68 |erver.h |object.h|
|00000430| 0a 58 0a 58 6f 6f 73 65 | 72 76 65 72 2e 68 20 6f |.X.Xoose|rver.h o|
|00000440| 6f 73 65 72 76 65 72 55 | 73 65 72 2e 63 20 6f 6f |oserverU|ser.c oo|
|00000450| 73 65 72 76 65 72 53 65 | 72 76 65 72 2e 63 20 3a |serverSe|rver.c :|
|00000460| 20 6f 6f 73 65 72 76 65 | 72 2e 64 65 66 73 0a 58 | ooserve|r.defs.X|
|00000470| 09 6d 69 67 20 6f 6f 73 | 65 72 76 65 72 2e 64 65 |.mig oos|erver.de|
|00000480| 66 73 0a 58 0a 58 6f 62 | 6a 65 63 74 2e 68 20 6f |fs.X.Xob|ject.h o|
|00000490| 62 6a 65 63 74 55 73 65 | 72 2e 63 20 6f 62 6a 65 |bjectUse|r.c obje|
|000004a0| 63 74 53 65 72 76 65 72 | 2e 63 20 3a 20 6f 62 6a |ctServer|.c : obj|
|000004b0| 65 63 74 2e 64 65 66 73 | 0a 58 09 6d 69 67 20 6f |ect.defs|.X.mig o|
|000004c0| 62 6a 65 63 74 2e 64 65 | 66 73 0a 45 4e 44 5f 4f |bject.de|fs.END_O|
|000004d0| 46 5f 4d 61 6b 65 66 69 | 6c 65 0a 69 66 20 74 65 |F_Makefi|le.if te|
|000004e0| 73 74 20 34 34 34 20 2d | 6e 65 20 60 77 63 20 2d |st 444 -|ne `wc -|
|000004f0| 63 20 3c 4d 61 6b 65 66 | 69 6c 65 60 3b 20 74 68 |c <Makef|ile`; th|
|00000500| 65 6e 0a 20 20 20 20 65 | 63 68 6f 20 73 68 61 72 |en. e|cho shar|
|00000510| 3a 20 5c 22 4d 61 6b 65 | 66 69 6c 65 5c 22 20 75 |: \"Make|file\" u|
|00000520| 6e 70 61 63 6b 65 64 20 | 77 69 74 68 20 77 72 6f |npacked |with wro|
|00000530| 6e 67 20 73 69 7a 65 21 | 0a 66 69 0a 23 20 65 6e |ng size!|.fi.# en|
|00000540| 64 20 6f 66 20 6f 76 65 | 72 77 72 69 74 69 6e 67 |d of ove|rwriting|
|00000550| 20 63 68 65 63 6b 0a 66 | 69 0a 69 66 20 74 65 73 | check.f|i.if tes|
|00000560| 74 20 2d 66 20 6f 62 6a | 65 63 74 2e 64 65 66 73 |t -f obj|ect.defs|
|00000570| 20 2d 61 20 22 24 7b 31 | 7d 22 20 21 3d 20 22 2d | -a "${1|}" != "-|
|00000580| 63 22 20 3b 20 74 68 65 | 6e 20 0a 20 20 65 63 68 |c" ; the|n . ech|
|00000590| 6f 20 73 68 61 72 3a 20 | 57 69 6c 6c 20 6e 6f 74 |o shar: |Will not|
|000005a0| 20 6f 76 65 72 2d 77 72 | 69 74 65 20 65 78 69 73 | over-wr|ite exis|
|000005b0| 74 69 6e 67 20 66 69 6c | 65 20 5c 22 6f 62 6a 65 |ting fil|e \"obje|
|000005c0| 63 74 2e 64 65 66 73 5c | 22 0a 65 6c 73 65 0a 65 |ct.defs\|".else.e|
|000005d0| 63 68 6f 20 73 68 61 72 | 3a 20 45 78 74 72 61 63 |cho shar|: Extrac|
|000005e0| 74 69 6e 67 20 5c 22 6f | 62 6a 65 63 74 2e 64 65 |ting \"o|bject.de|
|000005f0| 66 73 5c 22 20 5c 28 32 | 35 32 20 63 68 61 72 61 |fs\" \(2|52 chara|
|00000600| 63 74 65 72 73 5c 29 0a | 73 65 64 20 22 73 2f 5e |cters\).|sed "s/^|
|00000610| 58 2f 2f 22 20 3e 6f 62 | 6a 65 63 74 2e 64 65 66 |X//" >ob|ject.def|
|00000620| 73 20 3c 3c 27 45 4e 44 | 5f 4f 46 5f 6f 62 6a 65 |s <<'END|_OF_obje|
|00000630| 63 74 2e 64 65 66 73 27 | 0a 58 73 75 62 73 79 73 |ct.defs'|.Xsubsys|
|00000640| 74 65 6d 20 6f 62 6a 65 | 63 74 20 32 37 38 33 37 |tem obje|ct 27837|
|00000650| 30 30 3b 0a 58 0a 58 73 | 65 72 76 65 72 70 72 65 |00;.X.Xs|erverpre|
|00000660| 66 69 78 20 64 6f 5f 3b | 0a 58 0a 58 23 69 6e 63 |fix do_;|.X.X#inc|
|00000670| 6c 75 64 65 20 3c 6d 61 | 63 68 2f 73 74 64 5f 74 |lude <ma|ch/std_t|
|00000680| 79 70 65 73 2e 64 65 66 | 73 3e 0a 58 0a 58 2f 2a |ypes.def|s>.X.X/*|
|00000690| 0a 58 20 2a 09 4f 70 65 | 72 61 74 69 6f 6e 73 20 |.X *.Ope|rations |
|000006a0| 6f 6e 20 61 6e 20 6f 62 | 6a 65 63 74 20 70 6f 72 |on an ob|ject por|
|000006b0| 74 2e 0a 58 20 2a 2f 0a | 58 0a 58 72 6f 75 74 69 |t..X */.|X.Xrouti|
|000006c0| 6e 65 20 6f 62 6a 65 63 | 74 5f 63 68 61 6e 67 65 |ne objec|t_change|
|000006d0| 28 0a 58 09 09 6f 62 6a | 65 63 74 09 09 3a 20 6d |(.X..obj|ect..: m|
|000006e0| 61 63 68 5f 70 6f 72 74 | 5f 74 3b 0a 58 09 09 76 |ach_port|_t;.X..v|
|000006f0| 61 6c 75 65 09 09 3a 20 | 69 6e 74 29 3b 0a 58 0a |alue..: |int);.X.|
|00000700| 58 72 6f 75 74 69 6e 65 | 20 6f 62 6a 65 63 74 5f |Xroutine| object_|
|00000710| 71 75 65 72 79 28 0a 58 | 09 09 6f 62 6a 65 63 74 |query(.X|..object|
|00000720| 09 09 3a 20 6d 61 63 68 | 5f 70 6f 72 74 5f 74 3b |..: mach|_port_t;|
|00000730| 0a 58 09 6f 75 74 09 76 | 61 6c 75 65 09 09 3a 20 |.X.out.v|alue..: |
|00000740| 69 6e 74 29 3b 0a 45 4e | 44 5f 4f 46 5f 6f 62 6a |int);.EN|D_OF_obj|
|00000750| 65 63 74 2e 64 65 66 73 | 0a 69 66 20 74 65 73 74 |ect.defs|.if test|
|00000760| 20 32 35 32 20 2d 6e 65 | 20 60 77 63 20 2d 63 20 | 252 -ne| `wc -c |
|00000770| 3c 6f 62 6a 65 63 74 2e | 64 65 66 73 60 3b 20 74 |<object.|defs`; t|
|00000780| 68 65 6e 0a 20 20 20 20 | 65 63 68 6f 20 73 68 61 |hen. |echo sha|
|00000790| 72 3a 20 5c 22 6f 62 6a | 65 63 74 2e 64 65 66 73 |r: \"obj|ect.defs|
|000007a0| 5c 22 20 75 6e 70 61 63 | 6b 65 64 20 77 69 74 68 |\" unpac|ked with|
|000007b0| 20 77 72 6f 6e 67 20 73 | 69 7a 65 21 0a 66 69 0a | wrong s|ize!.fi.|
|000007c0| 23 20 65 6e 64 20 6f 66 | 20 6f 76 65 72 77 72 69 |# end of| overwri|
|000007d0| 74 69 6e 67 20 63 68 65 | 63 6b 0a 66 69 0a 69 66 |ting che|ck.fi.if|
|000007e0| 20 74 65 73 74 20 2d 66 | 20 6f 6f 73 65 72 76 65 | test -f| ooserve|
|000007f0| 72 2e 64 65 66 73 20 2d | 61 20 22 24 7b 31 7d 22 |r.defs -|a "${1}"|
|00000800| 20 21 3d 20 22 2d 63 22 | 20 3b 20 74 68 65 6e 20 | != "-c"| ; then |
|00000810| 0a 20 20 65 63 68 6f 20 | 73 68 61 72 3a 20 57 69 |. echo |shar: Wi|
|00000820| 6c 6c 20 6e 6f 74 20 6f | 76 65 72 2d 77 72 69 74 |ll not o|ver-writ|
|00000830| 65 20 65 78 69 73 74 69 | 6e 67 20 66 69 6c 65 20 |e existi|ng file |
|00000840| 5c 22 6f 6f 73 65 72 76 | 65 72 2e 64 65 66 73 5c |\"ooserv|er.defs\|
|00000850| 22 0a 65 6c 73 65 0a 65 | 63 68 6f 20 73 68 61 72 |".else.e|cho shar|
|00000860| 3a 20 45 78 74 72 61 63 | 74 69 6e 67 20 5c 22 6f |: Extrac|ting \"o|
|00000870| 6f 73 65 72 76 65 72 2e | 64 65 66 73 5c 22 20 5c |oserver.|defs\" \|
|00000880| 28 32 32 31 20 63 68 61 | 72 61 63 74 65 72 73 5c |(221 cha|racters\|
|00000890| 29 0a 73 65 64 20 22 73 | 2f 5e 58 2f 2f 22 20 3e |).sed "s|/^X//" >|
|000008a0| 6f 6f 73 65 72 76 65 72 | 2e 64 65 66 73 20 3c 3c |ooserver|.defs <<|
|000008b0| 27 45 4e 44 5f 4f 46 5f | 6f 6f 73 65 72 76 65 72 |'END_OF_|ooserver|
|000008c0| 2e 64 65 66 73 27 0a 58 | 73 75 62 73 79 73 74 65 |.defs'.X|subsyste|
|000008d0| 6d 20 6f 6f 73 65 72 76 | 65 72 20 32 37 38 33 36 |m ooserv|er 27836|
|000008e0| 30 30 3b 0a 58 0a 58 73 | 65 72 76 65 72 70 72 65 |00;.X.Xs|erverpre|
|000008f0| 66 69 78 20 64 6f 5f 3b | 0a 58 0a 58 23 69 6e 63 |fix do_;|.X.X#inc|
|00000900| 6c 75 64 65 20 3c 6d 61 | 63 68 2f 73 74 64 5f 74 |lude <ma|ch/std_t|
|00000910| 79 70 65 73 2e 64 65 66 | 73 3e 0a 58 0a 58 2f 2a |ypes.def|s>.X.X/*|
|00000920| 0a 58 20 2a 09 47 65 74 | 20 61 6e 20 6f 62 6a 65 |.X *.Get| an obje|
|00000930| 63 74 20 70 6f 72 74 2e | 0a 58 20 2a 2f 0a 58 0a |ct port.|.X */.X.|
|00000940| 58 72 6f 75 74 69 6e 65 | 20 6f 6f 73 65 72 76 65 |Xroutine| ooserve|
|00000950| 72 5f 6c 6f 6f 6b 75 70 | 28 0a 58 09 09 73 65 72 |r_lookup|(.X..ser|
|00000960| 76 65 72 09 09 3a 20 6d | 61 63 68 5f 70 6f 72 74 |ver..: m|ach_port|
|00000970| 5f 74 3b 0a 58 09 6f 75 | 74 09 6f 62 6a 65 63 74 |_t;.X.ou|t.object|
|00000980| 09 09 3a 20 6d 61 63 68 | 5f 70 6f 72 74 5f 74 20 |..: mach|_port_t |
|00000990| 3d 0a 58 09 09 09 09 09 | 4d 41 43 48 5f 4d 53 47 |=.X.....|MACH_MSG|
|000009a0| 5f 54 59 50 45 5f 4d 41 | 4b 45 5f 53 45 4e 44 29 |_TYPE_MA|KE_SEND)|
|000009b0| 3b 0a 45 4e 44 5f 4f 46 | 5f 6f 6f 73 65 72 76 65 |;.END_OF|_ooserve|
|000009c0| 72 2e 64 65 66 73 0a 69 | 66 20 74 65 73 74 20 32 |r.defs.i|f test 2|
|000009d0| 32 31 20 2d 6e 65 20 60 | 77 63 20 2d 63 20 3c 6f |21 -ne `|wc -c <o|
|000009e0| 6f 73 65 72 76 65 72 2e | 64 65 66 73 60 3b 20 74 |oserver.|defs`; t|
|000009f0| 68 65 6e 0a 20 20 20 20 | 65 63 68 6f 20 73 68 61 |hen. |echo sha|
|00000a00| 72 3a 20 5c 22 6f 6f 73 | 65 72 76 65 72 2e 64 65 |r: \"oos|erver.de|
|00000a10| 66 73 5c 22 20 75 6e 70 | 61 63 6b 65 64 20 77 69 |fs\" unp|acked wi|
|00000a20| 74 68 20 77 72 6f 6e 67 | 20 73 69 7a 65 21 0a 66 |th wrong| size!.f|
|00000a30| 69 0a 23 20 65 6e 64 20 | 6f 66 20 6f 76 65 72 77 |i.# end |of overw|
|00000a40| 72 69 74 69 6e 67 20 63 | 68 65 63 6b 0a 66 69 0a |riting c|heck.fi.|
|00000a50| 69 66 20 74 65 73 74 20 | 2d 66 20 6f 6f 73 65 72 |if test |-f ooser|
|00000a60| 76 65 72 2e 63 20 2d 61 | 20 22 24 7b 31 7d 22 20 |ver.c -a| "${1}" |
|00000a70| 21 3d 20 22 2d 63 22 20 | 3b 20 74 68 65 6e 20 0a |!= "-c" |; then .|
|00000a80| 20 20 65 63 68 6f 20 73 | 68 61 72 3a 20 57 69 6c | echo s|har: Wil|
|00000a90| 6c 20 6e 6f 74 20 6f 76 | 65 72 2d 77 72 69 74 65 |l not ov|er-write|
|00000aa0| 20 65 78 69 73 74 69 6e | 67 20 66 69 6c 65 20 5c | existin|g file \|
|00000ab0| 22 6f 6f 73 65 72 76 65 | 72 2e 63 5c 22 0a 65 6c |"ooserve|r.c\".el|
|00000ac0| 73 65 0a 65 63 68 6f 20 | 73 68 61 72 3a 20 45 78 |se.echo |shar: Ex|
|00000ad0| 74 72 61 63 74 69 6e 67 | 20 5c 22 6f 6f 73 65 72 |tracting| \"ooser|
|00000ae0| 76 65 72 2e 63 5c 22 20 | 5c 28 39 35 36 30 20 63 |ver.c\" |\(9560 c|
|00000af0| 68 61 72 61 63 74 65 72 | 73 5c 29 0a 73 65 64 20 |haracter|s\).sed |
|00000b00| 22 73 2f 5e 58 2f 2f 22 | 20 3e 6f 6f 73 65 72 76 |"s/^X//"| >ooserv|
|00000b10| 65 72 2e 63 20 3c 3c 27 | 45 4e 44 5f 4f 46 5f 6f |er.c <<'|END_OF_o|
|00000b20| 6f 73 65 72 76 65 72 2e | 63 27 0a 58 23 69 6e 63 |oserver.|c'.X#inc|
|00000b30| 6c 75 64 65 20 3c 73 74 | 64 69 6f 2e 68 3e 0a 58 |lude <st|dio.h>.X|
|00000b40| 23 69 6e 63 6c 75 64 65 | 20 3c 6d 61 63 68 2e 68 |#include| <mach.h|
|00000b50| 3e 0a 58 23 69 6e 63 6c | 75 64 65 20 3c 63 74 68 |>.X#incl|ude <cth|
|00000b60| 72 65 61 64 73 2e 68 3e | 0a 58 23 69 6e 63 6c 75 |reads.h>|.X#inclu|
|00000b70| 64 65 20 3c 6d 61 63 68 | 2f 6d 65 73 73 61 67 65 |de <mach|/message|
|00000b80| 2e 68 3e 0a 58 23 69 6e | 63 6c 75 64 65 20 3c 6d |.h>.X#in|clude <m|
|00000b90| 61 63 68 2f 6e 6f 74 69 | 66 79 2e 68 3e 0a 58 23 |ach/noti|fy.h>.X#|
|00000ba0| 69 6e 63 6c 75 64 65 20 | 3c 6d 61 63 68 5f 65 72 |include |<mach_er|
|00000bb0| 72 6f 72 2e 68 3e 0a 58 | 23 69 6e 63 6c 75 64 65 |ror.h>.X|#include|
|00000bc0| 20 3c 6d 69 67 5f 65 72 | 72 6f 72 73 2e 68 3e 0a | <mig_er|rors.h>.|
|00000bd0| 58 0a 58 2f 2a 20 70 6f | 72 74 20 73 65 74 20 74 |X.X/* po|rt set t|
|00000be0| 6f 20 68 6f 6c 64 20 61 | 6c 6c 20 6f 62 6a 65 63 |o hold a|ll objec|
|00000bf0| 74 20 70 6f 72 74 73 20 | 2a 2f 0a 58 73 74 61 74 |t ports |*/.Xstat|
|00000c00| 69 63 20 6d 61 63 68 5f | 70 6f 72 74 5f 74 20 6f |ic mach_|port_t o|
|00000c10| 62 6a 65 63 74 5f 70 6f | 72 74 73 3b 0a 58 0a 58 |bject_po|rts;.X.X|
|00000c20| 2f 2a 20 61 6e 20 75 70 | 70 65 72 20 62 6f 75 6e |/* an up|per boun|
|00000c30| 64 20 6f 6e 20 6d 65 73 | 73 61 67 65 73 20 74 68 |d on mes|sages th|
|00000c40| 61 74 20 77 65 20 68 61 | 6e 64 6c 65 20 2a 2f 0a |at we ha|ndle */.|
|00000c50| 58 23 64 65 66 69 6e 65 | 20 4d 41 58 5f 4d 53 47 |X#define| MAX_MSG|
|00000c60| 5f 53 49 5a 45 09 35 31 | 32 0a 58 0a 58 73 74 61 |_SIZE.51|2.X.Xsta|
|00000c70| 74 69 63 20 61 6e 79 5f | 74 20 73 65 72 76 65 72 |tic any_|t server|
|00000c80| 5f 74 68 72 65 61 64 28 | 29 3b 0a 58 73 74 61 74 |_thread(|);.Xstat|
|00000c90| 69 63 20 62 6f 6f 6c 65 | 61 6e 5f 74 20 6f 62 6a |ic boole|an_t obj|
|00000ca0| 65 63 74 5f 64 65 6d 75 | 78 28 29 3b 0a 58 0a 58 |ect_demu|x();.X.X|
|00000cb0| 65 78 74 65 72 6e 20 62 | 6f 6f 6c 65 61 6e 5f 74 |extern b|oolean_t|
|00000cc0| 20 6f 6f 73 65 72 76 65 | 72 5f 73 65 72 76 65 72 | ooserve|r_server|
|00000cd0| 28 29 3b 0a 58 65 78 74 | 65 72 6e 20 62 6f 6f 6c |();.Xext|ern bool|
|00000ce0| 65 61 6e 5f 74 20 6f 62 | 6a 65 63 74 5f 73 65 72 |ean_t ob|ject_ser|
|00000cf0| 76 65 72 28 29 3b 0a 58 | 0a 58 73 74 61 74 69 63 |ver();.X|.Xstatic|
|00000d00| 20 76 6f 69 64 0a 58 75 | 73 61 67 65 28 29 0a 58 | void.Xu|sage().X|
|00000d10| 7b 0a 58 20 20 20 20 71 | 75 69 74 28 31 2c 20 22 |{.X q|uit(1, "|
|00000d20| 75 73 61 67 65 3a 20 6f | 6f 73 65 72 76 65 72 20 |usage: o|oserver |
|00000d30| 5b 6e 75 6d 2d 74 68 72 | 65 61 64 73 5d 5c 6e 22 |[num-thr|eads]\n"|
|00000d40| 29 3b 0a 58 7d 0a 58 0a | 58 6d 61 69 6e 28 61 72 |);.X}.X.|Xmain(ar|
|00000d50| 67 63 2c 20 61 72 67 76 | 29 0a 58 20 20 20 20 69 |gc, argv|).X i|
|00000d60| 6e 74 20 61 72 67 63 3b | 0a 58 20 20 20 20 63 68 |nt argc;|.X ch|
|00000d70| 61 72 20 2a 61 72 67 76 | 5b 5d 3b 0a 58 7b 0a 58 |ar *argv|[];.X{.X|
|00000d80| 20 20 20 20 69 6e 74 20 | 69 2c 20 6e 75 6d 5f 74 | int |i, num_t|
|00000d90| 68 72 65 61 64 73 3b 0a | 58 20 20 20 20 6d 61 63 |hreads;.|X mac|
|00000da0| 68 5f 70 6f 72 74 5f 74 | 20 73 65 72 76 69 63 65 |h_port_t| service|
|00000db0| 3b 0a 58 20 20 20 20 6b | 65 72 6e 5f 72 65 74 75 |;.X k|ern_retu|
|00000dc0| 72 6e 5f 74 20 6b 72 3b | 0a 58 0a 58 20 20 20 20 |rn_t kr;|.X.X |
|00000dd0| 73 77 69 74 63 68 20 28 | 61 72 67 63 29 20 7b 0a |switch (|argc) {.|
|00000de0| 58 20 20 20 20 20 20 63 | 61 73 65 20 31 3a 0a 58 |X c|ase 1:.X|
|00000df0| 09 6e 75 6d 5f 74 68 72 | 65 61 64 73 20 3d 20 31 |.num_thr|eads = 1|
|00000e00| 3b 0a 58 09 62 72 65 61 | 6b 3b 0a 58 20 20 20 20 |;.X.brea|k;.X |
|00000e10| 20 20 63 61 73 65 20 32 | 3a 0a 58 09 6e 75 6d 5f | case 2|:.X.num_|
|00000e20| 74 68 72 65 61 64 73 20 | 3d 20 61 74 6f 69 28 61 |threads |= atoi(a|
|00000e30| 72 67 76 5b 31 5d 29 3b | 0a 58 09 69 66 20 28 6e |rgv[1]);|.X.if (n|
|00000e40| 75 6d 5f 74 68 72 65 61 | 64 73 20 3c 20 30 29 0a |um_threa|ds < 0).|
|00000e50| 58 09 20 20 20 20 75 73 | 61 67 65 28 29 3b 0a 58 |X. us|age();.X|
|00000e60| 09 62 72 65 61 6b 3b 0a | 58 20 20 20 20 20 20 64 |.break;.|X d|
|00000e70| 65 66 61 75 6c 74 3a 0a | 58 09 75 73 61 67 65 28 |efault:.|X.usage(|
|00000e80| 29 3b 0a 58 20 20 20 20 | 7d 0a 58 0c 0a 58 20 20 |);.X |}.X..X |
|00000e90| 20 20 2f 2a 0a 58 20 20 | 20 20 20 2a 09 41 6c 6c | /*.X | *.All|
|00000ea0| 6f 63 61 74 65 20 6f 75 | 72 20 73 65 72 76 69 63 |ocate ou|r servic|
|00000eb0| 65 20 70 6f 72 74 20 61 | 6e 64 20 63 68 65 63 6b |e port a|nd check|
|00000ec0| 20 69 74 20 69 6e 74 6f | 20 74 68 65 20 6e 61 6d | it into| the nam|
|00000ed0| 65 20 73 65 72 76 69 63 | 65 2e 0a 58 20 20 20 20 |e servic|e..X |
|00000ee0| 20 2a 2f 0a 58 0a 58 20 | 20 20 20 28 76 6f 69 64 | */.X.X | (void|
|00000ef0| 29 20 6d 61 63 68 5f 70 | 6f 72 74 5f 61 6c 6c 6f |) mach_p|ort_allo|
|00000f00| 63 61 74 65 28 6d 61 63 | 68 5f 74 61 73 6b 5f 73 |cate(mac|h_task_s|
|00000f10| 65 6c 66 28 29 2c 0a 58 | 09 09 09 20 20 20 20 20 |elf(),.X|... |
|00000f20| 20 4d 41 43 48 5f 50 4f | 52 54 5f 52 49 47 48 54 | MACH_PO|RT_RIGHT|
|00000f30| 5f 52 45 43 45 49 56 45 | 2c 20 26 73 65 72 76 69 |_RECEIVE|, &servi|
|00000f40| 63 65 29 3b 0a 58 0a 58 | 20 20 20 20 6b 72 20 3d |ce);.X.X| kr =|
|00000f50| 20 6e 65 74 6e 61 6d 65 | 5f 63 68 65 63 6b 5f 69 | netname|_check_i|
|00000f60| 6e 28 6e 61 6d 65 5f 73 | 65 72 76 65 72 5f 70 6f |n(name_s|erver_po|
|00000f70| 72 74 2c 20 22 4f 4f 53 | 65 72 76 65 72 22 2c 0a |rt, "OOS|erver",.|
|00000f80| 58 09 09 09 20 20 6d 61 | 63 68 5f 74 61 73 6b 5f |X... ma|ch_task_|
|00000f90| 73 65 6c 66 28 29 2c 20 | 73 65 72 76 69 63 65 29 |self(), |service)|
|00000fa0| 3b 0a 58 20 20 20 20 69 | 66 20 28 6b 72 20 21 3d |;.X i|f (kr !=|
|00000fb0| 20 4b 45 52 4e 5f 53 55 | 43 43 45 53 53 29 0a 58 | KERN_SU|CCESS).X|
|00000fc0| 09 71 75 69 74 28 31 2c | 20 22 6f 6f 73 65 72 76 |.quit(1,| "ooserv|
|00000fd0| 65 72 3a 20 6e 65 74 6e | 61 6d 65 5f 63 68 65 63 |er: netn|ame_chec|
|00000fe0| 6b 5f 69 6e 3a 20 25 73 | 5c 6e 22 2c 20 6d 61 63 |k_in: %s|\n", mac|
|00000ff0| 68 5f 65 72 72 6f 72 5f | 73 74 72 69 6e 67 28 6b |h_error_|string(k|
|00001000| 72 29 29 3b 0a 58 0a 58 | 20 20 20 20 2f 2a 0a 58 |r));.X.X| /*.X|
|00001010| 20 20 20 20 20 2a 09 41 | 6c 6c 6f 63 61 74 65 20 | *.A|llocate |
|00001020| 61 20 70 6f 72 74 20 73 | 65 74 20 61 6e 64 20 63 |a port s|et and c|
|00001030| 72 65 61 74 65 20 74 68 | 72 65 61 64 73 20 74 6f |reate th|reads to|
|00001040| 20 72 65 63 65 69 76 65 | 20 66 72 6f 6d 20 69 74 | receive| from it|
|00001050| 2e 0a 58 20 20 20 20 20 | 2a 2f 0a 58 0a 58 20 20 |..X |*/.X.X |
|00001060| 20 20 28 76 6f 69 64 29 | 20 6d 61 63 68 5f 70 6f | (void)| mach_po|
|00001070| 72 74 5f 61 6c 6c 6f 63 | 61 74 65 28 6d 61 63 68 |rt_alloc|ate(mach|
|00001080| 5f 74 61 73 6b 5f 73 65 | 6c 66 28 29 2c 0a 58 09 |_task_se|lf(),.X.|
|00001090| 09 09 20 20 20 20 20 20 | 4d 41 43 48 5f 50 4f 52 |.. |MACH_POR|
|000010a0| 54 5f 52 49 47 48 54 5f | 50 4f 52 54 5f 53 45 54 |T_RIGHT_|PORT_SET|
|000010b0| 2c 20 26 6f 62 6a 65 63 | 74 5f 70 6f 72 74 73 29 |, &objec|t_ports)|
|000010c0| 3b 0a 58 0a 58 20 20 20 | 20 66 6f 72 20 28 69 20 |;.X.X | for (i |
|000010d0| 3d 20 30 3b 20 69 20 3c | 20 6e 75 6d 5f 74 68 72 |= 0; i <| num_thr|
|000010e0| 65 61 64 73 3b 20 69 2b | 2b 29 0a 58 09 63 74 68 |eads; i+|+).X.cth|
|000010f0| 72 65 61 64 5f 64 65 74 | 61 63 68 28 63 74 68 72 |read_det|ach(cthr|
|00001100| 65 61 64 5f 66 6f 72 6b | 28 73 65 72 76 65 72 5f |ead_fork|(server_|
|00001110| 74 68 72 65 61 64 2c 20 | 28 61 6e 79 5f 74 29 20 |thread, |(any_t) |
|00001120| 6f 62 6a 65 63 74 5f 70 | 6f 72 74 73 29 29 3b 0a |object_p|orts));.|
|00001130| 58 0a 58 20 20 20 20 2f | 2a 0a 58 20 20 20 20 20 |X.X /|*.X |
|00001140| 2a 09 57 65 20 73 65 72 | 76 69 63 65 20 6d 65 73 |*.We ser|vice mes|
|00001150| 73 61 67 65 73 20 73 65 | 6e 74 20 74 6f 20 74 68 |sages se|nt to th|
|00001160| 65 20 73 65 72 76 69 63 | 65 20 70 6f 72 74 2e 0a |e servic|e port..|
|00001170| 58 20 20 20 20 20 2a 2f | 0a 58 0a 58 20 20 20 20 |X */|.X.X |
|00001180| 6b 72 20 3d 20 6d 61 63 | 68 5f 6d 73 67 5f 73 65 |kr = mac|h_msg_se|
|00001190| 72 76 65 72 28 6f 6f 73 | 65 72 76 65 72 5f 73 65 |rver(oos|erver_se|
|000011a0| 72 76 65 72 2c 20 4d 41 | 58 5f 4d 53 47 5f 53 49 |rver, MA|X_MSG_SI|
|000011b0| 5a 45 2c 20 73 65 72 76 | 69 63 65 29 3b 0a 58 20 |ZE, serv|ice);.X |
|000011c0| 20 20 20 71 75 69 74 28 | 31 2c 20 22 6f 6f 73 65 | quit(|1, "oose|
|000011d0| 72 76 65 72 3a 20 6d 61 | 63 68 5f 6d 73 67 5f 73 |rver: ma|ch_msg_s|
|000011e0| 65 72 76 65 72 3a 20 25 | 73 5c 6e 22 2c 20 6d 61 |erver: %|s\n", ma|
|000011f0| 63 68 5f 65 72 72 6f 72 | 5f 73 74 72 69 6e 67 28 |ch_error|_string(|
|00001200| 6b 72 29 29 3b 0a 58 20 | 20 20 20 2f 2a 4e 4f 54 |kr));.X | /*NOT|
|00001210| 52 45 41 43 48 45 44 2a | 2f 0a 58 7d 0a 58 0a 58 |REACHED*|/.X}.X.X|
|00001220| 73 74 61 74 69 63 20 61 | 6e 79 5f 74 0a 58 73 65 |static a|ny_t.Xse|
|00001230| 72 76 65 72 5f 74 68 72 | 65 61 64 28 61 72 67 29 |rver_thr|ead(arg)|
|00001240| 0a 58 20 20 20 20 61 6e | 79 5f 74 20 61 72 67 3b |.X an|y_t arg;|
|00001250| 0a 58 7b 0a 58 20 20 20 | 20 6d 61 63 68 5f 70 6f |.X{.X | mach_po|
|00001260| 72 74 5f 74 20 70 73 65 | 74 20 3d 20 28 6d 61 63 |rt_t pse|t = (mac|
|00001270| 68 5f 70 6f 72 74 5f 74 | 29 20 61 72 67 3b 0a 58 |h_port_t|) arg;.X|
|00001280| 20 20 20 20 6b 65 72 6e | 5f 72 65 74 75 72 6e 5f | kern|_return_|
|00001290| 74 20 6b 72 3b 0a 58 0a | 58 20 20 20 20 6b 72 20 |t kr;.X.|X kr |
|000012a0| 3d 20 6d 61 63 68 5f 6d | 73 67 5f 73 65 72 76 65 |= mach_m|sg_serve|
|000012b0| 72 28 6f 62 6a 65 63 74 | 5f 64 65 6d 75 78 2c 20 |r(object|_demux, |
|000012c0| 4d 41 58 5f 4d 53 47 5f | 53 49 5a 45 2c 20 70 73 |MAX_MSG_|SIZE, ps|
|000012d0| 65 74 29 3b 0a 58 20 20 | 20 20 71 75 69 74 28 31 |et);.X | quit(1|
|000012e0| 2c 20 22 6f 6f 73 65 72 | 76 65 72 3a 20 6d 61 63 |, "ooser|ver: mac|
|000012f0| 68 5f 6d 73 67 5f 73 65 | 72 76 65 72 3a 20 25 73 |h_msg_se|rver: %s|
|00001300| 5c 6e 22 2c 20 6d 61 63 | 68 5f 65 72 72 6f 72 5f |\n", mac|h_error_|
|00001310| 73 74 72 69 6e 67 28 6b | 72 29 29 3b 0a 58 20 20 |string(k|r));.X |
|00001320| 20 20 72 65 74 75 72 6e | 20 30 3b 0a 58 7d 0a 58 | return| 0;.X}.X|
|00001330| 0c 0a 58 74 79 70 65 64 | 65 66 20 73 74 72 75 63 |..Xtyped|ef struc|
|00001340| 74 20 6f 62 6a 65 63 74 | 20 7b 0a 58 20 20 20 20 |t object| {.X |
|00001350| 73 74 72 75 63 74 20 6d | 75 74 65 78 20 6f 5f 6c |struct m|utex o_l|
|00001360| 6f 63 6b 3b 09 09 2f 2a | 20 6c 6f 63 6b 20 66 6f |ock;../*| lock fo|
|00001370| 72 20 74 68 65 20 6f 62 | 6a 65 63 74 20 2a 2f 0a |r the ob|ject */.|
|00001380| 58 20 20 20 20 73 74 72 | 75 63 74 20 63 6f 6e 64 |X str|uct cond|
|00001390| 69 74 69 6f 6e 20 6f 5f | 77 61 69 74 3b 09 09 2f |ition o_|wait;../|
|000013a0| 2a 20 77 61 69 74 20 66 | 6f 72 20 73 65 71 75 65 |* wait f|or seque|
|000013b0| 6e 63 65 20 6e 75 6d 62 | 65 72 20 2a 2f 0a 58 20 |nce numb|er */.X |
|000013c0| 20 20 20 75 6e 73 69 67 | 6e 65 64 20 69 6e 74 20 | unsig|ned int |
|000013d0| 6f 5f 72 65 66 73 3b 09 | 09 2f 2a 20 69 6e 74 65 |o_refs;.|./* inte|
|000013e0| 72 6e 61 6c 20 72 65 66 | 73 20 2a 2f 0a 58 0a 58 |rnal ref|s */.X.X|
|000013f0| 20 20 20 20 6d 61 63 68 | 5f 70 6f 72 74 5f 74 20 | mach|_port_t |
|00001400| 6f 5f 70 6f 72 74 3b 09 | 09 09 2f 2a 20 70 6f 72 |o_port;.|../* por|
|00001410| 74 20 72 65 70 72 65 73 | 65 6e 74 69 6e 67 20 74 |t repres|enting t|
|00001420| 68 65 20 6f 62 6a 65 63 | 74 20 2a 2f 0a 58 20 20 |he objec|t */.X |
|00001430| 20 20 6d 61 63 68 5f 70 | 6f 72 74 5f 6d 73 63 6f | mach_p|ort_msco|
|00001440| 75 6e 74 5f 74 20 6f 5f | 6d 73 63 6f 75 6e 74 3b |unt_t o_|mscount;|
|00001450| 09 2f 2a 20 6d 61 6b 65 | 2d 73 65 6e 64 20 63 6f |./* make|-send co|
|00001460| 75 6e 74 20 66 6f 72 20 | 74 68 65 20 70 6f 72 74 |unt for |the port|
|00001470| 20 2a 2f 0a 58 20 20 20 | 20 6d 61 63 68 5f 70 6f | */.X | mach_po|
|00001480| 72 74 5f 73 65 71 6e 6f | 5f 74 20 6f 5f 73 65 71 |rt_seqno|_t o_seq|
|00001490| 6e 6f 3b 09 09 2f 2a 20 | 73 65 71 75 65 6e 63 65 |no;../* |sequence|
|000014a0| 20 6e 75 6d 62 65 72 20 | 66 6f 72 20 74 68 65 20 | number |for the |
|000014b0| 70 6f 72 74 20 2a 2f 0a | 58 20 20 20 20 69 6e 74 |port */.|X int|
|000014c0| 20 6f 5f 76 61 6c 75 65 | 3b 09 09 09 2f 2a 20 74 | o_value|;.../* t|
|000014d0| 68 65 20 6f 62 6a 65 63 | 74 27 73 20 76 61 6c 75 |he objec|t's valu|
|000014e0| 65 20 2a 2f 0a 58 7d 20 | 2a 6f 62 6a 65 63 74 5f |e */.X} |*object_|
|000014f0| 74 3b 0a 58 0a 58 2f 2a | 0a 58 20 2a 09 54 6f 20 |t;.X.X/*|.X *.To |
|00001500| 73 69 6d 70 6c 69 66 79 | 20 74 68 69 6e 67 73 2c |simplify| things,|
|00001510| 20 77 65 20 61 63 74 75 | 61 6c 6c 79 20 6f 6e 6c | we actu|ally onl|
|00001520| 79 20 6d 61 6e 61 67 65 | 20 6f 6e 65 20 6f 62 6a |y manage| one obj|
|00001530| 65 63 74 2e 0a 58 20 2a | 09 54 68 65 20 67 6c 6f |ect..X *|.The glo|
|00001540| 62 61 6c 20 6c 6f 63 6b | 20 70 72 6f 74 65 63 74 |bal lock| protect|
|00001550| 73 20 67 6c 6f 62 61 6c | 5f 6f 62 6a 65 63 74 2e |s global|_object.|
|00001560| 0a 58 20 2a 09 45 61 63 | 68 20 6f 62 6a 65 63 74 |.X *.Eac|h object|
|00001570| 20 68 61 73 20 69 74 73 | 20 6f 77 6e 20 6c 6f 63 | has its| own loc|
|00001580| 6b 20 66 6f 72 20 69 74 | 73 20 66 69 65 6c 64 73 |k for it|s fields|
|00001590| 2e 0a 58 20 2a 09 54 68 | 65 20 67 6c 6f 62 61 6c |..X *.Th|e global|
|000015a0| 20 6c 6f 63 6b 20 6d 75 | 73 74 20 62 65 20 74 61 | lock mu|st be ta|
|000015b0| 6b 65 6e 20 62 65 66 6f | 72 65 20 61 6e 20 6f 62 |ken befo|re an ob|
|000015c0| 6a 65 63 74 20 6c 6f 63 | 6b 2e 0a 58 20 2a 2f 0a |ject loc|k..X */.|
|000015d0| 58 0a 58 73 74 61 74 69 | 63 20 73 74 72 75 63 74 |X.Xstati|c struct|
|000015e0| 20 6d 75 74 65 78 20 67 | 6c 6f 62 61 6c 5f 6c 6f | mutex g|lobal_lo|
|000015f0| 63 6b 20 3d 20 4d 55 54 | 45 58 5f 49 4e 49 54 49 |ck = MUT|EX_INITI|
|00001600| 41 4c 49 5a 45 52 3b 0a | 58 73 74 61 74 69 63 20 |ALIZER;.|Xstatic |
|00001610| 6f 62 6a 65 63 74 5f 74 | 20 67 6c 6f 62 61 6c 5f |object_t| global_|
|00001620| 6f 62 6a 65 63 74 3b 0a | 58 0a 58 73 74 61 74 69 |object;.|X.Xstati|
|00001630| 63 20 76 6f 69 64 20 64 | 6f 5f 6e 6f 5f 73 65 6e |c void d|o_no_sen|
|00001640| 64 65 72 73 28 29 3b 0a | 58 73 74 61 74 69 63 20 |ders();.|Xstatic |
|00001650| 6d 61 63 68 5f 70 6f 72 | 74 5f 74 20 6d 61 6c 6c |mach_por|t_t mall|
|00001660| 6f 63 5f 6f 62 6a 65 63 | 74 5f 61 6e 64 5f 70 6f |oc_objec|t_and_po|
|00001670| 72 74 28 29 3b 0a 58 0c | 0a 58 73 74 61 74 69 63 |rt();.X.|.Xstatic|
|00001680| 20 6f 62 6a 65 63 74 5f | 74 0a 58 63 6f 6e 76 65 | object_|t.Xconve|
|00001690| 72 74 5f 70 6f 72 74 5f | 74 6f 5f 6f 62 6a 65 63 |rt_port_|to_objec|
|000016a0| 74 28 70 6f 72 74 29 0a | 58 20 20 20 20 6d 61 63 |t(port).|X mac|
|000016b0| 68 5f 70 6f 72 74 5f 74 | 20 70 6f 72 74 3b 0a 58 |h_port_t| port;.X|
|000016c0| 7b 0a 58 20 20 20 20 6f | 62 6a 65 63 74 5f 74 20 |{.X o|bject_t |
|000016d0| 6f 62 6a 65 63 74 3b 0a | 58 0a 58 20 20 20 20 2f |object;.|X.X /|
|000016e0| 2a 20 63 6f 6e 76 65 72 | 74 20 61 20 70 6f 72 74 |* conver|t a port|
|000016f0| 20 74 6f 20 61 6e 20 6f | 62 6a 65 63 74 2c 20 72 | to an o|bject, r|
|00001700| 65 74 75 72 6e 69 6e 67 | 20 61 20 72 65 66 65 72 |eturning| a refer|
|00001710| 65 6e 63 65 20 2a 2f 0a | 58 0a 58 20 20 20 20 6f |ence */.|X.X o|
|00001720| 62 6a 65 63 74 20 3d 20 | 28 6f 62 6a 65 63 74 5f |bject = |(object_|
|00001730| 74 29 20 70 6f 72 74 3b | 0a 58 0a 58 20 20 20 20 |t) port;|.X.X |
|00001740| 6d 75 74 65 78 5f 6c 6f | 63 6b 28 26 6f 62 6a 65 |mutex_lo|ck(&obje|
|00001750| 63 74 2d 3e 6f 5f 6c 6f | 63 6b 29 3b 0a 58 20 20 |ct->o_lo|ck);.X |
|00001760| 20 20 6f 62 6a 65 63 74 | 2d 3e 6f 5f 72 65 66 73 | object|->o_refs|
|00001770| 2b 2b 3b 0a 58 20 20 20 | 20 6d 75 74 65 78 5f 75 |++;.X | mutex_u|
|00001780| 6e 6c 6f 63 6b 28 26 6f | 62 6a 65 63 74 2d 3e 6f |nlock(&o|bject->o|
|00001790| 5f 6c 6f 63 6b 29 3b 0a | 58 0a 58 20 20 20 20 72 |_lock);.|X.X r|
|000017a0| 65 74 75 72 6e 20 6f 62 | 6a 65 63 74 3b 0a 58 7d |eturn ob|ject;.X}|
|000017b0| 0a 58 0a 58 73 74 61 74 | 69 63 20 76 6f 69 64 0a |.X.Xstat|ic void.|
|000017c0| 58 72 65 6c 65 61 73 65 | 5f 6f 62 6a 65 63 74 28 |Xrelease|_object(|
|000017d0| 6f 62 6a 65 63 74 29 0a | 58 20 20 20 20 6f 62 6a |object).|X obj|
|000017e0| 65 63 74 5f 74 20 6f 62 | 6a 65 63 74 3b 0a 58 7b |ect_t ob|ject;.X{|
|000017f0| 0a 58 20 20 20 20 75 6e | 73 69 67 6e 65 64 20 69 |.X un|signed i|
|00001800| 6e 74 20 72 65 66 73 3b | 0a 58 0a 58 20 20 20 20 |nt refs;|.X.X |
|00001810| 2f 2a 20 72 65 6c 65 61 | 73 65 20 61 20 72 65 66 |/* relea|se a ref|
|00001820| 65 72 65 6e 63 65 20 66 | 6f 72 20 74 68 65 20 6f |erence f|or the o|
|00001830| 62 6a 65 63 74 20 2a 2f | 0a 58 0a 58 20 20 20 20 |bject */|.X.X |
|00001840| 6d 75 74 65 78 5f 6c 6f | 63 6b 28 26 6f 62 6a 65 |mutex_lo|ck(&obje|
|00001850| 63 74 2d 3e 6f 5f 6c 6f | 63 6b 29 3b 0a 58 20 20 |ct->o_lo|ck);.X |
|00001860| 20 20 72 65 66 73 20 3d | 20 2d 2d 6f 62 6a 65 63 | refs =| --objec|
|00001870| 74 2d 3e 6f 5f 72 65 66 | 73 3b 0a 58 20 20 20 20 |t->o_ref|s;.X |
|00001880| 6d 75 74 65 78 5f 75 6e | 6c 6f 63 6b 28 26 6f 62 |mutex_un|lock(&ob|
|00001890| 6a 65 63 74 2d 3e 6f 5f | 6c 6f 63 6b 29 3b 0a 58 |ject->o_|lock);.X|
|000018a0| 0a 58 20 20 20 20 69 66 | 20 28 72 65 66 73 20 21 |.X if| (refs !|
|000018b0| 3d 20 30 29 0a 58 09 72 | 65 74 75 72 6e 3b 0a 58 |= 0).X.r|eturn;.X|
|000018c0| 0a 58 20 20 20 20 28 76 | 6f 69 64 29 20 6d 61 63 |.X (v|oid) mac|
|000018d0| 68 5f 70 6f 72 74 5f 6d | 6f 64 5f 72 65 66 73 28 |h_port_m|od_refs(|
|000018e0| 6d 61 63 68 5f 74 61 73 | 6b 5f 73 65 6c 66 28 29 |mach_tas|k_self()|
|000018f0| 2c 20 6f 62 6a 65 63 74 | 2d 3e 6f 5f 70 6f 72 74 |, object|->o_port|
|00001900| 2c 0a 58 09 09 09 20 20 | 20 20 20 20 4d 41 43 48 |,.X... | MACH|
|00001910| 5f 50 4f 52 54 5f 52 49 | 47 48 54 5f 52 45 43 45 |_PORT_RI|GHT_RECE|
|00001920| 49 56 45 2c 20 2d 31 29 | 3b 0a 58 20 20 20 20 66 |IVE, -1)|;.X f|
|00001930| 72 65 65 28 28 63 68 61 | 72 20 2a 29 20 6f 62 6a |ree((cha|r *) obj|
|00001940| 65 63 74 29 3b 0a 58 7d | 0a 58 0c 0a 58 73 74 61 |ect);.X}|.X..Xsta|
|00001950| 74 69 63 20 62 6f 6f 6c | 65 61 6e 5f 74 0a 58 6f |tic bool|ean_t.Xo|
|00001960| 62 6a 65 63 74 5f 64 65 | 6d 75 78 28 72 65 71 75 |bject_de|mux(requ|
|00001970| 65 73 74 2c 20 72 65 70 | 6c 79 29 0a 58 20 20 20 |est, rep|ly).X |
|00001980| 20 6d 61 63 68 5f 6d 73 | 67 5f 68 65 61 64 65 72 | mach_ms|g_header|
|00001990| 5f 74 20 2a 72 65 71 75 | 65 73 74 2c 20 2a 72 65 |_t *requ|est, *re|
|000019a0| 70 6c 79 3b 0a 58 7b 0a | 58 20 20 20 20 6f 62 6a |ply;.X{.|X obj|
|000019b0| 65 63 74 5f 74 20 6f 62 | 6a 65 63 74 3b 0a 58 0a |ect_t ob|ject;.X.|
|000019c0| 58 20 20 20 20 2f 2a 20 | 74 72 61 6e 73 6c 61 74 |X /* |translat|
|000019d0| 65 20 74 68 65 20 70 6f | 72 74 20 69 6e 74 6f 20 |e the po|rt into |
|000019e0| 61 6e 20 6f 62 6a 65 63 | 74 2c 20 61 63 71 75 69 |an objec|t, acqui|
|000019f0| 72 69 6e 67 20 61 20 72 | 65 66 20 66 6f 72 20 74 |ring a r|ef for t|
|00001a00| 68 65 20 6f 62 6a 65 63 | 74 20 2a 2f 0a 58 0a 58 |he objec|t */.X.X|
|00001a10| 20 20 20 20 6f 62 6a 65 | 63 74 20 3d 20 63 6f 6e | obje|ct = con|
|00001a20| 76 65 72 74 5f 70 6f 72 | 74 5f 74 6f 5f 6f 62 6a |vert_por|t_to_obj|
|00001a30| 65 63 74 28 72 65 71 75 | 65 73 74 2d 3e 6d 73 67 |ect(requ|est->msg|
|00001a40| 68 5f 6c 6f 63 61 6c 5f | 70 6f 72 74 29 3b 0a 58 |h_local_|port);.X|
|00001a50| 0a 58 20 20 20 20 2f 2a | 0a 58 20 20 20 20 20 2a |.X /*|.X *|
|00001a60| 09 57 65 20 77 61 69 74 | 20 66 6f 72 20 61 6e 79 |.We wait| for any|
|00001a70| 20 70 72 65 76 69 6f 75 | 73 20 72 65 71 75 65 73 | previou|s reques|
|00001a80| 74 73 20 74 6f 20 67 65 | 74 20 74 68 69 73 20 66 |ts to ge|t this f|
|00001a90| 61 72 2e 0a 58 20 20 20 | 20 20 2a 09 49 6e 20 70 |ar..X | *.In p|
|00001aa0| 61 72 74 69 63 75 6c 61 | 72 2c 20 77 65 20 63 61 |articula|r, we ca|
|00001ab0| 6e 27 74 20 70 72 6f 63 | 65 73 73 20 61 20 6e 6f |n't proc|ess a no|
|00001ac0| 2d 73 65 6e 64 65 72 73 | 20 6e 6f 74 69 66 69 63 |-senders| notific|
|00001ad0| 61 74 69 6f 6e 0a 58 20 | 20 20 20 20 2a 09 66 6f |ation.X | *.fo|
|00001ae0| 72 20 61 20 70 6f 72 74 | 20 77 68 69 6c 65 20 73 |r a port| while s|
|00001af0| 6f 6d 65 20 70 72 65 76 | 69 6f 75 73 20 72 65 71 |ome prev|ious req|
|00001b00| 75 65 73 74 73 20 6f 6e | 20 74 68 65 20 70 6f 72 |uests on| the por|
|00001b10| 74 20 68 61 76 65 6e 27 | 74 0a 58 20 20 20 20 20 |t haven'|t.X |
|00001b20| 2a 09 79 65 74 20 74 72 | 61 6e 73 6c 61 74 65 64 |*.yet tr|anslated|
|00001b30| 20 74 68 65 20 70 6f 72 | 74 20 69 6e 74 6f 20 61 | the por|t into a|
|00001b40| 6e 20 6f 62 6a 65 63 74 | 20 61 6e 64 20 74 61 6b |n object| and tak|
|00001b50| 65 6e 20 61 20 72 65 66 | 20 66 6f 72 0a 58 20 20 |en a ref| for.X |
|00001b60| 20 20 20 2a 09 74 68 65 | 20 6f 62 6a 65 63 74 2e | *.the| object.|
|00001b70| 0a 58 20 20 20 20 20 2a | 2f 0a 58 0a 58 20 20 20 |.X *|/.X.X |
|00001b80| 20 6d 75 74 65 78 5f 6c | 6f 63 6b 28 26 6f 62 6a | mutex_l|ock(&obj|
|00001b90| 65 63 74 2d 3e 6f 5f 6c | 6f 63 6b 29 3b 0a 58 20 |ect->o_l|ock);.X |
|00001ba0| 20 20 20 77 68 69 6c 65 | 20 28 6f 62 6a 65 63 74 | while| (object|
|00001bb0| 2d 3e 6f 5f 73 65 71 6e | 6f 20 3c 20 72 65 71 75 |->o_seqn|o < requ|
|00001bc0| 65 73 74 2d 3e 6d 73 67 | 68 5f 73 65 71 6e 6f 29 |est->msg|h_seqno)|
|00001bd0| 0a 58 09 63 6f 6e 64 69 | 74 69 6f 6e 5f 77 61 69 |.X.condi|tion_wai|
|00001be0| 74 28 26 6f 62 6a 65 63 | 74 2d 3e 6f 5f 77 61 69 |t(&objec|t->o_wai|
|00001bf0| 74 2c 20 26 6f 62 6a 65 | 63 74 2d 3e 6f 5f 6c 6f |t, &obje|ct->o_lo|
|00001c00| 63 6b 29 3b 0a 58 20 20 | 20 20 6f 62 6a 65 63 74 |ck);.X | object|
|00001c10| 2d 3e 6f 5f 73 65 71 6e | 6f 2b 2b 3b 0a 58 20 20 |->o_seqn|o++;.X |
|00001c20| 20 20 6d 75 74 65 78 5f | 75 6e 6c 6f 63 6b 28 26 | mutex_|unlock(&|
|00001c30| 6f 62 6a 65 63 74 2d 3e | 6f 5f 6c 6f 63 6b 29 3b |object->|o_lock);|
|00001c40| 0a 58 20 20 20 20 63 6f | 6e 64 69 74 69 6f 6e 5f |.X co|ndition_|
|00001c50| 62 72 6f 61 64 63 61 73 | 74 28 26 6f 62 6a 65 63 |broadcas|t(&objec|
|00001c60| 74 2d 3e 6f 5f 77 61 69 | 74 29 3b 0a 58 0c 0a 58 |t->o_wai|t);.X..X|
|00001c70| 20 20 20 20 2f 2a 0a 58 | 20 20 20 20 20 2a 09 49 | /*.X| *.I|
|00001c80| 66 20 74 68 69 73 20 6d | 65 73 73 61 67 65 20 77 |f this m|essage w|
|00001c90| 61 73 20 73 65 6e 74 20 | 74 6f 20 61 20 73 65 6e |as sent |to a sen|
|00001ca0| 64 2d 6f 6e 63 65 20 72 | 69 67 68 74 2c 0a 58 20 |d-once r|ight,.X |
|00001cb0| 20 20 20 20 2a 09 74 68 | 65 6e 20 69 74 20 6d 75 | *.th|en it mu|
|00001cc0| 73 74 20 62 65 20 61 20 | 6c 65 67 69 74 69 6d 61 |st be a |legitima|
|00001cd0| 74 65 20 6e 6f 2d 6d 6f | 72 65 2d 73 65 6e 64 65 |te no-mo|re-sende|
|00001ce0| 72 73 20 6e 6f 74 69 66 | 69 63 61 74 69 6f 6e 2e |rs notif|ication.|
|00001cf0| 0a 58 20 20 20 20 20 2a | 09 28 57 65 20 67 69 76 |.X *|.(We giv|
|00001d00| 65 20 73 65 6e 64 2d 6f | 6e 63 65 20 72 69 67 68 |e send-o|nce righ|
|00001d10| 74 73 20 6f 6e 6c 79 20 | 74 6f 20 74 68 65 20 6b |ts only |to the k|
|00001d20| 65 72 6e 65 6c 2e 29 0a | 58 20 20 20 20 20 2a 09 |ernel.).|X *.|
|00001d30| 4f 74 68 65 72 77 69 73 | 65 20 75 73 65 20 6f 62 |Otherwis|e use ob|
|00001d40| 6a 65 63 74 5f 73 65 72 | 76 65 72 2c 20 70 61 73 |ject_ser|ver, pas|
|00001d50| 73 69 6e 67 20 74 68 65 | 20 6f 62 6a 65 63 74 2e |sing the| object.|
|00001d60| 0a 58 20 20 20 20 20 2a | 2f 0a 58 0a 58 20 20 20 |.X *|/.X.X |
|00001d70| 20 69 66 20 28 4d 41 43 | 48 5f 4d 53 47 48 5f 42 | if (MAC|H_MSGH_B|
|00001d80| 49 54 53 5f 4c 4f 43 41 | 4c 28 72 65 71 75 65 73 |ITS_LOCA|L(reques|
|00001d90| 74 2d 3e 6d 73 67 68 5f | 62 69 74 73 29 20 3d 3d |t->msgh_|bits) ==|
|00001da0| 0a 58 09 09 09 09 4d 41 | 43 48 5f 4d 53 47 5f 54 |.X....MA|CH_MSG_T|
|00001db0| 59 50 45 5f 50 4f 52 54 | 5f 53 45 4e 44 5f 4f 4e |YPE_PORT|_SEND_ON|
|00001dc0| 43 45 29 20 7b 0a 58 09 | 6d 61 63 68 5f 6e 6f 5f |CE) {.X.|mach_no_|
|00001dd0| 73 65 6e 64 65 72 73 5f | 6e 6f 74 69 66 69 63 61 |senders_|notifica|
|00001de0| 74 69 6f 6e 5f 74 20 2a | 6e 20 3d 0a 58 09 09 09 |tion_t *|n =.X...|
|00001df0| 28 6d 61 63 68 5f 6e 6f | 5f 73 65 6e 64 65 72 73 |(mach_no|_senders|
|00001e00| 5f 6e 6f 74 69 66 69 63 | 61 74 69 6f 6e 5f 74 20 |_notific|ation_t |
|00001e10| 2a 29 20 72 65 71 75 65 | 73 74 3b 0a 58 09 6d 69 |*) reque|st;.X.mi|
|00001e20| 67 5f 72 65 70 6c 79 5f | 68 65 61 64 65 72 5f 74 |g_reply_|header_t|
|00001e30| 20 2a 72 20 3d 20 28 6d | 69 67 5f 72 65 70 6c 79 | *r = (m|ig_reply|
|00001e40| 5f 68 65 61 64 65 72 5f | 74 20 2a 29 20 72 65 70 |_header_|t *) rep|
|00001e50| 6c 79 3b 0a 58 0a 58 09 | 2f 2a 20 68 61 6e 64 6c |ly;.X.X.|/* handl|
|00001e60| 65 20 74 68 65 20 6e 6f | 74 69 66 69 63 61 74 69 |e the no|tificati|
|00001e70| 6f 6e 20 2a 2f 0a 58 0a | 58 09 64 6f 5f 6e 6f 5f |on */.X.|X.do_no_|
|00001e80| 73 65 6e 64 65 72 73 28 | 6f 62 6a 65 63 74 2c 20 |senders(|object, |
|00001e90| 6e 2d 3e 6e 6f 74 5f 63 | 6f 75 6e 74 29 3b 0a 58 |n->not_c|ount);.X|
|00001ea0| 0a 58 09 2f 2a 20 74 65 | 6c 6c 20 6d 61 63 68 5f |.X./* te|ll mach_|
|00001eb0| 6d 73 67 5f 73 65 72 76 | 65 72 20 6e 6f 74 20 74 |msg_serv|er not t|
|00001ec0| 6f 20 73 65 6e 64 20 61 | 20 72 65 70 6c 79 2e 0a |o send a| reply..|
|00001ed0| 58 09 20 20 20 77 65 20 | 6e 65 65 64 20 74 68 69 |X. we |need thi|
|00001ee0| 73 20 62 65 63 61 75 73 | 65 20 77 65 20 64 69 64 |s becaus|e we did|
|00001ef0| 6e 27 74 20 75 73 65 20 | 6e 6f 74 69 66 79 5f 73 |n't use |notify_s|
|00001f00| 65 72 76 65 72 28 29 20 | 2a 2f 0a 58 0a 58 09 72 |erver() |*/.X.X.r|
|00001f10| 2d 3e 48 65 61 64 2e 6d | 73 67 68 5f 62 69 74 73 |->Head.m|sgh_bits|
|00001f20| 20 3d 20 30 3b 0a 58 09 | 72 2d 3e 48 65 61 64 2e | = 0;.X.|r->Head.|
|00001f30| 6d 73 67 68 5f 72 65 6d | 6f 74 65 5f 70 6f 72 74 |msgh_rem|ote_port|
|00001f40| 20 3d 20 4d 41 43 48 5f | 50 4f 52 54 5f 4e 55 4c | = MACH_|PORT_NUL|
|00001f50| 4c 3b 0a 58 09 72 2d 3e | 52 65 74 43 6f 64 65 20 |L;.X.r->|RetCode |
|00001f60| 3d 20 4b 45 52 4e 5f 53 | 55 43 43 45 53 53 3b 0a |= KERN_S|UCCESS;.|
|00001f70| 58 20 20 20 20 7d 20 65 | 6c 73 65 20 7b 0a 58 09 |X } e|lse {.X.|
|00001f80| 2f 2a 20 74 68 69 73 20 | 61 73 73 69 67 6e 6d 65 |/* this |assignme|
|00001f90| 6e 74 20 69 73 20 6f 6e | 6c 79 20 72 65 61 6c 6c |nt is on|ly reall|
|00001fa0| 79 20 6e 65 63 65 73 73 | 61 72 79 0a 58 09 20 20 |y necess|ary.X. |
|00001fb0| 20 69 66 20 74 68 65 20 | 6f 62 6a 65 63 74 20 61 | if the |object a|
|00001fc0| 64 64 72 65 73 73 20 61 | 6e 64 20 74 68 65 20 70 |ddress a|nd the p|
|00001fd0| 6f 72 74 20 6e 61 6d 65 | 20 6d 69 67 68 74 20 62 |ort name| might b|
|00001fe0| 65 20 64 69 66 66 65 72 | 65 6e 74 20 2a 2f 0a 58 |e differ|ent */.X|
|00001ff0| 09 72 65 71 75 65 73 74 | 2d 3e 6d 73 67 68 5f 6c |.request|->msgh_l|
|00002000| 6f 63 61 6c 5f 70 6f 72 | 74 20 3d 20 28 6d 61 63 |ocal_por|t = (mac|
|00002010| 68 5f 70 6f 72 74 5f 74 | 29 20 6f 62 6a 65 63 74 |h_port_t|) object|
|00002020| 3b 0a 58 09 28 76 6f 69 | 64 29 20 6f 62 6a 65 63 |;.X.(voi|d) objec|
|00002030| 74 5f 73 65 72 76 65 72 | 28 72 65 71 75 65 73 74 |t_server|(request|
|00002040| 2c 20 72 65 70 6c 79 29 | 3b 0a 58 20 20 20 20 7d |, reply)|;.X }|
|00002050| 0a 58 0a 58 20 20 20 20 | 2f 2a 20 72 65 6c 65 61 |.X.X |/* relea|
|00002060| 73 65 20 6f 75 72 20 72 | 65 66 65 72 65 6e 63 65 |se our r|eference|
|00002070| 20 66 6f 72 20 74 68 65 | 20 6f 62 6a 65 63 74 20 | for the| object |
|00002080| 2a 2f 0a 58 0a 58 20 20 | 20 20 72 65 6c 65 61 73 |*/.X.X | releas|
|00002090| 65 5f 6f 62 6a 65 63 74 | 28 6f 62 6a 65 63 74 29 |e_object|(object)|
|000020a0| 3b 0a 58 20 20 20 20 72 | 65 74 75 72 6e 20 54 52 |;.X r|eturn TR|
|000020b0| 55 45 3b 0a 58 7d 0a 58 | 0c 0a 58 6b 65 72 6e 5f |UE;.X}.X|..Xkern_|
|000020c0| 72 65 74 75 72 6e 5f 74 | 0a 58 64 6f 5f 6f 62 6a |return_t|.Xdo_obj|
|000020d0| 65 63 74 5f 63 68 61 6e | 67 65 28 70 6f 72 74 2c |ect_chan|ge(port,|
|000020e0| 20 76 61 6c 75 65 29 0a | 58 20 20 20 20 6d 61 63 | value).|X mac|
|000020f0| 68 5f 70 6f 72 74 5f 74 | 20 70 6f 72 74 3b 0a 58 |h_port_t| port;.X|
|00002100| 20 20 20 20 69 6e 74 20 | 76 61 6c 75 65 3b 0a 58 | int |value;.X|
|00002110| 7b 0a 58 20 20 20 20 6f | 62 6a 65 63 74 5f 74 20 |{.X o|bject_t |
|00002120| 6f 62 6a 65 63 74 20 3d | 20 28 6f 62 6a 65 63 74 |object =| (object|
|00002130| 5f 74 29 20 70 6f 72 74 | 3b 0a 58 0a 58 20 20 20 |_t) port|;.X.X |
|00002140| 20 6d 75 74 65 78 5f 6c | 6f 63 6b 28 26 6f 62 6a | mutex_l|ock(&obj|
|00002150| 65 63 74 2d 3e 6f 5f 6c | 6f 63 6b 29 3b 0a 58 20 |ect->o_l|ock);.X |
|00002160| 20 20 20 6f 62 6a 65 63 | 74 2d 3e 6f 5f 76 61 6c | objec|t->o_val|
|00002170| 75 65 20 3d 20 76 61 6c | 75 65 3b 0a 58 20 20 20 |ue = val|ue;.X |
|00002180| 20 6d 75 74 65 78 5f 75 | 6e 6c 6f 63 6b 28 26 6f | mutex_u|nlock(&o|
|00002190| 62 6a 65 63 74 2d 3e 6f | 5f 6c 6f 63 6b 29 3b 0a |bject->o|_lock);.|
|000021a0| 58 0a 58 20 20 20 20 72 | 65 74 75 72 6e 20 4b 45 |X.X r|eturn KE|
|000021b0| 52 4e 5f 53 55 43 43 45 | 53 53 3b 0a 58 7d 0a 58 |RN_SUCCE|SS;.X}.X|
|000021c0| 0a 58 6b 65 72 6e 5f 72 | 65 74 75 72 6e 5f 74 0a |.Xkern_r|eturn_t.|
|000021d0| 58 64 6f 5f 6f 62 6a 65 | 63 74 5f 71 75 65 72 79 |Xdo_obje|ct_query|
|000021e0| 28 70 6f 72 74 2c 20 76 | 61 6c 75 65 70 29 0a 58 |(port, v|aluep).X|
|000021f0| 20 20 20 20 6d 61 63 68 | 5f 70 6f 72 74 5f 74 20 | mach|_port_t |
|00002200| 70 6f 72 74 3b 0a 58 20 | 20 20 20 69 6e 74 20 2a |port;.X | int *|
|00002210| 76 61 6c 75 65 70 3b 0a | 58 7b 0a 58 20 20 20 20 |valuep;.|X{.X |
|00002220| 6f 62 6a 65 63 74 5f 74 | 20 6f 62 6a 65 63 74 20 |object_t| object |
|00002230| 3d 20 28 6f 62 6a 65 63 | 74 5f 74 29 20 70 6f 72 |= (objec|t_t) por|
|00002240| 74 3b 0a 58 20 20 20 20 | 69 6e 74 20 76 61 6c 75 |t;.X |int valu|
|00002250| 65 3b 0a 58 0a 58 20 20 | 20 20 6d 75 74 65 78 5f |e;.X.X | mutex_|
|00002260| 6c 6f 63 6b 28 26 6f 62 | 6a 65 63 74 2d 3e 6f 5f |lock(&ob|ject->o_|
|00002270| 6c 6f 63 6b 29 3b 0a 58 | 20 20 20 20 76 61 6c 75 |lock);.X| valu|
|00002280| 65 20 3d 20 6f 62 6a 65 | 63 74 2d 3e 6f 5f 76 61 |e = obje|ct->o_va|
|00002290| 6c 75 65 3b 0a 58 20 20 | 20 20 6d 75 74 65 78 5f |lue;.X | mutex_|
|000022a0| 75 6e 6c 6f 63 6b 28 26 | 6f 62 6a 65 63 74 2d 3e |unlock(&|object->|
|000022b0| 6f 5f 6c 6f 63 6b 29 3b | 0a 58 0a 58 20 20 20 20 |o_lock);|.X.X |
|000022c0| 2a 76 61 6c 75 65 70 20 | 3d 20 76 61 6c 75 65 3b |*valuep |= value;|
|000022d0| 0a 58 20 20 20 20 72 65 | 74 75 72 6e 20 4b 45 52 |.X re|turn KER|
|000022e0| 4e 5f 53 55 43 43 45 53 | 53 3b 0a 58 7d 0a 58 0c |N_SUCCES|S;.X}.X.|
|000022f0| 0a 58 73 74 61 74 69 63 | 20 76 6f 69 64 0a 58 64 |.Xstatic| void.Xd|
|00002300| 6f 5f 6e 6f 5f 73 65 6e | 64 65 72 73 28 6f 62 6a |o_no_sen|ders(obj|
|00002310| 65 63 74 2c 20 6d 73 63 | 6f 75 6e 74 29 0a 58 20 |ect, msc|ount).X |
|00002320| 20 20 20 6f 62 6a 65 63 | 74 5f 74 20 6f 62 6a 65 | objec|t_t obje|
|00002330| 63 74 3b 0a 58 20 20 20 | 20 6d 61 63 68 5f 70 6f |ct;.X | mach_po|
|00002340| 72 74 5f 6d 73 63 6f 75 | 6e 74 5f 74 20 6d 73 63 |rt_mscou|nt_t msc|
|00002350| 6f 75 6e 74 3b 0a 58 7b | 0a 58 20 20 20 20 2f 2a |ount;.X{|.X /*|
|00002360| 20 74 68 65 20 6c 6f 63 | 6b 69 6e 67 20 68 69 65 | the loc|king hie|
|00002370| 72 61 72 63 68 79 20 72 | 65 71 75 69 72 65 73 20 |rarchy r|equires |
|00002380| 74 68 61 74 20 77 65 20 | 74 61 6b 65 0a 58 20 20 |that we |take.X |
|00002390| 20 20 20 20 20 74 68 65 | 20 67 6c 6f 62 61 6c 20 | the| global |
|000023a0| 6c 6f 63 6b 20 66 69 72 | 73 74 2c 20 74 68 65 6e |lock fir|st, then|
|000023b0| 20 74 68 65 20 6f 62 6a | 65 63 74 20 6c 6f 63 6b | the obj|ect lock|
|000023c0| 20 2a 2f 0a 58 0a 58 20 | 20 20 20 6d 75 74 65 78 | */.X.X | mutex|
|000023d0| 5f 6c 6f 63 6b 28 26 67 | 6c 6f 62 61 6c 5f 6c 6f |_lock(&g|lobal_lo|
|000023e0| 63 6b 29 3b 0a 58 20 20 | 20 20 6d 75 74 65 78 5f |ck);.X | mutex_|
|000023f0| 6c 6f 63 6b 28 26 6f 62 | 6a 65 63 74 2d 3e 6f 5f |lock(&ob|ject->o_|
|00002400| 6c 6f 63 6b 29 3b 0a 58 | 20 20 20 20 69 66 20 28 |lock);.X| if (|
|00002410| 6d 73 63 6f 75 6e 74 20 | 3d 3d 20 6f 62 6a 65 63 |mscount |== objec|
|00002420| 74 2d 3e 6f 5f 6d 73 63 | 6f 75 6e 74 29 20 7b 0a |t->o_msc|ount) {.|
|00002430| 58 09 2f 2a 0a 58 09 20 | 2a 09 49 74 20 69 73 20 |X./*.X. |*.It is |
|00002440| 73 61 66 65 20 66 6f 72 | 20 75 73 20 74 6f 20 73 |safe for| us to s|
|00002450| 68 75 74 20 64 6f 77 6e | 20 74 68 65 20 6f 62 6a |hut down| the obj|
|00002460| 65 63 74 2c 0a 58 09 20 | 2a 09 73 6f 20 77 65 20 |ect,.X. |*.so we |
|00002470| 72 65 6d 6f 76 65 20 74 | 68 65 20 67 6c 6f 62 61 |remove t|he globa|
|00002480| 6c 20 72 65 66 65 72 65 | 6e 63 65 20 74 6f 20 74 |l refere|nce to t|
|00002490| 68 65 20 6f 62 6a 65 63 | 74 2e 0a 58 09 20 2a 09 |he objec|t..X. *.|
|000024a0| 54 68 65 20 6f 62 6a 65 | 63 74 20 77 69 6c 6c 20 |The obje|ct will |
|000024b0| 67 65 74 20 64 65 61 6c | 6c 6f 63 61 74 65 64 20 |get deal|located |
|000024c0| 77 68 65 6e 20 72 65 6c | 65 61 73 65 5f 6f 62 6a |when rel|ease_obj|
|000024d0| 65 63 74 0a 58 09 20 2a | 09 72 65 6d 6f 76 65 73 |ect.X. *|.removes|
|000024e0| 20 74 68 65 20 6c 61 73 | 74 20 72 65 66 65 72 65 | the las|t refere|
|000024f0| 6e 63 65 20 66 6f 72 20 | 69 74 20 28 70 72 6f 62 |nce for |it (prob|
|00002500| 61 62 6c 79 20 6f 75 72 | 20 72 65 66 29 2e 0a 58 |ably our| ref)..X|
|00002510| 09 20 2a 2f 0a 58 0a 58 | 09 67 6c 6f 62 61 6c 5f |. */.X.X|.global_|
|00002520| 6f 62 6a 65 63 74 20 3d | 20 4e 55 4c 4c 3b 0a 58 |object =| NULL;.X|
|00002530| 09 6d 75 74 65 78 5f 75 | 6e 6c 6f 63 6b 28 26 67 |.mutex_u|nlock(&g|
|00002540| 6c 6f 62 61 6c 5f 6c 6f | 63 6b 29 3b 0a 58 09 6f |lobal_lo|ck);.X.o|
|00002550| 62 6a 65 63 74 2d 3e 6f | 5f 72 65 66 73 2d 2d 3b |bject->o|_refs--;|
|00002560| 0a 58 20 20 20 20 7d 20 | 65 6c 73 65 20 7b 0a 58 |.X } |else {.X|
|00002570| 09 6d 61 63 68 5f 70 6f | 72 74 5f 74 20 70 72 65 |.mach_po|rt_t pre|
|00002580| 76 69 6f 75 73 3b 0a 58 | 09 6b 65 72 6e 5f 72 65 |vious;.X|.kern_re|
|00002590| 74 75 72 6e 5f 74 20 6b | 72 3b 0a 58 0a 58 09 6d |turn_t k|r;.X.X.m|
|000025a0| 75 74 65 78 5f 75 6e 6c | 6f 63 6b 28 26 67 6c 6f |utex_unl|ock(&glo|
|000025b0| 62 61 6c 5f 6c 6f 63 6b | 29 3b 0a 58 0a 58 09 2f |bal_lock|);.X.X./|
|000025c0| 2a 0a 58 09 20 2a 09 54 | 68 69 73 20 6d 65 61 6e |*.X. *.T|his mean|
|000025d0| 73 20 61 20 64 6f 5f 6f | 6f 73 65 72 76 65 72 5f |s a do_o|oserver_|
|000025e0| 6c 6f 6f 6b 75 70 20 73 | 6c 69 70 70 65 64 20 69 |lookup s|lipped i|
|000025f0| 6e 20 61 6e 64 0a 58 09 | 20 2a 09 63 72 65 61 74 |n and.X.| *.creat|
|00002600| 65 64 20 61 6e 6f 74 68 | 65 72 20 73 65 6e 64 20 |ed anoth|er send |
|00002610| 72 69 67 68 74 20 66 6f | 72 20 74 68 65 20 6f 62 |right fo|r the ob|
|00002620| 6a 65 63 74 2c 0a 58 09 | 20 2a 09 73 6f 20 77 65 |ject,.X.| *.so we|
|00002630| 20 73 68 6f 75 6c 64 6e | 27 74 20 64 65 73 74 72 | shouldn|'t destr|
|00002640| 6f 79 20 69 74 20 79 65 | 74 2e 20 20 57 65 20 72 |oy it ye|t. We r|
|00002650| 65 71 75 65 73 74 0a 58 | 09 20 2a 09 61 6e 6f 74 |equest.X|. *.anot|
|00002660| 68 65 72 20 6e 6f 2d 73 | 65 6e 64 65 72 73 20 6e |her no-s|enders n|
|00002670| 6f 74 69 66 69 63 61 74 | 69 6f 6e 20 69 6e 73 74 |otificat|ion inst|
|00002680| 65 61 64 2e 0a 58 09 20 | 2a 2f 0a 58 0a 58 09 6b |ead..X. |*/.X.X.k|
|00002690| 72 20 3d 20 6d 61 63 68 | 5f 70 6f 72 74 5f 72 65 |r = mach|_port_re|
|000026a0| 71 75 65 73 74 5f 6e 6f | 74 69 66 69 63 61 74 69 |quest_no|tificati|
|000026b0| 6f 6e 28 6d 61 63 68 5f | 74 61 73 6b 5f 73 65 6c |on(mach_|task_sel|
|000026c0| 66 28 29 2c 0a 58 09 09 | 09 6f 62 6a 65 63 74 2d |f(),.X..|.object-|
|000026d0| 3e 6f 5f 70 6f 72 74 2c | 0a 58 09 09 09 4d 41 43 |>o_port,|.X...MAC|
|000026e0| 48 5f 4e 4f 54 49 46 59 | 5f 4e 4f 5f 53 45 4e 44 |H_NOTIFY|_NO_SEND|
|000026f0| 45 52 53 2c 20 6f 62 6a | 65 63 74 2d 3e 6f 5f 6d |ERS, obj|ect->o_m|
|00002700| 73 63 6f 75 6e 74 2c 0a | 58 09 09 09 6f 62 6a 65 |scount,.|X...obje|
|00002710| 63 74 2d 3e 6f 5f 70 6f | 72 74 2c 20 4d 41 43 48 |ct->o_po|rt, MACH|
|00002720| 5f 4d 53 47 5f 54 59 50 | 45 5f 4d 41 4b 45 5f 53 |_MSG_TYP|E_MAKE_S|
|00002730| 45 4e 44 5f 4f 4e 43 45 | 2c 0a 58 09 09 09 26 70 |END_ONCE|,.X...&p|
|00002740| 72 65 76 69 6f 75 73 29 | 3b 0a 58 09 69 66 20 28 |revious)|;.X.if (|
|00002750| 28 6b 72 20 21 3d 20 4b | 45 52 4e 5f 53 55 43 43 |(kr != K|ERN_SUCC|
|00002760| 45 53 53 29 20 7c 7c 20 | 28 70 72 65 76 69 6f 75 |ESS) || |(previou|
|00002770| 73 20 21 3d 20 4d 41 43 | 48 5f 50 4f 52 54 5f 4e |s != MAC|H_PORT_N|
|00002780| 55 4c 4c 29 29 0a 58 09 | 20 20 20 20 71 75 69 74 |ULL)).X.| quit|
|00002790| 28 31 2c 20 22 6f 6f 73 | 65 72 76 65 72 3a 20 6d |(1, "oos|erver: m|
|000027a0| 61 63 68 5f 70 6f 72 74 | 5f 72 65 71 75 65 73 74 |ach_port|_request|
|000027b0| 5f 6e 6f 74 69 66 69 63 | 61 74 69 6f 6e 3a 20 25 |_notific|ation: %|
|000027c0| 73 5c 6e 22 2c 0a 58 09 | 09 20 6d 61 63 68 5f 65 |s\n",.X.|. mach_e|
|000027d0| 72 72 6f 72 5f 73 74 72 | 69 6e 67 28 6b 72 29 29 |rror_str|ing(kr))|
|000027e0| 3b 0a 58 20 20 20 20 7d | 0a 58 20 20 20 20 6d 75 |;.X }|.X mu|
|000027f0| 74 65 78 5f 75 6e 6c 6f | 63 6b 28 26 6f 62 6a 65 |tex_unlo|ck(&obje|
|00002800| 63 74 2d 3e 6f 5f 6c 6f | 63 6b 29 3b 0a 58 7d 0a |ct->o_lo|ck);.X}.|
|00002810| 58 0c 0a 58 6b 65 72 6e | 5f 72 65 74 75 72 6e 5f |X..Xkern|_return_|
|00002820| 74 0a 58 64 6f 5f 6f 6f | 73 65 72 76 65 72 5f 6c |t.Xdo_oo|server_l|
|00002830| 6f 6f 6b 75 70 28 73 65 | 72 76 65 72 2c 20 70 6f |ookup(se|rver, po|
|00002840| 72 74 70 29 0a 58 20 20 | 20 20 6d 61 63 68 5f 70 |rtp).X | mach_p|
|00002850| 6f 72 74 5f 74 20 73 65 | 72 76 65 72 3b 0a 58 20 |ort_t se|rver;.X |
|00002860| 20 20 20 6d 61 63 68 5f | 70 6f 72 74 5f 74 20 2a | mach_|port_t *|
|00002870| 70 6f 72 74 70 3b 0a 58 | 7b 0a 58 20 20 20 20 6d |portp;.X|{.X m|
|00002880| 61 63 68 5f 70 6f 72 74 | 5f 74 20 70 6f 72 74 3b |ach_port|_t port;|
|00002890| 0a 58 0a 58 20 20 20 20 | 6d 75 74 65 78 5f 6c 6f |.X.X |mutex_lo|
|000028a0| 63 6b 28 26 67 6c 6f 62 | 61 6c 5f 6c 6f 63 6b 29 |ck(&glob|al_lock)|
|000028b0| 3b 0a 58 20 20 20 20 69 | 66 20 28 67 6c 6f 62 61 |;.X i|f (globa|
|000028c0| 6c 5f 6f 62 6a 65 63 74 | 20 3d 3d 20 4e 55 4c 4c |l_object| == NULL|
|000028d0| 29 20 7b 0a 58 09 6d 61 | 63 68 5f 70 6f 72 74 5f |) {.X.ma|ch_port_|
|000028e0| 74 20 70 72 65 76 69 6f | 75 73 3b 0a 58 09 6b 65 |t previo|us;.X.ke|
|000028f0| 72 6e 5f 72 65 74 75 72 | 6e 5f 74 20 6b 72 3b 0a |rn_retur|n_t kr;.|
|00002900| 58 0a 58 09 2f 2a 20 63 | 72 65 61 74 65 20 61 20 |X.X./* c|reate a |
|00002910| 6e 65 77 20 6f 62 6a 65 | 63 74 20 61 6e 64 20 70 |new obje|ct and p|
|00002920| 6f 72 74 20 66 6f 72 20 | 69 74 20 2a 2f 0a 58 0a |ort for |it */.X.|
|00002930| 58 09 70 6f 72 74 20 3d | 20 6d 61 6c 6c 6f 63 5f |X.port =| malloc_|
|00002940| 6f 62 6a 65 63 74 5f 61 | 6e 64 5f 70 6f 72 74 28 |object_a|nd_port(|
|00002950| 73 69 7a 65 6f 66 20 2a | 67 6c 6f 62 61 6c 5f 6f |sizeof *|global_o|
|00002960| 62 6a 65 63 74 29 3b 0a | 58 09 67 6c 6f 62 61 6c |bject);.|X.global|
|00002970| 5f 6f 62 6a 65 63 74 20 | 3d 20 28 6f 62 6a 65 63 |_object |= (objec|
|00002980| 74 5f 74 29 20 70 6f 72 | 74 3b 0a 58 0a 58 09 2f |t_t) por|t;.X.X./|
|00002990| 2a 20 70 75 74 20 74 68 | 65 20 6f 62 6a 65 63 74 |* put th|e object|
|000029a0| 20 70 6f 72 74 20 69 6e | 74 6f 20 74 68 65 20 70 | port in|to the p|
|000029b0| 6f 72 74 20 73 65 74 20 | 2a 2f 0a 58 0a 58 09 6b |ort set |*/.X.X.k|
|000029c0| 72 20 3d 20 6d 61 63 68 | 5f 70 6f 72 74 5f 6d 6f |r = mach|_port_mo|
|000029d0| 76 65 5f 6d 65 6d 62 65 | 72 28 6d 61 63 68 5f 74 |ve_membe|r(mach_t|
|000029e0| 61 73 6b 5f 73 65 6c 66 | 28 29 2c 20 70 6f 72 74 |ask_self|(), port|
|000029f0| 2c 20 6f 62 6a 65 63 74 | 5f 70 6f 72 74 73 29 3b |, object|_ports);|
|00002a00| 0a 58 09 69 66 20 28 6b | 72 20 21 3d 20 4b 45 52 |.X.if (k|r != KER|
|00002a10| 4e 5f 53 55 43 43 45 53 | 53 29 0a 58 09 20 20 20 |N_SUCCES|S).X. |
|00002a20| 20 71 75 69 74 28 31 2c | 20 22 6f 6f 73 65 72 76 | quit(1,| "ooserv|
|00002a30| 65 72 3a 20 6d 61 63 68 | 5f 70 6f 72 74 5f 6d 6f |er: mach|_port_mo|
|00002a40| 76 65 5f 6d 65 6d 62 65 | 72 3a 20 25 73 5c 6e 22 |ve_membe|r: %s\n"|
|00002a50| 2c 0a 58 09 09 20 6d 61 | 63 68 5f 65 72 72 6f 72 |,.X.. ma|ch_error|
|00002a60| 5f 73 74 72 69 6e 67 28 | 6b 72 29 29 3b 0a 58 0a |_string(|kr));.X.|
|00002a70| 58 09 2f 2a 20 72 65 71 | 75 65 73 74 20 74 68 65 |X./* req|uest the|
|00002a80| 20 69 6e 69 74 69 61 6c | 20 6e 6f 2d 73 65 6e 64 | initial| no-send|
|00002a90| 65 72 73 20 6e 6f 74 69 | 66 69 63 61 74 69 6f 6e |ers noti|fication|
|00002aa0| 20 2a 2f 0a 58 0a 58 09 | 6b 72 20 3d 20 6d 61 63 | */.X.X.|kr = mac|
|00002ab0| 68 5f 70 6f 72 74 5f 72 | 65 71 75 65 73 74 5f 6e |h_port_r|equest_n|
|00002ac0| 6f 74 69 66 69 63 61 74 | 69 6f 6e 28 6d 61 63 68 |otificat|ion(mach|
|00002ad0| 5f 74 61 73 6b 5f 73 65 | 6c 66 28 29 2c 20 70 6f |_task_se|lf(), po|
|00002ae0| 72 74 2c 0a 58 09 09 09 | 4d 41 43 48 5f 4e 4f 54 |rt,.X...|MACH_NOT|
|00002af0| 49 46 59 5f 4e 4f 5f 53 | 45 4e 44 45 52 53 2c 20 |IFY_NO_S|ENDERS, |
|00002b00| 31 2c 0a 58 09 09 09 70 | 6f 72 74 2c 20 4d 41 43 |1,.X...p|ort, MAC|
|00002b10| 48 5f 4d 53 47 5f 54 59 | 50 45 5f 4d 41 4b 45 5f |H_MSG_TY|PE_MAKE_|
|00002b20| 53 45 4e 44 5f 4f 4e 43 | 45 2c 0a 58 09 09 09 26 |SEND_ONC|E,.X...&|
|00002b30| 70 72 65 76 69 6f 75 73 | 29 3b 0a 58 09 69 66 20 |previous|);.X.if |
|00002b40| 28 28 6b 72 20 21 3d 20 | 4b 45 52 4e 5f 53 55 43 |((kr != |KERN_SUC|
|00002b50| 43 45 53 53 29 20 7c 7c | 20 28 70 72 65 76 69 6f |CESS) ||| (previo|
|00002b60| 75 73 20 21 3d 20 4d 41 | 43 48 5f 50 4f 52 54 5f |us != MA|CH_PORT_|
|00002b70| 4e 55 4c 4c 29 29 0a 58 | 09 20 20 20 20 71 75 69 |NULL)).X|. qui|
|00002b80| 74 28 31 2c 20 22 6f 6f | 73 65 72 76 65 72 3a 20 |t(1, "oo|server: |
|00002b90| 6d 61 63 68 5f 70 6f 72 | 74 5f 72 65 71 75 65 73 |mach_por|t_reques|
|00002ba0| 74 5f 6e 6f 74 69 66 69 | 63 61 74 69 6f 6e 3a 20 |t_notifi|cation: |
|00002bb0| 25 73 5c 6e 22 2c 0a 58 | 09 09 20 6d 61 63 68 5f |%s\n",.X|.. mach_|
|00002bc0| 65 72 72 6f 72 5f 73 74 | 72 69 6e 67 28 6b 72 29 |error_st|ring(kr)|
|00002bd0| 29 3b 0a 58 0a 58 09 6d | 75 74 65 78 5f 69 6e 69 |);.X.X.m|utex_ini|
|00002be0| 74 28 26 67 6c 6f 62 61 | 6c 5f 6f 62 6a 65 63 74 |t(&globa|l_object|
|00002bf0| 2d 3e 6f 5f 6c 6f 63 6b | 29 3b 0a 58 09 63 6f 6e |->o_lock|);.X.con|
|00002c00| 64 69 74 69 6f 6e 5f 69 | 6e 69 74 28 26 67 6c 6f |dition_i|nit(&glo|
|00002c10| 62 61 6c 5f 6f 62 6a 65 | 63 74 2d 3e 6f 5f 77 61 |bal_obje|ct->o_wa|
|00002c20| 69 74 29 3b 0a 58 09 67 | 6c 6f 62 61 6c 5f 6f 62 |it);.X.g|lobal_ob|
|00002c30| 6a 65 63 74 2d 3e 6f 5f | 72 65 66 73 20 3d 20 31 |ject->o_|refs = 1|
|00002c40| 3b 09 2f 2a 20 74 68 65 | 20 67 6c 6f 62 61 6c 20 |;./* the| global |
|00002c50| 72 65 66 20 2a 2f 0a 58 | 09 67 6c 6f 62 61 6c 5f |ref */.X|.global_|
|00002c60| 6f 62 6a 65 63 74 2d 3e | 6f 5f 70 6f 72 74 20 3d |object->|o_port =|
|00002c70| 20 70 6f 72 74 3b 0a 58 | 09 67 6c 6f 62 61 6c 5f | port;.X|.global_|
|00002c80| 6f 62 6a 65 63 74 2d 3e | 6f 5f 6d 73 63 6f 75 6e |object->|o_mscoun|
|00002c90| 74 20 3d 20 30 3b 0a 58 | 09 67 6c 6f 62 61 6c 5f |t = 0;.X|.global_|
|00002ca0| 6f 62 6a 65 63 74 2d 3e | 6f 5f 73 65 71 6e 6f 20 |object->|o_seqno |
|00002cb0| 3d 20 30 3b 0a 58 09 67 | 6c 6f 62 61 6c 5f 6f 62 |= 0;.X.g|lobal_ob|
|00002cc0| 6a 65 63 74 2d 3e 6f 5f | 76 61 6c 75 65 20 3d 20 |ject->o_|value = |
|00002cd0| 30 3b 0a 58 20 20 20 20 | 7d 0a 58 0c 0a 58 20 20 |0;.X |}.X..X |
|00002ce0| 20 20 2f 2a 20 72 65 74 | 75 72 6e 20 61 20 73 65 | /* ret|urn a se|
|00002cf0| 6e 64 20 72 69 67 68 74 | 20 66 6f 72 20 74 68 65 |nd right| for the|
|00002d00| 20 6f 62 6a 65 63 74 20 | 2a 2f 0a 58 0a 58 20 20 | object |*/.X.X |
|00002d10| 20 20 6d 75 74 65 78 5f | 6c 6f 63 6b 28 26 67 6c | mutex_|lock(&gl|
|00002d20| 6f 62 61 6c 5f 6f 62 6a | 65 63 74 2d 3e 6f 5f 6c |obal_obj|ect->o_l|
|00002d30| 6f 63 6b 29 3b 0a 58 20 | 20 20 20 6d 75 74 65 78 |ock);.X | mutex|
|00002d40| 5f 75 6e 6c 6f 63 6b 28 | 26 67 6c 6f 62 61 6c 5f |_unlock(|&global_|
|00002d50| 6c 6f 63 6b 29 3b 0a 58 | 20 20 20 20 70 6f 72 74 |lock);.X| port|
|00002d60| 20 3d 20 67 6c 6f 62 61 | 6c 5f 6f 62 6a 65 63 74 | = globa|l_object|
|00002d70| 2d 3e 6f 5f 70 6f 72 74 | 3b 0a 58 20 20 20 20 67 |->o_port|;.X g|
|00002d80| 6c 6f 62 61 6c 5f 6f 62 | 6a 65 63 74 2d 3e 6f 5f |lobal_ob|ject->o_|
|00002d90| 6d 73 63 6f 75 6e 74 2b | 2b 3b 0a 58 20 20 20 20 |mscount+|+;.X |
|00002da0| 6d 75 74 65 78 5f 75 6e | 6c 6f 63 6b 28 26 67 6c |mutex_un|lock(&gl|
|00002db0| 6f 62 61 6c 5f 6f 62 6a | 65 63 74 2d 3e 6f 5f 6c |obal_obj|ect->o_l|
|00002dc0| 6f 63 6b 29 3b 0a 58 0a | 58 20 20 20 20 2a 70 6f |ock);.X.|X *po|
|00002dd0| 72 74 70 20 3d 20 70 6f | 72 74 3b 0a 58 20 20 20 |rtp = po|rt;.X |
|00002de0| 20 72 65 74 75 72 6e 20 | 4b 45 52 4e 5f 53 55 43 | return |KERN_SUC|
|00002df0| 43 45 53 53 3b 0a 58 7d | 0a 58 0c 0a 58 65 78 74 |CESS;.X}|.X..Xext|
|00002e00| 65 72 6e 20 63 68 61 72 | 20 2a 6d 61 6c 6c 6f 63 |ern char| *malloc|
|00002e10| 28 29 3b 0a 58 0a 58 2f | 2a 20 61 6c 6c 6f 63 61 |();.X.X/|* alloca|
|00002e20| 74 65 20 61 20 73 74 72 | 75 63 74 75 72 65 20 61 |te a str|ucture a|
|00002e30| 6e 64 20 61 20 70 6f 72 | 74 20 74 6f 67 65 74 68 |nd a por|t togeth|
|00002e40| 65 72 2c 20 73 6f 20 74 | 68 61 74 0a 58 20 20 20 |er, so t|hat.X |
|00002e50| 74 68 65 20 73 74 72 75 | 63 74 75 72 65 27 73 20 |the stru|cture's |
|00002e60| 61 64 64 72 65 73 73 20 | 61 6e 64 20 74 68 65 20 |address |and the |
|00002e70| 70 6f 72 74 27 73 20 6e | 61 6d 65 20 61 72 65 20 |port's n|ame are |
|00002e80| 74 68 65 20 73 61 6d 65 | 20 2a 2f 0a 58 0a 58 73 |the same| */.X.Xs|
|00002e90| 74 61 74 69 63 20 6d 61 | 63 68 5f 70 6f 72 74 5f |tatic ma|ch_port_|
|00002ea0| 74 0a 58 6d 61 6c 6c 6f | 63 5f 6f 62 6a 65 63 74 |t.Xmallo|c_object|
|00002eb0| 5f 61 6e 64 5f 70 6f 72 | 74 28 73 69 7a 65 29 0a |_and_por|t(size).|
|00002ec0| 58 20 20 20 20 75 6e 73 | 69 67 6e 65 64 20 69 6e |X uns|igned in|
|00002ed0| 74 20 73 69 7a 65 3b 0a | 58 7b 0a 58 20 20 20 20 |t size;.|X{.X |
|00002ee0| 63 68 61 72 20 2a 62 61 | 64 6f 62 6a 65 63 74 73 |char *ba|dobjects|
|00002ef0| 20 3d 20 4e 55 4c 4c 3b | 0a 58 20 20 20 20 63 68 | = NULL;|.X ch|
|00002f00| 61 72 20 2a 6f 62 6a 65 | 63 74 3b 0a 58 20 20 20 |ar *obje|ct;.X |
|00002f10| 20 6b 65 72 6e 5f 72 65 | 74 75 72 6e 5f 74 20 6b | kern_re|turn_t k|
|00002f20| 72 3b 0a 58 0a 58 20 20 | 20 20 66 6f 72 20 28 3b |r;.X.X | for (;|
|00002f30| 3b 29 20 7b 0a 58 09 6f | 62 6a 65 63 74 20 3d 20 |;) {.X.o|bject = |
|00002f40| 6d 61 6c 6c 6f 63 28 73 | 69 7a 65 29 3b 0a 58 09 |malloc(s|ize);.X.|
|00002f50| 69 66 20 28 6f 62 6a 65 | 63 74 20 3d 3d 20 4e 55 |if (obje|ct == NU|
|00002f60| 4c 4c 29 0a 58 09 20 20 | 20 20 71 75 69 74 28 31 |LL).X. | quit(1|
|00002f70| 2c 20 22 6f 6f 73 65 72 | 76 65 72 3a 20 6d 61 6c |, "ooser|ver: mal|
|00002f80| 6c 6f 63 20 66 61 69 6c | 65 64 5c 6e 22 29 3b 0a |loc fail|ed\n");.|
|00002f90| 58 0a 58 09 2f 2a 20 74 | 72 79 20 74 6f 20 61 6c |X.X./* t|ry to al|
|00002fa0| 6c 6f 63 61 74 65 20 61 | 20 70 6f 72 74 20 77 69 |locate a| port wi|
|00002fb0| 74 68 20 74 68 69 73 20 | 6e 61 6d 65 20 2a 2f 0a |th this |name */.|
|00002fc0| 58 0a 58 09 6b 72 20 3d | 20 6d 61 63 68 5f 70 6f |X.X.kr =| mach_po|
|00002fd0| 72 74 5f 61 6c 6c 6f 63 | 61 74 65 5f 6e 61 6d 65 |rt_alloc|ate_name|
|00002fe0| 28 6d 61 63 68 5f 74 61 | 73 6b 5f 73 65 6c 66 28 |(mach_ta|sk_self(|
|00002ff0| 29 2c 0a 58 09 09 09 09 | 20 20 20 20 20 4d 41 43 |),.X....| MAC|
|00003000| 48 5f 50 4f 52 54 5f 52 | 49 47 48 54 5f 52 45 43 |H_PORT_R|IGHT_REC|
|00003010| 45 49 56 45 2c 0a 58 09 | 09 09 09 20 20 20 20 20 |EIVE,.X.|... |
|00003020| 28 6d 61 63 68 5f 70 6f | 72 74 5f 74 29 20 6f 62 |(mach_po|rt_t) ob|
|00003030| 6a 65 63 74 29 3b 0a 58 | 09 69 66 20 28 6b 72 20 |ject);.X|.if (kr |
|00003040| 3d 3d 20 4b 45 52 4e 5f | 53 55 43 43 45 53 53 29 |== KERN_|SUCCESS)|
|00003050| 0a 58 09 20 20 20 20 62 | 72 65 61 6b 3b 0a 58 09 |.X. b|reak;.X.|
|00003060| 69 66 20 28 6b 72 20 21 | 3d 20 4b 45 52 4e 5f 4e |if (kr !|= KERN_N|
|00003070| 41 4d 45 5f 45 58 49 53 | 54 53 29 0a 58 09 20 20 |AME_EXIS|TS).X. |
|00003080| 20 20 71 75 69 74 28 31 | 2c 20 22 6f 6f 73 65 72 | quit(1|, "ooser|
|00003090| 76 65 72 3a 20 6d 61 63 | 68 5f 70 6f 72 74 5f 61 |ver: mac|h_port_a|
|000030a0| 6c 6c 6f 63 61 74 65 5f | 6e 61 6d 65 3a 20 25 73 |llocate_|name: %s|
|000030b0| 5c 6e 22 2c 0a 58 09 09 | 20 6d 61 63 68 5f 65 72 |\n",.X..| mach_er|
|000030c0| 72 6f 72 5f 73 74 72 69 | 6e 67 28 6b 72 29 29 3b |ror_stri|ng(kr));|
|000030d0| 0a 58 0a 58 09 2f 2a 20 | 73 61 76 65 20 74 68 69 |.X.X./* |save thi|
|000030e0| 73 20 73 74 72 75 63 74 | 75 72 65 20 61 6e 64 20 |s struct|ure and |
|000030f0| 74 72 79 20 61 67 61 69 | 6e 20 2a 2f 0a 58 0a 58 |try agai|n */.X.X|
|00003100| 09 2a 20 28 63 68 61 72 | 20 2a 2a 29 20 6f 62 6a |.* (char| **) obj|
|00003110| 65 63 74 20 3d 20 62 61 | 64 6f 62 6a 65 63 74 73 |ect = ba|dobjects|
|00003120| 3b 0a 58 09 62 61 64 6f | 62 6a 65 63 74 73 20 3d |;.X.bado|bjects =|
|00003130| 20 6f 62 6a 65 63 74 3b | 0a 58 20 20 20 20 7d 0a | object;|.X }.|
|00003140| 58 0a 58 20 20 20 20 2f | 2a 20 66 72 65 65 20 74 |X.X /|* free t|
|00003150| 68 65 20 75 6e 75 73 65 | 64 20 6f 62 6a 65 63 74 |he unuse|d object|
|00003160| 73 20 2a 2f 0a 58 0a 58 | 20 20 20 20 77 68 69 6c |s */.X.X| whil|
|00003170| 65 20 28 62 61 64 6f 62 | 6a 65 63 74 73 20 21 3d |e (badob|jects !=|
|00003180| 20 4e 55 4c 4c 29 20 7b | 0a 58 09 63 68 61 72 20 | NULL) {|.X.char |
|00003190| 2a 6e 65 78 74 20 3d 20 | 2a 20 28 63 68 61 72 20 |*next = |* (char |
|000031a0| 2a 2a 29 20 62 61 64 6f | 62 6a 65 63 74 73 3b 0a |**) bado|bjects;.|
|000031b0| 58 09 66 72 65 65 28 62 | 61 64 6f 62 6a 65 63 74 |X.free(b|adobject|
|000031c0| 73 29 3b 0a 58 09 62 61 | 64 6f 62 6a 65 63 74 73 |s);.X.ba|dobjects|
|000031d0| 20 3d 20 6e 65 78 74 3b | 0a 58 20 20 20 20 7d 0a | = next;|.X }.|
|000031e0| 58 0a 58 20 20 20 20 72 | 65 74 75 72 6e 20 28 6d |X.X r|eturn (m|
|000031f0| 61 63 68 5f 70 6f 72 74 | 5f 74 29 20 6f 62 6a 65 |ach_port|_t) obje|
|00003200| 63 74 3b 0a 58 7d 0a 45 | 4e 44 5f 4f 46 5f 6f 6f |ct;.X}.E|ND_OF_oo|
|00003210| 73 65 72 76 65 72 2e 63 | 0a 69 66 20 74 65 73 74 |server.c|.if test|
|00003220| 20 39 35 36 30 20 2d 6e | 65 20 60 77 63 20 2d 63 | 9560 -n|e `wc -c|
|00003230| 20 3c 6f 6f 73 65 72 76 | 65 72 2e 63 60 3b 20 74 | <ooserv|er.c`; t|
|00003240| 68 65 6e 0a 20 20 20 20 | 65 63 68 6f 20 73 68 61 |hen. |echo sha|
|00003250| 72 3a 20 5c 22 6f 6f 73 | 65 72 76 65 72 2e 63 5c |r: \"oos|erver.c\|
|00003260| 22 20 75 6e 70 61 63 6b | 65 64 20 77 69 74 68 20 |" unpack|ed with |
|00003270| 77 72 6f 6e 67 20 73 69 | 7a 65 21 0a 66 69 0a 23 |wrong si|ze!.fi.#|
|00003280| 20 65 6e 64 20 6f 66 20 | 6f 76 65 72 77 72 69 74 | end of |overwrit|
|00003290| 69 6e 67 20 63 68 65 63 | 6b 0a 66 69 0a 69 66 20 |ing chec|k.fi.if |
|000032a0| 74 65 73 74 20 2d 66 20 | 6f 6f 63 6c 69 65 6e 74 |test -f |ooclient|
|000032b0| 2e 63 20 2d 61 20 22 24 | 7b 31 7d 22 20 21 3d 20 |.c -a "$|{1}" != |
|000032c0| 22 2d 63 22 20 3b 20 74 | 68 65 6e 20 0a 20 20 65 |"-c" ; t|hen . e|
|000032d0| 63 68 6f 20 73 68 61 72 | 3a 20 57 69 6c 6c 20 6e |cho shar|: Will n|
|000032e0| 6f 74 20 6f 76 65 72 2d | 77 72 69 74 65 20 65 78 |ot over-|write ex|
|000032f0| 69 73 74 69 6e 67 20 66 | 69 6c 65 20 5c 22 6f 6f |isting f|ile \"oo|
|00003300| 63 6c 69 65 6e 74 2e 63 | 5c 22 0a 65 6c 73 65 0a |client.c|\".else.|
|00003310| 65 63 68 6f 20 73 68 61 | 72 3a 20 45 78 74 72 61 |echo sha|r: Extra|
|00003320| 63 74 69 6e 67 20 5c 22 | 6f 6f 63 6c 69 65 6e 74 |cting \"|ooclient|
|00003330| 2e 63 5c 22 20 5c 28 32 | 34 39 39 20 63 68 61 72 |.c\" \(2|499 char|
|00003340| 61 63 74 65 72 73 5c 29 | 0a 73 65 64 20 22 73 2f |acters\)|.sed "s/|
|00003350| 5e 58 2f 2f 22 20 3e 6f | 6f 63 6c 69 65 6e 74 2e |^X//" >o|oclient.|
|00003360| 63 20 3c 3c 27 45 4e 44 | 5f 4f 46 5f 6f 6f 63 6c |c <<'END|_OF_oocl|
|00003370| 69 65 6e 74 2e 63 27 0a | 58 23 69 6e 63 6c 75 64 |ient.c'.|X#includ|
|00003380| 65 20 3c 73 74 64 69 6f | 2e 68 3e 0a 58 23 69 6e |e <stdio|.h>.X#in|
|00003390| 63 6c 75 64 65 20 3c 6d | 61 63 68 2e 68 3e 0a 58 |clude <m|ach.h>.X|
|000033a0| 23 69 6e 63 6c 75 64 65 | 20 3c 6d 61 63 68 2f 6d |#include| <mach/m|
|000033b0| 65 73 73 61 67 65 2e 68 | 3e 0a 58 23 69 6e 63 6c |essage.h|>.X#incl|
|000033c0| 75 64 65 20 3c 6d 61 63 | 68 5f 65 72 72 6f 72 2e |ude <mac|h_error.|
|000033d0| 68 3e 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 73 65 |h>.X#inc|lude <se|
|000033e0| 72 76 65 72 73 2f 6e 65 | 74 6e 61 6d 65 2e 68 3e |rvers/ne|tname.h>|
|000033f0| 0a 58 23 69 6e 63 6c 75 | 64 65 20 22 6f 6f 73 65 |.X#inclu|de "oose|
|00003400| 72 76 65 72 2e 68 22 0a | 58 23 69 6e 63 6c 75 64 |rver.h".|X#includ|
|00003410| 65 20 22 6f 62 6a 65 63 | 74 2e 68 22 0a 58 0a 58 |e "objec|t.h".X.X|
|00003420| 6d 61 69 6e 28 61 72 67 | 63 2c 20 61 72 67 76 29 |main(arg|c, argv)|
|00003430| 0a 58 20 20 20 20 69 6e | 74 20 61 72 67 63 3b 0a |.X in|t argc;.|
|00003440| 58 20 20 20 20 63 68 61 | 72 20 2a 61 72 67 76 3b |X cha|r *argv;|
|00003450| 0a 58 7b 0a 58 20 20 20 | 20 6d 61 63 68 5f 70 6f |.X{.X | mach_po|
|00003460| 72 74 5f 74 20 73 65 72 | 76 65 72 3b 0a 58 20 20 |rt_t ser|ver;.X |
|00003470| 20 20 6d 61 63 68 5f 70 | 6f 72 74 5f 74 20 6f 62 | mach_p|ort_t ob|
|00003480| 6a 65 63 74 3b 0a 58 20 | 20 20 20 6d 61 63 68 5f |ject;.X | mach_|
|00003490| 70 6f 72 74 5f 75 72 65 | 66 73 5f 74 20 6f 62 6a |port_ure|fs_t obj|
|000034a0| 65 63 74 5f 72 65 66 73 | 3b 0a 58 20 20 20 20 6b |ect_refs|;.X k|
|000034b0| 65 72 6e 5f 72 65 74 75 | 72 6e 5f 74 20 6b 72 3b |ern_retu|rn_t kr;|
|000034c0| 0a 58 0a 58 20 20 20 20 | 2f 2a 20 6c 6f 6f 6b 75 |.X.X |/* looku|
|000034d0| 70 20 74 68 65 20 70 6f | 72 74 20 66 6f 72 20 74 |p the po|rt for t|
|000034e0| 68 65 20 6f 6f 20 73 65 | 72 76 69 63 65 20 2a 2f |he oo se|rvice */|
|000034f0| 0a 58 0a 58 20 20 20 20 | 6b 72 20 3d 20 6e 65 74 |.X.X |kr = net|
|00003500| 6e 61 6d 65 5f 6c 6f 6f | 6b 5f 75 70 28 6e 61 6d |name_loo|k_up(nam|
|00003510| 65 5f 73 65 72 76 65 72 | 5f 70 6f 72 74 2c 20 22 |e_server|_port, "|
|00003520| 22 2c 20 22 4f 4f 53 65 | 72 76 65 72 22 2c 20 26 |", "OOSe|rver", &|
|00003530| 73 65 72 76 65 72 29 3b | 0a 58 20 20 20 20 69 66 |server);|.X if|
|00003540| 20 28 6b 72 20 21 3d 20 | 4b 45 52 4e 5f 53 55 43 | (kr != |KERN_SUC|
|00003550| 43 45 53 53 29 0a 58 09 | 71 75 69 74 28 31 2c 20 |CESS).X.|quit(1, |
|00003560| 22 6f 6f 63 6c 69 65 6e | 74 3a 20 6e 65 74 6e 61 |"ooclien|t: netna|
|00003570| 6d 65 5f 6c 6f 6f 6b 5f | 75 70 28 4f 4f 53 65 72 |me_look_|up(OOSer|
|00003580| 76 65 72 29 3a 20 25 73 | 5c 6e 22 2c 0a 58 09 20 |ver): %s|\n",.X. |
|00003590| 20 20 20 20 6d 61 63 68 | 5f 65 72 72 6f 72 5f 73 | mach|_error_s|
|000035a0| 74 72 69 6e 67 28 6b 72 | 29 29 3b 0a 58 0c 0a 58 |tring(kr|));.X..X|
|000035b0| 20 20 20 20 2f 2a 20 6c | 6f 6f 70 20 72 65 61 64 | /* l|oop read|
|000035c0| 69 6e 67 20 61 6e 64 20 | 65 78 65 63 75 74 69 6e |ing and |executin|
|000035d0| 67 20 63 6f 6d 6d 61 6e | 64 73 20 75 6e 74 69 6c |g comman|ds until|
|000035e0| 20 65 6f 66 20 2a 2f 0a | 58 0a 58 20 20 20 20 6f | eof */.|X.X o|
|000035f0| 62 6a 65 63 74 20 3d 20 | 4d 41 43 48 5f 50 4f 52 |bject = |MACH_POR|
|00003600| 54 5f 4e 55 4c 4c 3b 0a | 58 20 20 20 20 6f 62 6a |T_NULL;.|X obj|
|00003610| 65 63 74 5f 72 65 66 73 | 20 3d 20 30 3b 0a 58 0a |ect_refs| = 0;.X.|
|00003620| 58 20 20 20 20 66 6f 72 | 20 28 3b 3b 29 20 7b 0a |X for| (;;) {.|
|00003630| 58 09 63 68 61 72 20 63 | 6f 6d 6d 61 6e 64 5b 32 |X.char c|ommand[2|
|00003640| 5d 3b 0a 58 09 69 6e 74 | 20 76 61 6c 75 65 3b 0a |];.X.int| value;.|
|00003650| 58 0a 58 09 70 72 69 6e | 74 66 28 22 6f 6f 63 6c |X.X.prin|tf("oocl|
|00003660| 69 65 6e 74 3e 20 22 29 | 3b 0a 58 09 69 66 20 28 |ient> ")|;.X.if (|
|00003670| 73 63 61 6e 66 28 22 25 | 31 73 22 2c 20 63 6f 6d |scanf("%|1s", com|
|00003680| 6d 61 6e 64 29 20 3c 20 | 31 29 20 7b 0a 58 09 20 |mand) < |1) {.X. |
|00003690| 20 20 20 70 72 69 6e 74 | 66 28 22 5c 6e 22 29 3b | print|f("\n");|
|000036a0| 0a 58 09 20 20 20 20 62 | 72 65 61 6b 3b 0a 58 09 |.X. b|reak;.X.|
|000036b0| 7d 0a 58 0a 58 09 73 77 | 69 74 63 68 20 28 63 6f |}.X.X.sw|itch (co|
|000036c0| 6d 6d 61 6e 64 5b 30 5d | 29 20 7b 0a 58 09 20 20 |mmand[0]|) {.X. |
|000036d0| 63 61 73 65 20 27 3f 27 | 3a 0a 58 09 20 20 63 61 |case '?'|:.X. ca|
|000036e0| 73 65 20 27 68 27 3a 0a | 58 09 20 20 20 20 70 72 |se 'h':.|X. pr|
|000036f0| 69 6e 74 66 28 22 43 6f | 6d 6d 61 6e 64 73 3a 5c |intf("Co|mmands:\|
|00003700| 6e 22 29 3b 0a 58 09 20 | 20 20 20 70 72 69 6e 74 |n");.X. | print|
|00003710| 66 28 22 6c 20 20 20 20 | 20 20 20 20 2d 20 6c 6f |f("l | - lo|
|00003720| 6f 6b 75 70 20 6f 62 6a | 65 63 74 20 70 6f 72 74 |okup obj|ect port|
|00003730| 20 72 65 66 65 72 65 6e | 63 65 5c 6e 22 29 3b 0a | referen|ce\n");.|
|00003740| 58 09 20 20 20 20 70 72 | 69 6e 74 66 28 22 64 20 |X. pr|intf("d |
|00003750| 20 20 20 20 20 20 20 2d | 20 64 65 61 6c 6c 6f 63 | -| dealloc|
|00003760| 61 74 65 20 6f 62 6a 65 | 63 74 20 70 6f 72 74 20 |ate obje|ct port |
|00003770| 72 65 66 65 72 65 6e 63 | 65 5c 6e 22 29 3b 0a 58 |referenc|e\n");.X|
|00003780| 09 20 20 20 20 70 72 69 | 6e 74 66 28 22 63 20 3c |. pri|ntf("c <|
|00003790| 6e 75 6d 3e 20 20 2d 20 | 63 68 61 6e 67 65 20 74 |num> - |change t|
|000037a0| 68 65 20 76 61 6c 75 65 | 20 6f 66 20 74 68 65 20 |he value| of the |
|000037b0| 6f 62 6a 65 63 74 5c 6e | 22 29 3b 0a 58 09 20 20 |object\n|");.X. |
|000037c0| 20 20 70 72 69 6e 74 66 | 28 22 71 20 20 20 20 20 | printf|("q |
|000037d0| 20 20 20 2d 20 71 75 65 | 72 79 20 74 68 65 20 76 | - que|ry the v|
|000037e0| 61 6c 75 65 20 6f 66 20 | 74 68 65 20 6f 62 6a 65 |alue of |the obje|
|000037f0| 63 74 5c 6e 22 29 3b 0a | 58 09 20 20 20 20 62 72 |ct\n");.|X. br|
|00003800| 65 61 6b 3b 0a 58 0c 0a | 58 09 20 20 63 61 73 65 |eak;.X..|X. case|
|00003810| 20 27 6c 27 3a 0a 58 09 | 20 20 20 20 2f 2a 20 6c | 'l':.X.| /* l|
|00003820| 6f 6f 6b 75 70 20 61 20 | 73 65 6e 64 20 72 69 67 |ookup a |send rig|
|00003830| 68 74 20 66 6f 72 20 74 | 68 65 20 6f 62 6a 65 63 |ht for t|he objec|
|00003840| 74 20 70 6f 72 74 20 2a | 2f 0a 58 0a 58 09 20 20 |t port *|/.X.X. |
|00003850| 20 20 6b 72 20 3d 20 6f | 6f 73 65 72 76 65 72 5f | kr = o|oserver_|
|00003860| 6c 6f 6f 6b 75 70 28 73 | 65 72 76 65 72 2c 20 26 |lookup(s|erver, &|
|00003870| 6f 62 6a 65 63 74 29 3b | 0a 58 09 20 20 20 20 69 |object);|.X. i|
|00003880| 66 20 28 6b 72 20 3d 3d | 20 4b 45 52 4e 5f 53 55 |f (kr ==| KERN_SU|
|00003890| 43 43 45 53 53 29 20 7b | 0a 58 09 09 70 72 69 6e |CCESS) {|.X..prin|
|000038a0| 74 66 28 22 52 65 63 65 | 69 76 65 64 20 61 20 73 |tf("Rece|ived a s|
|000038b0| 65 6e 64 20 72 69 67 68 | 74 20 66 6f 72 20 74 68 |end righ|t for th|
|000038c0| 65 20 6f 62 6a 65 63 74 | 20 70 6f 72 74 2e 5c 6e |e object| port.\n|
|000038d0| 22 29 3b 0a 58 09 09 6f | 62 6a 65 63 74 5f 72 65 |");.X..o|bject_re|
|000038e0| 66 73 2b 2b 3b 0a 58 09 | 20 20 20 20 7d 20 65 6c |fs++;.X.| } el|
|000038f0| 73 65 20 7b 0a 58 09 09 | 70 72 69 6e 74 66 28 22 |se {.X..|printf("|
|00003900| 6f 6f 63 6c 69 65 6e 74 | 3a 20 6f 6f 73 65 72 76 |ooclient|: ooserv|
|00003910| 65 72 5f 6c 6f 6f 6b 75 | 70 3a 20 25 73 5c 6e 22 |er_looku|p: %s\n"|
|00003920| 2c 0a 58 09 09 20 20 20 | 20 20 20 20 6d 61 63 68 |,.X.. | mach|
|00003930| 5f 65 72 72 6f 72 5f 73 | 74 72 69 6e 67 28 6b 72 |_error_s|tring(kr|
|00003940| 29 29 3b 0a 58 09 20 20 | 20 20 7d 0a 58 09 20 20 |));.X. | }.X. |
|00003950| 20 20 62 72 65 61 6b 3b | 0a 58 0a 58 09 20 20 63 | break;|.X.X. c|
|00003960| 61 73 65 20 27 64 27 3a | 0a 58 09 20 20 20 20 2f |ase 'd':|.X. /|
|00003970| 2a 20 64 65 61 6c 6c 6f | 63 61 74 65 20 61 20 73 |* deallo|cate a s|
|00003980| 65 6e 64 20 72 69 67 68 | 74 20 66 6f 72 20 74 68 |end righ|t for th|
|00003990| 65 20 6f 62 6a 65 63 74 | 20 70 6f 72 74 20 2a 2f |e object| port */|
|000039a0| 0a 58 0a 58 09 20 20 20 | 20 6b 72 20 3d 20 6d 61 |.X.X. | kr = ma|
|000039b0| 63 68 5f 70 6f 72 74 5f | 64 65 61 6c 6c 6f 63 61 |ch_port_|dealloca|
|000039c0| 74 65 28 6d 61 63 68 5f | 74 61 73 6b 5f 73 65 6c |te(mach_|task_sel|
|000039d0| 66 28 29 2c 20 6f 62 6a | 65 63 74 29 3b 0a 58 09 |f(), obj|ect);.X.|
|000039e0| 20 20 20 20 69 66 20 28 | 6b 72 20 3d 3d 20 4b 45 | if (|kr == KE|
|000039f0| 52 4e 5f 53 55 43 43 45 | 53 53 29 20 7b 0a 58 09 |RN_SUCCE|SS) {.X.|
|00003a00| 09 70 72 69 6e 74 66 28 | 22 44 65 61 6c 6c 6f 63 |.printf(|"Dealloc|
|00003a10| 61 74 65 64 20 61 20 73 | 65 6e 64 20 72 69 67 68 |ated a s|end righ|
|00003a20| 74 20 66 6f 72 20 74 68 | 65 20 6f 62 6a 65 63 74 |t for th|e object|
|00003a30| 20 70 6f 72 74 2e 5c 6e | 22 29 3b 0a 58 09 09 69 | port.\n|");.X..i|
|00003a40| 66 20 28 2d 2d 6f 62 6a | 65 63 74 5f 72 65 66 73 |f (--obj|ect_refs|
|00003a50| 20 3d 3d 20 30 29 0a 58 | 09 09 20 20 20 20 6f 62 | == 0).X|.. ob|
|00003a60| 6a 65 63 74 20 3d 20 4d | 41 43 48 5f 50 4f 52 54 |ject = M|ACH_PORT|
|00003a70| 5f 4e 55 4c 4c 3b 0a 58 | 09 20 20 20 20 7d 20 65 |_NULL;.X|. } e|
|00003a80| 6c 73 65 20 7b 0a 58 09 | 09 70 72 69 6e 74 66 28 |lse {.X.|.printf(|
|00003a90| 22 6f 6f 63 6c 69 65 6e | 74 3a 20 6d 61 63 68 5f |"ooclien|t: mach_|
|00003aa0| 70 6f 72 74 5f 64 65 61 | 6c 6c 6f 63 61 74 65 3a |port_dea|llocate:|
|00003ab0| 20 25 73 5c 6e 22 2c 0a | 58 09 09 20 20 20 20 20 | %s\n",.|X.. |
|00003ac0| 20 20 6d 61 63 68 5f 65 | 72 72 6f 72 5f 73 74 72 | mach_e|rror_str|
|00003ad0| 69 6e 67 28 6b 72 29 29 | 3b 0a 58 09 20 20 20 20 |ing(kr))|;.X. |
|00003ae0| 7d 0a 58 09 20 20 20 20 | 62 72 65 61 6b 3b 0a 58 |}.X. |break;.X|
|00003af0| 0c 0a 58 09 20 20 63 61 | 73 65 20 27 63 27 3a 0a |..X. ca|se 'c':.|
|00003b00| 58 09 20 20 20 20 69 66 | 20 28 73 63 61 6e 66 28 |X. if| (scanf(|
|00003b10| 22 25 64 22 2c 20 26 76 | 61 6c 75 65 29 20 3c 20 |"%d", &v|alue) < |
|00003b20| 31 29 20 7b 0a 58 09 09 | 70 72 69 6e 74 66 28 22 |1) {.X..|printf("|
|00003b30| 73 79 6e 74 61 78 20 65 | 72 72 6f 72 5c 6e 22 29 |syntax e|rror\n")|
|00003b40| 3b 0a 58 09 09 62 72 65 | 61 6b 3b 0a 58 09 20 20 |;.X..bre|ak;.X. |
|00003b50| 20 20 7d 0a 58 0a 58 09 | 20 20 20 20 2f 2a 20 63 | }.X.X.| /* c|
|00003b60| 68 61 6e 67 65 20 74 68 | 65 20 76 61 6c 75 65 20 |hange th|e value |
|00003b70| 6f 66 20 74 68 65 20 6f | 62 6a 65 63 74 20 2a 2f |of the o|bject */|
|00003b80| 0a 58 0a 58 09 20 20 20 | 20 6b 72 20 3d 20 6f 62 |.X.X. | kr = ob|
|00003b90| 6a 65 63 74 5f 63 68 61 | 6e 67 65 28 6f 62 6a 65 |ject_cha|nge(obje|
|00003ba0| 63 74 2c 20 76 61 6c 75 | 65 29 3b 0a 58 09 20 20 |ct, valu|e);.X. |
|00003bb0| 20 20 69 66 20 28 6b 72 | 20 3d 3d 20 4b 45 52 4e | if (kr| == KERN|
|00003bc0| 5f 53 55 43 43 45 53 53 | 29 0a 58 09 09 70 72 69 |_SUCCESS|).X..pri|
|00003bd0| 6e 74 66 28 22 43 68 61 | 6e 67 65 64 20 74 68 65 |ntf("Cha|nged the|
|00003be0| 20 6f 62 6a 65 63 74 27 | 73 20 76 61 6c 75 65 20 | object'|s value |
|00003bf0| 74 6f 20 25 64 2e 5c 6e | 22 2c 20 76 61 6c 75 65 |to %d.\n|", value|
|00003c00| 29 3b 0a 58 09 20 20 20 | 20 65 6c 73 65 0a 58 09 |);.X. | else.X.|
|00003c10| 09 70 72 69 6e 74 66 28 | 22 6f 6f 63 6c 69 65 6e |.printf(|"ooclien|
|00003c20| 74 3a 20 6f 62 6a 65 63 | 74 5f 63 68 61 6e 67 65 |t: objec|t_change|
|00003c30| 3a 20 25 73 5c 6e 22 2c | 0a 58 09 09 20 20 20 20 |: %s\n",|.X.. |
|00003c40| 20 20 20 6d 61 63 68 5f | 65 72 72 6f 72 5f 73 74 | mach_|error_st|
|00003c50| 72 69 6e 67 28 6b 72 29 | 29 3b 0a 58 09 20 20 20 |ring(kr)|);.X. |
|00003c60| 20 62 72 65 61 6b 3b 0a | 58 0a 58 09 20 20 63 61 | break;.|X.X. ca|
|00003c70| 73 65 20 27 71 27 3a 0a | 58 09 20 20 20 20 2f 2a |se 'q':.|X. /*|
|00003c80| 20 71 75 65 72 79 20 74 | 68 65 20 76 61 6c 75 65 | query t|he value|
|00003c90| 20 6f 66 20 74 68 65 20 | 6f 62 6a 65 63 74 20 2a | of the |object *|
|00003ca0| 2f 0a 58 0a 58 09 20 20 | 20 20 6b 72 20 3d 20 6f |/.X.X. | kr = o|
|00003cb0| 62 6a 65 63 74 5f 71 75 | 65 72 79 28 6f 62 6a 65 |bject_qu|ery(obje|
|00003cc0| 63 74 2c 20 26 76 61 6c | 75 65 29 3b 0a 58 09 20 |ct, &val|ue);.X. |
|00003cd0| 20 20 20 69 66 20 28 6b | 72 20 3d 3d 20 4b 45 52 | if (k|r == KER|
|00003ce0| 4e 5f 53 55 43 43 45 53 | 53 29 0a 58 09 09 70 72 |N_SUCCES|S).X..pr|
|00003cf0| 69 6e 74 66 28 22 54 68 | 65 20 6f 62 6a 65 63 74 |intf("Th|e object|
|00003d00| 27 73 20 63 75 72 72 65 | 6e 74 20 76 61 6c 75 65 |'s curre|nt value|
|00003d10| 20 69 73 20 25 64 2e 5c | 6e 22 2c 20 76 61 6c 75 | is %d.\|n", valu|
|00003d20| 65 29 3b 0a 58 09 20 20 | 20 20 65 6c 73 65 0a 58 |e);.X. | else.X|
|00003d30| 09 09 70 72 69 6e 74 66 | 28 22 6f 6f 63 6c 69 65 |..printf|("ooclie|
|00003d40| 6e 74 3a 20 6f 62 6a 65 | 63 74 5f 71 75 65 72 79 |nt: obje|ct_query|
|00003d50| 3a 20 25 73 5c 6e 22 2c | 0a 58 09 09 20 20 20 20 |: %s\n",|.X.. |
|00003d60| 20 20 20 6d 61 63 68 5f | 65 72 72 6f 72 5f 73 74 | mach_|error_st|
|00003d70| 72 69 6e 67 28 6b 72 29 | 29 3b 0a 58 09 20 20 20 |ring(kr)|);.X. |
|00003d80| 20 62 72 65 61 6b 3b 0a | 58 09 7d 0a 58 20 20 20 | break;.|X.}.X |
|00003d90| 20 7d 0a 58 0a 58 20 20 | 20 20 65 78 69 74 28 30 | }.X.X | exit(0|
|00003da0| 29 3b 0a 58 7d 0a 45 4e | 44 5f 4f 46 5f 6f 6f 63 |);.X}.EN|D_OF_ooc|
|00003db0| 6c 69 65 6e 74 2e 63 0a | 69 66 20 74 65 73 74 20 |lient.c.|if test |
|00003dc0| 32 34 39 39 20 2d 6e 65 | 20 60 77 63 20 2d 63 20 |2499 -ne| `wc -c |
|00003dd0| 3c 6f 6f 63 6c 69 65 6e | 74 2e 63 60 3b 20 74 68 |<ooclien|t.c`; th|
|00003de0| 65 6e 0a 20 20 20 20 65 | 63 68 6f 20 73 68 61 72 |en. e|cho shar|
|00003df0| 3a 20 5c 22 6f 6f 63 6c | 69 65 6e 74 2e 63 5c 22 |: \"oocl|ient.c\"|
|00003e00| 20 75 6e 70 61 63 6b 65 | 64 20 77 69 74 68 20 77 | unpacke|d with w|
|00003e10| 72 6f 6e 67 20 73 69 7a | 65 21 0a 66 69 0a 23 20 |rong siz|e!.fi.# |
|00003e20| 65 6e 64 20 6f 66 20 6f | 76 65 72 77 72 69 74 69 |end of o|verwriti|
|00003e30| 6e 67 20 63 68 65 63 6b | 0a 66 69 0a 65 63 68 6f |ng check|.fi.echo|
|00003e40| 20 73 68 61 72 3a 20 45 | 6e 64 20 6f 66 20 73 68 | shar: E|nd of sh|
|00003e50| 65 6c 6c 20 61 72 63 68 | 69 76 65 2e 0a 65 78 69 |ell arch|ive..exi|
|00003e60| 74 20 30 0a | |t 0. | |
+--------+-------------------------+-------------------------+--------+--------+