summaryrefslogtreecommitdiff
path: root/netfs-sample
diff options
context:
space:
mode:
authorroot <root@(null).(none)>2009-05-03 17:20:00 +0200
committerroot <root@(null).(none)>2009-05-03 17:20:00 +0200
commite0faf22f31c48fb27b43c1825897d26e58feafc4 (patch)
tree65a09372b31e08a3a865bd0a88cd2718bafcd643 /netfs-sample
This is my initial working version.
There is a bug in boot in this version: subhurd sometimes cannot boot.
Diffstat (limited to 'netfs-sample')
-rw-r--r--netfs-sample/.DS_Storebin0 -> 6148 bytes
-rw-r--r--netfs-sample/._.DS_Storebin0 -> 82 bytes
-rw-r--r--netfs-sample/._READMEbin0 -> 197 bytes
-rwxr-xr-xnetfs-sample/._buildbin0 -> 197 bytes
-rw-r--r--netfs-sample/._debug.hbin0 -> 197 bytes
-rw-r--r--netfs-sample/._filterfs.cbin0 -> 368 bytes
-rw-r--r--netfs-sample/._filterfs.hbin0 -> 197 bytes
-rw-r--r--netfs-sample/._lib.cbin0 -> 197 bytes
-rw-r--r--netfs-sample/._lib.hbin0 -> 197 bytes
-rw-r--r--netfs-sample/._lnode.cbin0 -> 197 bytes
-rw-r--r--netfs-sample/._lnode.hbin0 -> 197 bytes
-rw-r--r--netfs-sample/._ncache.cbin0 -> 197 bytes
-rw-r--r--netfs-sample/._ncache.hbin0 -> 197 bytes
-rw-r--r--netfs-sample/._node.cbin0 -> 197 bytes
-rw-r--r--netfs-sample/._node.c~bin0 -> 197 bytes
-rw-r--r--netfs-sample/._node.hbin0 -> 197 bytes
-rw-r--r--netfs-sample/._options.cbin0 -> 197 bytes
-rw-r--r--netfs-sample/._options.hbin0 -> 197 bytes
-rw-r--r--netfs-sample/README13
-rwxr-xr-xnetfs-sample/build1
-rw-r--r--netfs-sample/cscope.out33870
-rw-r--r--netfs-sample/debug.h60
-rw-r--r--netfs-sample/errors0
-rw-r--r--netfs-sample/filtered0
-rwxr-xr-xnetfs-sample/filterfsbin0 -> 92268 bytes
-rw-r--r--netfs-sample/filterfs.c1236
-rw-r--r--netfs-sample/filterfs.c~1236
-rw-r--r--netfs-sample/filterfs.h453
-rw-r--r--netfs-sample/lib.c193
-rw-r--r--netfs-sample/lib.h82
-rw-r--r--netfs-sample/lnode.c305
-rw-r--r--netfs-sample/lnode.h143
-rw-r--r--netfs-sample/ncache.c221
-rw-r--r--netfs-sample/ncache.h100
-rw-r--r--netfs-sample/node.c803
-rw-r--r--netfs-sample/node.c~803
-rw-r--r--netfs-sample/node.h168
-rw-r--r--netfs-sample/options.c255
-rw-r--r--netfs-sample/options.h64
39 files changed, 40006 insertions, 0 deletions
diff --git a/netfs-sample/.DS_Store b/netfs-sample/.DS_Store
new file mode 100644
index 00000000..1b3548e4
--- /dev/null
+++ b/netfs-sample/.DS_Store
Binary files differ
diff --git a/netfs-sample/._.DS_Store b/netfs-sample/._.DS_Store
new file mode 100644
index 00000000..460d887a
--- /dev/null
+++ b/netfs-sample/._.DS_Store
Binary files differ
diff --git a/netfs-sample/._README b/netfs-sample/._README
new file mode 100644
index 00000000..7890b844
--- /dev/null
+++ b/netfs-sample/._README
Binary files differ
diff --git a/netfs-sample/._build b/netfs-sample/._build
new file mode 100755
index 00000000..fdbbe05f
--- /dev/null
+++ b/netfs-sample/._build
Binary files differ
diff --git a/netfs-sample/._debug.h b/netfs-sample/._debug.h
new file mode 100644
index 00000000..64df4703
--- /dev/null
+++ b/netfs-sample/._debug.h
Binary files differ
diff --git a/netfs-sample/._filterfs.c b/netfs-sample/._filterfs.c
new file mode 100644
index 00000000..fb38f699
--- /dev/null
+++ b/netfs-sample/._filterfs.c
Binary files differ
diff --git a/netfs-sample/._filterfs.h b/netfs-sample/._filterfs.h
new file mode 100644
index 00000000..5def824d
--- /dev/null
+++ b/netfs-sample/._filterfs.h
Binary files differ
diff --git a/netfs-sample/._lib.c b/netfs-sample/._lib.c
new file mode 100644
index 00000000..753b651b
--- /dev/null
+++ b/netfs-sample/._lib.c
Binary files differ
diff --git a/netfs-sample/._lib.h b/netfs-sample/._lib.h
new file mode 100644
index 00000000..700c364d
--- /dev/null
+++ b/netfs-sample/._lib.h
Binary files differ
diff --git a/netfs-sample/._lnode.c b/netfs-sample/._lnode.c
new file mode 100644
index 00000000..3ff1f825
--- /dev/null
+++ b/netfs-sample/._lnode.c
Binary files differ
diff --git a/netfs-sample/._lnode.h b/netfs-sample/._lnode.h
new file mode 100644
index 00000000..c048807a
--- /dev/null
+++ b/netfs-sample/._lnode.h
Binary files differ
diff --git a/netfs-sample/._ncache.c b/netfs-sample/._ncache.c
new file mode 100644
index 00000000..59c6084d
--- /dev/null
+++ b/netfs-sample/._ncache.c
Binary files differ
diff --git a/netfs-sample/._ncache.h b/netfs-sample/._ncache.h
new file mode 100644
index 00000000..3d1e37b9
--- /dev/null
+++ b/netfs-sample/._ncache.h
Binary files differ
diff --git a/netfs-sample/._node.c b/netfs-sample/._node.c
new file mode 100644
index 00000000..812144e0
--- /dev/null
+++ b/netfs-sample/._node.c
Binary files differ
diff --git a/netfs-sample/._node.c~ b/netfs-sample/._node.c~
new file mode 100644
index 00000000..f63df45b
--- /dev/null
+++ b/netfs-sample/._node.c~
Binary files differ
diff --git a/netfs-sample/._node.h b/netfs-sample/._node.h
new file mode 100644
index 00000000..041c8330
--- /dev/null
+++ b/netfs-sample/._node.h
Binary files differ
diff --git a/netfs-sample/._options.c b/netfs-sample/._options.c
new file mode 100644
index 00000000..b7e5716f
--- /dev/null
+++ b/netfs-sample/._options.c
Binary files differ
diff --git a/netfs-sample/._options.h b/netfs-sample/._options.h
new file mode 100644
index 00000000..b46d37fe
--- /dev/null
+++ b/netfs-sample/._options.h
Binary files differ
diff --git a/netfs-sample/README b/netfs-sample/README
new file mode 100644
index 00000000..112cce59
--- /dev/null
+++ b/netfs-sample/README
@@ -0,0 +1,13 @@
+FILTERFS TRANSLATOR
+
+WHAT'S THIS?
+filterfs is a GNU/Hurd translator that filters the contents of the directory it
+is set upon according to the result of execution of a given command.
+
+WHAT'S IT FOR?
+This translator is intended as a preparatory exercise for the namespace-based
+translator selection project (see http://www.bddebian.com/~wiki/community/gsoc/),
+so it does not really have a stand-alone importance :-)
+
+DEVELOPER
+Sergiu Ivanov <unlimitedscolobb@gmail.com>
diff --git a/netfs-sample/build b/netfs-sample/build
new file mode 100755
index 00000000..2555e2ca
--- /dev/null
+++ b/netfs-sample/build
@@ -0,0 +1 @@
+gcc -Wall -g -lnetfs -lfshelp -liohelp -lthreads -lports -lihash -lshouldbeinlibc -o filterfs filterfs.c node.c lnode.c ncache.c options.c lib.c 2>&1 | tee errors
diff --git a/netfs-sample/cscope.out b/netfs-sample/cscope.out
new file mode 100644
index 00000000..0dc6229b
--- /dev/null
+++ b/netfs-sample/cscope.out
@@ -0,0 +1,33870 @@
+cscope 15 $HOME/Desktop/netfs-sample 0000194972
+ @debug.h
+
+26 #ide
+__DEBUG_H__
+
+
+27 
+ #__DEBUG_H__
+
+
+ )
+
+30 
+ ~<dio.h
+>
+
+36 
+ #DEBUG_OUTPUT
+ "/v/tmp/frfs.dbg"
+
+ )
+
+38 #ifde
+DEBUG
+
+
+40 
+ #INIT_LOG
+(
+frfs_dbg
+ =
+ `fݒ
+(
+DEBUG_OUTPUT
+, "wt")
+
+ )
+
+42 
+ #CLOSE_LOG
+(
+ `fo
+(
+frfs_dbg
+)
+
+ )
+
+44 
+ #LOG_MSG
+(
+fmt
+,
+gs
+...{
+ `rtf
+(
+frfs_dbg
+, fmt"\n", ##args);\
+
+45
+ `fush
+(
+frfs_dbg
+);}
+
+ )
+
+48 
+ #INIT_LOG
+()
+
+ )
+
+49 
+ #CLOSE_LOG
+()
+
+ )
+
+50 
+ #LOG_MSG
+(
+fmt
+,
+gs
+...)
+
+ )
+
+57
+FILE
+ *
+frfs_dbg
+;
+
+ @filterfs.c
+
+28 
+ #_GNU_SOURCE
+ 1
+
+ )
+
+30 
+ ~"frfs.h
+"
+
+32 
+ ~<r.h
+>
+
+33 
+ ~<gp.h
+>
+
+34 
+ ~<gz.h
+>
+
+35 
+ ~<hurd/tfs.h
+>
+
+36 
+ ~<f.h
+>
+
+38 
+ ~"debug.h
+"
+
+39 
+ ~"tis.h
+"
+
+40 
+ ~"nche.h
+"
+
+46 
+ #OPENONLY_STATE_MODES
+ (
+O_CREAT
+ |
+O_EXCL
+ |
+O_NOLINK
+ |
+O_NOTRANS
+ \
+
+47 |
+O_NONBLOCK
+)
+
+ )
+
+53 *
+ gtfs_rv_me
+ = "filterfs";
+
+56 *
+ gtfs_rv_vsi
+ = "0.0";
+
+59 
+ gtfs_maxsymlks
+ = 12;
+
+62
+mach_pt_t
+
+ gundlyg_node
+;
+
+65
+io_buf_t
+
+ gundlyg_node_
+;
+
+68 vީ
+md_time_vue
+ *
+ gmtime
+;
+
+71
+pid_t
+
+ gfsid
+;
+
+74
+FILE
+ *
+ gfrfs_dbg
+;
+
+80
+r_t
+
+
+81
+ gtfs_m__fe
+
+
+83 
+iour
+ *
+ gur
+,
+
+84 
+node
+ *
+ gd
+,
+
+85 *
+ gme
+,
+
+86
+mode_t
+
+ gmode
+,
+
+87 
+node
+ **
+ gnode
+
+
+90
+LOG_MSG
+("netfs_attempt_create_file");
+
+93
+mux_uock
+(&
+d
+->
+lock
+);
+
+94 
+ gEOPNOTSUPP
+;
+
+99
+r_t
+
+
+100
+ gtfs_check_ݒ_rmissis
+
+
+102 
+iour
+ *
+ gur
+,
+
+103 
+node
+ *
+ g
+,
+
+104 
+ gags
+,
+
+105 
+ gwnode
+
+
+108
+LOG_MSG
+("tfs_check_ݒ_rmissis: '%s'",
+
+->
+
+->
+ode
+->
+me
+);
+
+110
+r_t
+
+ gr
+ = 0;
+
+113 if(
+ gags
+ &
+ gO_READ
+)
+
+114
+ gr
+ =
+fshp_acss
+(&
+
+->
+_
+,
+S_IREAD
+,
+ur
+);
+
+115 if(!
+ gr
+ && (
+ gags
+ &
+ gO_WRITE
+))
+
+116
+ gr
+ =
+fshp_acss
+(&
+
+->
+_
+,
+S_IWRITE
+,
+ur
+);
+
+117 if(!
+ gr
+ && (
+ gags
+ &
+ gO_EXEC
+))
+
+118
+ gr
+ =
+fshp_acss
+(&
+
+->
+_
+,
+S_IEXEC
+,
+ur
+);
+
+121 
+ gr
+;
+
+125
+r_t
+
+
+126
+ gtfs_m_utimes
+
+
+128 
+iour
+ *
+ ged
+,
+
+129 
+node
+ *
+ gnode
+,
+
+130 
+timeec
+ *
+ gime
+,
+
+131 
+timeec
+ *
+ gmtime
+
+
+134
+LOG_MSG
+("netfs_attempt_utimes");
+
+136
+r_t
+
+ gr
+ = 0;
+
+139 
+ gags
+ =
+TOUCH_CTIME
+;
+
+142
+ gr
+ =
+fshp_isowr
+(&
+node
+->
+_
+,
+ed
+);
+
+145 if(!
+ gr
+)
+
+148 if(
+ gime
+)
+
+150
+ gnode
+->
+ g_
+.
+ g_im
+ = *
+ime
+;
+
+153
+ gags
+ |
+TOUCH_ATIME
+;
+
+156 if(
+ gmtime
+)
+
+158
+ gnode
+->
+ g_
+.
+ g_mtim
+ = *
+mtime
+;
+
+161
+ gags
+ |
+TOUCH_MTIME
+;
+
+164
+fshp_touch
+(&
+node
+->
+_
+,
+ags
+,
+mtime
+);
+
+168 
+ gr
+;
+
+172
+r_t
+
+
+173
+ gtfs_pt_acss
+
+
+175 
+iour
+ *
+ ged
+,
+
+176 
+node
+ *
+ g
+,
+
+177 *
+ gtys
+
+
+180
+LOG_MSG
+("netfs_report_access");
+
+183 *
+ gtys
+ = 0;
+
+186 if(
+fshp_acss
+(&
+
+->
+_
+,
+S_IREAD
+,
+ed
+) == 0)
+
+187 *
+tys
+ |
+O_READ
+;
+
+188 if(
+fshp_acss
+(&
+
+->
+_
+,
+S_IWRITE
+,
+ed
+) == 0)
+
+189 *
+tys
+ |
+O_WRITE
+;
+
+190 if(
+fshp_acss
+(&
+
+->
+_
+,
+S_IEXEC
+,
+ed
+) == 0)
+
+191 *
+tys
+ |
+O_EXEC
+;
+
+198
+r_t
+
+
+199
+ gtfs_vide_
+
+
+201 
+node
+ *
+ g
+,
+
+202 
+iour
+ *
+ ged
+
+
+205
+LOG_MSG
+("tfs_vide_: '%s'",
+
+->
+
+->
+ode
+->
+me
+);
+
+207
+r_t
+
+ gr
+ = 0;
+
+210 if(
+ g
+ !
+tfs_ro_node
+)
+
+213 if(!(
+
+->
+
+->
+ags
+ &
+FLAG_NODE_ULFS_UPTODATE
+))
+
+216
+r
+ =
+node_upde
+(
+
+);
+
+220 if(!
+ gr
+)
+
+223 if(
+ g
+->
+ g
+->
+ gpt
+ !
+MACH_PORT_NULL
+)
+
+229
+r
+ =
+io_
+(
+
+->
+
+->
+pt
+, &->
+_
+);
+
+232 if(!
+ gr
+)
+
+234
+ g
+->
+ g_ed
+ =
+
+->
+_
+.
+_mode
+;
+
+243
+node_t
+ *
+ gd
+;
+
+246
+ gr
+ =
+nche_node_lookup
+(
+
+->
+
+->
+ode
+->
+d
+, &
+d
+);
+
+249
+as
+(!
+r
+);
+
+252
+mach_pt_t
+
+ gp
+ =
+fe_me_lookup_und
+
+
+253 (
+d
+->
+
+->
+pt
+,
+ g
+->
+ g
+->
+ gode
+->
+ gme
+, 0, 0);
+
+256
+tfs_ut
+(
+d
+);
+
+258 if(!
+ gp
+)
+
+259 
+ gEBADF
+;
+
+262
+ gr
+ =
+io_
+(
+p
+, &
+
+->
+_
+);
+
+265
+PORT_DEALLOC
+(
+p
+);
+
+272
+node_g_size
+(
+
+, (
+OFFSET_T
+ *)&->
+_
+.
+_size
+);
+
+275 
+ gr
+;
+
+279
+r_t
+
+
+280
+ gtfs_m_sync
+
+
+282 
+iour
+ *
+ ged
+,
+
+283 
+node
+ *
+ gnode
+,
+
+284 
+ gwa
+
+
+287
+LOG_MSG
+("netfs_attempt_sync");
+
+290 
+ gEOPNOTSUPP
+;
+
+294
+r_t
+
+
+295
+ gtfs_g_dts
+
+
+297 
+iour
+ *
+ ged
+,
+
+298 
+node
+ *
+ gd
+,
+
+299 
+ gf_y
+,
+
+300 
+ gnum_s
+,
+
+301 **
+ gda
+,
+
+302
+mach_msg_ty_numb_t
+ *
+ gda_n
+,
+
+303
+vm_size_t
+
+ gmax_da_n
+,
+
+304 *
+ gda_s
+
+
+307
+LOG_MSG
+("tfs_g_dts: '%s'",
+d
+->
+
+->
+ode
+->
+me
+);
+
+309
+r_t
+
+ gr
+;
+
+312
+node_dt_t
+ *
+ gdt_t
+, *
+ gdt_cut
+;
+
+315
+node_dt_t
+ *
+ gdt_li
+ =
+NULL
+;
+
+318
+size_t
+
+ gsize
+ = 0;
+
+321 
+ gcou
+ = 0;
+
+324 *
+ gda_p
+;
+
+328
+ gbump_size
+
+
+330 cڡ *
+ gme
+
+
+334 if((
+ gnum_s
+ =-1|| (
+cou
+ <
+num_s
+))
+
+337
+size_t
+
+w_size
+ =
+size
+ +
+DIRENT_LEN
+(
+
+(
+me
+));
+
+340 if((
+ gmax_da_n
+ > 0&& (
+ gw_size
+ > max_data_len))
+
+345
+ gsize
+ =
+w_size
+;
+
+348 ++
+ gcou
+;
+
+362
+ gadd_dt
+
+
+364 cڡ *
+ gme
+,
+
+365
+o_t
+
+ go
+,
+
+366 
+ gty
+
+
+370 if((
+ gnum_s
+ =-1|| (
+cou
+ <
+num_s
+))
+
+373 
+dt
+
+hdr
+;
+
+376
+size_t
+
+ gme_n
+ =
+
+(
+me
+);
+
+379
+size_t
+
+ gsz
+ =
+DIRENT_LEN
+(
+me_n
+);
+
+382 if(
+ gsz
+ >
+ gsize
+)
+
+387
+ gsize
+ -
+sz
+;
+
+390
+ ghdr
+.
+ gd_o
+ =
+o
+;
+
+391
+ ghdr
+.
+ gd_
+ =
+sz
+;
+
+392
+ ghdr
+.
+ gd_ty
+ =
+ty
+;
+
+393
+ ghdr
+.
+ gd_mn
+ =
+me_n
+;
+
+400
+memy
+(
+da_p
+, &
+hdr
+,
+DIRENT_NAME_OFFS
+);
+
+403
+ry
+(
+da_p
+ +
+DIRENT_NAME_OFFS
+,
+me
+);
+
+408
+ gda_p
+ +
+sz
+;
+
+411 ++
+ gcou
+;
+
+422
+ gr
+ =
+node_s_g
+(
+d
+, &
+dt_li
+);
+
+425 if(!
+ gr
+)
+
+430
+ gdt_t
+ =
+dt_li
+,
+ gcou
+ = 2;
+
+431
+ gdt_t
+ && (
+ gcou
+ <
+ gf_y
+);
+
+432
+ gdt_t
+ =
+dt_t
+->
+xt
+, ++
+ gcou
+
+
+436
+ gcou
+ = 0;
+
+439 if(
+ gf_y
+ == 0)
+
+440
+bump_size
+(".");
+
+441 if(
+ gf_y
+ <= 1)
+
+442
+bump_size
+("..");
+
+447
+ gdt_cut
+ =
+dt_t
+;
+
+448
+ gdt_cut
+;
+
+449
+ gdt_cut
+ =
+dt_cut
+->
+xt
+
+
+452 if(
+bump_size
+(
+dt_cut
+->
+dt
+->
+d_me
+) == 0)
+
+457 *
+ gda
+ =
+mm
+(0,
+size
+,
+PROT_READ
+ |
+PROT_WRITE
+,
+MAP_ANON
+, 0, 0);
+
+460
+ gr
+ = ((*)*
+da
+ =
+MAP_FAILED
+? (
+o
+) : (0);
+
+464 if(!
+ gr
+)
+
+467
+ gda_p
+ = *
+da
+;
+
+470 *
+ gda_n
+ =
+size
+;
+
+471 *
+ gda_s
+ =
+cou
+;
+
+474
+ gcou
+ = 0;
+
+477 if(
+ gf_y
+ == 0)
+
+478
+add_dt
+(".", 2,
+DT_DIR
+);
+
+479 if(
+ gf_y
+ <= 1)
+
+480
+add_dt
+("..", 2,
+DT_DIR
+);
+
+485
+ gdt_cut
+ =
+dt_t
+; dirent_current;
+
+486
+ gdt_cut
+ =
+dt_cut
+->
+xt
+
+
+491
+add_dt
+
+
+492 (
+dt_cut
+->
+dt
+->
+d_me
+,
+ gdt_cut
+->
+ gdt
+->
+ gd_fo
+,
+
+493
+ gdt_cut
+->
+ gdt
+->
+ gd_ty
+) == 0
+
+500 if(
+ gdt_li
+)
+
+501
+node_s_
+(
+dt_li
+);
+
+504
+fshp_touch
+(&
+d
+->
+_
+,
+TOUCH_ATIME
+,
+mtime
+);
+
+507 
+ gr
+;
+
+511
+r_t
+
+
+512
+ gtfs_m_lookup
+
+
+514 
+iour
+ *
+ gur
+,
+
+515 
+node
+ *
+ gd
+,
+
+516 *
+ gme
+,
+
+517 
+node
+ **
+ gnode
+
+
+520
+LOG_MSG
+("tfs_m_lookup: '%s'",
+me
+);
+
+522
+r_t
+
+ gr
+ = 0;
+
+525 if(
+rcmp
+(
+me
+, ".") == 0)
+
+528
+tfs_ef
+(
+d
+);
+
+529 *
+ gnode
+ =
+d
+;
+
+535 if(
+rcmp
+(
+me
+, "..") == 0)
+
+538 if(
+d
+->
+
+->
+ode
+->dir)
+
+541
+as
+(
+d
+->
+
+->
+ode
+->d->
+node
+);
+
+544
+ gr
+ =
+nche_node_lookup
+(
+d
+->
+
+->
+ode
+->d,
+node
+);
+
+550
+ gr
+ =
+ENOENT
+;
+
+551 *
+ gnode
+ =
+NULL
+;
+
+555
+mux_uock
+(&
+d
+->
+lock
+);
+
+558 
+ gr
+;
+
+563
+ gcheck_ݔty
+
+
+565 cڡ *
+ gme
+
+
+569 if(!
+ gݔty
+)
+
+574 
+ gm_s_cou
+ = 0;
+
+577 *
+ goccu
+ =
+rr
+(
+ݔty
+,
+PROPERTY_PARAM
+);
+
+580 ;
+ goccu
+;
+
+581
+ goccu
+ =
+rr
+(
+occu
+ + 1,
+PROPERTY_PARAM
+),
+
+582 ++
+ gm_s_cou
+);
+
+585
+size_t
+
+ gݔty_m_n
+ =
+
+(
+PROPERTY_PARAM
+);
+
+588
+size_t
+
+ gݔty_n
+ = (
+ݔty
+? (
+
+(property)) : (0);
+
+591
+ gr
+ = 0;
+
+594
+size_t
+
+ gfu_me_n
+ =
+
+(
+d
+->
+
+->
+ode
+->
+th
++ 1 + sn(
+me
+) + 1;
+
+597 *
+ gfu_me
+ =
+mloc
+(
+fu_me_n
+);
+
+598 if(!
+ gfu_me
+)
+
+600
+ gr
+ =
+ENOMEM
+;
+
+605
+ gfu_me
+[0] = 0;
+
+608
+ry
+(
+fu_me
+,
+d
+->
+
+->
+ode
+->
+th
+);
+
+609
+rt
+(
+fu_me
+, "/");
+
+610
+rt
+(
+fu_me
+,
+me
+);
+
+612
+LOG_MSG
+("tfs_m_lookup: Alyg ft%s...",
+fu_me
+);
+
+615
+size_t
+
+ gsz
+ =
+ݔty_n
+ + (
+
+(
+fu_me
+-
+ݔty_m_n
+)
+
+616 *
+m_s_cou
+;
+
+619 *
+ gcmd
+ =
+mloc
+(
+sz
+);
+
+620 if(!
+ gcmd
+)
+
+622
+
+(
+fu_me
+);
+
+623
+ gr
+ =
+ENOMEM
+;
+
+628
+ gcmd
+[0] = 0;
+
+631 *
+ gp
+ =
+rr
+(
+ݔty
+,
+PROPERTY_PARAM
+);
+
+634 *
+ gp
+ =
+ݔty
+;
+
+637 ;
+ gp
+; =
+rr
+(
+p
+,
+PROPERTY_PARAM
+))
+
+640
+t
+(
+cmd
+,
+p
+,
+p
+ -ropp);
+
+643
+rt
+(
+cmd
+,
+fu_me
+);
+
+648
+ gp
+ =
+p
+ +
+ݔty_m_n
+;
+
+654
+rt
+(
+cmd
+,
+p
+);
+
+659 
+ gxcode
+ =
+WEXITSTATUS
+(
+syem
+(
+cmd
+));
+
+662 
+ gxcode
+;
+
+666 if(
+check_ݔty
+(
+me
+) != 0)
+
+669
+mux_uock
+(&
+d
+->
+lock
+);
+
+672 
+ gENOENT
+;
+
+676
+mach_pt_t
+
+ gp
+ =
+fe_me_lookup_und
+(
+d
+->
+
+->
+pt
+,
+me
+, 0, 0);
+
+679 if(
+ gp
+ =
+MACH_PORT_NULL
+)
+
+682
+mux_uock
+(&
+d
+->
+lock
+);
+
+685 
+ gENOENT
+;
+
+689
+io_buf_t
+
+ g
+;
+
+690
+ gr
+ =
+io_
+(
+p
+, &
+
+);
+
+693
+PORT_DEALLOC
+(
+p
+);
+
+696 if(
+ gr
+ || !
+S_ISDIR
+(
+
+.
+_mode
+))
+
+699
+ gp
+ =
+MACH_PORT_NULL
+;
+
+704
+ gp
+ =
+fe_me_lookup_und
+(
+d
+->
+
+->
+pt
+,
+me
+,
+O_READ
+ |
+O_DIRECTORY
+, 0);
+
+705 if(
+ gp
+ =
+MACH_PORT_NULL
+)
+
+707 
+EBADF
+;
+
+712
+ode_t
+ *
+ gode
+;
+
+716
+fize
+()
+
+719 if(
+ gr
+)
+
+722 *
+ gnode
+ =
+NULL
+;
+
+725 if(
+ gp
+ !
+MACH_PORT_NULL
+)
+
+726
+PORT_DEALLOC
+(
+p
+);
+
+729 if(*
+ gnode
+)
+
+732
+mux_uock
+(&(*
+node
+)->
+lock
+);
+
+735
+nche_node_add
+(*
+node
+);
+
+739
+mux_uock
+(&
+d
+->
+
+->
+ode
+->
+lock
+);
+
+740
+mux_uock
+(&
+d
+->
+lock
+);
+
+744
+ gr
+ =
+ode_g
+(
+d
+->
+
+->
+ode
+,
+me
+, &lnode);
+
+747 if(
+ gr
+ =
+ENOENT
+)
+
+750
+r
+ =
+ode_
+(
+me
+, &
+ode
+);
+
+751 if(
+ gr
+)
+
+753
+fize
+();
+
+754 
+ gr
+;
+
+758
+ode_l
+(
+d
+->
+
+->
+ode
+,node);
+
+762
+ gr
+ =
+nche_node_lookup
+(
+ode
+,
+node
+);
+
+765
+ode_f_move
+(
+ode
+);
+
+768 if(
+ gr
+)
+
+771
+fize
+();
+
+772 
+ gr
+;
+
+776 (*
+ gnode
+)->
+ g
+->
+ gpt
+ =
+p
+;
+
+779
+ gr
+ =
+ode_th_cڡru
+(
+ode
+,
+NULL
+);
+
+780 if(
+ gr
+)
+
+782
+fize
+();
+
+783 
+ gr
+;
+
+787 (*
+ gnode
+)->
+ g
+->
+ gags
+ =
+FLAG_NODE_ULFS_UPTODATE
+;
+
+790
+fize
+();
+
+791 
+ gr
+;
+
+795
+r_t
+
+
+796
+ gtfs_m_uƚk
+
+
+798 
+iour
+ *
+ gur
+,
+
+799 
+node
+ *
+ gd
+,
+
+800 *
+ gme
+
+
+803
+LOG_MSG
+("netfs_attempt_unlink");
+
+809
+r_t
+
+
+810
+ gtfs_m_me
+
+
+812 
+iour
+ *
+ gur
+,
+
+813 
+node
+ *
+ gomd
+,
+
+814 *
+ gomme
+,
+
+815 
+node
+ *
+ gtod
+,
+
+816 *
+ gtame
+,
+
+817 
+ gex
+
+
+820
+LOG_MSG
+("netfs_attempt_rename");
+
+823 
+ gEOPNOTSUPP
+;
+
+827
+r_t
+
+
+828
+ gtfs_m_mkd
+
+
+830 
+iour
+ *
+ gur
+,
+
+831 
+node
+ *
+ gd
+,
+
+832 *
+ gme
+,
+
+833
+mode_t
+
+ gmode
+
+
+836
+LOG_MSG
+("netfs_attempt_mkdir");
+
+842
+r_t
+
+
+843
+ gtfs_m_rmd
+
+
+845 
+iour
+ *
+ gur
+,
+
+846 
+node
+ *
+ gd
+,
+
+847 *
+ gme
+
+
+850
+LOG_MSG
+("netfs_attempt_rmdir");
+
+856
+r_t
+
+
+857
+ gtfs_m_chown
+
+
+859 
+iour
+ *
+ ged
+,
+
+860 
+node
+ *
+ gnode
+,
+
+861
+uid_t
+
+ guid
+,
+
+862
+uid_t
+
+ ggid
+
+
+865
+LOG_MSG
+("netfs_attempt_chown");
+
+868 
+ gEOPNOTSUPP
+;
+
+872
+r_t
+
+
+873
+ gtfs_m_chauth
+
+
+875 
+iour
+ *
+ ged
+,
+
+876 
+node
+ *
+ gnode
+,
+
+877
+uid_t
+
+ gauth
+
+
+880
+LOG_MSG
+("netfs_attempt_chauthor");
+
+883 
+ gEOPNOTSUPP
+;
+
+887
+r_t
+
+
+888
+ gtfs_m_chmod
+
+
+890 
+iour
+ *
+ gur
+,
+
+891 
+node
+ *
+ gnode
+,
+
+892
+mode_t
+
+ gmode
+
+
+895
+LOG_MSG
+("netfs_attempt_chmod");
+
+898 
+ gEOPNOTSUPP
+;
+
+902
+r_t
+
+
+903
+ gtfs_m_mksymlk
+
+
+905 
+iour
+ *
+ ged
+,
+
+906 
+node
+ *
+ gnode
+,
+
+907 *
+ gme
+
+
+910
+LOG_MSG
+("netfs_attempt_mksymlink");
+
+913 
+ gEOPNOTSUPP
+;
+
+917
+r_t
+
+
+918
+ gtfs_m_mkdev
+
+
+920 
+iour
+ *
+ ged
+,
+
+921 
+node
+ *
+ gnode
+,
+
+922
+mode_t
+
+ gty
+,
+
+923
+dev_t
+
+ gdexes
+
+
+926
+LOG_MSG
+("netfs_attempt_mkdev");
+
+929 
+ gEOPNOTSUPP
+;
+
+933
+r_t
+
+
+934
+ gtfs_t_
+
+
+936 
+iour
+ *
+ ged
+,
+
+937 
+node
+ *
+ gnode
+,
+
+938 *
+ ggz
+,
+
+939
+size_t
+
+ ggn
+
+
+942
+LOG_MSG
+("netfs_set_translator");
+
+945 
+ gEOPNOTSUPP
+;
+
+949
+r_t
+
+
+950
+ gtfs_m_chags
+
+
+952 
+iour
+ *
+ ged
+,
+
+953 
+node
+ *
+ gnode
+,
+
+954 
+ gags
+
+
+957
+LOG_MSG
+("netfs_attempt_chflags");
+
+960 
+ gEOPNOTSUPP
+;
+
+964
+r_t
+
+
+965
+ gtfs_m_t_size
+
+
+967 
+iour
+ *
+ ged
+,
+
+968 
+node
+ *
+ gnode
+,
+
+969
+loff_t
+
+ gsize
+
+
+972
+LOG_MSG
+("netfs_attempt_set_size");
+
+975 
+ gEOPNOTSUPP
+;
+
+979
+r_t
+
+
+980
+ gtfs_m_fs
+
+
+982 
+iour
+ *
+ ged
+,
+
+983 
+node
+ *
+ gnode
+,
+
+984
+fsys_fsbuf_t
+ *
+ g
+
+
+987
+LOG_MSG
+("netfs_attempt_statfs");
+
+990 
+ gEOPNOTSUPP
+;
+
+994
+r_t
+
+
+995
+ gtfs_m_syncfs
+
+
+997 
+iour
+ *
+ ged
+,
+
+998 
+ gwa
+
+
+1001
+LOG_MSG
+("netfs_attempt_syncfs");
+
+1008
+r_t
+
+
+1009
+ gtfs_m_lk
+
+
+1011 
+iour
+ *
+ gur
+,
+
+1012 
+node
+ *
+ gd
+,
+
+1013 
+node
+ *
+ gfe
+,
+
+1014 *
+ gme
+,
+
+1015 
+ gex
+
+
+1018
+LOG_MSG
+("netfs_attempt_link");
+
+1021 
+ gEOPNOTSUPP
+;
+
+1025
+r_t
+
+
+1026
+ gtfs_m_mkfe
+
+
+1028 
+iour
+ *
+ gur
+,
+
+1029 
+node
+ *
+ gd
+,
+
+1030
+mode_t
+
+ gmode
+,
+
+1031 
+node
+ **
+ gnode
+
+
+1034
+LOG_MSG
+("netfs_attempt_mkfile");
+
+1037
+mux_uock
+(&
+d
+->
+lock
+);
+
+1040 
+ gEOPNOTSUPP
+;
+
+1044
+r_t
+
+
+1045
+ gtfs_m_adlk
+
+
+1047 
+iour
+ *
+ gur
+,
+
+1048 
+node
+ *
+ gnode
+,
+
+1049 *
+ gbuf
+
+
+1052
+LOG_MSG
+("netfs_attempt_readlink");
+
+1055 
+ gEOPNOTSUPP
+;
+
+1059
+r_t
+
+
+1060
+ gtfs_m_ad
+
+
+1062 
+iour
+ *
+ ged
+,
+
+1063 
+node
+ *
+ g
+,
+
+1064
+loff_t
+
+ gofft
+,
+
+1065
+size_t
+ *
+ gn
+,
+
+1066 *
+ gda
+
+
+1069
+LOG_MSG
+("netfs_attempt_read");
+
+1071
+r_t
+
+ gr
+ = 0;
+
+1074 if(
+ g
+->
+ g
+->
+ gpt
+ =
+MACH_PORT_NULL
+)
+
+1077
+node_t
+ *
+d
+;
+
+1080
+ gr
+ =
+nche_node_lookup
+(
+
+->
+
+->
+ode
+->
+d
+, &
+d
+);
+
+1083
+as
+(!
+r
+);
+
+1086
+mach_pt_t
+
+ gp
+ =
+fe_me_lookup_und
+
+
+1087 (
+d
+->
+
+->
+pt
+,
+ g
+->
+ g
+->
+ gode
+->
+ gme
+,
+ gO_READ
+, 0);
+
+1090
+tfs_ut
+(
+d
+);
+
+1092 if(!
+ gp
+)
+
+1093 
+ gEBADF
+;
+
+1096
+ g
+->
+ g
+->
+ gpt
+ =
+p
+;
+
+1100
+ gr
+ =
+io_ad
+(
+
+->
+
+->
+pt
+, (**)&
+da
+,
+n
+,
+offt
+, *len);
+
+1103 
+ gr
+;
+
+1107
+r_t
+
+
+1108
+ gtfs_m_wre
+
+
+1110 
+iour
+ *
+ ged
+,
+
+1111 
+node
+ *
+ gnode
+,
+
+1112
+loff_t
+
+ gofft
+,
+
+1113
+size_t
+ *
+ gn
+,
+
+1114 *
+ gda
+
+
+1117
+LOG_MSG
+("netfs_attempt_write");
+
+1124
+ gtfs_node_nefs
+
+
+1126 
+node
+ *
+ g
+
+
+1130
+node_deroy
+(
+
+);
+
+1135
+ gma
+
+
+1137 
+ ggc
+,
+
+1138 **
+ ggv
+
+
+1142
+INIT_LOG
+();
+
+1143
+LOG_MSG
+(">> Starting initialization...");
+
+1146
+mach_pt_t
+
+ gbo١p_pt
+;
+
+1148
+r_t
+
+ gr
+ = 0;
+
+1151
+gp_r
+(&
+gp_tup
+,
+gc
+,
+gv
+,
+ARGP_IN_ORDER
+, 0, 0);
+
+1152
+LOG_MSG
+("Commandinergumentsarsed.");
+
+1155
+ gr
+ =
+node__ro
+(&
+tfs_ro_node
+);
+
+1156 if(
+ gr
+)
+
+1157
+r
+(
+EXIT_FAILURE
+,
+r
+, "Failedo createheootode");
+
+1158
+LOG_MSG
+("Rootode created.");
+
+1161
+sk_g_bo١p_pt
+(
+mach_sk_lf
+(), &
+bo١p_pt
+);
+
+1164
+tfs_
+();
+
+1167
+ gundlyg_node
+ =
+tfs_tup
+(
+bo١p_pt
+,
+O_READ
+);
+
+1168
+LOG_MSG
+("netfs initialization complete.");
+
+1171
+ gr
+ =
+node__ro
+(
+tfs_ro_node
+);
+
+1172 if(
+ gr
+)
+
+1173
+r
+(
+EXIT_FAILURE
+,
+r
+, "Failedo initializeheootode");
+
+1174
+LOG_MSG
+("Rootode initialized.");
+
+1175
+LOG_MSG
+("\tRoقodaddss: 0x%lX", ()
+tfs_ro_node
+);
+
+1178
+ gr
+ =
+mtime_m
+(0, 0, &
+mtime
+);
+
+1179 if(
+ gr
+)
+
+1180
+r
+(
+EXIT_FAILURE
+,
+r
+, "Failedo mapheime");
+
+1181
+LOG_MSG
+("Time mapped.");
+
+1184
+nche_
+(
+nche_size
+);
+
+1185
+LOG_MSG
+("Cache initialized.");
+
+1188
+ gr
+ =
+io_
+(
+undlyg_node
+, &
+undlyg_node_
+);
+
+1189 if(
+ gr
+)
+
+1190
+r
+(
+EXIT_FAILURE
+,
+r
+,
+
+1192
+LOG_MSG
+("Stat information for undelyingode obtained.");
+
+1195
+ gfsid
+ =
+gpid
+();
+
+1198
+ gtfs_ro_node
+->
+ g_
+ =
+undlyg_node_
+;
+
+1200
+ gtfs_ro_node
+->
+ g_
+.
+ g_o
+ =
+FILTERFS_ROOT_INODE
+;
+
+1201
+ gtfs_ro_node
+->
+ g_
+.
+ g_fsid
+ =
+fsid
+;
+
+1202
+ gtfs_ro_node
+->
+ g_
+.
+ g_mode
+ =
+S_IFDIR
+ | (
+undlyg_node_
+.
+_mode
+
+
+1203 & ~
+S_IFMT
+ & ~
+S_ITRANS
+);
+
+1205
+ gtfs_ro_node
+->
+ g_ed
+ =
+tfs_ro_node
+->
+_
+.
+_mode
+;
+
+1209 if(!
+S_ISDIR
+(
+undlyg_node_
+.
+_mode
+))
+
+1212 if(
+ gundlyg_node_
+.
+ g_mode
+ &
+ gS_IRUSR
+)
+
+1214
+ gtfs_ro_node
+->
+ g_
+.
+ g_mode
+ |
+S_IXUSR
+;
+
+1216 if(
+ gundlyg_node_
+.
+ g_mode
+ &
+ gS_IRGRP
+)
+
+1218
+ gtfs_ro_node
+->
+ g_
+.
+ g_mode
+ |
+S_IXGRP
+;
+
+1220 if(
+ gundlyg_node_
+.
+ g_mode
+ &
+ gS_IROTH
+)
+
+1222
+ gtfs_ro_node
+->
+ g_
+.
+ g_mode
+ |
+S_IXOTH
+;
+
+1226
+ gfshp_touch
+
+
+1227 (&
+ gtfs_ro_node
+->
+ g_
+,
+ gTOUCH_ATIME
+ |
+ gTOUCH_MTIME
+ |
+ gTOUCH_CTIME
+,
+
+1228
+ gmtime
+);
+
+1230
+LOG_MSG
+(">> Initialization complete. Enteringetfs serveroop...");
+
+1234
+tfs_rv_lo
+();
+
+ @filterfs.h
+
+26 #ide
+__FILTERFS_H__
+
+
+27 
+ #__FILTERFS_H__
+
+
+ )
+
+29 
+ ~<ddef.h
+>
+
+30 
+ ~<dlib.h
+>
+
+31 
+ ~<hads.h
+>
+
+32 
+ ~<unid.h
+>
+
+33 
+ ~<sys/mm.h
+>
+
+34 
+ ~<sys/tys.h
+>
+
+35 
+ ~<sys/.h
+>
+
+36 
+ ~<sys/fs.h
+>
+
+37 
+ ~<sys/time.h
+>
+
+38 
+ ~<hurd/ihash.h
+>
+
+39 
+ ~<hurd/iohp.h
+>
+
+41 
+ ~"lib.h
+"
+
+42 
+ ~"node.h
+"
+
+48 
+ #FILTERFS_ROOT_INODE
+ 1
+
+ )
+
+55 vީ
+md_time_vue
+ *
+mtime
+;
+
+58
+mach_pt_t
+
+undlyg_node
+;
+
+61
+io_buf_t
+
+undlyg_node_
+;
+
+67 
+ sfrfs_d_y
+
+
+69 *
+ mme
+;
+
+70
+size_t
+
+ mhv
+;
+
+72 
+node
+ *
+ mnode
+;
+
+75 
+
+
+ m
+;
+
+77 *
+ msymlk_rg
+;
+
+79
+time_t
+
+ m_timeamp
+;
+
+82 
+frfs_d
+ *
+ md
+;
+
+88 
+frfs_d_y
+ *
+ mxt
+, **
+ mlf_p
+;
+
+92 
+frfs_d_y
+ *
+ mded_xt
+, **
+ mded_lf_p
+;
+
+95
+time_t
+
+ mme_timeamp
+;
+
+98
+hurd_ihash_lo_t
+
+ mode_lo
+;
+
+101 
+ mn
+ : 1;
+
+104 
+ mvid
+ : 1;
+
+108 
+ sfrfs_d
+
+
+111
+size_t
+
+ mnum_s
+;
+
+116
+size_t
+
+ mnum_live_s
+;
+
+119 
+frfs_d_y
+ **
+ mhb
+;
+
+120
+size_t
+
+ mhb_n
+;
+
+126 
+frfs_d_y
+ *
+ mded
+;
+
+129 
+node
+ *
+ mnode
+;
+
+132 
+frfs
+ *
+ mfs
+;
+
+135
+time_t
+
+ mme_timeamp
+;
+
+138
+hurd_ihash_lo_t
+
+ mode_lo
+;
+
+145
+time_t
+
+ mbuld__ba_amp
+;
+
+149 
+ mbulk__cou_f_hf
+;
+
+154 
+ mbulk__cou_cd_hf
+;
+
+158 
+ sfrfs
+
+
+161 
+node
+ *
+ mro
+;
+
+165
+o_t
+
+ mxt_ode
+;
+
+168 
+ mfsid
+;
+
+171 
+hurd_ihash
+
+ mode_mpgs
+;
+
+174
+_lock_t
+
+ mode_mpgs_lock
+;
+
+181
+r_t
+
+
+182
+ gtfs_m__fe
+
+
+184 
+iour
+ *
+ gur
+,
+
+185 
+node
+ *
+ gd
+,
+
+186 *
+ gme
+,
+
+187
+mode_t
+
+ gmode
+,
+
+188 
+node
+ **
+ gnode
+
+
+193
+r_t
+
+
+194
+ gtfs_check_ݒ_rmissis
+
+
+196 
+iour
+ *
+ gur
+,
+
+197 
+node
+ *
+ g
+,
+
+198 
+ gags
+,
+
+199 
+ gwnode
+
+
+203
+r_t
+
+
+204
+ gtfs_m_utimes
+
+
+206 
+iour
+ *
+ ged
+,
+
+207 
+node
+ *
+ gnode
+,
+
+208 
+timeec
+ *
+ gime
+,
+
+209 
+timeec
+ *
+ gmtime
+
+
+213
+r_t
+
+
+214
+ gtfs_pt_acss
+
+
+216 
+iour
+ *
+ ged
+,
+
+217 
+node
+ *
+ g
+,
+
+218 *
+ gtys
+
+
+222
+r_t
+
+
+223
+ gtfs_vide_
+
+
+225 
+node
+ *
+ g
+,
+
+226 
+iour
+ *
+ ged
+
+
+230
+r_t
+
+
+231
+ gtfs_m_sync
+
+
+233 
+iour
+ *
+ ged
+,
+
+234 
+node
+ *
+ gnode
+,
+
+235 
+ gwa
+
+
+239
+r_t
+
+
+240
+ gtfs_g_dts
+
+
+242 
+iour
+ *
+ ged
+,
+
+243 
+node
+ *
+ gd
+,
+
+244 
+ gf_y
+,
+
+245 
+ gnum_s
+,
+
+246 **
+ gda
+,
+
+247
+mach_msg_ty_numb_t
+ *
+ gda_n
+,
+
+248
+vm_size_t
+
+ gmax_da_n
+,
+
+249 *
+ gda_s
+
+
+253
+r_t
+
+
+254
+ gtfs_m_lookup
+
+
+256 
+iour
+ *
+ gur
+,
+
+257 
+node
+ *
+ gd
+,
+
+258 *
+ gme
+,
+
+259 
+node
+ **
+ gnode
+
+
+263
+r_t
+
+
+264
+ gtfs_m_uƚk
+
+
+266 
+iour
+ *
+ gur
+,
+
+267 
+node
+ *
+ gd
+,
+
+268 *
+ gme
+
+
+272
+r_t
+
+
+273
+ gtfs_m_me
+
+
+275 
+iour
+ *
+ gur
+,
+
+276 
+node
+ *
+ gomd
+,
+
+277 *
+ gomme
+,
+
+278 
+node
+ *
+ gtod
+,
+
+279 *
+ gtame
+,
+
+280 
+ gex
+
+
+284
+r_t
+
+
+285
+ gtfs_m_mkd
+
+
+287 
+iour
+ *
+ gur
+,
+
+288 
+node
+ *
+ gd
+,
+
+289 *
+ gme
+,
+
+290
+mode_t
+
+ gmode
+
+
+294
+r_t
+
+
+295
+ gtfs_m_rmd
+
+
+297 
+iour
+ *
+ gur
+,
+
+298 
+node
+ *
+ gd
+,
+
+299 *
+ gme
+
+
+303
+r_t
+
+
+304
+ gtfs_m_chown
+
+
+306 
+iour
+ *
+ ged
+,
+
+307 
+node
+ *
+ gnode
+,
+
+308
+uid_t
+
+ guid
+,
+
+309
+uid_t
+
+ ggid
+
+
+313
+r_t
+
+
+314
+ gtfs_m_chauth
+
+
+316 
+iour
+ *
+ ged
+,
+
+317 
+node
+ *
+ gnode
+,
+
+318
+uid_t
+
+ gauth
+
+
+322
+r_t
+
+
+323
+ gtfs_m_chmod
+
+
+325 
+iour
+ *
+ gur
+,
+
+326 
+node
+ *
+ gnode
+,
+
+327
+mode_t
+
+ gmode
+
+
+331
+r_t
+
+
+332
+ gtfs_m_mksymlk
+
+
+334 
+iour
+ *
+ ged
+,
+
+335 
+node
+ *
+ gnode
+,
+
+336 *
+ gme
+
+
+340
+r_t
+
+
+341
+ gtfs_m_mkdev
+
+
+343 
+iour
+ *
+ ged
+,
+
+344 
+node
+ *
+ gnode
+,
+
+345
+mode_t
+
+ gty
+,
+
+346
+dev_t
+
+ gdexes
+
+
+350
+r_t
+
+
+351
+ gtfs_t_
+
+
+353 
+iour
+ *
+ ged
+,
+
+354 
+node
+ *
+ gnode
+,
+
+355 *
+ ggz
+,
+
+356
+size_t
+
+ ggn
+
+
+360
+r_t
+
+
+361
+ gtfs_m_chags
+
+
+363 
+iour
+ *
+ ged
+,
+
+364 
+node
+ *
+ gnode
+,
+
+365 
+ gags
+
+
+369
+r_t
+
+
+370
+ gtfs_m_t_size
+
+
+372 
+iour
+ *
+ ged
+,
+
+373 
+node
+ *
+ gnode
+,
+
+374
+loff_t
+
+ gsize
+
+
+378
+r_t
+
+
+379
+ gtfs_m_fs
+
+
+381 
+iour
+ *
+ ged
+,
+
+382 
+node
+ *
+ gnode
+,
+
+383
+fsys_fsbuf_t
+ *
+ g
+
+
+387
+r_t
+
+
+388
+ gtfs_m_syncfs
+
+
+390 
+iour
+ *
+ ged
+,
+
+391 
+ gwa
+
+
+395
+r_t
+
+
+396
+ gtfs_m_lk
+
+
+398 
+iour
+ *
+ gur
+,
+
+399 
+node
+ *
+ gd
+,
+
+400 
+node
+ *
+ gfe
+,
+
+401 *
+ gme
+,
+
+402 
+ gex
+
+
+406
+r_t
+
+
+407
+ gtfs_m_mkfe
+
+
+409 
+iour
+ *
+ gur
+,
+
+410 
+node
+ *
+ gd
+,
+
+411
+mode_t
+
+ gmode
+,
+
+412 
+node
+ **
+ gnode
+
+
+416
+r_t
+
+
+417
+ gtfs_m_adlk
+
+
+419 
+iour
+ *
+ gur
+,
+
+420 
+node
+ *
+ gnode
+,
+
+421 *
+ gbuf
+
+
+425
+r_t
+
+
+426
+ gtfs_m_ad
+
+
+428 
+iour
+ *
+ ged
+,
+
+429 
+node
+ *
+ g
+,
+
+430
+loff_t
+
+ gofft
+,
+
+431
+size_t
+ *
+ gn
+,
+
+432 *
+ gda
+
+
+436
+r_t
+
+
+437
+ gtfs_m_wre
+
+
+439 
+iour
+ *
+ ged
+,
+
+440 
+node
+ *
+ gnode
+,
+
+441
+loff_t
+
+ gofft
+,
+
+442
+size_t
+ *
+ gn
+,
+
+443 *
+ gda
+
+
+448
+ gtfs_node_nefs
+
+
+450 
+node
+ *
+ g
+
+
+ @lib.c
+
+28 
+ #_GNU_SOURCE
+ 1
+
+ )
+
+30 
+ ~<sys/mm.h
+>
+
+32 
+ ~"lib.h
+"
+
+33 
+ ~"debug.h
+"
+
+39
+r_t
+
+
+40
+ gd_s_g
+
+
+42
+fe_t
+
+ gd
+,
+
+43 **
+ gdt_da
+,
+
+45
+size_t
+ *
+ gdt_da_size
+,
+
+46 
+dt
+ ***
+ gdt_li
+
+
+50
+r_t
+
+ gr
+ = 0;
+
+53 *
+ gda
+;
+
+56
+size_t
+
+ gda_size
+;
+
+59 
+ gs_num
+;
+
+62
+ gr
+ =
+d_add
+(
+d
+, &
+da
+, &
+da_size
+, 0, -1, 0, &
+s_num
+);
+
+63 if(
+ gr
+)
+
+64 
+ gr
+;
+
+67 
+dt
+ **
+ gli
+;
+
+71
+ gli
+ =
+mloc
+((
+dt
+ ** (
+s_num
+ + 1));
+
+74 if(!
+ gli
+)
+
+77
+munm
+(
+da
+,
+da_size
+);
+
+80 
+ gENOMEM
+;
+
+84 
+dt
+ *
+ gdp
+;
+
+86 
+ gi
+;
+
+91
+ gi
+ = 0,
+ gdp
+ = (
+dt
+ *)
+da
+;
+
+92
+ gi
+ <
+ gs_num
+;
+
+93 ++
+ gi
+,
+ gdp
+ = (
+dt
+ *)((*)
+dp
+ + dp->
+d_
+))
+
+95 *(
+li
+ +
+i
+
+dp
+;
+
+98 *(
+ gli
+ +
+ gi
+
+NULL
+;
+
+101 *
+ gdt_da
+ =
+da
+;
+
+102 *
+ gdt_da_size
+ =
+da_size
+;
+
+103 *
+ gdt_li
+ =
+li
+;
+
+106 
+ gr
+;
+
+110
+r_t
+
+
+111
+ gfe_lookup
+
+
+113
+fe_t
+
+ gd
+,
+
+114 *
+ gme
+,
+
+115 
+ gags0
+,
+
+116 
+ gags1
+,
+
+117 
+ gmode
+,
+
+118
+fe_t
+ *
+ gpt
+,
+
+119
+io_buf_t
+ *
+ g
+
+
+122
+r_t
+
+ gr
+ = 0;
+
+125
+fe_t
+
+ gp
+;
+
+128
+io_buf_t
+
+ gs
+;
+
+131
+fe_t
+
+
+132
+ gdo_fe_lookup
+
+
+134
+fe_t
+
+ gd
+,
+
+135 *
+ gme
+,
+
+136 
+ gags
+,
+
+137 
+ gmode
+
+
+141
+fe_t
+
+ gp
+;
+
+144 if(
+ gd
+ !
+MACH_PORT_NULL
+)
+
+146
+p
+ =
+fe_me_lookup_und
+(
+d
+,
+me
+,
+ags
+,
+mode
+);
+
+149
+ gp
+ =
+fe_me_lookup
+(
+me
+,
+ags
+,
+mode
+);
+
+152 
+ gp
+;
+
+156
+ gp
+ =
+do_fe_lookup
+(
+d
+,
+me
+,
+ags0
+,
+mode
+);
+
+159 if(
+ gp
+ =
+MACH_PORT_NULL
+)
+
+161
+p
+ =
+do_fe_lookup
+(
+d
+,
+me
+,
+ags1
+,
+mode
+);
+
+164 if(
+ gp
+ !
+MACH_PORT_NULL
+)
+
+167 if(
+
+)
+
+170
+r
+ =
+io_
+(
+p
+, &
+s
+);
+
+171 if(
+ gr
+)
+
+172
+PORT_DEALLOC
+(
+p
+);
+
+177
+ gr
+ =
+o
+;
+
+180 if(!
+ gr
+)
+
+183 *
+ gpt
+ =
+p
+;
+
+186 if(
+ g
+)
+
+187 *
+ g
+ =
+s
+;
+
+191 
+ gr
+;
+
+ @lib.h
+
+26 #ide
+__LIB_H__
+
+
+27 
+ #__LIB_H__
+
+
+ )
+
+30 
+ #__USE_FILE_OFFSET64
+
+
+ )
+
+32 
+ ~<hurd.h
+>
+
+33 
+ ~<dt.h
+>
+
+34 
+ ~<ddef.h
+>
+
+40 
+ #DIRENT_ALIGN
+ 4
+
+ )
+
+43 
+ #DIRENT_NAME_OFFS
+
+ `offtof
+(
+dt
+,
+d_me
+)
+
+ )
+
+47 
+ #DIRENT_LEN
+(
+me_n
+)\
+
+48 ((
+DIRENT_NAME_OFFS
+ + (
+me_n
++ 1 +
+DIRENT_ALIGN
+ - 1) &\
+
+49 ~(
+DIRENT_ALIGN
+ - 1))
+
+ )
+
+52 
+ #PORT_DEALLOC
+(
+p
+(
+ `mach_pt_do
+(
+ `mach_sk_lf
+(), (p)))
+
+ )
+
+58
+r_t
+
+
+59
+ gd_s_g
+
+
+61
+fe_t
+
+ gd
+,
+
+62 **
+ gdt_da
+,
+
+64
+size_t
+ *
+ gdt_da_size
+,
+
+65 
+dt
+ ***
+ gdt_li
+
+
+70
+r_t
+
+
+71
+ gfe_lookup
+
+
+73
+fe_t
+
+ gd
+,
+
+74 *
+ gme
+,
+
+75 
+ gags0
+,
+
+76 
+ gags1
+,
+
+77 
+ gmode
+,
+
+78
+fe_t
+ *
+ gpt
+,
+
+79
+io_buf_t
+ *
+ g
+
+
+ @lnode.c
+
+28 
+ #_GNU_SOURCE
+
+
+ )
+
+30 
+ ~"ode.h
+"
+
+31 
+ ~"debug.h
+"
+
+38
+ gode_f_add
+
+
+40
+ode_t
+ *
+ gnode
+
+
+44 ++
+ gnode
+->
+ gns
+;
+
+50
+ gode_f_move
+
+
+52
+ode_t
+ *
+ gnode
+
+
+56
+as
+(
+node
+->
+ns
+);
+
+59 --
+ gnode
+->
+ gns
+;
+
+62 if(
+ gnode
+->
+ gns
+ == 0)
+
+65
+ode_unl
+(
+node
+);
+
+66
+ode_deroy
+(
+node
+);
+
+70
+mux_uock
+(&
+node
+->
+lock
+);
+
+75
+r_t
+
+
+76
+ gode_
+
+
+78 *
+ gme
+,
+
+79
+ode_t
+ **
+ gnode
+
+
+83
+ode_t
+ *
+ gnode_w
+ =
+mloc
+((lnode_t));
+
+86 if(!
+ gnode_w
+)
+
+89 
+ gENOMEM
+;
+
+93 *
+ gme_
+ =
+NULL
+;
+
+96 if(
+ gme
+)
+
+99
+ gme_
+ =
+rdup
+(
+me
+);
+
+102 if(!
+ gme_
+)
+
+105
+
+(
+node_w
+);
+
+108 
+ gENOMEM
+;
+
+113
+memt
+(
+node_w
+, 0, (
+ode_t
+));
+
+114
+ gnode_w
+->
+ gme
+ =
+me_
+;
+
+115
+ gnode_w
+->
+ gme_n
+ = (
+me_
+? (
+
+(name_cp)) : (0);
+
+118
+ gnode_w
+->
+ gns
+ = 1;
+
+121
+mux_
+(&
+node_w
+->
+lock
+);
+
+122
+mux_lock
+(&
+node_w
+->
+lock
+);
+
+125 *
+ gnode
+ =
+node_w
+;
+
+133
+ gode_deroy
+
+
+135
+ode_t
+ *
+ gnode
+
+
+139
+
+(
+node
+->
+me
+);
+
+142
+
+(
+node
+);
+
+147
+r_t
+
+
+148
+ gode_th_cڡru
+
+
+150
+ode_t
+ *
+ gnode
+,
+
+151 **
+ gth
+
+
+154
+r_t
+
+ gr
+ = 0;
+
+157 *
+ gp
+;
+
+160 
+ gp_n
+ = 0;
+
+163
+ode_t
+ *
+ gn
+;
+
+166 
+ gn
+ =
+node
+; &&->
+ gd
+; =
+n
+->
+d
+)
+
+172
+p_n
+ +
+n
+->
+me_n
+ + 1;
+
+176
+ gp_n
+ +
+
+(
+n
+->
+th
+) + 1;
+
+179
+ gp
+ =
+mloc
+(
+p_n
+ * ());
+
+180 if(!
+ gp
+)
+
+181
+ gr
+ =
+ENOMEM
+;
+
+186
+ gp
+[--
+p_n
+] = 0;
+
+189 
+ gn
+ =
+node
+; &&->
+ gd
+; =
+n
+->
+d
+)
+
+192
+p_n
+ -
+n
+->
+me_n
+;
+
+195
+y
+(
+p
+ +
+p_n
+,
+n
+->
+me
+,->
+me_n
+);
+
+202
+ gp
+[--
+p_n
+] = '/';
+
+207
+y
+(
+p
+,
+n
+->
+th
+,
+
+(n->path));
+
+210 if(
+ gnode
+->
+ gth
+)
+
+211
+
+(
+node
+->
+th
+);
+
+214
+ gnode
+->
+ gth
+ =
+p
+;
+
+217 if(
+ gth
+)
+
+218 *
+ gth
+ =
+p
+;
+
+222 
+ gr
+;
+
+226
+r_t
+
+
+227
+ gode_g
+
+
+229
+ode_t
+ *
+ gd
+,
+
+230 *
+ gme
+,
+
+231
+ode_t
+ **
+ gnode
+
+
+234
+r_t
+
+ gr
+ = 0;
+
+237
+ode_t
+ *
+ gn
+;
+
+240 
+ gn
+ =
+d
+->
+s
+; && (
+rcmp
+(
+n
+->
+me
+,ame!0); =->
+xt
+);
+
+243 if(
+ gn
+)
+
+246
+mux_lock
+(&
+n
+->
+lock
+);
+
+249
+ode_f_add
+(
+n
+);
+
+252 *
+ gnode
+ =
+n
+;
+
+255
+ gr
+ =
+ENOENT
+;
+
+258 
+ gr
+;
+
+264
+ gode_l
+
+
+266
+ode_t
+ *
+ gd
+,
+
+267
+ode_t
+ *
+ gnode
+
+
+271
+ gnode
+->
+ gxt
+ =
+d
+->
+s
+;
+
+272
+ gnode
+->
+ gevp
+ = &
+d
+->
+s
+;
+
+273 if(
+ gd
+->
+ gs
+)
+
+274
+ gd
+->
+ gs
+->
+ gevp
+ = &
+node
+->
+xt
+;
+
+276
+ gd
+->
+ gs
+ =
+node
+;
+
+279
+ode_f_add
+(
+d
+);
+
+282
+ gnode
+->
+ gd
+ =
+d
+;
+
+288
+ gode_unl
+
+
+290
+ode_t
+ *
+ gnode
+
+
+294
+ode_f_move
+(
+node
+->
+d
+);
+
+298 *
+ gnode
+->
+ gevp
+ =
+node
+->
+xt
+;
+
+302 if(
+ gnode
+->
+ gxt
+)
+
+303
+ gnode
+->
+ gxt
+->
+ gevp
+ = &
+node
+->
+xt
+;
+
+ @lnode.h
+
+26 #ide
+__LNODE_H__
+
+
+27 
+ #__LNODE_H__
+
+
+ )
+
+30 
+ ~<r.h
+>
+
+31 
+ ~<hurd/tfs.h
+>
+
+36 
+node
+
+ tnode_t
+;
+
+39 
+ sode
+
+
+42 *
+ mme
+;
+
+46
+size_t
+
+ mme_n
+;
+
+49 *
+ mth
+;
+
+52 
+ mags
+;
+
+55 
+ mns
+;
+
+58
+node_t
+ *
+ mnode
+;
+
+61 
+ode
+ *
+ mxt
+, **
+ mevp
+;
+
+64 
+ode
+ *
+ md
+;
+
+67 
+ode
+ *
+ ms
+;
+
+70 
+mux
+
+ mlock
+;
+
+73 
+ode
+
+ tode_t
+;
+
+80
+ gode_f_add
+
+
+82
+ode_t
+ *
+ gnode
+
+
+88
+ gode_f_move
+
+
+90
+ode_t
+ *
+ gnode
+
+
+95
+r_t
+
+
+96
+ gode_
+
+
+98 *
+ gme
+,
+
+99
+ode_t
+ **
+ gnode
+
+
+104
+ gode_deroy
+
+
+106
+ode_t
+ *
+ gnode
+
+
+111
+r_t
+
+
+112
+ gode_th_cڡru
+
+
+114
+ode_t
+ *
+ gnode
+,
+
+115 **
+ gth
+
+
+119
+r_t
+
+
+120
+ gode_g
+
+
+122
+ode_t
+ *
+ gd
+,
+
+123 *
+ gme
+,
+
+124
+ode_t
+ **
+ gnode
+
+
+130
+ gode_l
+
+
+132
+ode_t
+ *
+ gd
+,
+
+133
+ode_t
+ *
+ gnode
+
+
+138
+ gode_unl
+
+
+140
+ode_t
+ *
+ gnode
+
+
+ @ncache.c
+
+28 
+ #_GNU_SOURCE
+ 1
+
+ )
+
+30 
+ ~"nche.h
+"
+
+36
+nche_t
+
+ gnche
+;
+
+39 
+ gnche_size
+ =
+NCACHE_SIZE
+;
+
+46
+ gnche_
+
+
+48 
+ gsize_max
+
+
+52
+ gnche
+.
+ gmru
+ =
+nche
+.
+u
+ =
+NULL
+;
+
+55
+ gnche
+.
+ gsize_max
+ =
+size_max
+;
+
+58
+ gnche
+.
+ gsize_cut
+ = 0;
+
+61
+mux_
+(&
+nche
+.
+lock
+);
+
+66
+r_t
+
+
+67
+ gnche_node_lookup
+
+
+69
+ode_t
+ *
+ gode
+,
+
+70
+node_t
+ **
+ gnode
+
+
+73
+r_t
+
+ gr
+ = 0;
+
+76
+node_t
+ *
+ gn
+ =
+ode
+->
+node
+;
+
+79 if(
+ gn
+ !
+NULL
+)
+
+82
+tfs_ef
+(
+n
+);
+
+87
+ gr
+ =
+node_
+(
+ode
+, &
+n
+);
+
+91 if(!
+ gr
+)
+
+94
+mux_lock
+(&
+n
+->
+lock
+);
+
+97 *
+ gnode
+ =
+n
+;
+
+101 
+ gr
+;
+
+107
+ gnche_node_move
+
+
+109
+node_t
+ *
+ gnode
+
+
+114 
+Êode
+ *
+ g
+ =
+node
+->
+
+;
+
+117 if(
+ g
+->
+ gnche_xt
+)
+
+119
+ g
+->
+ gnche_xt
+->->
+ gnche_ev
+ =
+
+->
+nche_ev
+;
+
+121 if(
+ g
+->
+ gnche_ev
+)
+
+123
+ g
+->
+ gnche_ev
+->->
+ gnche_xt
+ =
+
+->
+nche_xt
+;
+
+126 if(
+ gnche
+.
+ gmru
+ =
+node
+)
+
+128
+nche
+.
+mru
+ =
+
+->
+nche_xt
+;
+
+130 if(
+ gnche
+.
+ gu
+ =
+node
+)
+
+132
+nche
+.
+u
+ =
+
+->
+nche_ev
+;
+
+135
+ g
+->
+ gnche_xt
+ =
+
+->
+nche_ev
+ =
+NULL
+;
+
+138 --
+ gnche
+.
+ gsize_cut
+;
+
+143
+ $nche_t
+()
+
+146
+node_t
+ *
+node
+;
+
+149
+ `mux_lock
+(&
+nche
+.
+lock
+);
+
+152 
+node
+ =
+nche
+.
+mru
+;od!
+NULL
+;
+ `nche_node_move
+(node),ode =cache.mru);
+
+155
+ `mux_uock
+(&
+nche
+.
+lock
+);
+
+156
+ }
+}
+
+160
+ gnche_node_add
+
+
+162
+node_t
+ *
+ gnode
+
+
+166
+mux_lock
+(&
+nche
+.
+lock
+);
+
+169 if((
+ gnche
+.
+ gsize_max
+ > 0|| (nche.
+ gsize_cut
+ > 0))
+
+172 if(
+ gnche
+.
+ gmru
+ !
+node
+)
+
+175 if((
+node
+->
+
+->
+nche_xt
+ !
+NULL
+&& (node->->
+nche_ev
+ != NULL))
+
+177
+nche_node_move
+(
+node
+);
+
+180
+tfs_ef
+(
+node
+);
+
+183
+ gnode
+->
+ g
+->
+ gnche_xt
+ =
+nche
+.
+mru
+;
+
+184
+ gnode
+->
+ g
+->
+ gnche_ev
+ =
+NULL
+;
+
+187 if(
+ gnche
+.
+ gmru
+ !
+NULL
+)
+
+188
+nche
+.
+mru
+->
+
+->
+nche_ev
+ =
+node
+;
+
+191 if(
+ gnche
+.
+ gu
+ =
+NULL
+)
+
+192
+nche
+.
+u
+ =
+node
+;
+
+195
+ gnche
+.
+ gmru
+ =
+node
+;
+
+198 ++
+ gnche
+.
+ gsize_cut
+;
+
+203
+node_t
+ *
+ gd_u
+;
+
+206
+ gd_u
+ =
+nche
+.
+u
+;
+
+207
+ gnche
+.
+ gsize_cut
+ >che.
+ gsize_max
+;
+
+208
+ gd_u
+ =
+nche
+.
+u
+
+
+212
+nche_node_move
+(
+d_u
+);
+
+215
+tfs_Ėe
+(
+d_u
+);
+
+219
+mux_uock
+(&
+nche
+.
+lock
+);
+
+ @ncache.h
+
+26 #ide
+__NCACHE_H__
+
+
+27 
+ #__NCACHE_H__
+
+
+ )
+
+30 
+ ~<r.h
+>
+
+31 
+ ~<hurd/tfs.h
+>
+
+33 
+ ~"node.h
+"
+
+39 
+ #NCACHE_SIZE
+ 256
+
+ )
+
+44 
+ snche
+
+
+47
+node_t
+ *
+ mmru
+;
+
+50
+node_t
+ *
+ mu
+;
+
+53 
+ msize_max
+;
+
+56 
+ msize_cut
+;
+
+59 
+mux
+
+ mlock
+;
+
+62 
+nche
+
+ tnche_t
+;
+
+68 
+che_size
+;
+
+75
+ gnche_
+
+
+77 
+ gsize_max
+
+
+82
+r_t
+
+
+83
+ gnche_node_lookup
+
+
+85
+ode_t
+ *
+ gode
+,
+
+86
+node_t
+ **
+ gnode
+
+
+91
+nche_t
+();
+
+95
+ gnche_node_add
+
+
+97
+node_t
+ *
+ gnode
+
+
+ @node.c
+
+28 
+ #_GNU_SOURCE
+ 1
+
+ )
+
+30 
+ ~<dlib.h
+>
+
+31 
+ ~<f.h
+>
+
+32 
+ ~<sys/.h
+>
+
+33 
+ ~<sys/mm.h
+>
+
+34 
+ ~<dio.h
+>
+
+36 
+ ~"debug.h
+"
+
+37 
+ ~"node.h
+"
+
+38 
+ ~"tis.h
+"
+
+39 
+ ~"lib.h
+"
+
+40 
+ ~"frfs.h
+"
+
+46 
+mux
+
+ gulfs_lock
+ =
+MUTEX_INITIALIZER
+;
+
+52
+r_t
+
+
+53
+ gnode_
+
+
+55
+ode_t
+ *
+ gode
+,
+
+56
+node_t
+ **
+ gnode
+
+
+59
+r_t
+
+ gr
+ = 0;
+
+62
+Êode_t
+ *
+ gÊode_w
+ =
+mloc
+((netnode_t));
+
+65 if(
+ gÊode_w
+ =
+NULL
+)
+
+66
+r
+ =
+ENOMEM
+;
+
+70
+node_t
+ *
+ gnode_w
+ =
+tfs_make_node
+(
+Êode_w
+);
+
+73 if(
+ gnode_w
+ =
+NULL
+)
+
+76
+r
+ =
+ENOMEM
+;
+
+79
+
+(
+Êode_w
+);
+
+82 
+ gr
+;
+
+86
+ gode
+->
+ gnode
+ =
+node_w
+;
+
+87
+ode_f_add
+(
+ode
+);
+
+90
+ gnode_w
+->
+ g
+->
+ gode
+ =
+ode
+;
+
+91
+ gnode_w
+->
+ g
+->
+ gags
+ = 0;
+
+92
+ gnode_w
+->
+ g
+->
+ gnche_xt
+ =
+node_w
+->
+
+->
+nche_ev
+ =
+NULL
+;
+
+95 *
+ gnode
+ =
+node_w
+;
+
+99 
+ gr
+;
+
+105
+ gnode_deroy
+
+
+107
+node_t
+ *
+ g
+
+
+111
+as
+(!
+
+->
+
+->
+nche_xt
+ || !->->
+nche_ev
+);
+
+114
+PORT_DEALLOC
+(
+
+->
+
+->
+pt
+);
+
+117
+mux_lock
+(&
+
+->
+
+->
+ode
+->
+lock
+);
+
+120
+ g
+->
+ g
+->
+ gode
+->
+ gnode
+ =
+NULL
+;
+
+123
+ode_f_move
+(
+
+->
+
+->
+ode
+);
+
+126
+
+(
+
+->
+
+);
+
+127
+
+(
+
+);
+
+131
+r_t
+
+
+132
+ gnode__ro
+
+
+134
+node_t
+ **
+ gro_node
+
+
+138
+ode_t
+ *
+ gode
+;
+
+139
+r_t
+
+ gr
+ =
+ode_
+(
+NULL
+, &
+ode
+);
+
+142 if(
+ gr
+)
+
+143 
+ gr
+;
+
+146
+node_t
+ *
+ gnode
+;
+
+147
+ gr
+ =
+node_
+(
+ode
+, &
+node
+);
+
+150 if(
+ gr
+)
+
+153
+ode_deroy
+(
+ode
+);
+
+156 
+ gr
+;
+
+160
+mux_uock
+(&
+ode
+->
+lock
+);
+
+163 *
+ gro_node
+ =
+node
+;
+
+166 
+ gr
+;
+
+170
+r_t
+
+
+171
+ gnode__ro
+
+
+173
+node_t
+ *
+ gnode
+
+
+176
+r_t
+
+ gr
+ = 0;
+
+179
+mux_lock
+(&
+ulfs_lock
+);
+
+182
+ gnode
+->
+ g
+->
+ gpt
+ =
+fe_me_lookup
+(
+d
+,
+O_READ
+ |
+O_DIRECTORY
+, 0);
+
+185 if(
+ gnode
+->
+ g
+->
+ gpt
+ =
+MACH_PORT_NULL
+)
+
+188
+r
+ =
+o
+;
+
+189
+LOG_MSG
+("node__ro: Could othp܈f %s.",
+d
+);
+
+192
+mux_uock
+(&
+ulfs_lock
+);
+
+193 
+ gr
+;
+
+196
+LOG_MSG
+("node__ro: P܈f %ݒed sucssfuy.",
+d
+);
+
+197
+LOG_MSG
+("\tPt: 0x%lX", ()
+node
+->
+
+->
+pt
+);
+
+200
+ gr
+ =
+io_
+(
+node
+->
+
+->
+pt
+, &node->
+_
+);
+
+201 if(
+ gr
+)
+
+204
+PORT_DEALLOC
+(
+node
+->
+
+->
+pt
+);
+
+206
+LOG_MSG
+("node_init_root: Couldot statheootode.");
+
+209
+mux_uock
+(&
+ulfs_lock
+);
+
+210 
+ gr
+;
+
+214
+ gnode
+->
+ g
+->
+ gode
+->
+ gth
+ =
+rdup
+(
+d
+);
+
+215 if(!
+ gnode
+->
+ g
+->
+ gode
+->
+ gth
+)
+
+218
+PORT_DEALLOC
+(
+node
+->
+
+->
+pt
+);
+
+221
+mux_uock
+(&
+ulfs_lock
+);
+
+223
+LOG_MSG
+("node_init_root: Couldot strduphe directory.");
+
+224 
+ gENOMEM
+;
+
+228 *
+ gp
+ =
+d
+ +
+
+(dir);
+
+231 ;
+ gp
+ >
+d
+; --p)
+
+234 if(*
+ gp
+ == '/')
+
+237 if(
+p
+ >
+d
+)
+
+240 if(*(
+p
+ - 1) == '\\')
+
+245 ++
+ gp
+;
+
+252
+LOG_MSG
+("node__ro: Thmoroقodi%s.",
+p
+);
+
+255
+ gnode
+->
+ g
+->
+ gode
+->
+ gme
+ =
+rdup
+(
+p
+);
+
+257 if(!
+ gnode
+->
+ g
+->
+ gode
+->
+ gme
+)
+
+260
+
+(
+node
+->
+
+->
+ode
+->
+th
+);
+
+261
+PORT_DEALLOC
+(
+node
+->
+
+->
+pt
+);
+
+264
+mux_uock
+(&
+ulfs_lock
+);
+
+266
+LOG_MSG
+("node_init_root: Couldot strdupheame ofheootode.");
+
+267 
+ gENOMEM
+;
+
+271
+ gnode
+->
+ g
+->
+ gode
+->
+ gme_n
+ =
+
+(
+p
+);
+
+274
+mux_uock
+(&
+ulfs_lock
+);
+
+277 
+ gr
+;
+
+282
+ gnode_s_
+
+
+284
+node_dt_t
+ *
+ gdts
+
+
+288
+node_dt_t
+ *
+ gdt
+, *
+ gdt_xt
+;
+
+291 
+ gdt
+ =
+dts
+; dt; d
+dt_xt
+)
+
+294
+dt_xt
+ =
+dt
+->
+xt
+;
+
+297
+
+(
+dt
+->dirent);
+
+300
+
+(
+dt
+);
+
+305
+r_t
+
+
+306
+ gnode_s_g
+
+
+308
+node_t
+ *
+ gnode
+,
+
+309
+node_dt_t
+ **
+ gdts
+
+
+312
+r_t
+
+ gr
+ = 0;
+
+315 *
+ gth_to_node
+ =
+node
+->
+
+->
+ode
+->
+th
+;
+
+318 
+ gm_s_cou
+ = 0;
+
+321
+size_t
+
+ gݔty_n
+ = (
+ݔty
+? (
+
+(property)) : (0);
+
+324
+size_t
+
+ gݔty_m_n
+ =
+
+(
+PROPERTY_PARAM
+);
+
+327 *
+ gfu_me
+ =
+NULL
+, *
+ gcmd
+ = NULL;
+
+330
+size_t
+
+ gfu_me_size
+ = 1,
+ gcmd_size
+ = 1;
+
+333 if(
+ gݔty_n
+ != 0)
+
+336 *
+occu
+ =
+rr
+(
+ݔty
+,
+PROPERTY_PARAM
+);
+
+339 ;
+ goccu
+;
+
+340
+ goccu
+ =
+rr
+(
+occu
+ + 1,
+PROPERTY_PARAM
+),
+
+341 ++
+ gm_s_cou
+);
+
+344
+ gfu_me
+ =
+mloc
+(
+fu_me_size
+ *
+STRING_CHUNK
+);
+
+345 if(!
+ gfu_me
+)
+
+346 
+ gENOMEM
+;
+
+348
+ gcmd
+ =
+mloc
+(
+cmd_size
+ *
+STRING_CHUNK
+);
+
+349 if(!
+ gcmd
+)
+
+351
+
+(
+fu_me
+);
+
+352 
+ gENOMEM
+;
+
+357
+size_t
+
+ gthn
+ =
+
+(
+th_to_node
+);
+
+362
+ gcheck_ݔty
+
+
+364 cڡ *
+ gme
+
+
+368 if(!
+ gݔty
+)
+
+373
+ gr
+ = 0;
+
+376
+size_t
+
+ gfu_me_n
+ =
+thn
+ + 1 +
+
+(
+me
+) + 1;
+
+379 
+ gchunks
+ =
+fu_me_size
+;
+
+380 ;
+ gfu_me_n
+ >
+chunks
+ *
+ gSTRING_CHUNK
+; ++
+ gchunks
+);
+
+383 if(
+ gchunks
+ >
+ gfu_me_size
+)
+
+386
+
+(
+fu_me
+);
+
+389
+ gfu_me
+ =
+mloc
+(
+chunks
+ *
+STRING_CHUNK
+);
+
+390 if(!
+ gfu_me
+)
+
+392
+ gr
+ =
+ENOMEM
+;
+
+393
+
+(
+cmd
+);
+
+398
+ gfu_me_size
+ =
+chunks
+;
+
+402
+ gfu_me
+[0] = 0;
+
+405
+ry
+(
+fu_me
+,
+th_to_node
+);
+
+406
+rt
+(
+fu_me
+, "/");
+
+407
+rt
+(
+fu_me
+,
+me
+);
+
+412
+size_t
+
+ gsz
+ =
+ݔty_n
+ + (
+
+(
+fu_me
+-
+ݔty_m_n
+)
+
+413 *
+m_s_cou
+;
+
+416 
+ gchunks
+ =
+cmd_size
+;
+ gsz
+ >
+chunks
+ *
+ gSTRING_CHUNK
+; ++chunks);
+
+419 if(
+ gchunks
+ >
+ gcmd_size
+)
+
+422
+
+(
+cmd
+);
+
+425
+ gcmd
+ =
+mloc
+(
+chunks
+ *
+STRING_CHUNK
+);
+
+426 if(!
+ gcmd
+)
+
+428
+ gr
+ =
+ENOMEM
+;
+
+429
+
+(
+fu_me
+);
+
+435
+ gcmd_size
+ =
+chunks
+;
+
+439
+ gcmd
+[0] = 0;
+
+442 *
+ gp
+ =
+rr
+(
+ݔty
+,
+PROPERTY_PARAM
+);
+
+445 *
+ gp
+ =
+ݔty
+;
+
+448 ;
+ gp
+; =
+rr
+(
+p
+,
+PROPERTY_PARAM
+))
+
+451
+t
+(
+cmd
+,
+p
+,
+p
+ -ropp);
+
+454
+rt
+(
+cmd
+,
+fu_me
+);
+
+459
+ gp
+ =
+p
+ +
+ݔty_m_n
+;
+
+465
+rt
+(
+cmd
+,
+p
+);
+
+470 
+ gxcode
+ =
+WEXITSTATUS
+(
+syem
+(
+cmd
+));
+
+473 
+ gxcode
+;
+
+477 
+dt
+ **
+ gdt_li
+, **
+ gdt
+;
+
+480
+node_dt_t
+ *
+ gnode_dt_li
+ =
+NULL
+;
+
+483
+size_t
+
+ gdt_da_size
+;
+
+486 *
+ gdt_da
+;
+
+489
+ gr
+ =
+d_s_g
+
+
+490 (
+node
+->
+
+->
+pt
+, &
+ gdt_da
+, &
+ gdt_da_size
+, &
+ gdt_li
+);
+
+491 if(
+ gr
+)
+
+493 
+ gr
+;
+
+497
+node_dt_t
+ *
+ gnode_dt_w
+;
+
+500 
+dt
+ *
+ gdt_w
+;
+
+505 *
+ gme
+;
+
+508
+size_t
+
+ gme_n
+;
+
+511
+size_t
+
+ gsize
+;
+
+514 
+ ggood
+;
+
+517 
+ gdt
+ =
+dt_li
+; *dirent; ++dirent)
+
+520
+ gme
+ = &((*
+dt
+)->
+d_me
+[0]);
+
+523 if((
+rcmp
+(
+me
+, ".") == 0) || (strcmp(name, "..") == 0))
+
+527
+ ggood
+ =
+check_ݔty
+(
+me
+);
+
+528 if(
+ gr
+)
+
+532 if(
+ ggood
+ != 0)
+
+536
+ gme_n
+ =
+
+(
+me
+);
+
+539
+ gsize
+ =
+DIRENT_LEN
+(
+me_n
+);
+
+542
+ gnode_dt_w
+ =
+mloc
+((
+node_dt_t
+));
+
+543 if(!
+ gnode_dt_w
+)
+
+545
+ gr
+ =
+ENOMEM
+;
+
+550
+ gdt_w
+ =
+mloc
+(
+size
+);
+
+551 if(!
+ gdt_w
+)
+
+553
+
+(
+node_dt_w
+);
+
+554
+ gr
+ =
+ENOMEM
+;
+
+559
+ gdt_w
+->
+ gd_o
+ = (*
+dt
+)->
+d_o
+;
+
+560
+ gdt_w
+->
+ gd_ty
+ = (*
+dt
+)->
+d_ty
+;
+
+561
+ gdt_w
+->
+ gd_
+ =
+size
+;
+
+562
+ry
+((*)
+dt_w
+ +
+DIRENT_NAME_OFFS
+,
+me
+);
+
+565
+ gnode_dt_w
+->
+ gdt
+ =
+dt_w
+;
+
+566
+ gnode_dt_w
+->
+ gxt
+ =
+node_dt_li
+;
+
+567
+ gnode_dt_li
+ =
+node_dt_w
+;
+
+571 if(
+ gr
+)
+
+573
+node_s_
+(
+node_dt_li
+);
+
+576 *
+ gdts
+ =
+node_dt_li
+;
+
+579
+
+(
+dt_li
+);
+
+582
+munm
+(
+dt_da
+,
+dt_da_size
+);
+
+585 if(
+ gfu_me
+)
+
+586
+
+(
+fu_me
+);
+
+587 if(
+ gcmd
+)
+
+588
+
+(
+cmd
+);
+
+591 
+ gr
+;
+
+596
+r_t
+
+
+597
+ gnode_upde
+
+
+599
+node_t
+ *
+ gnode
+
+
+602
+r_t
+
+ gr
+ = 0;
+
+605 *
+ gth
+;
+
+608
+io_buf_t
+
+ g
+;
+
+611
+fe_t
+
+ gpt
+;
+
+614 if(
+NODE_IS_ROOT
+(
+node
+|| (
+ gnode
+->
+ g
+->
+ gags
+ &
+ gFLAG_NODE_ULFS_FIXED
+))
+
+616 
+ gr
+;
+
+619
+mux_lock
+(&
+tfs_ro_node
+->
+lock
+);
+
+622
+ gr
+ =
+ode_th_cڡru
+(
+node
+->
+
+->
+ode
+, &
+th
+);
+
+623 if(
+ gr
+)
+
+625
+mux_uock
+(&
+tfs_ro_node
+->
+lock
+);
+
+626 
+ gr
+;
+
+630 if(
+ gnode
+->
+ g
+->
+ gpt
+)
+
+631
+PORT_DEALLOC
+(
+node
+->
+
+->
+pt
+);
+
+634
+ gr
+ =
+fe_lookup
+
+
+636
+tfs_ro_node
+->
+
+->
+pt
+,
+ gth
+,
+ gO_READ
+ |
+ gO_NOTRANS
+, O_NOTRANS,
+
+637 0, &
+ gpt
+, &
+ g
+
+
+639 if(
+ gr
+)
+
+641
+ gnode
+->
+ g
+->
+ gpt
+ =
+MACH_PORT_NULL
+;
+
+642
+ gr
+ = 0;
+
+643 
+ gr
+;
+
+649 (
+ g
+.
+ g_o
+ =
+undlyg_node_
+.
+_o
+)
+
+650 && (
+
+.
+_fsid
+ =
+undlyg_node_
+.st_fsid)
+
+653
+r
+ =
+ELOOP
+;
+
+657
+PORT_DEALLOC
+(
+pt
+);
+
+660
+ gr
+ =
+fe_lookup
+
+
+661 (
+tfs_ro_node
+->
+
+->
+pt
+,
+ gth
+,
+ gO_READ
+, 0, 0, &
+ gpt
+, &
+ g
+);
+
+665 if(
+ gr
+)
+
+667
+ gpt
+ =
+MACH_PORT_NULL
+;
+
+670
+ gnode
+->
+ g
+->
+ gpt
+ =
+pt
+;
+
+674
+ gnode
+->
+ g
+->
+ gags
+ &~
+FLAG_NODE_INVALIDATE
+;
+
+675
+ gnode
+->
+ g
+->
+ gags
+ |
+FLAG_NODE_ULFS_UPTODATE
+;
+
+678
+mux_uock
+(&
+tfs_ro_node
+->
+lock
+);
+
+681 
+ gr
+;
+
+685
+r_t
+
+
+686
+ gnode_g_size
+
+
+688
+node_t
+ *
+ gd
+,
+
+689
+OFFSET_T
+ *
+ goff
+
+
+692
+r_t
+
+ gr
+ = 0;
+
+695
+size_t
+
+ gsize
+ = 0;
+
+704
+node_dt_t
+ *
+ gdt_cut
+ =
+NULL
+;
+
+707
+node_dt_t
+ *
+ gdt_li
+ =
+NULL
+;
+
+714
+ gbump_size
+
+
+716 cڡ *
+ gme
+
+
+720
+ gsize
+ +
+DIRENT_LEN
+(
+
+(
+me
+));
+
+727
+ gr
+ =
+node_s_g
+(
+d
+, &
+dt_li
+);
+
+728 if(
+ gr
+)
+
+729 
+ gr
+;
+
+754
+ gdt_cut
+ =
+dt_li
+ ; dirent_current;
+
+755
+ gdt_cut
+ =
+dt_cut
+->
+xt
+
+
+757
+bump_size
+(
+dt_cut
+->
+dt
+->
+d_me
+);
+
+760
+node_s_
+(
+dt_li
+);
+
+763 *
+ goff
+ =
+size
+;
+
+768
+r_t
+
+
+769
+ gnode_uƚk_fe
+
+
+771
+node_t
+ *
+ gd
+,
+
+772 *
+ gme
+
+
+775
+r_t
+
+ gr
+ = 0;
+
+778
+mach_pt_t
+
+ gp
+;
+
+781
+io_buf_t
+
+ g
+;
+
+784 if(
+ gd
+->
+ g
+->
+ gpt
+ =
+MACH_PORT_NULL
+)
+
+786 
+ENOENT
+;
+
+789
+ gr
+ =
+fe_lookup
+(
+d
+->
+
+->
+pt
+,
+me
+,
+O_NOTRANS
+, O_NOTRANS, 0, &
+p
+, &
+
+);
+
+790 if(
+ gr
+)
+
+791 
+ gr
+;
+
+794
+PORT_DEALLOC
+(
+p
+);
+
+797
+ gr
+ =
+d_uƚk
+(
+d
+->
+
+->
+pt
+,
+me
+);
+
+798 if(
+ gr
+)
+
+799 
+ gr
+;
+
+801 
+ gr
+;
+
+ @node.h
+
+26 #ide
+__NODE_H__
+
+
+27 
+ #__NODE_H__
+
+
+ )
+
+30 
+ ~<r.h
+>
+
+31 
+ ~<sys/.h
+>
+
+32 
+ ~<hurd/tfs.h
+>
+
+34 
+ ~"ode.h
+"
+
+40 
+ #NODE_IS_ROOT
+(
+n
+(()->
+
+->
+ode
+->
+d
+? (0: (1))
+
+ )
+
+43 
+ #FLAG_NODE_ULFS_FIXED
+ 0x00000001
+
+ )
+
+44 
+ #FLAG_NODE_INVALIDATE
+ 0x00000002
+
+ )
+
+45 
+ #FLAG_NODE_ULFS_UPTODATE
+ 0x00000004
+
+ )
+
+48 #ifde
+__USE_FILE_OFFSET64
+
+
+49 
+ #OFFSET_T
+
+__off64_t
+
+
+ )
+
+51 
+ #OFFSET_T
+
+__off_t
+
+
+ )
+
+56 
+ #STRING_CHUNK
+ 256
+
+ )
+
+61 
+ sÊode
+
+
+64
+ode_t
+ *
+ mode
+;
+
+67 
+ mags
+;
+
+70
+fe_t
+
+ mpt
+;
+
+73
+node_t
+ *
+ mnche_ev
+, *
+ mnche_xt
+;
+
+76 
+Êode
+
+ tÊode_t
+;
+
+79 
+ snode_dt
+
+
+82 
+dt
+ *
+ mdt
+;
+
+85 
+node_dt
+ *
+ mxt
+;
+
+88 
+node_dt
+
+ tnode_dt_t
+;
+
+94 
+mux
+
+ulfs_lock
+;
+
+100
+r_t
+
+
+101
+ gnode_
+
+
+103
+ode_t
+ *
+ gode
+,
+
+104
+node_t
+ **
+ gnode
+
+
+110
+ gnode_deroy
+
+
+112
+node_t
+ *
+ g
+
+
+116
+r_t
+
+
+117
+ gnode__ro
+
+
+119
+node_t
+ **
+ gro_node
+
+
+123
+r_t
+
+
+124
+ gnode__ro
+
+
+126
+node_t
+ *
+ gnode
+
+
+131
+ gnode_s_
+
+
+133
+node_dt_t
+ *
+ gdts
+
+
+137
+r_t
+
+
+138
+ gnode_s_g
+
+
+140
+node_t
+ *
+ gnode
+,
+
+141
+node_dt_t
+ **
+ gdts
+
+
+146
+r_t
+
+
+147
+ gnode_upde
+
+
+149
+node_t
+ *
+ gnode
+
+
+153
+r_t
+
+
+154
+ gnode_g_size
+
+
+156
+node_t
+ *
+ gd
+,
+
+157
+OFFSET_T
+ *
+ goff
+
+
+161
+r_t
+
+
+162
+ gnode_uƚk_fe
+
+
+164
+node_t
+ *
+ gd
+,
+
+165 *
+ gme
+
+
+ @options.c
+
+28 
+ #_GNU_SOURCE
+ 1
+
+ )
+
+30 
+ ~<gp.h
+>
+
+31 
+ ~<r.h
+>
+
+33 
+ ~"debug.h
+"
+
+34 
+ ~"tis.h
+"
+
+35 
+ ~"nche.h
+"
+
+36 
+ ~"node.h
+"
+
+42 
+ #ARGS_DOC
+ "DIR"
+
+ )
+
+43 
+ #DOC
+ "ShowthcڋoDIR fdccdgPROPERTY.\
+ DIR in scifd, ~/ iassumed."
+
+ )
+
+51
+r_t
+
+
+52
+ ggp_r_comm_tis
+
+
+54 
+ gkey
+,
+
+55 *
+ gg
+,
+
+56 
+gp_e
+ *
+ ge
+
+
+61
+r_t
+
+
+62
+ ggp_r_tup_tis
+
+
+64 
+ gkey
+,
+
+65 *
+ gg
+,
+
+66 
+gp_e
+ *
+ ge
+
+
+77 
+ grsg_tup_tis_fished
+;
+
+80 cڡ 
+gp_ti
+
+ ggp_comm_tis
+[] =
+
+82 {
+OPT_LONG_CACHE_SIZE
+,
+OPT_CACHE_SIZE
+, "SIZE", 0,
+
+84 {
+OPT_LONG_PROPERTY
+,
+OPT_PROPERTY
+, "PROPERTY", 0,
+
+89 cڡ 
+gp_ti
+
+ ggp_tup_tis
+[] =
+
+95 cڡ 
+gp
+
+ ggp_rr_comm_tis
+ =
+
+96 {
+gp_comm_tis
+,
+gp_r_comm_tis
+, 0, 0, 0};
+
+99 cڡ 
+gp
+
+ ggp_rr_tup_tis
+ =
+
+100 {
+gp_tup_tis
+,
+gp_r_tup_tis
+, 0, 0, 0};
+
+103 cڡ 
+gp_chd
+
+ ggp_chdn_ruime
+[] =
+
+105 {&
+gp_rr_comm_tis
+},
+
+106 {&
+tfs_d_ruime_gp
+},
+
+111 cڡ 
+gp_chd
+
+ ggp_chdn_tup
+[] =
+
+113 {&
+gp_rr_tup_tis
+},
+
+114 {&
+gp_rr_comm_tis
+},
+
+115 {&
+tfs_d_tup_gp
+},
+
+120 cڡ *
+ ggp_ogm_vsi
+ = "0.0";
+
+123 
+gp
+
+ ggp_ruime
+ =
+
+124 {0, 0, 0, 0,
+gp_chdn_ruime
+};
+
+127 
+gp
+
+ ggp_tup
+ =
+
+128 {0, 0,
+ARGS_DOC
+,
+DOC
+,
+gp_chdn_tup
+};
+
+131 *
+ gݔty
+ =
+NULL
+;
+
+134 *
+ gd
+ =
+NULL
+;
+
+141
+r_t
+
+
+142
+ ggp_r_comm_tis
+
+
+144 
+ gkey
+,
+
+145 *
+ gg
+,
+
+146 
+gp_e
+ *
+ ge
+
+
+149
+r_t
+
+ gr
+ = 0;
+
+152 
+ gkey
+)
+
+154 
+ gOPT_CACHE_SIZE
+:
+
+157
+nche_size
+ =
+
+(
+g
+,
+NULL
+, 10);
+
+161 
+ gOPT_PROPERTY
+:
+
+164
+ݔty
+ =
+rdup
+(
+g
+);
+
+165 if(!
+ gݔty
+)
+
+166
+r
+(
+EXIT_FAILURE
+,
+ENOMEM
+, "Couldot strdupheroperty");
+
+170 
+ gARGP_KEY_ARG
+:
+
+173
+d
+ =
+rdup
+(
+g
+);
+
+174 if(!
+ gd
+)
+
+175
+r
+(
+EXIT_FAILURE
+,
+ENOMEM
+, "argp_parse_common_options: "
+
+179 
+ gi
+ =
+
+(
+d
+) - 1;
+
+184 if((
+ gd
+[
+i
+] == '/') && (i != 0))
+
+186
+d
+[
+i
+] = 0;
+
+188
+LOG_MSG
+("gp_r_comm_tis: Frghdey %s.",
+d
+);
+
+192 
+ gARGP_KEY_END
+:
+
+195 if(!
+rsg_tup_tis_fished
+)
+
+198
+nche_t
+();
+
+201 if(!
+ gd
+)
+
+207
+ gd
+ = "/var/tmp";
+
+211
+ grsg_tup_tis_fished
+ = 1;
+
+222
+r
+ =
+ARGP_ERR_UNKNOWN
+;
+
+227 
+ gr
+;
+
+232
+r_t
+
+
+233
+ ggp_r_tup_tis
+
+
+235 
+ gkey
+,
+
+236 *
+ gg
+,
+
+237 
+gp_e
+ *
+ ge
+
+
+241
+r_t
+
+ gr
+ = 0;
+
+243 
+ gkey
+)
+
+247
+r
+ =
+ARGP_ERR_UNKNOWN
+;
+
+253 
+ gr
+;
+
+ @options.h
+
+26 #ide
+__OPTIONS_H__
+
+
+27 
+ #__OPTIONS_H__
+
+
+ )
+
+32 
+ #OPT_CACHE_SIZE
+ 'c'
+
+ )
+
+34 
+ #OPT_PROPERTY
+ 'p'
+
+ )
+
+37 
+ #OPT_LONG_CACHE_SIZE
+ "che-size"
+
+ )
+
+38 
+ #OPT_LONG_PROPERTY
+ "ݔty"
+
+ )
+
+41 
+ #OPT_LONG
+(
+o
+"--"
+ )
+o
+
+44 
+ #PROPERTY_PARAM
+ "{}"
+
+ )
+
+50 
+gp
+
+gp_tup
+;
+
+53 
+gp
+
+gp_ruime
+;
+
+56 
+nche_size
+;
+
+59 *
+ݔty
+;
+
+62 *
+d
+;
+
+ @/usr/include/dirent.h
+
+58 #ide
+_DIRENT_H_
+
+
+59 
+ #_DIRENT_H_
+
+
+ )
+
+65 
+ ~<_tys.h
+>
+
+66 
+ ~<sys/dt.h
+>
+
+68 
+ g_d
+;
+
+72 
+ m__dd_fd
+;
+
+73 
+ m__dd_loc
+;
+
+74 
+ m__dd_size
+;
+
+75 *
+ m__dd_buf
+;
+
+76 
+ m__dd_n
+;
+
+77 
+ m__dd_ek
+;
+
+78 
+ m__dd_wd
+;
+
+79 
+ m__dd_ags
+;
+
+80
+__dw_had_mux_t
+
+ m__dd_lock
+;
+
+81 
+_d
+ *
+ m__dd_td
+;
+
+82 }
+ tDIR
+;
+
+84 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+86 
+ #DIRBLKSIZ
+ 1024
+
+ )
+
+88 
+ #dfd
+(
+dp
+((dp)->
+__dd_fd
+)
+
+ )
+
+91 
+ #DTF_HIDEW
+ 0x0001
+
+ )
+
+92 
+ #DTF_NODUP
+ 0x0002
+
+ )
+
+93 
+ #DTF_REWIND
+ 0x0004
+
+ )
+
+94 
+ #__DTF_READALL
+ 0x0008
+
+ )
+
+98 #ide
+KERNEL
+
+
+100 
+ ~<sys/cdefs.h
+>
+
+102
+ g__BEGIN_DECLS
+
+
+103 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+104 
+ $phast
+(cڡ *, cڡ *
+ `__DARWIN_INODE64
+(
+phast
+);
+
+106 
+ $od
+(
+DIR
+ *
+ `__DARWIN_ALIAS
+(
+od
+);
+
+107 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+108 
+ `gds
+(, *, , *);
+
+110
+DIR
+ *
+ $ݒd
+(cڡ *
+ `__DARWIN_ALIAS_I
+(
+ݒd
+);
+
+111 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+112
+DIR
+ *
+ $__ݒd2
+(cڡ *, 
+ `__DARWIN_ALIAS_I
+(
+__ݒd2
+);
+
+114 
+dt
+ *
+ $add
+(
+DIR
+ *
+ `__DARWIN_INODE64
+(
+add
+);
+
+115 
+ $add_r
+(
+DIR
+ *, 
+dt
+ *, d**
+ `__DARWIN_INODE64
+(
+add_r
+);
+
+116 
+ $wdd
+(
+DIR
+ *
+ `__DARWIN_ALIAS_I
+(
+wdd
+);
+
+117 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+118 
+ `snd
+(cڡ *, 
+dt
+ ***,
+
+119 (*)(
+dt
+ *), (*)(cڡ *, cڡ *)
+ `__DARWIN_INODE64
+(
+snd
+);
+
+121 
+ $ekd
+(
+DIR
+ *, 
+ `__DARWIN_ALIAS_I
+(
+ekd
+);
+
+122 
+ $d
+(
+DIR
+ *
+ `__DARWIN_ALIAS_I
+(
+d
+);
+
+123
+__END_DECLS
+
+
+ @/usr/include/fcntl.h
+
+23 
+ ~<sys/f.h
+>
+
+ @/usr/include/stddef.h
+
+61 #i!
+defed
+(
+__STDDEF_H__
+)
+
+63 #i!
+defed
+(
+__ed_wch_t
+&& !defed(
+__ed_size_t
+) \
+
+64 && !
+defed
+(
+__ed_rdiff_t
+&& !defed(
+__ed_NULL
+) \
+
+65 && !
+ $defed
+(
+__ed_wt_t
+)
+
+66 
+ #__STDDEF_H__
+
+
+ )
+
+69 
+ ~<_tys.h
+>
+
+71 #i
+ `defed
+(
+__STDDEF_H__
+|| defed(
+__ed_rdiff_t
+)
+
+72 #ide
+_PTRDIFF_T
+
+
+73 
+ #_PTRDIFF_T
+
+
+ )
+
+74 
+__dw_rdiff_t
+
+ trdiff_t
+;
+
+78 #i
+ `defed
+(
+__STDDEF_H__
+|| defed(
+__ed_size_t
+)
+
+79 #idef
+_SIZE_T
+
+
+80 
+ #_SIZE_T
+
+
+ )
+
+83 
+__dw_size_t
+
+ tsize_t
+;
+
+87 #i
+ `defed
+(
+__STDDEF_H__
+|| defed(
+__ed_wch_t
+)
+
+88 #idef
+__lulus
+
+
+89 #idef
+_WCHAR_T
+
+
+90 
+ #_WCHAR_T
+
+
+ )
+
+91 
+__dw_wch_t
+
+ twch_t
+;
+
+96 #i(
+ `defed
+(
+__STDDEF_H__
+&& !defed(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))) \
+
+97 ||
+ $defed
+(
+__ed_wt_t
+)
+
+98 #idef
+_WINT_T
+
+
+99 
+ #_WINT_T
+
+
+ )
+
+100 
+__dw_wt_t
+
+ twt_t
+;
+
+104 #i
+ `defed
+(
+__STDDEF_H__
+|| defed(
+__ed_NULL
+)
+
+105 #ide
+NULL
+
+
+106 
+ #NULL
+
+__DARWIN_NULL
+
+
+ )
+
+110 #ifde
+__STDDEF_H__
+
+
+111 #i
+ `defed
+(
+__GNUC__
+&& (__GNUC__ =3 &&
+__GNUC_MINOR__
+ >= 5 || __GNUC__ > 3)
+
+112 #ide
+__offtof
+
+
+113 
+ #__offtof
+(
+ty
+,
+fld
+
+ `__but_offtof
+y, fld)
+
+ )
+
+115 
+ #offtof
+(
+ty
+,
+fld
+
+ `__but_offtof
+y, fld)
+
+ )
+
+117 #ide
+__offtof
+
+
+118 
+ #__offtof
+(
+ty
+,
+fld
+((
+size_t
+)(&(y *)0)->fld))
+
+ )
+
+120 
+ #offtof
+(
+ty
+,
+fld
+((
+size_t
+)(&(y *)0)->fld))
+
+ )
+
+126 #unde
+__ed_rdiff_t
+
+
+127 #unde
+__ed_size_t
+
+
+128 #unde
+__ed_wch_t
+
+
+129 #unde
+__ed_wt_t
+
+
+130 #unde
+__ed_NULL
+
+
+ @/usr/include/stdio.h
+
+61 #idef
+_STDIO_H_
+
+
+62 
+ #_STDIO_H_
+
+
+ )
+
+64 
+ ~<_tys.h
+>
+
+66 #ide
+_VA_LIST
+
+
+67 
+ #_VA_LIST
+
+
+ )
+
+70 
+__dw_va_li
+
+ tva_li
+;
+
+73 #idef
+_OFF_T
+
+
+74 
+ #_OFF_T
+
+
+ )
+
+75 
+__dw_off_t
+
+ toff_t
+;
+
+78 #idef
+_SIZE_T
+
+
+79 
+ #_SIZE_T
+
+
+ )
+
+80 
+__dw_size_t
+
+ tsize_t
+;
+
+83 #ide
+NULL
+
+
+84 
+ #NULL
+
+__DARWIN_NULL
+
+
+ )
+
+87 
+__dw_off_t
+
+ tos_t
+;
+
+89 
+ #_FSTDIO
+
+
+ )
+
+98 
+ s__sbuf
+ {
+
+99 *
+ m_ba
+;
+
+100 
+ m_size
+;
+
+104 
+ g__sFILEX
+;
+
+132 
+ s__sFILE
+ {
+
+133 *
+ m_p
+;
+
+134 
+ m_r
+;
+
+135 
+ m_w
+;
+
+136 
+ m_ags
+;
+
+137 
+ m_fe
+;
+
+138 
+__sbuf
+
+ m_bf
+;
+
+139 
+ m_lbfsize
+;
+
+142 *
+ m_cook
+;
+
+143 (*
+ m_o
+)(*);
+
+144 (*
+ m_ad
+) (*, *, );
+
+145
+os_t
+ (*
+_ek
+(*,
+ mos_t
+, );
+
+146 (*
+ m_wre
+)(*, const *, );
+
+149 
+__sbuf
+
+ m_ub
+;
+
+150 
+__sFILEX
+ *
+ m_exa
+;
+
+151 
+ m_ur
+;
+
+154 
+ m_ubuf
+[3];
+
+155 
+ m_nbuf
+[1];
+
+158 
+__sbuf
+
+ m_lb
+;
+
+161 
+ m_blksize
+;
+
+162
+os_t
+
+ m_offt
+;
+
+163 }
+ tFILE
+;
+
+165
+ g__BEGIN_DECLS
+
+
+166 #i
+__DARWIN_UNIX03
+
+
+167
+FILE
+ *
+__dp
+;
+
+168
+FILE
+ *
+__dou
+;
+
+169
+FILE
+ *
+__d
+;
+
+171
+FILE
+
+__sF
+[];
+
+173
+ g__END_DECLS
+
+
+175 
+ #__SLBF
+ 0x0001
+
+ )
+
+176 
+ #__SNBF
+ 0x0002
+
+ )
+
+177 
+ #__SRD
+ 0x0004
+
+ )
+
+178 
+ #__SWR
+ 0x0008
+
+ )
+
+180 
+ #__SRW
+ 0x0010
+
+ )
+
+181 
+ #__SEOF
+ 0x0020
+
+ )
+
+182 
+ #__SERR
+ 0x0040
+
+ )
+
+183 
+ #__SMBF
+ 0x0080
+
+ )
+
+184 
+ #__SAPP
+ 0x0100
+
+ )
+
+185 
+ #__SSTR
+ 0x0200
+
+ )
+
+186 
+ #__SOPT
+ 0x0400
+
+ )
+
+187 
+ #__SNPT
+ 0x0800
+
+ )
+
+188 
+ #__SOFF
+ 0x1000
+
+ )
+
+189 
+ #__SMOD
+ 0x2000
+
+ )
+
+190 
+ #__SALC
+ 0x4000
+
+ )
+
+191 
+ #__SIGN
+ 0x8000
+
+ )
+
+202 
+ #_IOFBF
+ 0
+
+ )
+
+203 
+ #_IOLBF
+ 1
+
+ )
+
+204 
+ #_IONBF
+ 2
+
+ )
+
+206 
+ #BUFSIZ
+ 1024
+
+ )
+
+207 
+ #EOF
+ (-1)
+
+ )
+
+215 
+ #FOPEN_MAX
+ 20
+
+ )
+
+216 
+ #FILENAME_MAX
+ 1024
+
+ )
+
+219 #ide
+_ANSI_SOURCE
+
+
+220 
+ #P_tmpd
+ "/v/tmp/"
+
+ )
+
+222 
+ #L_tmam
+ 1024
+
+ )
+
+223 
+ #TMP_MAX
+ 308915776
+
+ )
+
+225 #ide
+SEEK_SET
+
+
+226 
+ #SEEK_SET
+ 0
+
+ )
+
+228 #ide
+SEEK_CUR
+
+
+229 
+ #SEEK_CUR
+ 1
+
+ )
+
+231 #ide
+SEEK_END
+
+
+232 
+ #SEEK_END
+ 2
+
+ )
+
+235 #i
+__DARWIN_UNIX03
+
+
+236 
+ #d
+
+__dp
+
+
+ )
+
+237 
+ #dout
+
+__dou
+
+
+ )
+
+238 
+ #dr
+
+__d
+
+
+ )
+
+240 
+ #d
+ (&
+__sF
+[0])
+
+ )
+
+241 
+ #dout
+ (&
+__sF
+[1])
+
+ )
+
+242 
+ #dr
+ (&
+__sF
+[2])
+
+ )
+
+248
+__BEGIN_DECLS
+
+
+249 
+
+(
+FILE
+ *);
+
+250 
+fo
+(
+FILE
+ *);
+
+251 
+of
+(
+FILE
+ *);
+
+252 
+
+(
+FILE
+ *);
+
+253 
+fush
+(
+FILE
+ *);
+
+254 
+fgc
+(
+FILE
+ *);
+
+255 
+fgpos
+(
+FILE
+ *
+__ri
+,
+os_t
+ *);
+
+256 *
+fgs
+(*
+__ri
+, ,
+FILE
+ *);
+
+257
+FILE
+ *
+fݒ
+(cڡ *
+__ri
+, const * __restrict);
+
+258 
+ $rtf
+(
+FILE
+ *
+__ri
+, cڡ * __ri, ...
+ `__DARWIN_LDBL_COMPAT
+(
+rtf
+);
+
+259 
+ `utc
+(,
+FILE
+ *);
+
+260 
+ $uts
+(cڡ *
+__ri
+,
+FILE
+ * __ri
+ `__DARWIN_ALIAS
+(
+uts
+);
+
+261
+size_t
+
+ `d
+(*
+__ri
+, size_t, size_t,
+FILE
+ * __restrict);
+
+262
+FILE
+ *
+ $eݒ
+(cڡ *
+__ri
+, const * __restrict,
+
+263
+FILE
+ *
+__ri
+
+ `__DARWIN_ALIAS
+(
+eݒ
+);
+
+264 
+ $fsnf
+(
+FILE
+ *
+__ri
+, cڡ * __ri, ...
+ `__DARWIN_LDBL_COMPAT
+(
+fsnf
+);
+
+265 
+ `fek
+(
+FILE
+ *, , );
+
+266 
+ `fos
+(
+FILE
+ *, cڡ
+os_t
+ *);
+
+267 
+ `l
+(
+FILE
+ *);
+
+268
+size_t
+
+ $fwre
+(cڡ *
+__ri
+,
+size_t
+, size_t,
+FILE
+ * __ri
+ `__DARWIN_ALIAS
+(
+fwre
+);
+
+269 
+ `gc
+(
+FILE
+ *);
+
+270 
+ `gch
+();
+
+271 *
+ `gs
+(*);
+
+272 #i!
+ `defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+273
+__cڡ
+ 
+sys_ü
+;
+
+274
+__cڡ
+ *__cڡ
+sys_i
+[];
+
+276 
+ `
+(const *);
+
+277 
+ $tf
+(cڡ *
+__ri
+, ...
+ `__DARWIN_LDBL_COMPAT
+(
+tf
+);
+
+278 
+ `putc
+(,
+FILE
+ *);
+
+279 
+ `putch
+();
+
+280 
+ `puts
+(const *);
+
+281 
+ `move
+(const *);
+
+282 
+ `me
+ (const *, const *);
+
+283 
+ `wd
+(
+FILE
+ *);
+
+284 
+ $snf
+(cڡ *
+__ri
+, ...
+ `__DARWIN_LDBL_COMPAT
+(
+snf
+);
+
+285 
+ `tbuf
+(
+FILE
+ *
+__ri
+, * __restrict);
+
+286 
+ `tvbuf
+(
+FILE
+ *
+__ri
+, * __ri, ,
+size_t
+);
+
+287 
+ $rtf
+(*
+__ri
+, cڡ * __ri, ...
+ `__DARWIN_LDBL_COMPAT
+(
+rtf
+);
+
+288 
+ $ssnf
+(cڡ *
+__ri
+, cڡ * __ri, ...
+ `__DARWIN_LDBL_COMPAT
+(
+ssnf
+);
+
+289
+FILE
+ *
+ `tmpfe
+();
+
+290 *
+ `tmam
+(*);
+
+291 
+ `ungc
+(,
+FILE
+ *);
+
+292 
+ $vrtf
+(
+FILE
+ *
+__ri
+, cڡ * __ri,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+vrtf
+);
+
+293 
+ $vtf
+(cڡ *
+__ri
+,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+vtf
+);
+
+294 
+ $vrtf
+(*
+__ri
+, cڡ * __ri,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+vrtf
+);
+
+295 #i!
+ `defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+296 
+ $artf
+(**, cڡ *, ...
+ `__DARWIN_LDBL_COMPAT
+(
+artf
+);
+
+297 
+ $vartf
+(**, cڡ *,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+vartf
+);
+
+299
+__END_DECLS
+
+
+304 #ide
+_ANSI_SOURCE
+
+
+305 
+ #L_mid
+ 1024
+
+ )
+
+307
+__BEGIN_DECLS
+
+
+308 *
+ `mid
+(*);
+
+309 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+310 *
+ `mid_r
+(*);
+
+312
+FILE
+ *
+ `fdݒ
+(, const *);
+
+313 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+314 *
+ `fg
+(
+FILE
+ *,
+size_t
+ *);
+
+316 
+ `fo
+(
+FILE
+ *);
+
+317 
+ `ockfe
+(
+FILE
+ *);
+
+318 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+319
+__cڡ
+ 
+
+320 *
+ `fmtcheck
+(const *, const *);
+
+321 
+ `urge
+(
+FILE
+ *);
+
+323 
+ `feko
+(
+FILE
+ *,
+off_t
+, );
+
+324
+off_t
+
+ `lo
+(
+FILE
+ *);
+
+325 
+ `rylockfe
+(
+FILE
+ *);
+
+326 
+ `fuockfe
+(
+FILE
+ *);
+
+327 
+ `gc_uocked
+(
+FILE
+ *);
+
+328 
+ `gch_uocked
+();
+
+329 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+330 
+ `gw
+(
+FILE
+ *);
+
+332 
+ `po
+(
+FILE
+ *);
+
+333
+FILE
+ *
+ `pݒ
+(const *, const *);
+
+334 
+ `putc_uocked
+(,
+FILE
+ *);
+
+335 
+ `putch_uocked
+();
+
+336 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+337 
+ `putw
+(,
+FILE
+ *);
+
+338 
+ `tbufr
+(
+FILE
+ *, *, );
+
+339 
+ `ebuf
+(
+FILE
+ *);
+
+341 
+ $tf
+(*
+__ri
+,
+size_t
+, cڡ * __ri, ...
+ `__DARWIN_LDBL_COMPAT
+(
+tf
+);
+
+342 *
+ $mam
+(cڡ *, cڡ *
+ `__DARWIN_ALIAS
+(
+mam
+);
+
+343 
+ $vfsnf
+(
+FILE
+ *
+__ri
+, cڡ * __ri,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+vfsnf
+);
+
+344 
+ $vsnf
+(cڡ *
+__ri
+,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+vsnf
+);
+
+345 
+ $vtf
+(*
+__ri
+,
+size_t
+, cڡ * __ri,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+vtf
+);
+
+346 
+ $vssnf
+(cڡ *
+__ri
+, cڡ * __ri,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+vssnf
+);
+
+347 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+348
+FILE
+ *
+ `zݒ
+(const *, const *, );
+
+350
+__END_DECLS
+
+
+355 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+356
+__BEGIN_DECLS
+
+
+357
+FILE
+ *
+ `funݒ
+(const *,
+
+360
+ $os_t
+ (*)(*,
+os_t
+, ),
+
+362
+__END_DECLS
+
+
+363 
+ #ݒ
+(
+cook
+,
+
+
+ `funݒ
+(cook, fn, 0, 0, 0)
+
+ )
+
+364 
+ #fwݒ
+(
+cook
+,
+
+
+ `funݒ
+(cook, 0, fn, 0, 0)
+
+ )
+
+371
+__BEGIN_DECLS
+
+
+372 
+ `__g
+(
+FILE
+ *);
+
+373 
+ $__svfsnf
+(
+FILE
+ *, cڡ *,
+va_li
+
+ `__DARWIN_LDBL_COMPAT
+(
+__svfsnf
+);
+
+374 
+ `__swbuf
+(,
+FILE
+ *);
+
+375
+__END_DECLS
+
+
+381 
+ #__sgc
+(
+p
+(--)->
+_r
+ < 0 ?
+ `__g
+: ()(*)->
+_p
+++))
+
+ )
+
+382 #i
+ `defed
+(
+__GNUC__
+&& defed(
+__STDC__
+)
+
+383 
+__le
+ 
+ $__utc
+(
+_c
+,
+FILE
+ *
+_p
+) {
+
+384 i(--
+_p
+->
+_w
+ >0 || (_p->_w >_p->
+_lbfsize
+ && ()
+_c
+ != '\n'))
+
+385  (*
+_p
+->_p++ =
+_c
+);
+
+387  (
+ `__swbuf
+(
+_c
+,
+_p
+));
+
+388
+ }
+}
+
+393 
+ #__utc
+(
+c
+,
+p
+) \
+
+394 (--(
+p
+)->
+_w
+ < 0 ? \
+
+395 (
+p
+)->
+_w
+ >)->
+_lbfsize
+ ? \
+
+396 (*(
+p
+)->
+_p
+ = (
+c
+)), *(p)->_p != '\n' ? \
+
+397 ()*(
+p
+)->
+_p
+++ : \
+
+398
+ `__swbuf
+('\n',
+p
+) : \
+
+399
+ `__swbuf
+(()(
+c
+),
+p
+) : \
+
+400 (*(
+p
+)->
+_p
+ = (
+c
+), ()*)->_p++))
+
+ )
+
+403 
+ #__sof
+(
+p
+(()->
+_ags
+ &
+__SEOF
+!0)
+
+ )
+
+404 
+ #__s
+(
+p
+(()->
+_ags
+ &
+__SERR
+!0)
+
+ )
+
+405 
+ #__s
+(
+p
+(()()->
+_ags
+ &~(
+__SERR
+|
+__SEOF
+)))
+
+ )
+
+406 
+ #__sfo
+(
+p
+()->
+_fe
+)
+
+ )
+
+408 #ide
+_ANSI_SOURCE
+
+
+409 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+410 
+ #of_uocked
+(
+p
+
+ `__sof
+)
+
+ )
+
+411 
+ #_uocked
+(
+p
+
+ `__s
+)
+
+ )
+
+412 
+ #_uocked
+(
+p
+
+ `__s
+)
+
+ )
+
+413 
+ #fo_uocked
+(
+p
+
+ `__sfo
+)
+
+ )
+
+416 #ide
+lt
+
+
+417 
+ #gc_uocked
+(
+
+
+ `__sgc
+()
+
+ )
+
+418 
+ #putc_uocked
+(
+x
+,
+
+
+ `__utc
+(x, fp)
+
+ )
+
+421 
+ #gch_uocked
+(
+ `gc_uocked
+(
+d
+)
+
+ )
+
+422 
+ #putch_uocked
+(
+x
+
+ `putc_uocked
+(x,
+dout
+)
+
+ )
+
+425 #ifde
+_USE_EXTENDED_LOCALES_
+
+
+426 
+ ~<xlo/_dio.h
+>
+
+429 #i
+defed
+ (
+__GNUC__
+&&
+_FORTIFY_SOURCE
+ > 0 && !defed (
+__lulus
+)
+
+431 
+ ~<cu/_dio.h
+>
+
+ @/usr/include/stdlib.h
+
+58 #ide
+_STDLIB_H_
+
+
+59 
+ #_STDLIB_H_
+
+
+ )
+
+61 
+ ~<avaab.h
+>
+
+63 
+ ~<_tys.h
+>
+
+64 #i!
+defed
+(
+_ANSI_SOURCE
+)
+
+65 
+ ~<sys/wa.h
+>
+
+66 #i(!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+67 
+ ~<lo.h
+>
+
+71 #idef
+_SIZE_T
+
+
+72 
+ #_SIZE_T
+
+
+ )
+
+75 
+__dw_size_t
+
+ tsize_t
+;
+
+78 #i!
+defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+79 #ide
+_CT_RUNE_T
+
+
+80 
+ #_CT_RUNE_T
+
+
+ )
+
+81 
+__dw__ru_t
+
+ t_ru_t
+;
+
+84 #ide
+_RUNE_T
+
+
+85 
+ #_RUNE_T
+
+
+ )
+
+86 
+__dw_ru_t
+
+ tru_t
+;
+
+90 #idef
+__lulus
+
+
+91 #idef
+_WCHAR_T
+
+
+92 
+ #_WCHAR_T
+
+
+ )
+
+93 
+__dw_wch_t
+
+ twch_t
+;
+
+98 
+ mqu
+;
+
+99 
+ mm
+;
+
+100 }
+ tdiv_t
+;
+
+103 
+ mqu
+;
+
+104 
+ mm
+;
+
+105 }
+ tldiv_t
+;
+
+107 #i!
+__DARWIN_NO_LONG_LONG
+
+
+109 
+ mqu
+;
+
+110 
+ mm
+;
+
+111 }
+ tdiv_t
+;
+
+114 #ide
+NULL
+
+
+115 
+ #NULL
+
+__DARWIN_NULL
+
+
+ )
+
+118 
+ #EXIT_FAILURE
+ 1
+
+ )
+
+119 
+ #EXIT_SUCCESS
+ 0
+
+ )
+
+121 
+ #RAND_MAX
+ 0x7fffffff
+
+ )
+
+123 #ifde
+_USE_EXTENDED_LOCALES_
+
+
+124 
+ ~<_xlo.h
+>
+
+127 #ide
+MB_CUR_MAX
+
+
+128 #ifde
+_USE_EXTENDED_LOCALES_
+
+
+129 
+ #MB_CUR_MAX
+ (
+ `___mb_cur_max
+())
+
+ )
+
+130 #ide
+MB_CUR_MAX_L
+
+
+131 
+ #MB_CUR_MAX_L
+(
+x
+(
+ `___mb_cur_max_l
+(x))
+
+ )
+
+134 
+__mb_cur_max
+;
+
+135 
+ #MB_CUR_MAX
+
+__mb_cur_max
+
+
+ )
+
+139 #i!
+defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)) \
+
+140 &&
+defed
+(
+_USE_EXTENDED_LOCALES_
+&& !
+ $defed
+(
+MB_CUR_MAX_L
+)
+
+141 
+ #MB_CUR_MAX_L
+(
+x
+(
+ `___mb_cur_max_l
+(x))
+
+ )
+
+144
+__BEGIN_DECLS
+
+
+145 
+ $abt
+(
+__dd2
+;
+
+146 
+ $abs
+(
+__pu2
+;
+
+147 
+ `ex
+((*)());
+
+148 
+ `of
+(const *);
+
+149 
+ `oi
+(const *);
+
+150 
+ `
+(const *);
+
+151 #i!
+__DARWIN_NO_LONG_LONG
+
+
+153
+ `l
+(const *);
+
+155 *
+ `bch
+(cڡ *, cڡ *,
+size_t
+,
+
+156
+size_t
+, (*)(const *, const *));
+
+157 *
+ `oc
+(
+size_t
+, size_t);
+
+158
+div_t
+
+ $div
+(, 
+__pu2
+;
+
+159 
+ $ex
+(
+__dd2
+;
+
+160 
+ `
+(*);
+
+161 *
+ `gv
+(const *);
+
+162 
+ $bs
+(
+__pu2
+;
+
+163
+ldiv_t
+
+ $ldiv
+(, 
+__pu2
+;
+
+164 #i!
+__DARWIN_NO_LONG_LONG
+
+
+166
+ `abs
+();
+
+167
+div_t
+
+ `div
+(, );
+
+169 *
+ `mloc
+(
+size_t
+);
+
+170 
+ `mbn
+(cڡ *,
+size_t
+);
+
+171
+size_t
+
+ `mbowcs
+(
+wch_t
+ *
+__ri
+ , const * __restrict, size_t);
+
+172 
+ `mbtowc
+(
+wch_t
+ *
+__ri
+, cڡ * __ri,
+size_t
+);
+
+173 
+ `qst
+(*,
+size_t
+, size_t,
+
+175 
+ `nd
+();
+
+176 *
+ `loc
+(*,
+size_t
+);
+
+177 
+ `d
+();
+
+178 
+ $od
+(cڡ *, **
+ `__DARWIN_ALIAS
+(
+od
+);
+
+179 
+ $of
+(cڡ *, **
+ `__DARWIN_ALIAS
+(
+of
+);
+
+180 
+ `
+(const *, **, );
+
+182
+ $d
+(cڡ *, **
+ `__DARWIN_LDBL_COMPAT
+(
+d
+);
+
+183 #i!
+__DARWIN_NO_LONG_LONG
+
+
+185
+ `l
+(const *, **, );
+
+188
+ `oul
+(const *, **, );
+
+189 #i!
+__DARWIN_NO_LONG_LONG
+
+
+191
+ `ou
+(const *, **, );
+
+193 
+ $syem
+(cڡ *
+ `__DARWIN_ALIAS_C
+(
+syem
+);
+
+194
+size_t
+
+ `wcombs
+(*
+__ri
+, cڡ
+wch_t
+ * __restrict, size_t);
+
+195 
+ `womb
+(*,
+wch_t
+);
+
+197 #ide
+_ANSI_SOURCE
+
+
+198 
+ $_Ex
+(
+__dd2
+;
+
+199 
+ `a64l
+(const *);
+
+200 
+ `dnd48
+();
+
+201 *
+ `ecvt
+(, , *
+__ri
+, *__restrict);
+
+202 
+ `d48
+([3]);
+
+203 *
+ `fcvt
+(, , *
+__ri
+, *__restrict);
+
+204 *
+ `gcvt
+(, , *);
+
+205 
+ `gsubt
+(**, * const *, **);
+
+206 
+ `g
+();
+
+207 #i
+__DARWIN_UNIX03
+
+
+208 *
+ `e
+(, *,
+size_t
+);
+
+210 *
+ `e
+(, *, );
+
+212 
+ `jnd48
+([3]);
+
+213 *
+ `l64a
+();
+
+214 
+ `lcg48
+([7]);
+
+215 
+ `̪d48
+();
+
+216 *
+ `mkmp
+(*);
+
+217 
+ `mkemp
+(*);
+
+218 
+ `mnd48
+();
+
+219 
+ `Īd48
+([3]);
+
+220 
+ `posix_ݒ
+();
+
+221 *
+ `ame
+();
+
+222 
+ $punv
+(*
+ `__DARWIN_ALIAS
+(
+punv
+);
+
+223 
+ `ndom
+();
+
+224 
+ `nd_r
+(*);
+
+225 #i(
+__DARWIN_UNIX03
+ && !
+ `defed
+(
+_POSIX_C_SOURCE
+)|| defed(
+_DARWIN_C_SOURCE
+|| defed(
+_DARWIN_BETTER_REALPATH
+)
+
+226 *
+ $th
+(cڡ *
+__ri
+, * __ri
+ `__DARWIN_EXTSN
+(
+th
+);
+
+228 *
+ $th
+(cڡ *
+__ri
+, * __ri
+ `__DARWIN_ALIAS
+(
+th
+);
+
+231 *
+ `ed48
+([3]);
+
+232 
+ $nv
+(cڡ *, cڡ *, 
+ `__DARWIN_ALIAS
+(
+nv
+);
+
+233 #i
+__DARWIN_UNIX03
+
+
+234 
+ $tkey
+(cڡ *
+ `__DARWIN_ALIAS
+(
+tkey
+);
+
+236 
+ `tkey
+(const *);
+
+238 *
+ `te
+(const *);
+
+239 
+ `d48
+();
+
+240 #i
+__DARWIN_UNIX03
+
+
+241 
+ `dom
+();
+
+243 
+ `dom
+();
+
+245 
+ `uock
+();
+
+246 #i
+__DARWIN_UNIX03
+
+
+247 
+ $unnv
+(cڡ *
+ `__DARWIN_ALIAS
+(
+unnv
+);
+
+249 
+ `unnv
+(const *);
+
+253 #i!
+ `defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+254 
+ ~<mache/tys.h
+>
+
+256 #ide
+_DEV_T
+
+
+257 
+__dw_dev_t
+
+ tdev_t
+;
+
+258 
+ #_DEV_T
+
+
+ )
+
+261 #idef
+_MODE_T
+
+
+262 
+__dw_mode_t
+
+ tmode_t
+;
+
+263 
+ #_MODE_T
+
+
+ )
+
+266
+u_t32_t
+
+
+267
+ `c4ndom
+();
+
+268 
+ `c4ndom_addndom
+(*
+d
+, 
+dn
+);
+
+269 
+ `c4ndom_
+();
+
+272 *
+ `cgp
+(*, const *, );
+
+273 
+ `cgo
+();
+
+274 
+ `cgt
+(**, **, const *);
+
+275 
+ `cgf
+(**, **);
+
+276 
+ `cgmch
+(const *, const *);
+
+277 
+ `cgxt
+(**, **);
+
+278 
+ `cgnum
+(*, const *, *);
+
+279 
+ `cgt
+(const *);
+
+280 
+ `cgr
+(*, const *, **);
+
+281 
+ `cgur
+(*, const *, **);
+
+283 
+ $dm
+(, 
+ $__DARWIN_1050
+(
+dm
+
+__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+;
+
+284 *
+ `devme
+(
+dev_t
+,
+mode_t
+);
+
+285 *
+ `devme_r
+(
+dev_t
+,
+mode_t
+, *
+buf
+, 
+n
+);
+
+286 *
+ `gbsize
+(*, *);
+
+287 
+ `gldavg
+([], );
+
+289 *
+ `gogme
+();
+
+291 
+ `hpst
+(*,
+size_t
+, size_t,
+
+293 
+ `mgest
+(*,
+size_t
+, size_t,
+
+295 
+ `qst_r
+(*,
+size_t
+, size_t, *,
+
+297 
+ `dixst
+(const **, , const *,
+
+299 
+ `rogme
+(const *);
+
+300 
+ `adixst
+(const **, , const *,
+
+302 
+ `ddev
+();
+
+303 
+ `domdev
+();
+
+304 *
+ `locf
+(*,
+size_t
+);
+
+305 #i!
+__DARWIN_NO_LONG_LONG
+
+
+307
+ `oq
+(const *, **, );
+
+309
+ `ouq
+(const *, **, );
+
+311 *
+subݏrg
+;
+
+312 *
+ `vloc
+(
+size_t
+);
+
+316 #i!
+ `defed
+(
+__lulus
+&& defed(
+__WCHAR_MAX__
+) && __WCHAR_MAX__ <= 0xffffU
+
+317 #agm
+GCC
+
+pois
+
+mbowcs
+
+mbtowc
+
+wcombs
+
+womb
+
+
+319
+__END_DECLS
+
+
+321 #ifde
+_USE_EXTENDED_LOCALES_
+
+
+322 
+ ~<xlo/_dlib.h
+>
+
+ @/usr/include/sys/mman.h
+
+76 #idef
+_SYS_MMAN_H_
+
+
+77 
+ #_SYS_MMAN_H_
+
+
+ )
+
+79 
+ ~<sys/pits.h
+>
+
+80 
+ ~<sys/cdefs.h
+>
+
+82 
+ ~<sys/_tys.h
+>
+
+88 #idef
+_MODE_T
+
+
+89 
+__dw_mode_t
+
+ tmode_t
+;
+
+90 
+ #_MODE_T
+
+
+ )
+
+93 #ide
+_OFF_T
+
+
+94 
+__dw_off_t
+
+ toff_t
+;
+
+95 
+ #_OFF_T
+
+
+ )
+
+98 #ide
+_SIZE_T
+
+
+99 
+ #_SIZE_T
+
+
+ )
+
+100 
+__dw_size_t
+
+ tsize_t
+;
+
+107 
+ #PROT_NONE
+ 0x00
+
+ )
+
+108 
+ #PROT_READ
+ 0x01
+
+ )
+
+109 
+ #PROT_WRITE
+ 0x02
+
+ )
+
+110 
+ #PROT_EXEC
+ 0x04
+
+ )
+
+116 
+ #MAP_SHARED
+ 0x0001
+
+ )
+
+117 
+ #MAP_PRIVATE
+ 0x0002
+
+ )
+
+118 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+119 
+ #MAP_COPY
+
+MAP_PRIVATE
+
+
+ )
+
+125 
+ #MAP_FIXED
+ 0x0010
+
+ )
+
+126 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+127 
+ #MAP_RENAME
+ 0x0020
+
+ )
+
+128 
+ #MAP_NORESERVE
+ 0x0040
+
+ )
+
+129 
+ #MAP_RESERVED0080
+ 0x0080
+
+ )
+
+130 
+ #MAP_NOEXTEND
+ 0x0100
+
+ )
+
+131 
+ #MAP_HASSEMAPHORE
+ 0x0200
+
+ )
+
+132 
+ #MAP_NOCACHE
+ 0x0400
+
+ )
+
+138 
+ #MCL_CURRENT
+ 0x0001
+
+ )
+
+139 
+ #MCL_FUTURE
+ 0x0002
+
+ )
+
+144 
+ #MAP_FAILED
+ ((*)-1
+
+ )
+
+149 
+ #MS_ASYNC
+ 0x0001
+
+ )
+
+150 
+ #MS_INVALIDATE
+ 0x0002
+
+ )
+
+151 
+ #MS_SYNC
+ 0x0010
+
+ )
+
+153 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+154 
+ #MS_KILLPAGES
+ 0x0004
+
+ )
+
+155 
+ #MS_DEACTIVATE
+ 0x0008
+
+ )
+
+160 
+ #MAP_FILE
+ 0x0000
+
+ )
+
+161 
+ #MAP_ANON
+ 0x1000
+
+ )
+
+168 
+ #POSIX_MADV_NORMAL
+ 0
+
+ )
+
+169 
+ #POSIX_MADV_RANDOM
+ 1
+
+ )
+
+170 
+ #POSIX_MADV_SEQUENTIAL
+ 2
+
+ )
+
+171 
+ #POSIX_MADV_WILLNEED
+ 3
+
+ )
+
+172 
+ #POSIX_MADV_DONTNEED
+ 4
+
+ )
+
+174 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+175 
+ #MADV_NORMAL
+
+POSIX_MADV_NORMAL
+
+
+ )
+
+176 
+ #MADV_RANDOM
+
+POSIX_MADV_RANDOM
+
+
+ )
+
+177 
+ #MADV_SEQUENTIAL
+
+POSIX_MADV_SEQUENTIAL
+
+
+ )
+
+178 
+ #MADV_WILLNEED
+
+POSIX_MADV_WILLNEED
+
+
+ )
+
+179 
+ #MADV_DONTNEED
+
+POSIX_MADV_DONTNEED
+
+
+ )
+
+180 
+ #MADV_FREE
+ 5
+
+ )
+
+185 
+ #MINCORE_INCORE
+ 0x1
+
+ )
+
+186 
+ #MINCORE_REFERENCED
+ 0x2
+
+ )
+
+187 
+ #MINCORE_MODIFIED
+ 0x4
+
+ )
+
+188 
+ #MINCORE_REFERENCED_OTHER
+ 0x8
+
+ )
+
+189 
+ #MINCORE_MODIFIED_OTHER
+ 0x10
+
+ )
+
+194
+__BEGIN_DECLS
+
+
+196 
+mlockl
+();
+
+197 
+muockl
+();
+
+199 
+mlock
+(cڡ *,
+size_t
+);
+
+200 #ide
+_MMAP
+
+
+201 
+ #_MMAP
+
+
+ )
+
+203 *
+ $mm
+(*,
+size_t
+, , , ,
+off_t
+
+ `__DARWIN_ALIAS
+(
+mm
+);
+
+206 
+ $me
+(*,
+size_t
+, 
+ `__DARWIN_ALIAS
+(
+me
+);
+
+208 
+ $msync
+(*,
+size_t
+, 
+ `__DARWIN_ALIAS_C
+(
+msync
+);
+
+210 
+ `muock
+(cڡ *,
+size_t
+);
+
+212 
+ $munm
+(*,
+size_t
+
+ `__DARWIN_ALIAS
+(
+munm
+);
+
+214 
+ `shm_ݒ
+(const *, , ...);
+
+215 
+ `shm_uƚk
+(const *);
+
+217 
+ `posix_madvi
+(*,
+size_t
+, );
+
+219 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+220 
+ `madvi
+(*,
+size_t
+, );
+
+221 
+ `mce
+(cڡ *,
+size_t
+, *);
+
+222 
+ `mh
+(*,
+size_t
+, );
+
+224
+__END_DECLS
+
+
+ @/usr/include/sys/stat.h
+
+70 #ide
+_SYS_STAT_H_
+
+
+71 
+ #_SYS_STAT_H_
+
+
+ )
+
+73 
+ ~<sys/_tys.h
+>
+
+74 
+ ~<sys/cdefs.h
+>
+
+77 
+ #__ed_ru_timeec
+
+
+ )
+
+78 
+ ~<sys/_rus.h
+>
+
+85 #ide
+_BLKCNT_T
+
+
+86 
+__dw_blkt_t
+
+ tblkt_t
+;
+
+87 
+ #_BLKCNT_T
+
+
+ )
+
+90 #ide
+_BLKSIZE_T
+
+
+91 
+__dw_blksize_t
+
+ tblksize_t
+;
+
+92 
+ #_BLKSIZE_T
+
+
+ )
+
+95 #ide
+_DEV_T
+
+
+96 
+__dw_dev_t
+
+ tdev_t
+;
+
+97 
+ #_DEV_T
+
+
+ )
+
+100 #idef
+_INO_T
+
+
+101 
+__dw_o_t
+
+ to_t
+;
+
+102 
+ #_INO_T
+
+
+ )
+
+105 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+106 #idef
+_INO64_T
+
+
+107 
+__dw_o64_t
+
+ to64_t
+;
+
+108 
+ #_INO64_T
+
+
+ )
+
+112 #idef
+_MODE_T
+
+
+113 
+__dw_mode_t
+
+ tmode_t
+;
+
+114 
+ #_MODE_T
+
+
+ )
+
+117 #ide
+_NLINK_T
+
+
+118 
+__ut16_t
+
+ tƚk_t
+;
+
+119 
+ #_NLINK_T
+
+
+ )
+
+122 #ide
+_UID_T
+
+
+123 
+__dw_uid_t
+
+ tuid_t
+;
+
+124 
+ #_UID_T
+
+
+ )
+
+127 #ide
+_GID_T
+
+
+128 
+__dw_gid_t
+
+ tgid_t
+;
+
+129 
+ #_GID_T
+
+
+ )
+
+132 #ide
+_OFF_T
+
+
+133 
+__dw_off_t
+
+ toff_t
+;
+
+134 
+ #_OFF_T
+
+
+ )
+
+137 #idef
+_TIME_T
+
+
+138 
+ #_TIME_T
+
+
+ )
+
+139 
+__dw_time_t
+
+ ttime_t
+;
+
+143 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+152 
+ so
+ {
+
+153
+__ut16_t
+
+ m_dev
+;
+
+154
+o_t
+
+ m_o
+;
+
+155
+mode_t
+
+ m_mode
+;
+
+156
+ƚk_t
+
+ m_ƚk
+;
+
+157
+__ut16_t
+
+ m_uid
+;
+
+158
+__ut16_t
+
+ m_gid
+;
+
+159
+__ut16_t
+
+ m_rdev
+;
+
+160
+__t32_t
+
+ m_size
+;
+
+161 
+timeec
+
+ m_imeec
+;
+
+162 
+timeec
+
+ m_mtimeec
+;
+
+163 
+timeec
+
+ m_imeec
+;
+
+164
+__t32_t
+
+ m_blksize
+;
+
+165
+__t32_t
+
+ m_blocks
+;
+
+166
+__ut32_t
+
+ m_ags
+;
+
+167
+__ut32_t
+
+ m_g
+;
+
+170 
+ #__DARWIN_STRUCT_STAT64_TIMES
+ \
+
+171 
+timeec
+
+_imeec
+; \
+
+172 
+timeec
+
+_mtimeec
+; \
+
+173 
+timeec
+
+_imeec
+; \
+
+174 
+timeec
+
+_bthtimeec
+;
+
+ )
+
+178 
+ #__DARWIN_STRUCT_STAT64_TIMES
+ \
+
+179
+time_t
+
+_ime
+; \
+
+180 
+_imc
+; \
+
+181
+time_t
+
+_mtime
+; \
+
+182 
+_mtimc
+; \
+
+183
+time_t
+
+_ime
+; \
+
+184 
+_imc
+; \
+
+185
+time_t
+
+_bthtime
+; \
+
+186 
+_bthtimc
+;
+
+ )
+
+200 
+ #__DARWIN_STRUCT_STAT64
+ { \
+
+201
+dev_t
+
+_dev
+; \
+
+202
+mode_t
+
+_mode
+; \
+
+203
+ƚk_t
+
+_ƚk
+; \
+
+204
+__dw_o64_t
+
+_o
+; \
+
+205
+uid_t
+
+_uid
+; \
+
+206
+gid_t
+
+_gid
+; \
+
+207
+dev_t
+
+_rdev
+; \
+
+208
+__DARWIN_STRUCT_STAT64_TIMES
+ \
+
+209
+off_t
+
+_size
+; \
+
+210
+blkt_t
+
+_blocks
+; \
+
+211
+blksize_t
+
+_blksize
+; \
+
+212
+__ut32_t
+
+_ags
+; \
+
+213
+__ut32_t
+
+_g
+; \
+
+214
+__t32_t
+
+_le
+; \
+
+215
+__t64_t
+
+_qe
+[2]; \
+
+216 }
+
+ )
+
+222 #i
+__DARWIN_64_BIT_INO_T
+
+
+224 
+
+
+ g__DARWIN_STRUCT_STAT64
+;
+
+228 
+ s
+ {
+
+229
+dev_t
+
+ m_dev
+;
+
+230
+o_t
+
+ m_o
+;
+
+231
+mode_t
+
+ m_mode
+;
+
+232
+ƚk_t
+
+ m_ƚk
+;
+
+233
+uid_t
+
+ m_uid
+;
+
+234
+gid_t
+
+ m_gid
+;
+
+235
+dev_t
+
+ m_rdev
+;
+
+236 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+237 
+timeec
+
+ m_imeec
+;
+
+238 
+timeec
+
+ m_mtimeec
+;
+
+239 
+timeec
+
+ m_imeec
+;
+
+241
+time_t
+
+ m_ime
+;
+
+242 
+ m_imc
+;
+
+243
+time_t
+
+ m_mtime
+;
+
+244 
+ m_mtimc
+;
+
+245
+time_t
+
+ m_ime
+;
+
+246 
+ m_imc
+;
+
+248
+off_t
+
+ m_size
+;
+
+249
+blkt_t
+
+ m_blocks
+;
+
+250
+blksize_t
+
+ m_blksize
+;
+
+251
+__ut32_t
+
+ m_ags
+;
+
+252
+__ut32_t
+
+ m_g
+;
+
+253
+__t32_t
+
+ m_le
+;
+
+254
+__t64_t
+
+ m_qe
+[2];
+
+259 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+261 
+64
+
+ g__DARWIN_STRUCT_STAT64
+;
+
+268 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+269 
+ #_ime
+
+_imeec
+.
+tv_c
+
+
+ )
+
+270 
+ #_mtime
+
+_mtimeec
+.
+tv_c
+
+
+ )
+
+271 
+ #_ime
+
+_imeec
+.
+tv_c
+
+
+ )
+
+272 
+ #_bthtime
+
+_bthtimeec
+.
+tv_c
+
+
+ )
+
+279 #ide
+S_IFMT
+
+
+281 
+ #S_IFMT
+ 0170000
+
+ )
+
+282 
+ #S_IFIFO
+ 0010000
+
+ )
+
+283 
+ #S_IFCHR
+ 0020000
+
+ )
+
+284 
+ #S_IFDIR
+ 0040000
+
+ )
+
+285 
+ #S_IFBLK
+ 0060000
+
+ )
+
+286 
+ #S_IFREG
+ 0100000
+
+ )
+
+287 
+ #S_IFLNK
+ 0120000
+
+ )
+
+288 
+ #S_IFSOCK
+ 0140000
+
+ )
+
+289 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+290 
+ #S_IFWHT
+ 0160000
+
+ )
+
+291 
+ #S_IFXATTR
+ 0200000
+
+ )
+
+296 
+ #S_IRWXU
+ 0000700
+
+ )
+
+297 
+ #S_IRUSR
+ 0000400
+
+ )
+
+298 
+ #S_IWUSR
+ 0000200
+
+ )
+
+299 
+ #S_IXUSR
+ 0000100
+
+ )
+
+301 
+ #S_IRWXG
+ 0000070
+
+ )
+
+302 
+ #S_IRGRP
+ 0000040
+
+ )
+
+303 
+ #S_IWGRP
+ 0000020
+
+ )
+
+304 
+ #S_IXGRP
+ 0000010
+
+ )
+
+306 
+ #S_IRWXO
+ 0000007
+
+ )
+
+307 
+ #S_IROTH
+ 0000004
+
+ )
+
+308 
+ #S_IWOTH
+ 0000002
+
+ )
+
+309 
+ #S_IXOTH
+ 0000001
+
+ )
+
+311 
+ #S_ISUID
+ 0004000
+
+ )
+
+312 
+ #S_ISGID
+ 0002000
+
+ )
+
+313 
+ #S_ISVTX
+ 0001000
+
+ )
+
+315 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+316 
+ #S_ISTXT
+
+S_ISVTX
+
+
+ )
+
+317 
+ #S_IREAD
+
+S_IRUSR
+
+
+ )
+
+318 
+ #S_IWRITE
+
+S_IWUSR
+
+
+ )
+
+319 
+ #S_IEXEC
+
+S_IXUSR
+
+
+ )
+
+329 
+ #S_ISBLK
+(
+m
+(((m& 0170000=0060000
+
+ )
+
+330 
+ #S_ISCHR
+(
+m
+(((m& 0170000=0020000
+
+ )
+
+331 
+ #S_ISDIR
+(
+m
+(((m& 0170000=0040000
+
+ )
+
+332 
+ #S_ISFIFO
+(
+m
+(((m& 0170000=0010000
+
+ )
+
+333 
+ #S_ISREG
+(
+m
+(((m& 0170000=0100000
+
+ )
+
+334 
+ #S_ISLNK
+(
+m
+(((m& 0170000=0120000
+
+ )
+
+335 
+ #S_ISSOCK
+(
+m
+(((m& 0170000=0140000
+
+ )
+
+336 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+337 
+ #S_ISWHT
+(
+m
+(((m& 0170000=0160000
+
+ )
+
+338 
+ #S_ISXATTR
+(
+m
+(((m& 0200000=0200000
+
+ )
+
+356 
+ #S_TYPEISMQ
+(
+buf
+(0
+
+ )
+
+357 
+ #S_TYPEISSEM
+(
+buf
+(0
+
+ )
+
+358 
+ #S_TYPEISSHM
+(
+buf
+(0
+
+ )
+
+374 
+ #S_TYPEISTMO
+(
+buf
+(0
+
+ )
+
+377 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+378 
+ #ACCESSPERMS
+ (
+S_IRWXU
+|
+S_IRWXG
+|
+S_IRWXO
+
+
+ )
+
+380 
+ #ALLPERMS
+ (
+S_ISUID
+|
+S_ISGID
+|
+S_ISTXT
+|
+S_IRWXU
+|
+S_IRWXG
+|
+S_IRWXO
+)
+
+ )
+
+382 
+ #DEFFILEMODE
+ (
+S_IRUSR
+|
+S_IWUSR
+|
+S_IRGRP
+|
+S_IWGRP
+|
+S_IROTH
+|
+S_IWOTH
+)
+
+ )
+
+384 
+ #S_BLKSIZE
+ 512
+
+ )
+
+391 
+ #UF_SETTABLE
+ 0x0000fff
+
+ )
+
+392 
+ #UF_NODUMP
+ 0x00000001
+
+ )
+
+393 
+ #UF_IMMUTABLE
+ 0x00000002
+
+ )
+
+394 
+ #UF_APPEND
+ 0x00000004
+
+ )
+
+395 
+ #UF_OPAQUE
+ 0x00000008
+
+ )
+
+402 
+ #UF_HIDDEN
+ 0x00008000
+
+ )
+
+407 
+ #SF_SETTABLE
+ 0xffff0000
+
+ )
+
+408 
+ #SF_ARCHIVED
+ 0x00010000
+
+ )
+
+409 
+ #SF_IMMUTABLE
+ 0x00020000
+
+ )
+
+410 
+ #SF_APPEND
+ 0x00040000
+
+ )
+
+422
+__BEGIN_DECLS
+
+
+424 
+ $chmod
+(cڡ *,
+mode_t
+
+ `__DARWIN_ALIAS
+(
+chmod
+);
+
+425 
+ $fchmod
+(,
+mode_t
+
+ `__DARWIN_ALIAS
+(
+fchmod
+);
+
+426 
+ $f
+(, 
+
+ *
+ `__DARWIN_INODE64
+(
+f
+);
+
+427 
+ $l
+(cڡ *, 
+
+ *
+ `__DARWIN_INODE64
+(
+l
+);
+
+428 
+ `mkd
+(cڡ *,
+mode_t
+);
+
+429 
+ `mkfifo
+(cڡ *,
+mode_t
+);
+
+430 
+ $
+(cڡ *, 
+
+ *
+ `__DARWIN_INODE64
+(stat);
+
+431 
+ `mknod
+(cڡ *,
+mode_t
+,
+dev_t
+);
+
+432
+mode_t
+
+ `umask
+(mode_t);
+
+434 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+435 #ide
+_FILESEC_T
+
+
+436 
+_fec
+;
+
+437 
+_fec
+ *
+ tfec_t
+;
+
+438 
+ #_FILESEC_T
+
+
+ )
+
+440 
+ `chags
+(cڡ *,
+__ut32_t
+);
+
+441 
+ `chmodx_
+(cڡ *,
+fec_t
+);
+
+442 
+ `fchags
+(,
+__ut32_t
+);
+
+443 
+ `fchmodx_
+(,
+fec_t
+);
+
+444 
+ $fx_
+(, 
+
+ *,
+fec_t
+
+ `__DARWIN_INODE64
+(
+fx_
+);
+
+445 
+ `lchags
+(cڡ *,
+__ut32_t
+);
+
+446 
+ `lchmod
+(cڡ *,
+mode_t
+);
+
+447 
+ $lx_
+(cڡ *, 
+
+ *,
+fec_t
+
+ `__DARWIN_INODE64
+(
+lx_
+);
+
+448 
+ `mkdx_
+(cڡ *,
+fec_t
+);
+
+449 
+ `mkfifox_
+(cڡ *,
+fec_t
+);
+
+450 
+ $x_
+(cڡ *, 
+
+ *,
+fec_t
+
+ `__DARWIN_INODE64
+(
+x_
+);
+
+451 
+ `umaskx_
+(
+fec_t
+);
+
+453 
+ `fx64_
+(, 
+64
+ *,
+fec_t
+);
+
+454 
+ `lx64_
+(cڡ *, 
+64
+ *,
+fec_t
+);
+
+455 
+ `x64_
+(cڡ *, 
+64
+ *,
+fec_t
+);
+
+456 
+ `f64
+(, 
+64
+ *);
+
+457 
+ `l64
+(cڡ *, 
+64
+ *);
+
+458 
+ `64
+(cڡ *, 
+64
+ *);
+
+461
+__END_DECLS
+
+
+ @/usr/include/sys/time.h
+
+64 #ide
+_SYS_TIME_H_
+
+
+65 
+ #_SYS_TIME_H_
+
+
+ )
+
+67 
+ ~<sys/cdefs.h
+>
+
+68 
+ ~<sys/_tys.h
+>
+
+74 
+ #__ed_fd_t
+
+
+ )
+
+75 
+ #__ed_ru_timeec
+
+
+ )
+
+76 
+ #__ed_ru_timev
+
+
+ )
+
+77 
+ ~<sys/_rus.h
+>
+
+79 #idef
+_TIME_T
+
+
+80 
+ #_TIME_T
+
+
+ )
+
+81 
+__dw_time_t
+
+ ttime_t
+;
+
+84 #ide
+_SUSECONDS_T
+
+
+85 
+ #_SUSECONDS_T
+
+
+ )
+
+86 
+__dw_sucds_t
+
+ tsucds_t
+;
+
+93 
+ simv
+ {
+
+94 
+timev
+
+ m_rv
+;
+
+95 
+timev
+
+ m_vue
+;
+
+102 
+ #ITIMER_REAL
+ 0
+
+ )
+
+103 
+ #ITIMER_VIRTUAL
+ 1
+
+ )
+
+104 
+ #ITIMER_PROF
+ 2
+
+ )
+
+112 #idef
+FD_SETSIZE
+
+
+113 
+ #FD_SETSIZE
+
+__DARWIN_FD_SETSIZE
+
+
+ )
+
+115 #ide
+FD_SET
+
+
+116 
+ #FD_SET
+(
+n
+,
+p
+
+ `__DARWIN_FD_SET
+,)
+
+ )
+
+118 #idef
+FD_CLR
+
+
+119 
+ #FD_CLR
+(
+n
+,
+p
+
+ `__DARWIN_FD_CLR
+,)
+
+ )
+
+121 #ide
+FD_ISSET
+
+
+122 
+ #FD_ISSET
+(
+n
+,
+p
+
+ `__DARWIN_FD_ISSET
+,)
+
+ )
+
+124 #ide
+FD_ZERO
+
+
+125 
+ #FD_ZERO
+(
+p
+
+ `__DARWIN_FD_ZERO
+)
+
+ )
+
+128 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+130 #ide
+FD_COPY
+
+
+131 
+ #FD_COPY
+(
+f
+,
+t
+
+ `__DARWIN_FD_COPY
+(f,)
+
+ )
+
+135 
+ #TIMEVAL_TO_TIMESPEC
+(
+tv
+,
+ts
+) { \
+
+136 (
+ts
+)->
+tv_c
+ = (
+tv
+)->tv_sec; \
+
+137 (
+ts
+)->
+tv_nc
+ = (
+tv
+)->
+tv_uc
+ * 1000; \
+
+138 }
+
+ )
+
+139 
+ #TIMESPEC_TO_TIMEVAL
+(
+tv
+,
+ts
+) { \
+
+140 (
+tv
+)->
+tv_c
+ = (
+ts
+)->tv_sec; \
+
+141 (
+tv
+)->
+tv_uc
+ = (
+ts
+)->
+tv_nc
+ / 1000; \
+
+142 }
+
+ )
+
+144 
+ stimeze
+ {
+
+145 
+ mtz_muswe
+;
+
+146 
+ mtz_dtime
+;
+
+148 
+ #DST_NONE
+ 0
+
+ )
+
+149 
+ #DST_USA
+ 1
+
+ )
+
+150 
+ #DST_AUST
+ 2
+
+ )
+
+151 
+ #DST_WET
+ 3
+
+ )
+
+152 
+ #DST_MET
+ 4
+
+ )
+
+153 
+ #DST_EET
+ 5
+
+ )
+
+154 
+ #DST_CAN
+ 6
+
+ )
+
+157 
+ #timr
+(
+tvp
+vp)->
+tv_c
+ = (tvp)->
+tv_uc
+ = 0
+
+ )
+
+158 
+ #timist
+(
+tvp
+(vp)->
+tv_c
+ || (tvp)->
+tv_uc
+)
+
+ )
+
+159 
+ #timcmp
+(
+tvp
+,
+uvp
+,
+cmp
+) \
+
+160 (((
+tvp
+)->
+tv_c
+ =(
+uvp
+)->tv_sec) ? \
+
+161 ((
+tvp
+)->
+tv_uc
+
+ `cmp
+ (
+uvp
+)->tv_usec) : \
+
+162 ((
+tvp
+)->
+tv_c
+
+ `cmp
+ (
+uvp
+)->tv_c))
+
+ )
+
+163 
+ #timadd
+(
+tvp
+,
+uvp
+,
+vvp
+) \
+
+165 (
+vvp
+)->
+tv_c
+ = (
+tvp
+)->tv_+ (
+uvp
+)->tv_sec; \
+
+166 (
+vvp
+)->
+tv_uc
+ = (
+tvp
+)->tv_u+ (
+uvp
+)->tv_usec; \
+
+167 i((
+vvp
+)->
+tv_uc
+ >= 1000000) { \
+
+168 (
+vvp
+)->
+tv_c
+++; \
+
+169 (
+vvp
+)->
+tv_uc
+ -= 1000000; \
+
+171 } 0)
+
+ )
+
+172 
+ #timsub
+(
+tvp
+,
+uvp
+,
+vvp
+) \
+
+174 (
+vvp
+)->
+tv_c
+ = (
+tvp
+)->tv_- (
+uvp
+)->tv_sec; \
+
+175 (
+vvp
+)->
+tv_uc
+ = (
+tvp
+)->tv_u- (
+uvp
+)->tv_usec; \
+
+176 i((
+vvp
+)->
+tv_uc
+ < 0) { \
+
+177 (
+vvp
+)->
+tv_c
+--; \
+
+178 (
+vvp
+)->
+tv_uc
+ += 1000000; \
+
+180 } 0)
+
+ )
+
+182 
+ #timevcmp
+(
+l
+,
+r
+,
+cmp
+
+ `timcmp
+,, cmp
+
+ )
+
+187 
+ sockfo
+ {
+
+188 
+ mhz
+;
+
+189 
+ mtick
+;
+
+190 
+ mtickadj
+;
+
+191 
+ mhz
+;
+
+192 
+ mofhz
+;
+
+197 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+198 
+ ~<time.h
+>
+
+201
+ g__BEGIN_DECLS
+
+
+203 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+204 
+adjtime
+(cڡ 
+timev
+ *, timeval *);
+
+205 
+futimes
+(, cڡ 
+timev
+ *);
+
+206 
+lutimes
+(cڡ *, cڡ 
+timev
+ *);
+
+207 
+imeofday
+(cڡ 
+timev
+ *, cڡ 
+timeze
+ *);
+
+210 
+gim
+(, 
+imv
+ *);
+
+211 
+gtimeofday
+(
+timev
+ *
+__ri
+, * __restrict);
+
+213 
+ ~<sys/_.h
+>
+
+215 
+tim
+(, cڡ 
+imv
+ *
+__ri
+,
+
+216 
+imv
+ *
+__ri
+);
+
+217 
+utimes
+(cڡ *, cڡ 
+timev
+ *);
+
+219
+ g__END_DECLS
+
+
+ @/usr/include/sys/types.h
+
+69 #ide
+_SYS_TYPES_H_
+
+
+70 
+ #_SYS_TYPES_H_
+
+
+ )
+
+72 
+ ~<sys/pits.h
+>
+
+74 #ide
+__ASSEMBLER__
+
+
+75 
+ ~<sys/cdefs.h
+>
+
+78 
+ ~<mache/tys.h
+>
+
+79 
+ ~<sys/_tys.h
+>
+
+81 
+ ~<mache/dn.h
+>
+
+83 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+84 
+ tu_ch
+;
+
+85 
+ tu_sht
+;
+
+86 
+ tu_t
+;
+
+87 #ide
+_U_LONG
+
+
+88 
+ tu_lg
+;
+
+89 
+ #_U_LONG
+
+
+ )
+
+91 
+ tusht
+;
+
+92 
+ tut
+;
+
+95 
+u_t64_t
+
+ tu_quad_t
+;
+
+96 
+t64_t
+
+ tquad_t
+;
+
+97 
+quad_t
+ *
+ tqaddr_t
+;
+
+99 *
+ tddr_t
+;
+
+100 
+t32_t
+
+ tdaddr_t
+;
+
+102 #ide
+_DEV_T
+
+
+103 
+__dw_dev_t
+
+ tdev_t
+;
+
+104 
+ #_DEV_T
+
+
+ )
+
+107 
+u_t32_t
+
+ tfix_t
+;
+
+109 #ide
+_BLKCNT_T
+
+
+110 
+__dw_blkt_t
+
+ tblkt_t
+;
+
+111 
+ #_BLKCNT_T
+
+
+ )
+
+114 #ide
+_BLKSIZE_T
+
+
+115 
+__dw_blksize_t
+
+ tblksize_t
+;
+
+116 
+ #_BLKSIZE_T
+
+
+ )
+
+119 #ide
+_GID_T
+
+
+120 
+__dw_gid_t
+
+ tgid_t
+;
+
+121 
+ #_GID_T
+
+
+ )
+
+124 #ide
+_IN_ADDR_T
+
+
+125 
+ #_IN_ADDR_T
+
+
+ )
+
+126 
+__ut32_t
+
+ t_addr_t
+;
+
+129 #ide
+_IN_PORT_T
+
+
+130 
+ #_IN_PORT_T
+
+
+ )
+
+131 
+__ut16_t
+
+ t_pt_t
+;
+
+134 #idef
+_INO_T
+
+
+135 
+__dw_o_t
+
+ to_t
+;
+
+136 
+ #_INO_T
+
+
+ )
+
+139 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+140 #idef
+_INO64_T
+
+
+141 
+__dw_o64_t
+
+ to64_t
+;
+
+142 
+ #_INO64_T
+
+
+ )
+
+146 #ide
+_KEY_T
+
+
+147 
+ #_KEY_T
+
+
+ )
+
+148 
+__t32_t
+
+ tkey_t
+;
+
+151 #idef
+_MODE_T
+
+
+152 
+__dw_mode_t
+
+ tmode_t
+;
+
+153 
+ #_MODE_T
+
+
+ )
+
+156 #ide
+_NLINK_T
+
+
+157 
+__ut16_t
+
+ tƚk_t
+;
+
+158 
+ #_NLINK_T
+
+
+ )
+
+161 #ide
+_ID_T
+
+
+162 
+ #_ID_T
+
+
+ )
+
+163 
+__dw_id_t
+
+ tid_t
+;
+
+166 #ide
+_PID_T
+
+
+167 
+__dw_pid_t
+
+ tpid_t
+;
+
+168 
+ #_PID_T
+
+
+ )
+
+171 #ide
+_OFF_T
+
+
+172 
+__dw_off_t
+
+ toff_t
+;
+
+173 
+ #_OFF_T
+
+
+ )
+
+176 
+t32_t
+
+ tgsz_t
+;
+
+177 
+t32_t
+
+ tswblk_t
+;
+
+179 #ide
+_UID_T
+
+
+180 
+__dw_uid_t
+
+ tuid_t
+;
+
+181 
+ #_UID_T
+
+
+ )
+
+184 #ide
+_ID_T
+
+
+185 
+__dw_id_t
+
+ tid_t
+;
+
+186 
+ #_ID_T
+
+
+ )
+
+189 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+191 #i
+defed
+(
+__lulus
+)
+
+197 
+le
+
+__t32_t
+
+ $maj
+(
+__ut32_t
+
+_x
+)
+
+199  (
+__t32_t
+)(((
+__ut32_t
+)
+_x
+ >> 24) & 0xff);
+
+200
+ }
+}
+
+202 
+le
+
+__t32_t
+
+ $m
+(
+__ut32_t
+
+_x
+)
+
+204  (
+__t32_t
+)((
+_x
+) & 0xffffff);
+
+205
+ }
+}
+
+207 
+le
+
+dev_t
+
+ $makedev
+(
+__ut32_t
+
+_maj
+, __ut32_
+_m
+)
+
+209  (
+dev_t
+)(((
+_maj
+<< 24| (
+_m
+));
+
+210
+ }
+}
+
+214 
+ #maj
+(
+x
+((
+t32_t
+)(((
+u_t32_t
+)(x>> 24& 0xff))
+
+ )
+
+215 
+ #m
+(
+x
+((
+t32_t
+)((x& 0xffffff))
+
+ )
+
+216 
+ #makedev
+(
+x
+,
+y
+((
+dev_t
+)(((x<< 24| (y)))
+
+ )
+
+221 #idef
+_CLOCK_T
+
+
+222 
+ #_CLOCK_T
+
+
+ )
+
+223 
+__dw_ock_t
+
+ tock_t
+;
+
+226 #ide
+_SIZE_T
+
+
+227 
+ #_SIZE_T
+
+
+ )
+
+230 
+__dw_size_t
+
+ tsize_t
+;
+
+233 #idef
+_SSIZE_T
+
+
+234 
+ #_SSIZE_T
+
+
+ )
+
+235 
+__dw_ssize_t
+
+ tssize_t
+;
+
+238 #idef
+_TIME_T
+
+
+239 
+ #_TIME_T
+
+
+ )
+
+240 
+__dw_time_t
+
+ ttime_t
+;
+
+243 #ide
+_USECONDS_T
+
+
+244 
+ #_USECONDS_T
+
+
+ )
+
+245 
+__dw_ucds_t
+
+ tucds_t
+;
+
+248 #ide
+_SUSECONDS_T
+
+
+249 
+ #_SUSECONDS_T
+
+
+ )
+
+250 
+__dw_sucds_t
+
+ tsucds_t
+;
+
+253 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+259 
+ #__ed_fd_t
+
+
+ )
+
+260 
+ ~<sys/_rus.h
+>
+
+262 
+ #NBBY
+
+__DARWIN_NBBY
+
+
+ )
+
+263 
+ #NFDBITS
+
+__DARWIN_NFDBITS
+
+
+ )
+
+264 
+ #howmy
+(
+x
+,
+y
+
+ `__DARWIN_howmy
+(x, y
+
+ )
+
+265 
+__t32_t
+
+ tfd_mask
+;
+
+273 #idef
+FD_SETSIZE
+
+
+274 
+ #FD_SETSIZE
+
+__DARWIN_FD_SETSIZE
+
+
+ )
+
+276 #ide
+FD_SET
+
+
+277 
+ #FD_SET
+(
+n
+,
+p
+
+ `__DARWIN_FD_SET
+,)
+
+ )
+
+279 #ide
+FD_CLR
+
+
+280 
+ #FD_CLR
+(
+n
+,
+p
+
+ `__DARWIN_FD_CLR
+,)
+
+ )
+
+282 #ide
+FD_ISSET
+
+
+283 
+ #FD_ISSET
+(
+n
+,
+p
+
+ `__DARWIN_FD_ISSET
+,)
+
+ )
+
+285 #ide
+FD_ZERO
+
+
+286 
+ #FD_ZERO
+(
+p
+
+ `__DARWIN_FD_ZERO
+)
+
+ )
+
+288 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+289 #ide
+FD_COPY
+
+
+290 
+ #FD_COPY
+(
+f
+,
+t
+
+ `__DARWIN_FD_COPY
+(f,)
+
+ )
+
+295 #i
+defed
+(
+__STDC__
+&& defed(
+KERNEL
+)
+
+301 
+ goc
+;
+
+302 
+ gpg
+;
+
+303 
+ gued
+;
+
+304 
+ gruge
+;
+
+305 
+ gfe
+;
+
+306 
+ gbuf
+;
+
+307 
+ gy
+;
+
+308 
+ guio
+;
+
+314 #ide
+__POSIX_LIB__
+
+
+316 #ide
+_PTHREAD_ATTR_T
+
+
+317 
+ #_PTHREAD_ATTR_T
+
+
+ )
+
+318 
+__dw_had__t
+
+ thad__t
+;
+
+320 #ide
+_PTHREAD_COND_T
+
+
+321 
+ #_PTHREAD_COND_T
+
+
+ )
+
+322 
+__dw_had_cd_t
+
+ thad_cd_t
+;
+
+324 #ide
+_PTHREAD_CONDATTR_T
+
+
+325 
+ #_PTHREAD_CONDATTR_T
+
+
+ )
+
+326 
+__dw_had_cd_t
+
+ thad_cd_t
+;
+
+328 #ide
+_PTHREAD_MUTEX_T
+
+
+329 
+ #_PTHREAD_MUTEX_T
+
+
+ )
+
+330 
+__dw_had_mux_t
+
+ thad_mux_t
+;
+
+332 #ide
+_PTHREAD_MUTEXATTR_T
+
+
+333 
+ #_PTHREAD_MUTEXATTR_T
+
+
+ )
+
+334 
+__dw_had_mux_t
+
+ thad_mux_t
+;
+
+336 #ide
+_PTHREAD_ONCE_T
+
+
+337 
+ #_PTHREAD_ONCE_T
+
+
+ )
+
+338 
+__dw_had__t
+
+ thad__t
+;
+
+340 #ide
+_PTHREAD_RWLOCK_T
+
+
+341 
+ #_PTHREAD_RWLOCK_T
+
+
+ )
+
+342 
+__dw_had_rwlock_t
+
+ thad_rwlock_t
+;
+
+344 #ide
+_PTHREAD_RWLOCKATTR_T
+
+
+345 
+ #_PTHREAD_RWLOCKATTR_T
+
+
+ )
+
+346 
+__dw_had_rwlock_t
+
+ thad_rwlock_t
+;
+
+348 #ide
+_PTHREAD_T
+
+
+349 
+ #_PTHREAD_T
+
+
+ )
+
+350 
+__dw_had_t
+
+ thad_t
+;
+
+355 #ide
+_PTHREAD_KEY_T
+
+
+356 
+ #_PTHREAD_KEY_T
+
+
+ )
+
+357 
+__dw_had_key_t
+
+ thad_key_t
+;
+
+361 #ide
+_FSBLKCNT_T
+
+
+362 
+ #_FSBLKCNT_T
+
+
+ )
+
+363 
+__dw_fsblkt_t
+
+ tfsblkt_t
+;
+
+366 #ide
+_FSFILCNT_T
+
+
+367 
+ #_FSFILCNT_T
+
+
+ )
+
+368 
+__dw_fsft_t
+
+ tfsft_t
+;
+
+ @/usr/include/unistd.h
+
+68 #ide
+_UNISTD_H_
+
+
+69 
+ #_UNISTD_H_
+
+
+ )
+
+71 
+ ~<_tys.h
+>
+
+72 
+ ~<sys/unid.h
+>
+
+74 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+75 #ide
+_DEV_T
+
+
+76 
+ #_DEV_T
+
+
+ )
+
+77 
+__dw_dev_t
+
+ tdev_t
+;
+
+81 #ide
+_GID_T
+
+
+82 
+ #_GID_T
+
+
+ )
+
+83 
+__dw_gid_t
+
+ tgid_t
+;
+
+86 #ide
+_INTPTR_T
+
+
+87 
+ #_INTPTR_T
+
+
+ )
+
+88 
+__dw__t
+
+ t_t
+;
+
+91 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+92 #ide
+_MODE_T
+
+
+93 
+ #_MODE_T
+
+
+ )
+
+94 
+__dw_mode_t
+
+ tmode_t
+;
+
+98 #ide
+_OFF_T
+
+
+99 
+ #_OFF_T
+
+
+ )
+
+100 
+__dw_off_t
+
+ toff_t
+;
+
+103 #ide
+_PID_T
+
+
+104 
+ #_PID_T
+
+
+ )
+
+105 
+__dw_pid_t
+
+ tpid_t
+;
+
+108 #ide
+_SIZE_T
+
+
+109 
+ #_SIZE_T
+
+
+ )
+
+112 
+__dw_size_t
+
+ tsize_t
+;
+
+115 #idef
+_SSIZE_T
+
+
+116 
+ #_SSIZE_T
+
+
+ )
+
+117 
+__dw_ssize_t
+
+ tssize_t
+;
+
+120 #ide
+_UID_T
+
+
+121 
+ #_UID_T
+
+
+ )
+
+122 
+__dw_uid_t
+
+ tuid_t
+;
+
+125 #ide
+_USECONDS_T
+
+
+126 
+ #_USECONDS_T
+
+
+ )
+
+127 
+__dw_ucds_t
+
+ tucds_t
+;
+
+130 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+131 #ide
+_UUID_T
+
+
+132 
+ #_UUID_T
+
+
+ )
+
+133 
+__dw_uuid_t
+
+ tuuid_t
+;
+
+137 
+ #STDIN_FILENO
+ 0
+
+ )
+
+138 
+ #STDOUT_FILENO
+ 1
+
+ )
+
+139 
+ #STDERR_FILENO
+ 2
+
+ )
+
+141 #ide
+NULL
+
+
+142 
+ #NULL
+
+__DARWIN_NULL
+
+
+ )
+
+147 
+ #_XOPEN_VERSION
+ 600
+
+ )
+
+148 
+ #_XOPEN_XCU_VERSION
+ 4
+
+ )
+
+152 
+ #_POSIX_ADVISORY_INFO
+ (-1
+
+ )
+
+153 
+ #_POSIX_ASYNCHRONOUS_IO
+ (-1
+
+ )
+
+154 
+ #_POSIX_BARRIERS
+ (-1
+
+ )
+
+155 
+ #_POSIX_CHOWN_RESTRICTED
+ 200112L
+
+ )
+
+156 
+ #_POSIX_CLOCK_SELECTION
+ (-1
+
+ )
+
+157 
+ #_POSIX_CPUTIME
+ (-1
+
+ )
+
+158 
+ #_POSIX_FSYNC
+ 200112L
+
+ )
+
+159 
+ #_POSIX_IPV6
+ 200112L
+
+ )
+
+160 
+ #_POSIX_JOB_CONTROL
+ 200112L
+
+ )
+
+161 
+ #_POSIX_MAPPED_FILES
+ 200112L
+
+ )
+
+162 
+ #_POSIX_MEMLOCK
+ (-1
+
+ )
+
+163 
+ #_POSIX_MEMLOCK_RANGE
+ (-1
+
+ )
+
+164 
+ #_POSIX_MEMORY_PROTECTION
+ 200112L
+
+ )
+
+165 
+ #_POSIX_MESSAGE_PASSING
+ (-1
+
+ )
+
+166 
+ #_POSIX_MONOTONIC_CLOCK
+ (-1
+
+ )
+
+167 
+ #_POSIX_NO_TRUNC
+ 200112L
+
+ )
+
+168 
+ #_POSIX_PRIORITIZED_IO
+ (-1
+
+ )
+
+169 
+ #_POSIX_PRIORITY_SCHEDULING
+ (-1
+
+ )
+
+170 
+ #_POSIX_RAW_SOCKETS
+ (-1
+
+ )
+
+171 
+ #_POSIX_READER_WRITER_LOCKS
+ 200112L
+
+ )
+
+172 
+ #_POSIX_REALTIME_SIGNALS
+ (-1
+
+ )
+
+173 
+ #_POSIX_REGEXP
+ 200112L
+
+ )
+
+174 
+ #_POSIX_SAVED_IDS
+ 200112L
+
+ )
+
+175 
+ #_POSIX_SEMAPHORES
+ (-1
+
+ )
+
+176 
+ #_POSIX_SHARED_MEMORY_OBJECTS
+ (-1
+
+ )
+
+177 
+ #_POSIX_SHELL
+ 200112L
+
+ )
+
+178 
+ #_POSIX_SPAWN
+ (-1
+
+ )
+
+179 
+ #_POSIX_SPIN_LOCKS
+ (-1
+
+ )
+
+180 
+ #_POSIX_SPORADIC_SERVER
+ (-1
+
+ )
+
+181 
+ #_POSIX_SYNCHRONIZED_IO
+ (-1
+
+ )
+
+182 
+ #_POSIX_THREAD_ATTR_STACKADDR
+ 200112L
+
+ )
+
+183 
+ #_POSIX_THREAD_ATTR_STACKSIZE
+ 200112L
+
+ )
+
+184 
+ #_POSIX_THREAD_CPUTIME
+ (-1
+
+ )
+
+185 
+ #_POSIX_THREAD_PRIO_INHERIT
+ (-1
+
+ )
+
+186 
+ #_POSIX_THREAD_PRIO_PROTECT
+ (-1
+
+ )
+
+187 
+ #_POSIX_THREAD_PRIORITY_SCHEDULING
+ (-1
+
+ )
+
+188 
+ #_POSIX_THREAD_PROCESS_SHARED
+ 200112L
+
+ )
+
+189 
+ #_POSIX_THREAD_SAFE_FUNCTIONS
+ 200112L
+
+ )
+
+190 
+ #_POSIX_THREAD_SPORADIC_SERVER
+ (-1
+
+ )
+
+191 
+ #_POSIX_THREADS
+ 200112L
+
+ )
+
+192 
+ #_POSIX_TIMEOUTS
+ (-1
+
+ )
+
+193 
+ #_POSIX_TIMERS
+ (-1
+
+ )
+
+194 
+ #_POSIX_TRACE
+ (-1
+
+ )
+
+195 
+ #_POSIX_TRACE_EVENT_FILTER
+ (-1
+
+ )
+
+196 
+ #_POSIX_TRACE_INHERIT
+ (-1
+
+ )
+
+197 
+ #_POSIX_TRACE_LOG
+ (-1
+
+ )
+
+198 
+ #_POSIX_TYPED_MEMORY_OBJECTS
+ (-1
+
+ )
+
+199 #ide
+_POSIX_VDISABLE
+
+
+200 
+ #_POSIX_VDISABLE
+ 0xf
+
+ )
+
+203 
+ #_POSIX2_C_BIND
+ 200112L
+
+ )
+
+204 
+ #_POSIX2_C_DEV
+ 200112L
+
+ )
+
+205 
+ #_POSIX2_CHAR_TERM
+ 200112L
+
+ )
+
+206 
+ #_POSIX2_FORT_DEV
+ (-1
+
+ )
+
+207 
+ #_POSIX2_FORT_RUN
+ 200112L
+
+ )
+
+208 
+ #_POSIX2_LOCALEDEF
+ 200112L
+
+ )
+
+209 
+ #_POSIX2_PBS
+ (-1)
+
+ )
+
+210 
+ #_POSIX2_PBS_ACCOUNTING
+ (-1)
+
+ )
+
+211 
+ #_POSIX2_PBS_CHECKPOINT
+ (-1)
+
+ )
+
+212 
+ #_POSIX2_PBS_LOCATE
+ (-1)
+
+ )
+
+213 
+ #_POSIX2_PBS_MESSAGE
+ (-1)
+
+ )
+
+214 
+ #_POSIX2_PBS_TRACK
+ (-1)
+
+ )
+
+215 
+ #_POSIX2_SW_DEV
+ 200112L
+
+ )
+
+216 
+ #_POSIX2_UPE
+ 200112L
+
+ )
+
+218 
+ #_V6_ILP32_OFF32
+ (-1)
+
+ )
+
+219 
+ #_V6_ILP32_OFFBIG
+ (1)
+
+ )
+
+220 
+ #_V6_LP64_OFF64
+ (-1)
+
+ )
+
+221 
+ #_V6_LPBIG_OFFBIG
+ (-1)
+
+ )
+
+223 
+ #_XBS5_ILP32_OFF32
+
+_V6_ILP32_OFF32
+
+
+ )
+
+224 
+ #_XBS5_ILP32_OFFBIG
+
+_V6_ILP32_OFFBIG
+
+
+ )
+
+225 
+ #_XBS5_LP64_OFF64
+
+_V6_LP64_OFF64
+
+
+ )
+
+226 
+ #_XBS5_LPBIG_OFFBIG
+
+_V6_LPBIG_OFFBIG
+
+
+ )
+
+228 
+ #_XOPEN_CRYPT
+ (1)
+
+ )
+
+229 
+ #_XOPEN_ENH_I18N
+ (1
+
+ )
+
+230 
+ #_XOPEN_LEGACY
+ (-1
+
+ )
+
+231 
+ #_XOPEN_REALTIME
+ (-1
+
+ )
+
+232 
+ #_XOPEN_REALTIME_THREADS
+ (-1
+
+ )
+
+233 
+ #_XOPEN_SHM
+ (1)
+
+ )
+
+234 
+ #_XOPEN_STREAMS
+ (-1)
+
+ )
+
+235 
+ #_XOPEN_UNIX
+ (1)
+
+ )
+
+238 
+ #F_ULOCK
+ 0
+
+ )
+
+239 
+ #F_LOCK
+ 1
+
+ )
+
+240 
+ #F_TLOCK
+ 2
+
+ )
+
+241 
+ #F_TEST
+ 3
+
+ )
+
+244 
+ #_SC_ARG_MAX
+ 1
+
+ )
+
+245 
+ #_SC_CHILD_MAX
+ 2
+
+ )
+
+246 
+ #_SC_CLK_TCK
+ 3
+
+ )
+
+247 
+ #_SC_NGROUPS_MAX
+ 4
+
+ )
+
+248 
+ #_SC_OPEN_MAX
+ 5
+
+ )
+
+249 
+ #_SC_JOB_CONTROL
+ 6
+
+ )
+
+250 
+ #_SC_SAVED_IDS
+ 7
+
+ )
+
+251 
+ #_SC_VERSION
+ 8
+
+ )
+
+252 
+ #_SC_BC_BASE_MAX
+ 9
+
+ )
+
+253 
+ #_SC_BC_DIM_MAX
+ 10
+
+ )
+
+254 
+ #_SC_BC_SCALE_MAX
+ 11
+
+ )
+
+255 
+ #_SC_BC_STRING_MAX
+ 12
+
+ )
+
+256 
+ #_SC_COLL_WEIGHTS_MAX
+ 13
+
+ )
+
+257 
+ #_SC_EXPR_NEST_MAX
+ 14
+
+ )
+
+258 
+ #_SC_LINE_MAX
+ 15
+
+ )
+
+259 
+ #_SC_RE_DUP_MAX
+ 16
+
+ )
+
+260 
+ #_SC_2_VERSION
+ 17
+
+ )
+
+261 
+ #_SC_2_C_BIND
+ 18
+
+ )
+
+262 
+ #_SC_2_C_DEV
+ 19
+
+ )
+
+263 
+ #_SC_2_CHAR_TERM
+ 20
+
+ )
+
+264 
+ #_SC_2_FORT_DEV
+ 21
+
+ )
+
+265 
+ #_SC_2_FORT_RUN
+ 22
+
+ )
+
+266 
+ #_SC_2_LOCALEDEF
+ 23
+
+ )
+
+267 
+ #_SC_2_SW_DEV
+ 24
+
+ )
+
+268 
+ #_SC_2_UPE
+ 25
+
+ )
+
+269 
+ #_SC_STREAM_MAX
+ 26
+
+ )
+
+270 
+ #_SC_TZNAME_MAX
+ 27
+
+ )
+
+271 
+ #_SC_ASYNCHRONOUS_IO
+ 28
+
+ )
+
+272 
+ #_SC_PAGESIZE
+ 29
+
+ )
+
+273 
+ #_SC_MEMLOCK
+ 30
+
+ )
+
+274 
+ #_SC_MEMLOCK_RANGE
+ 31
+
+ )
+
+275 
+ #_SC_MEMORY_PROTECTION
+ 32
+
+ )
+
+276 
+ #_SC_MESSAGE_PASSING
+ 33
+
+ )
+
+277 
+ #_SC_PRIORITIZED_IO
+ 34
+
+ )
+
+278 
+ #_SC_PRIORITY_SCHEDULING
+ 35
+
+ )
+
+279 
+ #_SC_REALTIME_SIGNALS
+ 36
+
+ )
+
+280 
+ #_SC_SEMAPHORES
+ 37
+
+ )
+
+281 
+ #_SC_FSYNC
+ 38
+
+ )
+
+282 
+ #_SC_SHARED_MEMORY_OBJECTS
+ 39
+
+ )
+
+283 
+ #_SC_SYNCHRONIZED_IO
+ 40
+
+ )
+
+284 
+ #_SC_TIMERS
+ 41
+
+ )
+
+285 
+ #_SC_AIO_LISTIO_MAX
+ 42
+
+ )
+
+286 
+ #_SC_AIO_MAX
+ 43
+
+ )
+
+287 
+ #_SC_AIO_PRIO_DELTA_MAX
+ 44
+
+ )
+
+288 
+ #_SC_DELAYTIMER_MAX
+ 45
+
+ )
+
+289 
+ #_SC_MQ_OPEN_MAX
+ 46
+
+ )
+
+290 
+ #_SC_MAPPED_FILES
+ 47
+
+ )
+
+291 
+ #_SC_RTSIG_MAX
+ 48
+
+ )
+
+292 
+ #_SC_SEM_NSEMS_MAX
+ 49
+
+ )
+
+293 
+ #_SC_SEM_VALUE_MAX
+ 50
+
+ )
+
+294 
+ #_SC_SIGQUEUE_MAX
+ 51
+
+ )
+
+295 
+ #_SC_TIMER_MAX
+ 52
+
+ )
+
+296 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+297 
+ #_SC_NPROCESSORS_CONF
+ 57
+
+ )
+
+298 
+ #_SC_NPROCESSORS_ONLN
+ 58
+
+ )
+
+300 
+ #_SC_2_PBS
+ 59
+
+ )
+
+301 
+ #_SC_2_PBS_ACCOUNTING
+ 60
+
+ )
+
+302 
+ #_SC_2_PBS_CHECKPOINT
+ 61
+
+ )
+
+303 
+ #_SC_2_PBS_LOCATE
+ 62
+
+ )
+
+304 
+ #_SC_2_PBS_MESSAGE
+ 63
+
+ )
+
+305 
+ #_SC_2_PBS_TRACK
+ 64
+
+ )
+
+306 
+ #_SC_ADVISORY_INFO
+ 65
+
+ )
+
+307 
+ #_SC_BARRIERS
+ 66
+
+ )
+
+308 
+ #_SC_CLOCK_SELECTION
+ 67
+
+ )
+
+309 
+ #_SC_CPUTIME
+ 68
+
+ )
+
+310 
+ #_SC_FILE_LOCKING
+ 69
+
+ )
+
+311 
+ #_SC_GETGR_R_SIZE_MAX
+ 70
+
+ )
+
+312 
+ #_SC_GETPW_R_SIZE_MAX
+ 71
+
+ )
+
+313 
+ #_SC_HOST_NAME_MAX
+ 72
+
+ )
+
+314 
+ #_SC_LOGIN_NAME_MAX
+ 73
+
+ )
+
+315 
+ #_SC_MONOTONIC_CLOCK
+ 74
+
+ )
+
+316 
+ #_SC_MQ_PRIO_MAX
+ 75
+
+ )
+
+317 
+ #_SC_READER_WRITER_LOCKS
+ 76
+
+ )
+
+318 
+ #_SC_REGEXP
+ 77
+
+ )
+
+319 
+ #_SC_SHELL
+ 78
+
+ )
+
+320 
+ #_SC_SPAWN
+ 79
+
+ )
+
+321 
+ #_SC_SPIN_LOCKS
+ 80
+
+ )
+
+322 
+ #_SC_SPORADIC_SERVER
+ 81
+
+ )
+
+323 
+ #_SC_THREAD_ATTR_STACKADDR
+ 82
+
+ )
+
+324 
+ #_SC_THREAD_ATTR_STACKSIZE
+ 83
+
+ )
+
+325 
+ #_SC_THREAD_CPUTIME
+ 84
+
+ )
+
+326 
+ #_SC_THREAD_DESTRUCTOR_ITERATIONS
+ 85
+
+ )
+
+327 
+ #_SC_THREAD_KEYS_MAX
+ 86
+
+ )
+
+328 
+ #_SC_THREAD_PRIO_INHERIT
+ 87
+
+ )
+
+329 
+ #_SC_THREAD_PRIO_PROTECT
+ 88
+
+ )
+
+330 
+ #_SC_THREAD_PRIORITY_SCHEDULING
+ 89
+
+ )
+
+331 
+ #_SC_THREAD_PROCESS_SHARED
+ 90
+
+ )
+
+332 
+ #_SC_THREAD_SAFE_FUNCTIONS
+ 91
+
+ )
+
+333 
+ #_SC_THREAD_SPORADIC_SERVER
+ 92
+
+ )
+
+334 
+ #_SC_THREAD_STACK_MIN
+ 93
+
+ )
+
+335 
+ #_SC_THREAD_THREADS_MAX
+ 94
+
+ )
+
+336 
+ #_SC_TIMEOUTS
+ 95
+
+ )
+
+337 
+ #_SC_THREADS
+ 96
+
+ )
+
+338 
+ #_SC_TRACE
+ 97
+
+ )
+
+339 
+ #_SC_TRACE_EVENT_FILTER
+ 98
+
+ )
+
+340 
+ #_SC_TRACE_INHERIT
+ 99
+
+ )
+
+341 
+ #_SC_TRACE_LOG
+ 100
+
+ )
+
+342 
+ #_SC_TTY_NAME_MAX
+ 101
+
+ )
+
+343 
+ #_SC_TYPED_MEMORY_OBJECTS
+ 102
+
+ )
+
+344 
+ #_SC_V6_ILP32_OFF32
+ 103
+
+ )
+
+345 
+ #_SC_V6_ILP32_OFFBIG
+ 104
+
+ )
+
+346 
+ #_SC_V6_LP64_OFF64
+ 105
+
+ )
+
+347 
+ #_SC_V6_LPBIG_OFFBIG
+ 106
+
+ )
+
+348 
+ #_SC_IPV6
+ 118
+
+ )
+
+349 
+ #_SC_RAW_SOCKETS
+ 119
+
+ )
+
+350 
+ #_SC_SYMLOOP_MAX
+ 120
+
+ )
+
+351 
+ #_SC_ATEXIT_MAX
+ 107
+
+ )
+
+352 
+ #_SC_IOV_MAX
+ 56
+
+ )
+
+353 
+ #_SC_PAGE_SIZE
+
+_SC_PAGESIZE
+
+
+ )
+
+354 
+ #_SC_XOPEN_CRYPT
+ 108
+
+ )
+
+355 
+ #_SC_XOPEN_ENH_I18N
+ 109
+
+ )
+
+356 
+ #_SC_XOPEN_LEGACY
+ 110
+
+ )
+
+357 
+ #_SC_XOPEN_REALTIME
+ 111
+
+ )
+
+358 
+ #_SC_XOPEN_REALTIME_THREADS
+ 112
+
+ )
+
+359 
+ #_SC_XOPEN_SHM
+ 113
+
+ )
+
+360 
+ #_SC_XOPEN_STREAMS
+ 114
+
+ )
+
+361 
+ #_SC_XOPEN_UNIX
+ 115
+
+ )
+
+362 
+ #_SC_XOPEN_VERSION
+ 116
+
+ )
+
+363 
+ #_SC_XOPEN_XCU_VERSION
+ 121
+
+ )
+
+364 
+ #_SC_XBS5_ILP32_OFF32
+ 122
+
+ )
+
+365 
+ #_SC_XBS5_ILP32_OFFBIG
+ 123
+
+ )
+
+366 
+ #_SC_XBS5_LP64_OFF64
+ 124
+
+ )
+
+367 
+ #_SC_XBS5_LPBIG_OFFBIG
+ 125
+
+ )
+
+368 
+ #_SC_SS_REPL_MAX
+ 126
+
+ )
+
+369 
+ #_SC_TRACE_EVENT_NAME_MAX
+ 127
+
+ )
+
+370 
+ #_SC_TRACE_NAME_MAX
+ 128
+
+ )
+
+371 
+ #_SC_TRACE_SYS_MAX
+ 129
+
+ )
+
+372 
+ #_SC_TRACE_USER_EVENT_MAX
+ 130
+
+ )
+
+373 
+ #_SC_PASS_MAX
+ 131
+
+ )
+
+375 #ide
+_CS_PATH
+
+
+376 
+ #_CS_PATH
+ 1
+
+ )
+
+378 
+ #_CS_POSIX_V6_ILP32_OFF32_CFLAGS
+ 2
+
+ )
+
+379 
+ #_CS_POSIX_V6_ILP32_OFF32_LDFLAGS
+ 3
+
+ )
+
+380 
+ #_CS_POSIX_V6_ILP32_OFF32_LIBS
+ 4
+
+ )
+
+381 
+ #_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
+ 5
+
+ )
+
+382 
+ #_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
+ 6
+
+ )
+
+383 
+ #_CS_POSIX_V6_ILP32_OFFBIG_LIBS
+ 7
+
+ )
+
+384 
+ #_CS_POSIX_V6_LP64_OFF64_CFLAGS
+ 8
+
+ )
+
+385 
+ #_CS_POSIX_V6_LP64_OFF64_LDFLAGS
+ 9
+
+ )
+
+386 
+ #_CS_POSIX_V6_LP64_OFF64_LIBS
+ 10
+
+ )
+
+387 
+ #_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
+ 11
+
+ )
+
+388 
+ #_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
+ 12
+
+ )
+
+389 
+ #_CS_POSIX_V6_LPBIG_OFFBIG_LIBS
+ 13
+
+ )
+
+390 
+ #_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS
+ 14
+
+ )
+
+393 
+ #_CS_XBS5_ILP32_OFF32_CFLAGS
+ 20
+
+ )
+
+394 
+ #_CS_XBS5_ILP32_OFF32_LDFLAGS
+ 21
+
+ )
+
+395 
+ #_CS_XBS5_ILP32_OFF32_LIBS
+ 22
+
+ )
+
+396 
+ #_CS_XBS5_ILP32_OFF32_LINTFLAGS
+ 23
+
+ )
+
+397 
+ #_CS_XBS5_ILP32_OFFBIG_CFLAGS
+ 24
+
+ )
+
+398 
+ #_CS_XBS5_ILP32_OFFBIG_LDFLAGS
+ 25
+
+ )
+
+399 
+ #_CS_XBS5_ILP32_OFFBIG_LIBS
+ 26
+
+ )
+
+400 
+ #_CS_XBS5_ILP32_OFFBIG_LINTFLAGS
+ 27
+
+ )
+
+401 
+ #_CS_XBS5_LP64_OFF64_CFLAGS
+ 28
+
+ )
+
+402 
+ #_CS_XBS5_LP64_OFF64_LDFLAGS
+ 29
+
+ )
+
+403 
+ #_CS_XBS5_LP64_OFF64_LIBS
+ 30
+
+ )
+
+404 
+ #_CS_XBS5_LP64_OFF64_LINTFLAGS
+ 31
+
+ )
+
+405 
+ #_CS_XBS5_LPBIG_OFFBIG_CFLAGS
+ 32
+
+ )
+
+406 
+ #_CS_XBS5_LPBIG_OFFBIG_LDFLAGS
+ 33
+
+ )
+
+407 
+ #_CS_XBS5_LPBIG_OFFBIG_LIBS
+ 34
+
+ )
+
+408 
+ #_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
+ 35
+
+ )
+
+410 
+ #_CS_DARWIN_USER_DIR
+ 65536
+
+ )
+
+411 
+ #_CS_DARWIN_USER_TEMP_DIR
+ 65537
+
+ )
+
+412 
+ #_CS_DARWIN_USER_CACHE_DIR
+ 65538
+
+ )
+
+414
+__BEGIN_DECLS
+
+
+416 
+ $_ex
+(
+__dd2
+;
+
+417 
+ `acss
+(const *, );
+
+419
+ `m
+();
+
+420 
+ `chd
+(const *);
+
+421 
+ `chown
+(cڡ *,
+uid_t
+,
+gid_t
+);
+
+422 
+ $o
+(
+ `__DARWIN_ALIAS_C
+(
+o
+);
+
+423
+size_t
+
+ $cfr
+(, *,
+size_t
+
+ `__DARWIN_ALIAS
+(
+cfr
+);
+
+424 *
+ `y
+(const *, const *);
+
+425 *
+ `mid
+(*);
+
+426 
+ `dup
+();
+
+427 
+ `dup2
+(, );
+
+428 #i
+__DARWIN_UNIX03
+
+
+429 
+ $y
+(*, 
+ `__DARWIN_ALIAS
+(
+y
+);
+
+431 
+ `y
+(*, );
+
+433 
+ `exe
+(const *, const *, ...);
+
+434 
+ `exee
+(const *, const *, ...);
+
+435 
+ `exep
+(const *, const *, ...);
+
+436 
+ `execv
+(const *, * const *);
+
+437 
+ `execve
+(const *, * const *, * const *);
+
+438 
+ `execvp
+(const *, * const *);
+
+439 
+ `fchown
+(,
+uid_t
+,
+gid_t
+);
+
+440 
+ `fchd
+();
+
+441
+pid_t
+
+ `fk
+();
+
+442 
+ `hcf
+(, );
+
+443 
+ $fsync
+(
+ `__DARWIN_ALIAS_C
+(
+fsync
+);
+
+444 
+ `run
+(,
+off_t
+);
+
+445 *
+ `gcwd
+(*,
+size_t
+);
+
+446
+gid_t
+
+ `gegid
+();
+
+447
+uid_t
+
+ `geuid
+();
+
+448
+gid_t
+
+ `ggid
+();
+
+449 
+ `ggroups
+(,
+gid_t
+ []);
+
+450 
+ `ghoid
+();
+
+451 
+ `ghome
+(*,
+size_t
+);
+
+452 *
+ `glog
+();
+
+453 
+ `glog_r
+(*,
+size_t
+);
+
+454 
+ $gt
+(, * cڡ [], cڡ *
+ `__DARWIN_ALIAS
+(
+gt
+);
+
+455
+pid_t
+
+ `gpgid
+(pid_t);
+
+456
+pid_t
+
+ `gpg
+();
+
+457
+pid_t
+
+ `gpid
+();
+
+458
+pid_t
+
+ `gid
+();
+
+459
+pid_t
+
+ `gsid
+(pid_t);
+
+460
+uid_t
+
+ `guid
+();
+
+461 *
+ `gwd
+(*);
+
+462 
+ `iy
+();
+
+463 
+ $lchown
+(cڡ *,
+uid_t
+,
+gid_t
+
+ `__DARWIN_ALIAS
+(
+lchown
+);
+
+464 
+ `lk
+(const *, const *);
+
+465 
+ $lockf
+(, ,
+off_t
+
+ `__DARWIN_ALIAS_C
+(
+lockf
+);
+
+466
+off_t
+
+ `lek
+(, off_t, );
+
+467 
+ $ni
+(
+ `__DARWIN_ALIAS
+(
+ni
+);
+
+468 
+ `thcf
+(const *, );
+
+469 
+ $u
+(
+ `__DARWIN_ALIAS_C
+(
+u
+);
+
+470 
+ `pe
+([2]);
+
+471
+ssize_t
+
+ $d
+(, *,
+size_t
+,
+off_t
+
+ `__DARWIN_ALIAS_C
+(
+d
+);
+
+472
+ssize_t
+
+ $pwre
+(, cڡ *,
+size_t
+,
+off_t
+
+ `__DARWIN_ALIAS_C
+(
+pwre
+);
+
+473
+ssize_t
+
+ $ad
+(, *,
+size_t
+
+ `__DARWIN_ALIAS_C
+(
+ad
+);
+
+474
+ssize_t
+
+ `adlk
+(cڡ *
+__ri
+, * __ri,
+size_t
+);
+
+475 
+ `rmd
+(const *);
+
+476 
+ `gid
+(
+gid_t
+);
+
+477 
+ `uid
+(
+uid_t
+);
+
+478 
+ `tgid
+(
+gid_t
+);
+
+479 
+ `gid
+(
+pid_t
+,id_t);
+
+480 #i
+__DARWIN_UNIX03
+
+
+481
+pid_t
+
+ $g
+(
+ `__DARWIN_ALIAS
+(
+g
+);
+
+483 
+ `g
+(
+pid_t
+
+pid
+,id_
+pg
+);
+
+485 
+ $egid
+(
+gid_t
+, gid_t
+ `__DARWIN_ALIAS
+(
+egid
+);
+
+486 
+ $euid
+(
+uid_t
+, uid_t
+ `__DARWIN_ALIAS
+(
+euid
+);
+
+487
+pid_t
+
+ `tsid
+();
+
+488 
+ `tuid
+(
+uid_t
+);
+
+490
+ $p
+(
+ `__DARWIN_ALIAS_C
+(
+p
+);
+
+491 
+ `swab
+(cڡ *
+__ri
+, * __ri,
+ssize_t
+);
+
+492 
+ `symlk
+(const *, const *);
+
+493 
+ `sync
+();
+
+494 
+ `syscf
+();
+
+495
+pid_t
+
+ `tcgpg
+();
+
+496 
+ `tcg
+(,
+pid_t
+);
+
+497 
+ `un
+(cڡ *,
+off_t
+);
+
+498 *
+ `yme
+();
+
+499 #i
+__DARWIN_UNIX03
+
+
+500 
+ $yme_r
+(, *,
+size_t
+
+ `__DARWIN_ALIAS
+(
+yme_r
+);
+
+502 *
+ `yme_r
+(, *,
+size_t
+);
+
+504
+ucds_t
+
+
+505
+ `um
+(
+ucds_t
+, useconds_t);
+
+506 
+ `uƚk
+(const *);
+
+507 
+ $up
+(
+ucds_t
+
+ `__DARWIN_ALIAS_C
+(
+up
+);
+
+508
+pid_t
+
+ `vfk
+();
+
+509
+ssize_t
+
+ $wre
+(, cڡ *,
+size_t
+
+ `__DARWIN_ALIAS_C
+(
+wre
+);
+
+511 *
+ݏrg
+;
+
+512 
+td
+,
+,
+tt
+;
+
+514 #if !
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+515 
+ ~<sys/.h
+>
+
+517 
+ $_Ex
+(
+__dd2
+;
+
+518 
+ `acssx_
+(cڡ 
+acssx_dest
+ *,
+size_t
+, *,
+uid_t
+);
+
+519 
+ `ac
+(const *);
+
+520 
+ `add_of
+(*,
+size_t
+, , );
+
+521 *
+ `brk
+(const *);
+
+522 
+ `chro
+(const *);
+
+523 
+ `durshl
+();
+
+524 
+ `execvP
+(const *, const *, * const *);
+
+525 *
+ `fagor
+();
+
+526 
+ `gdbsize
+();
+
+527 
+ `gdomame
+(*, );
+
+528 
+ `ggroui
+(const *, , *, *);
+
+529
+mode_t
+
+ `gmode
+(const *, mode_t);
+
+530 
+ $ggesize
+(
+__pu2
+;
+
+531 *
+ `gss
+(const *);
+
+532 
+ `geid
+(,
+uid_t
+ *,
+gid_t
+ *);
+
+533 
+ `gpgid
+(
+pid_t
+
+_pid
+);
+
+534 
+ `gsgroups_
+(*,
+uuid_t
+);
+
+535 
+ `gsid
+(
+pid_t
+
+_pid
+);
+
+536 *
+ `gurshl
+();
+
+537 
+ `gwgroups_
+(*,
+uuid_t
+);
+
+538 
+ `groups
+(const *, );
+
+539 
+ `urok
+(, , const *, const *);
+
+540 
+ `urok_
+(const *, , , const *, const *);
+
+541 
+ `istugid
+();
+
+542 *
+ `mkdmp
+(*);
+
+543 
+ `mknod
+(cڡ *,
+mode_t
+,
+dev_t
+);
+
+544 
+ `mkemp
+(*);
+
+545 
+ `mkemps
+(*, );
+
+546 *
+ `mkmp
+(*);
+
+547 
+ `nfssvc
+(, *);
+
+548 
+ `of
+(*,
+size_t
+, , );
+
+549 
+ `had_tugid_
+(
+uid_t
+,
+gid_t
+);
+
+550 
+ `had_gugid_
+
+uid_t
+ *,
+gid_t
+ *);
+
+551 
+ `rcmd
+(**, , const *, const *, const *, *);
+
+552 
+ `rcmd_af
+(**, , const *, const *, const *, *,
+
+554 
+ `bo
+();
+
+555 
+ `voke
+(const *);
+
+556 
+ `esvpt
+(*);
+
+557 
+ `esvpt_af
+(*, );
+
+558 
+ `rurok
+(const *, , const *, const *);
+
+559 *
+ `sbrk
+();
+
+560 
+ `tdomame
+(const *, );
+
+561 
+ `tgroups
+(, cڡ
+gid_t
+ *);
+
+562 
+ `thoid
+();
+
+563 
+ `thome
+(const *, );
+
+564 #i
+__DARWIN_UNIX03
+
+
+565 
+ $tkey
+(cڡ *
+ `__DARWIN_ALIAS
+(
+tkey
+);
+
+567 
+ `tkey
+(const *);
+
+569 
+ `og
+(const *);
+
+570 *
+ `tmode
+(const *);
+
+571 
+ `gid
+(
+gid_t
+);
+
+572 
+ `uid
+(
+uid_t
+);
+
+573 
+ `tsgroups_
+(, cڡ
+uuid_t
+);
+
+574 
+ `turshl
+();
+
+575 
+ `twgroups_
+(, cڡ
+uuid_t
+);
+
+576 
+ `ofags
+(**, *, *);
+
+577 
+ `sw
+(const *);
+
+578 
+ `sys
+(, ...);
+
+579 
+ `y
+();
+
+580 
+ `unde
+(const *);
+
+581 
+ `unwheout
+(const *);
+
+582 *
+ `vloc
+(
+size_t
+);
+
+584 *
+subݏrg
+;
+
+585 
+ `gsubt
+(**, * const *, **);
+
+588 #ifde
+__LP64__
+
+
+589 
+ $gli
+(cڡ *,*,*,
+size_t
+,
+ `__DARWIN_ALIAS
+(
+gli
+);
+
+590 
+ $i
+(cڡ *,*,*,
+size_t
+,
+ `__DARWIN_ALIAS
+(
+i
+);
+
+591 
+ `exchgeda
+(const *,const *,);
+
+592 
+ `gdr
+(,*,*,
+size_t
+,*,*,*,);
+
+593 
+ `chfs
+(const *,*,*,,,*);
+
+595 
+ `fsl
+(const *,,*,);
+
+597 
+ $gli
+(cڡ *,*,*,
+size_t
+,
+ `__DARWIN_ALIAS
+(
+gli
+);
+
+598 
+ $i
+(cڡ *,*,*,
+size_t
+,
+ `__DARWIN_ALIAS
+(
+i
+);
+
+599 
+ `exchgeda
+(const *,const *,);
+
+600 
+ `gdr
+(,*,*,
+size_t
+,*,*,*,);
+
+601 
+ `chfs
+(const *,*,*,,,*);
+
+603 
+ `fsl
+(const *,,*,);
+
+606 
+݌et
+;
+
+609
+__END_DECLS
+
+
+ @/usr/include/_types.h
+
+24 #ide
+__TYPES_H_
+
+
+25 
+ #__TYPES_H_
+
+
+ )
+
+27 
+ ~<sys/_tys.h
+>
+
+29 
+ t__dw__em
+;
+
+30 
+ t__dw_wns_t
+;
+
+31 #ifde
+__LP64__
+
+
+32 
+__ut32_t
+
+ t__dw_wy_t
+;
+
+34 
+ t__dw_wy_t
+;
+
+37 #ifde
+__WCHAR_MAX__
+
+
+38 
+ #__DARWIN_WCHAR_MAX
+
+__WCHAR_MAX__
+
+
+ )
+
+40 
+ #__DARWIN_WCHAR_MAX
+ 0x7fffffff
+
+ )
+
+43 #i
+__DARWIN_WCHAR_MAX
+ > 0xffffU
+
+44 
+ #__DARWIN_WCHAR_MIN
+ (-0x7ffffff- 1)
+
+ )
+
+46 
+ #__DARWIN_WCHAR_MIN
+ 0
+
+ )
+
+48 
+ #__DARWIN_WEOF
+ ((
+__dw_wt_t
+)-1)
+
+ )
+
+ @/usr/include/_xlocale.h
+
+24 #ide
+__XLOCALE_H_
+
+
+25 
+ #__XLOCALE_H_
+
+
+ )
+
+27 
+ ~<sys/cdefs.h
+>
+
+29
+__BEGIN_DECLS
+
+
+30 
+___mb_cur_max
+();
+
+31 
+___mb_cur_max_l
+(
+lo_t
+);
+
+32
+ g__END_DECLS
+
+
+ @/usr/include/alloca.h
+
+24 #ide
+_ALLOCA_H_
+
+
+25 
+ #_ALLOCA_H_
+
+
+ )
+
+27 
+ ~<sys/cdefs.h
+>
+
+28 
+ ~<_tys.h
+>
+
+30 #idef
+_SIZE_T
+
+
+31 
+ #_SIZE_T
+
+
+ )
+
+32 
+__dw_size_t
+
+ tsize_t
+;
+
+35
+__BEGIN_DECLS
+
+
+36 *
+lo
+(
+size_t
+);
+
+37
+ g__END_DECLS
+
+
+39 #i
+defed
+(
+__GNUC__
+) && __GNUC__ >= 3
+
+41 #unde
+lo
+
+
+42 #unde
+__lo
+
+
+43 
+ #lo
+(
+size
+
+ `__lo
+(size)
+
+ )
+
+44 
+ #__lo
+(
+size
+
+ `__but_lo
+(size)
+
+ )
+
+ @/usr/include/available.h
+
+65 #ide
+_AVAILABLE_H_
+
+
+66 
+ #_AVAILABLE_H_
+
+
+ )
+
+72 
+ #__MAC_OS_X_VERSION_10_0
+ 1000
+
+ )
+
+73 
+ #__MAC_OS_X_VERSION_10_1
+ 1010
+
+ )
+
+74 
+ #__MAC_OS_X_VERSION_10_2
+ 1020
+
+ )
+
+75 
+ #__MAC_OS_X_VERSION_10_3
+ 1030
+
+ )
+
+76 
+ #__MAC_OS_X_VERSION_10_4
+ 1040
+
+ )
+
+77 
+ #__MAC_OS_X_VERSION_10_5
+ 1050
+
+ )
+
+84 #ide
+__MAC_OS_X_VERSION_MIN_REQUIRED
+
+
+85 #ifde
+__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+
+
+86 
+ #__MAC_OS_X_VERSION_MIN_REQUIRED
+
+__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+
+
+ )
+
+88 #i
+__c64__
+ ||
+__i386__
+ ||
+__x86_64__
+
+
+89 
+ #__MAC_OS_X_VERSION_MIN_REQUIRED
+
+__MAC_OS_X_VERSION_10_4
+
+
+ )
+
+91 
+ #__MAC_OS_X_VERSION_MIN_REQUIRED
+
+__MAC_OS_X_VERSION_10_1
+
+
+ )
+
+99 #ide
+__MAC_OS_X_VERSION_MAX_ALLOWED
+
+
+100 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_5
+
+
+101 
+ #__MAC_OS_X_VERSION_MAX_ALLOWED
+
+__MAC_OS_X_VERSION_MIN_REQUIRED
+
+
+ )
+
+103 
+ #__MAC_OS_X_VERSION_MAX_ALLOWED
+
+__MAC_OS_X_VERSION_10_5
+
+
+ )
+
+110 #i
+__MAC_OS_X_VERSION_MAX_ALLOWED
+ <
+__MAC_OS_X_VERSION_MIN_REQUIRED
+
+
+111 #r
+__MAC_OS_X_VERSION_MAX_ALLOWED
+
+mu
+
+be
+ >
+__MAC_OS_X_VERSION_MIN_REQUIRED
+
+
+113 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ <
+__MAC_OS_X_VERSION_10_0
+
+
+114 #r
+__MAC_OS_X_VERSION_MIN_REQUIRED
+
+mu
+
+be
+ >
+__MAC_OS_X_VERSION_10_0
+
+
+120 #i
+defed
+(
+__GNUC__
+&& ((__GNUC__ >4|| ((__GNUC__ =3&& (
+__GNUC_MINOR__
+ >1))&& (
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >= 1020)
+
+121 
+ #__DARWIN_WEAK_IMPORT_ATTRIBUTE
+
+ `__ibu__
+((
+wk_impt
+))
+
+ )
+
+122 #i
+defed
+(
+__MWERKS__
+&& (__MWERKS__ >0x3205&& (
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >= 1020)
+
+123 
+ #__DARWIN_WEAK_IMPORT_ATTRIBUTE
+
+ `__ibu__
+((
+wk_impt
+))
+
+ )
+
+125 
+ #__DARWIN_WEAK_IMPORT_ATTRIBUTE
+
+
+ )
+
+131 #i
+defed
+(
+__GNUC__
+&& ((__GNUC__ >4|| ((__GNUC__ =3&& (
+__GNUC_MINOR__
+ >= 1)))
+
+132 
+ #__DARWIN_DEPRECATED_ATTRIBUTE
+
+ `__ibu__
+((
+dd
+))
+
+ )
+
+134 
+ #__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+140 #i
+defed
+(
+__GNUC__
+&& ((__GNUC__ >4|| ((__GNUC__ =3&& (
+__GNUC_MINOR__
+ >= 1)))
+
+141 
+ #__DARWIN_UNAVAILABLE_ATTRIBUTE
+
+ `__ibu__
+((
+uvaab
+))
+
+ )
+
+143 
+ #__DARWIN_UNAVAILABLE_ATTRIBUTE
+
+
+ )
+
+153 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER
+
+
+ )
+
+161 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+168 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_0_AND_LATER
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+180 #i
+__MAC_OS_X_VERSION_MAX_ALLOWED
+ <
+__MAC_OS_X_VERSION_10_1
+
+
+181 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER
+
+__DARWIN_UNAVAILABLE_ATTRIBUTE
+
+
+ )
+
+182 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ <
+__MAC_OS_X_VERSION_10_1
+
+
+183 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER
+
+__DARWIN_WEAK_IMPORT_ATTRIBUTE
+
+
+ )
+
+185 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER
+
+
+ )
+
+194 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_1
+
+
+195 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+197 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED
+
+__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER
+
+
+ )
+
+206 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_1
+
+
+207 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_1
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+209 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_1
+
+__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER
+
+
+ )
+
+217 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_1
+
+
+218 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_1_AND_LATER
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+220 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_1_AND_LATER
+
+
+ )
+
+234 #i
+__MAC_OS_X_VERSION_MAX_ALLOWED
+ <
+__MAC_OS_X_VERSION_10_2
+
+
+235 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
+
+__DARWIN_UNAVAILABLE_ATTRIBUTE
+
+
+ )
+
+236 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ <
+__MAC_OS_X_VERSION_10_2
+
+
+237 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
+
+__DARWIN_WEAK_IMPORT_ATTRIBUTE
+
+
+ )
+
+239 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
+
+
+ )
+
+248 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_2
+
+
+249 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+251 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED
+
+__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
+
+
+ )
+
+260 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_2
+
+
+261 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_2
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+263 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_2
+
+__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER
+
+
+ )
+
+272 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_2
+
+
+273 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_2
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+275 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_2
+
+__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER
+
+
+ )
+
+283 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_2
+
+
+284 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_2_AND_LATER
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+286 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_2_AND_LATER
+
+
+ )
+
+298 #i
+__MAC_OS_X_VERSION_MAX_ALLOWED
+ <
+__MAC_OS_X_VERSION_10_3
+
+
+299 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
+
+__DARWIN_UNAVAILABLE_ATTRIBUTE
+
+
+ )
+
+300 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ <
+__MAC_OS_X_VERSION_10_3
+
+
+301 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
+
+__DARWIN_WEAK_IMPORT_ATTRIBUTE
+
+
+ )
+
+303 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
+
+
+ )
+
+312 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_3
+
+
+313 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+315 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED
+
+__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
+
+
+ )
+
+324 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_3
+
+
+325 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+327 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3
+
+__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER
+
+
+ )
+
+336 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_3
+
+
+337 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+339 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3
+
+__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER
+
+
+ )
+
+348 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_3
+
+
+349 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+351 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3
+
+__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
+
+
+ )
+
+359 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_3
+
+
+360 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_3_AND_LATER
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+362 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_3_AND_LATER
+
+
+ )
+
+375 #i
+__MAC_OS_X_VERSION_MAX_ALLOWED
+ <
+__MAC_OS_X_VERSION_10_4
+
+
+376 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
+
+__DARWIN_UNAVAILABLE_ATTRIBUTE
+
+
+ )
+
+377 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ <
+__MAC_OS_X_VERSION_10_4
+
+
+378 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
+
+__DARWIN_WEAK_IMPORT_ATTRIBUTE
+
+
+ )
+
+380 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
+
+
+ )
+
+389 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_4
+
+
+390 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER_BUT_DEPRECATED
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+392 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER_BUT_DEPRECATED
+
+__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
+
+
+ )
+
+401 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_4
+
+
+402 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+404 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4
+
+__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER
+
+
+ )
+
+413 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_4
+
+
+414 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+416 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4
+
+__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER
+
+
+ )
+
+425 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_4
+
+
+426 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+428 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4
+
+__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
+
+
+ )
+
+437 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_4
+
+
+438 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+440 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4
+
+__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
+
+
+ )
+
+448 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_4
+
+
+449 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_4_AND_LATER
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+451 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_4_AND_LATER
+
+
+ )
+
+463 #i
+__MAC_OS_X_VERSION_MAX_ALLOWED
+ <
+__MAC_OS_X_VERSION_10_5
+
+
+464 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
+
+__DARWIN_UNAVAILABLE_ATTRIBUTE
+
+
+ )
+
+465 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ <
+__MAC_OS_X_VERSION_10_5
+
+
+466 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
+
+__DARWIN_WEAK_IMPORT_ATTRIBUTE
+
+
+ )
+
+468 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
+
+
+ )
+
+477 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_5
+
+
+478 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER_BUT_DEPRECATED
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+480 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER_BUT_DEPRECATED
+
+__AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
+
+
+ )
+
+489 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_5
+
+
+490 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+492 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER
+
+
+ )
+
+501 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_5
+
+
+502 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+504 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER
+
+
+ )
+
+513 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_5
+
+
+514 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+516 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER
+
+
+ )
+
+525 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_5
+
+
+526 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+528 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
+
+
+ )
+
+537 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_5
+
+
+538 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+540 
+ #__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5
+
+__AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
+
+
+ )
+
+548 #i
+__MAC_OS_X_VERSION_MIN_REQUIRED
+ >
+__MAC_OS_X_VERSION_10_5
+
+
+549 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER
+
+__DARWIN_DEPRECATED_ATTRIBUTE
+
+
+ )
+
+551 
+ #__DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER
+
+
+ )
+
+ @/usr/include/machine/endian.h
+
+31 #ide
+_BSD_MACHINE_ENDIAN_H_
+
+
+32 
+ #_BSD_MACHINE_ENDIAN_H_
+
+
+ )
+
+34 #i
+defed
+ (
+__c__
+|| defed(
+__c64__
+)
+
+35 
+ ~"c/dn.h
+"
+
+36 #i
+defed
+ (
+__i386__
+|| defed(
+__x86_64__
+)
+
+37 
+ ~"i386/dn.h
+"
+
+38 #i
+defed
+ (
+__m__
+)
+
+39 
+ ~"m/dn.h
+"
+
+41 #r
+cheu
+
+n
+
+su܋d
+
+
+ @/usr/include/machine/types.h
+
+31 #ide
+_BSD_MACHINE_TYPES_H_
+
+
+32 
+ #_BSD_MACHINE_TYPES_H_
+
+
+ )
+
+34 #i
+defed
+ (
+__c__
+|| defed (
+__c64__
+)
+
+35 
+ ~"c/tys.h
+"
+
+36 #i
+defed
+ (
+__i386__
+|| defed(
+__x86_64__
+)
+
+37 
+ ~"i386/tys.h
+"
+
+38 #i
+defed
+ (
+__m__
+)
+
+39 
+ ~"m/tys.h
+"
+
+41 #r
+cheu
+
+n
+
+su܋d
+
+
+ @/usr/include/secure/_stdio.h
+
+24 #ide
+_STDIO_H_
+
+
+25 #r
+r
+ "Never use <secure/_stdio.h> directly; include <stdio.h> instead."
+
+28 #ide
+_SECURE__STDIO_H_
+
+
+29 
+ #_SECURE__STDIO_H_
+
+
+ )
+
+31 
+ ~<cu/_comm.h
+>
+
+33 #i
+_USE_FORTIFY_LEVEL
+ > 0
+
+35 #unde
+rtf
+
+
+36 #unde
+vrtf
+
+
+37 #unde
+tf
+
+
+38 #unde
+vtf
+
+
+42 
+ $__rtf_chk
+ (*
+__ri
+, ,
+size_t
+,
+
+43 cڡ *
+__ri
+, ...)
+
+44
+ `__DARWIN_LDBL_COMPAT
+ (
+__rtf_chk
+);
+
+46 
+ #rtf
+(
+r
+, ...) \
+
+47
+ `__but___rtf_chk
+ (
+r
+, 0,
+ `__dw_obsz
+(r),
+__VA_ARGS__
+)
+
+ )
+
+49 
+ $__tf_chk
+ (*
+__ri
+,
+size_t
+, , size_t,
+
+50 cڡ *
+__ri
+, ...)
+
+51
+ `__DARWIN_LDBL_COMPAT
+ (
+__tf_chk
+);
+
+53 
+ #tf
+(
+r
+,
+n
+, ...) \
+
+54
+ `__but___tf_chk
+ (
+r
+,
+n
+, 0,
+ `__dw_obsz
+(r),
+__VA_ARGS__
+)
+
+ )
+
+56 
+ $__vrtf_chk
+ (*
+__ri
+, ,
+size_t
+,
+
+57 cڡ *
+__ri
+,
+va_li
+
+g
+)
+
+58
+ `__DARWIN_LDBL_COMPAT
+ (
+__vrtf_chk
+);
+
+60 
+ #vrtf
+(
+r
+,
+fm
+,
+
+) \
+
+61
+ `__but___vrtf_chk
+ (
+r
+, 0,
+ `__dw_obsz
+(r),
+fm
+,
+
+)
+
+ )
+
+63 
+ $__vtf_chk
+ (*
+__ri
+,
+size_t
+, , size_t,
+
+64 cڡ *
+__ri
+,
+va_li
+
+g
+)
+
+65
+ `__DARWIN_LDBL_COMPAT
+ (
+__vtf_chk
+);
+
+67 
+ #vtf
+(
+r
+,
+n
+,
+fm
+,
+
+) \
+
+68
+ `__but___vtf_chk
+ (
+r
+,
+n
+, 0,
+ `__dw_obsz
+(r),
+fm
+,
+
+)
+
+ )
+
+ @/usr/include/sys/_select.h
+
+36 #ide
+_SYS__SELECT_H_
+
+
+37 
+ #_SYS__SELECT_H_
+
+
+ )
+
+39 
+ $
+(,
+fd_t
+ *
+__ri
+, fd_set * __restrict,
+
+40
+fd_t
+ *
+__ri
+, 
+timev
+ * __restrict)
+
+41 #i
+ `defed
+(
+_DARWIN_C_SOURCE
+|| defed(
+_DARWIN_UNLIMITED_SELECT
+)
+
+42
+ $__DARWIN_EXTSN_C
+(
+
+)
+
+44 #i
+ `defed
+(
+__LP64__
+&& !
+__DARWIN_NON_CANCELABLE
+
+
+45
+ $__DARWIN_1050
+(
+
+)
+
+47
+ $__DARWIN_ALIAS_C
+(
+
+)
+
+ @/usr/include/sys/_structs.h
+
+29 
+ ~<sys/cdefs.h
+>
+
+30 
+ ~<sys/_tys.h
+>
+
+32 #ifde
+__ed_ucڋxt_t
+
+
+33 #ide
+__ed_ru_ucڋxt
+
+
+34 
+ #__ed_ru_ucڋxt
+
+
+ )
+
+38 #ifde
+__ed_ucڋxt64_t
+
+
+39 #ide
+__ed_ru_ucڋxt64
+
+
+40 
+ #__ed_ru_ucڋxt64
+
+
+ )
+
+44 #ifde
+__ed_ru_ucڋxt
+
+
+45 #ide
+__ed_ru_mcڋxt
+
+
+46 
+ #__ed_ru_mcڋxt
+
+
+ )
+
+50 #ifde
+__ed_ru_ucڋxt64
+
+
+51 #ide
+__ed_ru_mcڋxt64
+
+
+52 
+ #__ed_ru_mcڋxt64
+
+
+ )
+
+56 #i
+defed
+(
+__ed_ru_mcڋxt
+|| defed(
+__ed_ru_mcڋxt64
+)
+
+57 
+ ~<mache/_rus.h
+>
+
+60 #i
+defed
+(
+__ed_ack_t
+|| defed(
+__ed_ru_ucڋxt
+|| defed(
+__ed_ru_ucڋxt64
+)
+
+61 #ide
+__ed_ru_sigtack
+
+
+62 
+ #__ed_ru_sigtack
+
+
+ )
+
+66 #ifde
+__ed_ru_sigtack
+
+
+67 #unde
+__ed_ru_sigtack
+
+
+69 #ide
+_STRUCT_SIGALTSTACK
+
+
+70 #i
+__DARWIN_UNIX03
+
+
+71 
+ #_STRUCT_SIGALTSTACK
+ 
+__dw_sigtack
+
+
+ )
+
+73 
+ #_STRUCT_SIGALTSTACK
+ 
+sigtack
+
+
+ )
+
+75
+ g_STRUCT_SIGALTSTACK
+
+
+77 *
+ gss_
+;
+
+78
+__dw_size_t
+
+ gss_size
+;
+
+79 
+ gss_ags
+;
+
+84 #ifde
+__ed_ru_timeec
+
+
+85 #unde
+__ed_ru_timeec
+
+
+86 #ide
+_STRUCT_TIMESPEC
+
+
+87 
+ #_STRUCT_TIMESPEC
+ 
+timeec
+
+
+ )
+
+88
+ g_STRUCT_TIMESPEC
+
+
+90
+__dw_time_t
+
+ gtv_c
+;
+
+91 
+ gtv_nc
+;
+
+96 #ifde
+__ed_ru_timev
+
+
+97 #unde
+__ed_ru_timev
+
+
+98 #ide
+_STRUCT_TIMEVAL
+
+
+99 
+ #_STRUCT_TIMEVAL
+ 
+timev
+
+
+ )
+
+100
+ g_STRUCT_TIMEVAL
+
+
+102
+__dw_time_t
+
+ gtv_c
+;
+
+103
+__dw_sucds_t
+
+ gtv_uc
+;
+
+108 #ifde
+__ed_ru_timev32
+
+
+109 #unde
+__ed_ru_timev32
+
+
+110 #ide
+_STRUCT_TIMEVAL32
+
+
+111 
+ #_STRUCT_TIMEVAL32
+ 
+timev32
+
+
+ )
+
+112
+ g_STRUCT_TIMEVAL32
+
+
+114
+__t32_t
+
+ gtv_c
+;
+
+115
+__t32_t
+
+ gtv_uc
+;
+
+120 #ifde
+__ed_ru_ucڋxt
+
+
+121 #unde
+__ed_ru_ucڋxt
+
+
+122 #ide
+_STRUCT_UCONTEXT
+
+
+123 #i
+__DARWIN_UNIX03
+
+
+124 
+ #_STRUCT_UCONTEXT
+ 
+__dw_ucڋxt
+
+
+ )
+
+126 
+ #_STRUCT_UCONTEXT
+ 
+ucڋxt
+
+
+ )
+
+128
+ g_STRUCT_UCONTEXT
+
+
+130 
+ guc_ڡack
+;
+
+131
+__dw_sigt_t
+
+ guc_sigmask
+;
+
+132
+_STRUCT_SIGALTSTACK
+
+ guc_ack
+;
+
+133
+_STRUCT_UCONTEXT
+ *
+ guc_lk
+;
+
+134
+__dw_size_t
+
+ guc_mcsize
+;
+
+135
+_STRUCT_MCONTEXT
+ *
+ guc_mcڋxt
+;
+
+136 #ifde
+_XOPEN_SOURCE
+
+
+137
+_STRUCT_MCONTEXT
+
+ g__mcڋxt_da
+;
+
+143 #ifde
+__ed_ru_ucڋxt64
+
+
+144 #unde
+__ed_ru_ucڋxt64
+
+
+145 #ide
+_STRUCT_UCONTEXT64
+
+
+146 #i
+__DARWIN_UNIX03
+
+
+147 
+ #_STRUCT_UCONTEXT64
+ 
+__dw_ucڋxt64
+
+
+ )
+
+149 
+ #_STRUCT_UCONTEXT64
+ 
+ucڋxt64
+
+
+ )
+
+151
+ g_STRUCT_UCONTEXT64
+
+
+153 
+ guc_ڡack
+;
+
+154
+__dw_sigt_t
+
+ guc_sigmask
+;
+
+155
+_STRUCT_SIGALTSTACK
+
+ guc_ack
+;
+
+156
+_STRUCT_UCONTEXT64
+ *
+ guc_lk
+;
+
+157
+__dw_size_t
+
+ guc_mcsize
+;
+
+158
+_STRUCT_MCONTEXT64
+ *
+ guc_mcڋxt64
+;
+
+164 #ifde
+__ed_fd_t
+
+
+165 #unde
+__ed_fd_t
+
+
+166 #ide
+_FD_SET
+
+
+167 
+ #_FD_SET
+
+
+ )
+
+174 #ifde
+FD_SETSIZE
+
+
+175 
+ #__DARWIN_FD_SETSIZE
+
+FD_SETSIZE
+
+
+ )
+
+177 
+ #__DARWIN_FD_SETSIZE
+ 1024
+
+ )
+
+179 
+ #__DARWIN_NBBY
+ 8
+
+ )
+
+180 
+ #__DARWIN_NFDBITS
+ ((
+__t32_t
+*
+__DARWIN_NBBY
+
+
+ )
+
+181 
+ #__DARWIN_howmy
+(
+x
+,
+y
+(((x+ ((y- 1)/ (y)
+
+ )
+
+183
+__BEGIN_DECLS
+
+
+184 
+ sfd_t
+ {
+
+185
+__t32_t
+
+ mfds_bs
+[
+__DARWIN_howmy
+(
+__DARWIN_FD_SETSIZE
+,
+__DARWIN_NFDBITS
+)];
+
+186 }
+ tfd_t
+;
+
+187
+__END_DECLS
+
+
+190 
+__le
+ 
+
+191
+ $__dw_fd_ist
+(
+_n
+, 
+fd_t
+ *
+_p
+)
+
+193  (
+_p
+->
+fds_bs
+[
+_n
+/
+__DARWIN_NFDBITS
+] & (1<<(_n % __DARWIN_NFDBITS)));
+
+194
+ }
+}
+
+196 
+ #__DARWIN_FD_SET
+(
+n
+,
+p
+d{ 
+__fd
+ = (n); ()->
+fds_bs
+[__fd/
+__DARWIN_NFDBITS
+] |(1<<(__fd % __DARWIN_NFDBITS))); } 0)
+
+ )
+
+197 
+ #__DARWIN_FD_CLR
+(
+n
+,
+p
+d{ 
+__fd
+ = (n); ()->
+fds_bs
+[__fd/
+__DARWIN_NFDBITS
+] &~(1<<(__fd % __DARWIN_NFDBITS))); } 0)
+
+ )
+
+198 
+ #__DARWIN_FD_ISSET
+(
+n
+,
+p
+
+ `__dw_fd_ist
+(), (p))
+
+ )
+
+200 #i
+__GNUC__
+ > 3 || __GNUC__ =3 &&
+__GNUC_MINOR__
+ >= 3
+
+205 
+ #__DARWIN_FD_ZERO
+(
+p
+
+ `__but_bzo
+, (*)))
+
+ )
+
+207 
+ #__DARWIN_FD_ZERO
+(
+p
+
+ `bzo
+, (*)))
+
+ )
+
+210 
+ #__DARWIN_FD_COPY
+(
+f
+,
+t
+
+ `bcy
+(f,, (*(f)))
+
+ )
+
+214 #ifde
+__ed_ack_t
+
+
+215 #unde
+__ed_ack_t
+
+
+216 #ide
+_STACK_T
+
+
+217 
+ #_STACK_T
+
+
+ )
+
+218 
+_STRUCT_SIGALTSTACK
+
+ tack_t
+;
+
+222 #ifde
+__ed_ucڋxt_t
+
+
+223 #unde
+__ed_ucڋxt_t
+
+
+225 #ide
+_UCONTEXT_T
+
+
+226 
+ #_UCONTEXT_T
+
+
+ )
+
+227 
+_STRUCT_UCONTEXT
+
+ tucڋxt_t
+;
+
+231 #ifde
+__ed_ucڋxt64_t
+
+
+232 #unde
+__ed_ucڋxt64_t
+
+
+233 #ide
+_UCONTEXT64_T
+
+
+234 
+ #_UCONTEXT64_T
+
+
+ )
+
+235 
+_STRUCT_UCONTEXT64
+
+ tucڋxt64_t
+;
+
+ @/usr/include/sys/_types.h
+
+29 #ide
+_SYS__TYPES_H_
+
+
+30 
+ #_SYS__TYPES_H_
+
+
+ )
+
+32 
+ ~<sys/cdefs.h
+>
+
+33 
+ ~<mache/_tys.h
+>
+
+36 #i
+defed
+(
+__LP64__
+)
+
+37 
+ #__PTHREAD_SIZE__
+ 1168
+
+ )
+
+38 
+ #__PTHREAD_ATTR_SIZE__
+ 56
+
+ )
+
+39 
+ #__PTHREAD_MUTEXATTR_SIZE__
+ 8
+
+ )
+
+40 
+ #__PTHREAD_MUTEX_SIZE__
+ 56
+
+ )
+
+41 
+ #__PTHREAD_CONDATTR_SIZE__
+ 8
+
+ )
+
+42 
+ #__PTHREAD_COND_SIZE__
+ 40
+
+ )
+
+43 
+ #__PTHREAD_ONCE_SIZE__
+ 8
+
+ )
+
+44 
+ #__PTHREAD_RWLOCK_SIZE__
+ 192
+
+ )
+
+45 
+ #__PTHREAD_RWLOCKATTR_SIZE__
+ 16
+
+ )
+
+47 
+ #__PTHREAD_SIZE__
+ 596
+
+ )
+
+48 
+ #__PTHREAD_ATTR_SIZE__
+ 36
+
+ )
+
+49 
+ #__PTHREAD_MUTEXATTR_SIZE__
+ 8
+
+ )
+
+50 
+ #__PTHREAD_MUTEX_SIZE__
+ 40
+
+ )
+
+51 
+ #__PTHREAD_CONDATTR_SIZE__
+ 4
+
+ )
+
+52 
+ #__PTHREAD_COND_SIZE__
+ 24
+
+ )
+
+53 
+ #__PTHREAD_ONCE_SIZE__
+ 4
+
+ )
+
+54 
+ #__PTHREAD_RWLOCK_SIZE__
+ 124
+
+ )
+
+55 
+ #__PTHREAD_RWLOCKATTR_SIZE__
+ 12
+
+ )
+
+58 
+ s__dw_had_hdr_c
+
+
+60 (*
+ m__route
+)(*);
+
+61 *
+ m__g
+;
+
+62 
+__dw_had_hdr_c
+ *
+ m__xt
+;
+
+64 
+ s_aque_had__t
+ { 
+ m__sig
+; 
+ m__aque
+[
+__PTHREAD_ATTR_SIZE__
+]; };
+
+65 
+ s_aque_had_cd_t
+ { 
+ m__sig
+; 
+ m__aque
+[
+__PTHREAD_COND_SIZE__
+]; };
+
+66 
+ s_aque_had_cd_t
+ { 
+ m__sig
+; 
+ m__aque
+[
+__PTHREAD_CONDATTR_SIZE__
+]; };
+
+67 
+ s_aque_had_mux_t
+ { 
+ m__sig
+; 
+ m__aque
+[
+__PTHREAD_MUTEX_SIZE__
+]; };
+
+68 
+ s_aque_had_mux_t
+ { 
+ m__sig
+; 
+ m__aque
+[
+__PTHREAD_MUTEXATTR_SIZE__
+]; };
+
+69 
+ s_aque_had__t
+ { 
+ m__sig
+; 
+ m__aque
+[
+__PTHREAD_ONCE_SIZE__
+]; };
+
+70 
+ s_aque_had_rwlock_t
+ { 
+ m__sig
+; 
+ m__aque
+[
+__PTHREAD_RWLOCK_SIZE__
+]; };
+
+71 
+ s_aque_had_rwlock_t
+ { 
+ m__sig
+; 
+ m__aque
+[
+__PTHREAD_RWLOCKATTR_SIZE__
+]; };
+
+72 
+ s_aque_had_t
+ { 
+ m__sig
+; 
+__dw_had_hdr_c
+ *
+ m__nup_ack
+; 
+ m__aque
+[
+__PTHREAD_SIZE__
+]; };
+
+80 #ifde
+__lulus
+
+
+81 #ifde
+__GNUG__
+
+
+82 
+ #__DARWIN_NULL
+
+__nu
+
+
+ )
+
+84 #ifde
+__LP64__
+
+
+85 
+ #__DARWIN_NULL
+ (0L)
+
+ )
+
+87 
+ #__DARWIN_NULL
+ 0
+
+ )
+
+91 
+ #__DARWIN_NULL
+ ((*)0)
+
+ )
+
+94 
+__t64_t
+
+ t__dw_blkt_t
+;
+
+95 
+__t32_t
+
+ t__dw_blksize_t
+;
+
+96 
+__t32_t
+
+ t__dw_dev_t
+;
+
+97 
+ t__dw_fsblkt_t
+;
+
+98 
+ t__dw_fsft_t
+;
+
+99 
+__ut32_t
+
+ t__dw_gid_t
+;
+
+100 
+__ut32_t
+
+ t__dw_id_t
+;
+
+101 
+__ut64_t
+
+ t__dw_o64_t
+;
+
+102 #i
+__DARWIN_64_BIT_INO_T
+
+
+103 
+__dw_o64_t
+
+ t__dw_o_t
+;
+
+105 
+__ut32_t
+
+ t__dw_o_t
+;
+
+107 
+__dw_tul_t
+
+ t__dw_mach_pt_me_t
+;
+
+108 
+__dw_mach_pt_me_t
+
+ t__dw_mach_pt_t
+;
+
+109 
+__ut16_t
+
+ t__dw_mode_t
+;
+
+110 
+__t64_t
+
+ t__dw_off_t
+;
+
+111 
+__t32_t
+
+ t__dw_pid_t
+;
+
+112 
+_aque_had__t
+
+
+113
+ t__dw_had__t
+;
+
+114 
+_aque_had_cd_t
+
+
+115
+ t__dw_had_cd_t
+;
+
+116 
+_aque_had_cd_t
+
+
+117
+ t__dw_had_cd_t
+;
+
+118 
+ t__dw_had_key_t
+;
+
+119 
+_aque_had_mux_t
+
+
+120
+ t__dw_had_mux_t
+;
+
+121 
+_aque_had_mux_t
+
+
+122
+ t__dw_had_mux_t
+;
+
+123 
+_aque_had__t
+
+
+124
+ t__dw_had__t
+;
+
+125 
+_aque_had_rwlock_t
+
+
+126
+ t__dw_had_rwlock_t
+;
+
+127 
+_aque_had_rwlock_t
+
+
+128
+ t__dw_had_rwlock_t
+;
+
+129 
+_aque_had_t
+
+
+130 *
+ t__dw_had_t
+;
+
+131 
+__ut32_t
+
+ t__dw_sigt_t
+;
+
+132 
+__t32_t
+
+ t__dw_sucds_t
+;
+
+133 
+__ut32_t
+
+ t__dw_uid_t
+;
+
+134 
+__ut32_t
+
+ t__dw_ucds_t
+;
+
+135 
+ t__dw_uuid_t
+[16];
+
+ @/usr/include/sys/appleapiopts.h
+
+29 #ide
+__SYS_APPLEAPIOPTS_H__
+
+
+30 
+ #__SYS_APPLEAPIOPTS_H__
+
+
+ )
+
+33 #ide
+__APPLE_API_STANDARD
+
+
+34 
+ #__APPLE_API_STANDARD
+
+
+ )
+
+37 #ide
+__APPLE_API_STABLE
+
+
+38 
+ #__APPLE_API_STABLE
+
+
+ )
+
+41 #ide
+__APPLE_API_STRICT_CONFORMANCE
+
+
+43 #ide
+__APPLE_API_EVOLVING
+
+
+44 
+ #__APPLE_API_EVOLVING
+
+
+ )
+
+47 #ide
+__APPLE_API_UNSTABLE
+
+
+48 
+ #__APPLE_API_UNSTABLE
+
+
+ )
+
+51 #ide
+__APPLE_API_PRIVATE
+
+
+52 
+ #__APPLE_API_PRIVATE
+
+
+ )
+
+55 #ide
+__APPLE_API_OBSOLETE
+
+
+56 
+ #__APPLE_API_OBSOLETE
+
+
+ )
+
+ @/usr/include/sys/cdefs.h
+
+67 #idef
+_CDEFS_H_
+
+
+68 
+ #_CDEFS_H_
+
+
+ )
+
+70 #i
+defed
+(
+__lulus
+)
+
+71 
+ #__BEGIN_DECLS
+ "C" {
+
+ )
+
+72 
+ #__END_DECLS
+ }
+
+ )
+
+74 
+ #__BEGIN_DECLS
+
+
+ )
+
+75 
+ #__END_DECLS
+
+
+ )
+
+85 #i
+defed
+(
+__STDC__
+|| defed(
+__lulus
+)
+
+86 
+ #__P
+(
+os
+o
+
+ )
+
+87 
+ #__CONCAT
+(
+x
+,
+y
+x ##
+ )
+y
+
+88 
+ #__STRING
+(
+x
+#x
+
+ )
+
+90 
+ #__cڡ
+ cڡ
+
+ )
+
+91 
+ #__sigd
+ sigd
+
+ )
+
+92 
+ #__vީe
+ vީe
+
+ )
+
+93 #i
+defed
+(
+__lulus
+)
+
+94 
+ #__le
+
+le
+
+
+ )
+
+96 #ide
+__GNUC__
+
+
+97 
+ #__le
+
+
+ )
+
+102 
+ #__P
+(
+os
+(
+
+ )
+
+103 
+ #__CONCAT
+(
+x
+,
+y
+x
+ )
+y
+
+104 
+ #__STRING
+(
+x
+"x"
+
+ )
+
+106 #ide
+__GNUC__
+
+
+107 
+ #__cڡ
+
+
+ )
+
+108 
+ #__le
+
+
+ )
+
+109 
+ #__sigd
+
+
+ )
+
+110 
+ #__vީe
+
+
+ )
+
+121 #idef
+NO_ANSI_KEYWORDS
+
+
+122 cڡ
+__cڡ
+
+
+ )
+
+123 
+ #le
+
+__le
+
+
+ )
+
+124 sigd
+__sigd
+
+
+ )
+
+125 vީ
+__vީe
+
+
+ )
+
+137 #i
+defed
+(
+__MWERKS__
+) && (__MWERKS__ > 0x2400)
+
+139 #i
+__GNUC__
+ > 2 || __GNUC__ =2 &&
+__GNUC_MINOR__
+ >= 5
+
+140 
+ #__dd2
+
+ `__ibu__
+((
+__nܑu__
+))
+
+ )
+
+141 
+ #__pu2
+
+ `__ibu__
+((
+__cڡ__
+))
+
+ )
+
+142 #i
+__GNUC__
+ =2 &&
+__GNUC_MINOR__
+ >= 5 && __GNUC_MINOR__ < 7
+
+143 
+ #__unud
+
+
+ )
+
+145 
+ #__unud
+
+ `__ibu__
+((
+__unud__
+))
+
+ )
+
+148 
+ #__ibu__
+(
+x
+
+
+ )
+
+149 #i
+defed
+(
+__GNUC__
+&& !defed(
+__STRICT_ANSI__
+)
+
+151 
+ #__dd
+
+__vީe
+
+
+ )
+
+152 
+ #__pu
+
+__cڡ
+
+
+ )
+
+157 #ide
+__dd
+
+
+158 
+ #__dd
+
+
+ )
+
+159 
+ #__pu
+
+
+ )
+
+161 #ide
+__dd2
+
+
+162 
+ #__dd2
+
+
+ )
+
+163 
+ #__pu2
+
+
+ )
+
+164 
+ #__unud
+
+
+ )
+
+173 #i!(
+__GNUC__
+ =2 &&
+__GNUC_MINOR__
+ == 95)
+
+174 #i
+__STDC_VERSION__
+ < 199901
+
+175 
+ #__ri
+
+
+ )
+
+177 
+ #__ri
+
+ri
+
+
+ )
+
+189 #i
+__GNUC__
+ > 2 || __GNUC__ =2 &&
+__GNUC_MINOR__
+ >= 7
+
+190 
+ #__tike
+(
+fmrg
+,
+fvg
+) \
+
+191
+ `__ibu__
+((
+ `__fm__
+ (
+__tf__
+,
+fmrg
+,
+fvg
+)))
+
+ )
+
+192 
+ #__snike
+(
+fmrg
+,
+fvg
+) \
+
+193
+ `__ibu__
+((
+ `__fm__
+ (
+__snf__
+,
+fmrg
+,
+fvg
+)))
+
+ )
+
+195 
+ #__tike
+(
+fmrg
+,
+fvg
+)
+
+ )
+
+196 
+ #__snike
+(
+fmrg
+,
+fvg
+)
+
+ )
+
+199 
+ #__IDSTRING
+(
+me
+,
+rg
+cڡ me[]
+__unud
+ =
+ )
+string
+
+201 #ide
+__COPYRIGHT
+
+
+202 
+ #__COPYRIGHT
+(
+s
+
+ `__IDSTRING
+(
+cyright
+,s)
+
+ )
+
+205 #ide
+__RCSID
+
+
+206 
+ #__RCSID
+(
+s
+
+ `__IDSTRING
+(
+rcsid
+,s)
+
+ )
+
+209 #ide
+__SCCSID
+
+
+210 
+ #__SCCSID
+(
+s
+
+ `__IDSTRING
+(
+sccsid
+,s)
+
+ )
+
+213 #ide
+__PROJECT_VERSION
+
+
+214 
+ #__PROJECT_VERSION
+(
+s
+
+ `__IDSTRING
+(
+oje_vsi
+,s)
+
+ )
+
+272 #i!
+defed
+(
+__DARWIN_UNIX03
+)
+
+273 #i
+defed
+(
+_DARWIN_C_SOURCE
+|| defed(
+_XOPEN_SOURCE
+|| defed(
+_POSIX_C_SOURCE
+|| defed(
+__LP64__
+|| (defed(
+__m__
+&& !defed(
+KERNEL
+))
+
+274 #i
+defed
+(
+_NONSTD_SOURCE
+)
+
+277 
+ #__DARWIN_UNIX03
+ 1
+
+ )
+
+278 #i
+defed
+(
+_NONSTD_SOURCE
+|| defed(
+KERNEL
+)
+
+279 
+ #__DARWIN_UNIX03
+ 0
+
+ )
+
+281 #i
+defed
+(
+__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1050)
+
+282 
+ #__DARWIN_UNIX03
+ 0
+
+ )
+
+284 
+ #__DARWIN_UNIX03
+ 1
+
+ )
+
+289 #i!
+defed
+(
+__DARWIN_64_BIT_INO_T
+)
+
+290 #i
+defed
+(
+_DARWIN_USE_64_BIT_INODE
+)
+
+291 
+ #__DARWIN_64_BIT_INO_T
+ 1
+
+ )
+
+292 #i
+defed
+(
+_DARWIN_NO_64_BIT_INODE
+|| defed(
+KERNEL
+)
+
+293 
+ #__DARWIN_64_BIT_INO_T
+ 0
+
+ )
+
+295 
+ #__DARWIN_64_BIT_INO_T
+ 0
+
+ )
+
+299 #i!
+defed
+(
+__DARWIN_NON_CANCELABLE
+)
+
+300 
+ #__DARWIN_NON_CANCELABLE
+ 0
+
+ )
+
+303 #i!
+defed
+(
+__DARWIN_VERS_1050
+)
+
+304 #i!
+defed
+(
+KERNEL
+&& defed(
+__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) >= 1050)
+
+305 
+ #__DARWIN_VERS_1050
+ 1
+
+ )
+
+307 
+ #__DARWIN_VERS_1050
+ 0
+
+ )
+
+314 #i
+__DARWIN_UNIX03
+
+
+315 #i!
+defed
+(
+__LP64__
+&& !defed(
+__m__
+)
+
+316 
+ #__DARWIN_SUF_UNIX03
+ "$UNIX2003"
+
+ )
+
+317 
+ #__DARWIN_SUF_UNIX03_SET
+ 1
+
+ )
+
+319 
+ #__DARWIN_SUF_UNIX03
+
+
+ )
+
+320 
+ #__DARWIN_SUF_UNIX03_SET
+ 0
+
+ )
+
+323 #i
+__DARWIN_64_BIT_INO_T
+
+
+324 
+ #__DARWIN_SUF_64_BIT_INO_T
+ "$INODE64"
+
+ )
+
+326 
+ #__DARWIN_SUF_64_BIT_INO_T
+
+
+ )
+
+329 #i
+__DARWIN_NON_CANCELABLE
+
+
+330 
+ #__DARWIN_SUF_NON_CANCELABLE
+ "$NOCANCEL"
+
+ )
+
+332 
+ #__DARWIN_SUF_NON_CANCELABLE
+
+
+ )
+
+335 #i
+__DARWIN_VERS_1050
+
+
+336 
+ #__DARWIN_SUF_1050
+ "$1050"
+
+ )
+
+338 
+ #__DARWIN_SUF_1050
+
+
+ )
+
+342 
+ #__DARWIN_SUF_UNIX03
+
+
+ )
+
+343 
+ #__DARWIN_SUF_UNIX03_SET
+ 0
+
+ )
+
+344 
+ #__DARWIN_SUF_64_BIT_INO_T
+
+
+ )
+
+345 
+ #__DARWIN_SUF_NON_CANCELABLE
+
+
+ )
+
+346 
+ #__DARWIN_SUF_1050
+
+
+ )
+
+349 
+ #__DARWIN_SUF_EXTSN
+ "$DARWIN_EXTSN"
+
+ )
+
+354 
+ #__DARWIN_ALIAS
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_UNIX03
+)
+
+ )
+
+355 
+ #__DARWIN_ALIAS_C
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_NON_CANCELABLE
+
+__DARWIN_SUF_UNIX03
+)
+
+ )
+
+356 
+ #__DARWIN_ALIAS_I
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_64_BIT_INO_T
+
+__DARWIN_SUF_UNIX03
+)
+
+ )
+
+357 
+ #__DARWIN_INODE64
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_64_BIT_INO_T
+)
+
+ )
+
+359 
+ #__DARWIN_1050
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_1050
+)
+
+ )
+
+360 
+ #__DARWIN_1050ALIAS
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_1050
+
+__DARWIN_SUF_UNIX03
+)
+
+ )
+
+361 
+ #__DARWIN_1050ALIAS_C
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_1050
+
+__DARWIN_SUF_NON_CANCELABLE
+
+__DARWIN_SUF_UNIX03
+)
+
+ )
+
+362 
+ #__DARWIN_1050ALIAS_I
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_1050
+
+__DARWIN_SUF_64_BIT_INO_T
+
+__DARWIN_SUF_UNIX03
+)
+
+ )
+
+363 
+ #__DARWIN_1050INODE64
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_1050
+
+__DARWIN_SUF_64_BIT_INO_T
+)
+
+ )
+
+365 
+ #__DARWIN_EXTSN
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_EXTSN
+)
+
+ )
+
+366 
+ #__DARWIN_EXTSN_C
+(
+sym
+
+ `__asm
+("_"
+ `__STRING
+(sym
+__DARWIN_SUF_EXTSN
+
+__DARWIN_SUF_NON_CANCELABLE
+)
+
+ )
+
+389 #i
+defed
+(
+_POSIX_C_SOURCE
+) && _POSIX_C_SOURCE == 1L
+
+390 #unde
+_POSIX_C_SOURCE
+
+
+391 
+ #_POSIX_C_SOURCE
+ 199009L
+
+ )
+
+395 #i
+defed
+(
+_POSIX_C_SOURCE
+) && _POSIX_C_SOURCE == 2L
+
+396 #unde
+_POSIX_C_SOURCE
+
+
+397 
+ #_POSIX_C_SOURCE
+ 199209L
+
+ )
+
+401 #ifde
+_XOPEN_SOURCE
+
+
+402 #i
+_XOPEN_SOURCE
+ - 0L >= 600L
+
+403 #unde
+_POSIX_C_SOURCE
+
+
+404 
+ #_POSIX_C_SOURCE
+ 200112L
+
+ )
+
+405 #i
+_XOPEN_SOURCE
+ - 0L >= 500L
+
+406 #unde
+_POSIX_C_SOURCE
+
+
+407 
+ #_POSIX_C_SOURCE
+ 199506L
+
+ )
+
+415 #i
+defed
+(
+_POSIX_SOURCE
+&& !defed(
+_POSIX_C_SOURCE
+)
+
+416 
+ #_POSIX_C_SOURCE
+ 198808L
+
+ )
+
+424 
+ #__DARWIN_NO_LONG_LONG
+ (
+ `defed
+(
+__STRICT_ANSI__
+) \
+
+425 && (
+__STDC_VERSION__
+-0 < 199901L) \
+
+426 && !
+ `defed
+(
+__GNUG__
+))
+
+ )
+
+434 #i
+defed
+(
+__c__
+)
+
+435 #i
+defed
+(
+__LDBL_MANT_DIG__
+&& defed(
+__DBL_MANT_DIG__
+) && \
+
+436
+__LDBL_MANT_DIG__
+ >
+__DBL_MANT_DIG__
+
+
+437 #i
+__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+-0 < 1040
+
+438 
+ #__DARWIN_LDBL_COMPAT
+(
+x
+
+ `__asm
+("_"
+ `__STRING
+(x"$LDBLStub")
+
+ )
+
+440 
+ #__DARWIN_LDBL_COMPAT
+(
+x
+
+ `__asm
+("_"
+ `__STRING
+(x"$LDBL128")
+
+ )
+
+442 
+ #__DARWIN_LDBL_COMPAT2
+(
+x
+
+ `__asm
+("_"
+ `__STRING
+(x"$LDBL128")
+
+ )
+
+443 
+ #__DARWIN_LONG_DOUBLE_IS_DOUBLE
+ 0
+
+ )
+
+445 
+ #__DARWIN_LDBL_COMPAT
+(
+x
+
+
+ )
+
+446 
+ #__DARWIN_LDBL_COMPAT2
+(
+x
+
+
+ )
+
+447 
+ #__DARWIN_LONG_DOUBLE_IS_DOUBLE
+ 1
+
+ )
+
+449 #i
+defed
+(
+__i386__
+|| defed(
+__c64__
+|| defed(
+__x86_64__
+|| defed (
+__m__
+)
+
+450 
+ #__DARWIN_LDBL_COMPAT
+(
+x
+
+
+ )
+
+451 
+ #__DARWIN_LDBL_COMPAT2
+(
+x
+
+
+ )
+
+452 
+ #__DARWIN_LONG_DOUBLE_IS_DOUBLE
+ 0
+
+ )
+
+454 #r
+Unknown
+
+cheu
+
+
+460 #i
+__GNUC__
+ >= 3
+
+461 
+ #__dd
+
+ `__ibu__
+((
+dd
+))
+
+ )
+
+463 
+ #__dd
+
+
+ )
+
+474 #i
+__DARWIN_LONG_DOUBLE_IS_DOUBLE
+
+
+475 
+ #_DARWIN_FEATURE_LONG_DOUBLE_IS_DOUBLE
+ 1
+
+ )
+
+482 #i
+__DARWIN_UNIX03
+
+
+483 
+ #_DARWIN_FEATURE_UNIX_CONFORMANCE
+ 3
+
+ )
+
+490 #i
+__DARWIN_64_BIT_INO_T
+
+
+491 
+ #_DARWIN_FEATURE_64_BIT_INODE
+ 1
+
+ )
+
+ @/usr/include/sys/dirent.h
+
+75 #ide
+_SYS_DIRENT_H
+
+
+76 
+ #_SYS_DIRENT_H
+
+
+ )
+
+78 
+ ~<sys/_tys.h
+>
+
+79 
+ ~<sys/cdefs.h
+>
+
+81 #idef
+_INO_T
+
+
+82 
+__dw_o_t
+
+ to_t
+;
+
+83 
+ #_INO_T
+
+
+ )
+
+87 
+ #__DARWIN_MAXNAMLEN
+ 255
+
+ )
+
+89 #agm
+ck
+(4)
+
+91 #i!
+__DARWIN_64_BIT_INO_T
+
+
+92 
+ sdt
+ {
+
+93
+o_t
+
+ md_o
+;
+
+94
+__ut16_t
+
+ md_
+;
+
+95
+__ut8_t
+
+ md_ty
+;
+
+96
+__ut8_t
+
+ md_mn
+;
+
+97 
+ md_me
+[
+__DARWIN_MAXNAMLEN
+ + 1];
+
+101 #agm
+ck
+()
+
+103 
+ #__DARWIN_MAXPATHLEN
+ 1024
+
+ )
+
+105 
+ #__DARWIN_STRUCT_DIRENTRY
+ { \
+
+106
+__ut64_t
+
+d_o
+; \
+
+107
+__ut64_t
+
+d_ekoff
+; \
+
+108
+__ut16_t
+
+d_
+; \
+
+109
+__ut16_t
+
+d_mn
+; \
+
+110
+__ut8_t
+
+d_ty
+; \
+
+111 
+d_me
+[
+__DARWIN_MAXPATHLEN
+]; \
+
+112 }
+
+ )
+
+114 #i
+__DARWIN_64_BIT_INO_T
+
+
+115 
+dt
+
+ g__DARWIN_STRUCT_DIRENTRY
+;
+
+120 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+121 
+ #d_fo
+
+d_o
+
+
+ )
+
+122 
+ #MAXNAMLEN
+
+__DARWIN_MAXNAMLEN
+
+
+ )
+
+126 
+ #DT_UNKNOWN
+ 0
+
+ )
+
+127 
+ #DT_FIFO
+ 1
+
+ )
+
+128 
+ #DT_CHR
+ 2
+
+ )
+
+129 
+ #DT_DIR
+ 4
+
+ )
+
+130 
+ #DT_BLK
+ 6
+
+ )
+
+131 
+ #DT_REG
+ 8
+
+ )
+
+132 
+ #DT_LNK
+ 10
+
+ )
+
+133 
+ #DT_SOCK
+ 12
+
+ )
+
+134 
+ #DT_WHT
+ 14
+
+ )
+
+139 
+ #IFTODT
+(
+mode
+(((mode& 0170000>> 12)
+
+ )
+
+140 
+ #DTTOIF
+(
+dty
+((dty<< 12)
+
+ )
+
+ @/usr/include/sys/fcntl.h
+
+70 #ide
+_SYS_FCNTL_H_
+
+
+71 
+ #_SYS_FCNTL_H_
+
+
+ )
+
+78 
+ ~<sys/_tys.h
+>
+
+79 
+ ~<sys/cdefs.h
+>
+
+82 #ide
+_SIZE_T
+
+
+83 
+ #_SIZE_T
+
+
+ )
+
+84 
+__dw_size_t
+
+ tsize_t
+;
+
+87 #idef
+_MODE_T
+
+
+88 
+__dw_mode_t
+
+ tmode_t
+;
+
+89 
+ #_MODE_T
+
+
+ )
+
+92 #ide
+_OFF_T
+
+
+93 
+__dw_off_t
+
+ toff_t
+;
+
+94 
+ #_OFF_T
+
+
+ )
+
+97 #ide
+_PID_T
+
+
+98 
+__dw_pid_t
+
+ tpid_t
+;
+
+99 
+ #_PID_T
+
+
+ )
+
+110 
+ #O_RDONLY
+ 0x0000
+
+ )
+
+111 
+ #O_WRONLY
+ 0x0001
+
+ )
+
+112 
+ #O_RDWR
+ 0x0002
+
+ )
+
+113 
+ #O_ACCMODE
+ 0x0003
+
+ )
+
+123 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+124 
+ #FREAD
+ 0x0001
+
+ )
+
+125 
+ #FWRITE
+ 0x0002
+
+ )
+
+127 
+ #O_NONBLOCK
+ 0x0004
+
+ )
+
+128 
+ #O_APPEND
+ 0x0008
+
+ )
+
+129 
+ #O_SYNC
+ 0x0080
+
+ )
+
+130 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+131 
+ #O_SHLOCK
+ 0x0010
+
+ )
+
+132 
+ #O_EXLOCK
+ 0x0020
+
+ )
+
+133 
+ #O_ASYNC
+ 0x0040
+
+ )
+
+134 
+ #O_FSYNC
+
+O_SYNC
+
+
+ )
+
+135 
+ #O_NOFOLLOW
+ 0x0100
+
+ )
+
+137 
+ #O_CREAT
+ 0x0200
+
+ )
+
+138 
+ #O_TRUNC
+ 0x0400
+
+ )
+
+139 
+ #O_EXCL
+ 0x0800
+
+ )
+
+140 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+141 
+ #O_EVTONLY
+ 0x8000
+
+ )
+
+145 
+ #O_NOCTTY
+ 0x20000
+
+ )
+
+148 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+149 
+ #O_DIRECTORY
+ 0x100000
+
+ )
+
+150 
+ #O_SYMLINK
+ 0x200000
+
+ )
+
+161 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+162 
+ #FAPPEND
+
+O_APPEND
+
+
+ )
+
+163 
+ #FASYNC
+
+O_ASYNC
+
+
+ )
+
+164 
+ #FFSYNC
+
+O_FSYNC
+
+
+ )
+
+165 
+ #FNONBLOCK
+
+O_NONBLOCK
+
+
+ )
+
+166 
+ #FNDELAY
+
+O_NONBLOCK
+
+
+ )
+
+167 
+ #O_NDELAY
+
+O_NONBLOCK
+
+
+ )
+
+174 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+175 
+ #CPF_OVERWRITE
+ 1
+
+ )
+
+176 
+ #CPF_IGNORE_MODE
+ 2
+
+ )
+
+177 
+ #CPF_MASK
+ (
+CPF_OVERWRITE
+|
+CPF_IGNORE_MODE
+)
+
+ )
+
+185 
+ #F_DUPFD
+ 0
+
+ )
+
+186 
+ #F_GETFD
+ 1
+
+ )
+
+187 
+ #F_SETFD
+ 2
+
+ )
+
+188 
+ #F_GETFL
+ 3
+
+ )
+
+189 
+ #F_SETFL
+ 4
+
+ )
+
+190 
+ #F_GETOWN
+ 5
+
+ )
+
+191 
+ #F_SETOWN
+ 6
+
+ )
+
+192 
+ #F_GETLK
+ 7
+
+ )
+
+193 
+ #F_SETLK
+ 8
+
+ )
+
+194 
+ #F_SETLKW
+ 9
+
+ )
+
+195 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+196 
+ #F_CHKCLEAN
+ 41
+
+ )
+
+197 
+ #F_PREALLOCATE
+ 42
+
+ )
+
+198 
+ #F_SETSIZE
+ 43
+
+ )
+
+199 
+ #F_RDADVISE
+ 44
+
+ )
+
+200 
+ #F_RDAHEAD
+ 45
+
+ )
+
+201 
+ #F_READBOOTSTRAP
+ 46
+
+ )
+
+202 
+ #F_WRITEBOOTSTRAP
+ 47
+
+ )
+
+203 
+ #F_NOCACHE
+ 48
+
+ )
+
+204 
+ #F_LOG2PHYS
+ 49
+
+ )
+
+205 
+ #F_GETPATH
+ 50
+
+ )
+
+206 
+ #F_FULLFSYNC
+ 51
+
+ )
+
+207 
+ #F_PATHPKG_CHECK
+ 52
+
+ )
+
+208 
+ #F_FREEZE_FS
+ 53
+
+ )
+
+209 
+ #F_THAW_FS
+ 54
+
+ )
+
+210 
+ #F_GLOBAL_NOCACHE
+ 55
+
+ )
+
+213 
+ #F_ADDSIGS
+ 59
+
+ )
+
+215 
+ #F_MARKDEPENDENCY
+ 60
+
+ )
+
+218 
+ #FCNTL_FS_SPECIFIC_BASE
+ 0x00010000
+
+ )
+
+223 
+ #FD_CLOEXEC
+ 1
+
+ )
+
+226 
+ #F_RDLCK
+ 1
+
+ )
+
+227 
+ #F_UNLCK
+ 2
+
+ )
+
+228 
+ #F_WRLCK
+ 3
+
+ )
+
+234 #ide
+SEEK_SET
+
+
+235 
+ #SEEK_SET
+ 0
+
+ )
+
+236 
+ #SEEK_CUR
+ 1
+
+ )
+
+237 
+ #SEEK_END
+ 2
+
+ )
+
+244 #ide
+S_IFMT
+
+
+246 
+ #S_IFMT
+ 0170000
+
+ )
+
+247 
+ #S_IFIFO
+ 0010000
+
+ )
+
+248 
+ #S_IFCHR
+ 0020000
+
+ )
+
+249 
+ #S_IFDIR
+ 0040000
+
+ )
+
+250 
+ #S_IFBLK
+ 0060000
+
+ )
+
+251 
+ #S_IFREG
+ 0100000
+
+ )
+
+252 
+ #S_IFLNK
+ 0120000
+
+ )
+
+253 
+ #S_IFSOCK
+ 0140000
+
+ )
+
+254 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+255 
+ #S_IFWHT
+ 0160000
+
+ )
+
+256 
+ #S_IFXATTR
+ 0200000
+
+ )
+
+261 
+ #S_IRWXU
+ 0000700
+
+ )
+
+262 
+ #S_IRUSR
+ 0000400
+
+ )
+
+263 
+ #S_IWUSR
+ 0000200
+
+ )
+
+264 
+ #S_IXUSR
+ 0000100
+
+ )
+
+266 
+ #S_IRWXG
+ 0000070
+
+ )
+
+267 
+ #S_IRGRP
+ 0000040
+
+ )
+
+268 
+ #S_IWGRP
+ 0000020
+
+ )
+
+269 
+ #S_IXGRP
+ 0000010
+
+ )
+
+271 
+ #S_IRWXO
+ 0000007
+
+ )
+
+272 
+ #S_IROTH
+ 0000004
+
+ )
+
+273 
+ #S_IWOTH
+ 0000002
+
+ )
+
+274 
+ #S_IXOTH
+ 0000001
+
+ )
+
+276 
+ #S_ISUID
+ 0004000
+
+ )
+
+277 
+ #S_ISGID
+ 0002000
+
+ )
+
+278 
+ #S_ISVTX
+ 0001000
+
+ )
+
+280 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+281 
+ #S_ISTXT
+
+S_ISVTX
+
+
+ )
+
+282 
+ #S_IREAD
+
+S_IRUSR
+
+
+ )
+
+283 
+ #S_IWRITE
+
+S_IWUSR
+
+
+ )
+
+284 
+ #S_IEXEC
+
+S_IXUSR
+
+
+ )
+
+288 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+291 
+ #F_ALLOCATECONTIG
+ 0x00000002
+
+ )
+
+292 
+ #F_ALLOCATEALL
+ 0x00000004
+
+ )
+
+296 
+ #F_PEOFPOSMODE
+ 3
+
+ )
+
+298 
+ #F_VOLPOSMODE
+ 4
+
+ )
+
+305 
+ sock
+ {
+
+306
+off_t
+
+ ml_t
+;
+
+307
+off_t
+
+ ml_n
+;
+
+308
+pid_t
+
+ ml_pid
+;
+
+309 
+ ml_ty
+;
+
+310 
+ ml_wh
+;
+
+314 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+319 
+ sdvisy
+ {
+
+320
+off_t
+
+ m_offt
+;
+
+321 
+ m_cou
+;
+
+329 
+ sfsigtus
+ {
+
+330
+off_t
+
+ mfs_fe_t
+;
+
+331 *
+ mfs_blob_t
+;
+
+332
+size_t
+
+ mfs_blob_size
+;
+
+333 }
+ tfsigtus_t
+;
+
+336 
+ #LOCK_SH
+ 0x01
+
+ )
+
+337 
+ #LOCK_EX
+ 0x02
+
+ )
+
+338 
+ #LOCK_NB
+ 0x04
+
+ )
+
+339 
+ #LOCK_UN
+ 0x08
+
+ )
+
+343 
+ sfe
+ {
+
+344 
+ mf_ags
+;
+
+345 
+ mf_posmode
+;
+
+346
+off_t
+
+ mf_offt
+;
+
+347
+off_t
+
+ mf_ngth
+;
+
+348
+off_t
+
+ mf_byoc
+;
+
+349 }
+ tfe_t
+;
+
+353 
+ sfbo١nsr
+ {
+
+354
+off_t
+
+ mfbt_offt
+;
+
+355
+size_t
+
+ mfbt_ngth
+;
+
+356 *
+ mfbt_bufr
+;
+
+357 }
+ tfbo١nsr_t
+;
+
+377 #agm
+ck
+(4)
+
+379 
+ slog2phys
+ {
+
+380 
+ ml2p_ags
+;
+
+381
+off_t
+
+ ml2p_ctigbys
+;
+
+382
+off_t
+
+ ml2p_devofft
+;
+
+385 #agm
+ck
+()
+
+387 
+ #O_POPUP
+ 0x80000000
+
+ )
+
+388 
+ #O_ALERT
+ 0x20000000
+
+ )
+
+394 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+395 #ide
+_FILESEC_T
+
+
+396 
+ g_fec
+;
+
+397 
+_fec
+ *
+ tfec_t
+;
+
+398 
+ #_FILESEC_T
+
+
+ )
+
+401
+ mFILESEC_OWNER
+ = 1,
+
+402
+ mFILESEC_GROUP
+ = 2,
+
+403
+ mFILESEC_UUID
+ = 3,
+
+404
+ mFILESEC_MODE
+ = 4,
+
+405
+ mFILESEC_ACL
+ = 5,
+
+406
+ mFILESEC_GRPUUID
+ = 6,
+
+409
+ mFILESEC_ACL_RAW
+ = 100,
+
+410
+ mFILESEC_ACL_ALLOCSIZE
+ = 101
+
+411 }
+ tfec_ݔty_t
+;
+
+414 
+ #FILESEC_GUID
+
+FILESEC_UUID
+
+
+ )
+
+417
+__BEGIN_DECLS
+
+
+418 
+ $ݒ
+(cڡ *, , ...
+ `__DARWIN_ALIAS_C
+(
+);
+
+419 
+ $t
+(cڡ *,
+mode_t
+
+ `__DARWIN_ALIAS_C
+(
+t
+);
+
+420 
+ $f
+(, , ...
+ `__DARWIN_ALIAS_C
+(
+f
+);
+
+421 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+422 
+ `ݒx_
+(cڡ *, ,
+fec_t
+);
+
+423 
+ `ock
+(, );
+
+424
+fec_t
+
+ `fec_
+();
+
+425
+fec_t
+
+ `fec_dup
+(filesec_t);
+
+426 
+ `fec_
+(
+fec_t
+);
+
+427 
+ `fec_g_ݔty
+(
+fec_t
+,
+fec_ݔty_t
+, *);
+
+428 
+ `fec_t_ݔty
+(
+fec_t
+,
+fec_ݔty_t
+, const *);
+
+429 
+ `fec_quy_ݔty
+(
+fec_t
+,
+fec_ݔty_t
+, *);
+
+430 
+ #_FILESEC_UNSET_PROPERTY
+ ((*)0)
+
+ )
+
+431 
+ #_FILESEC_REMOVE_ACL
+ ((*)1)
+
+ )
+
+433
+__END_DECLS
+
+
+ @/usr/include/sys/select.h
+
+63 #ide
+_SYS_SELECT_H_
+
+
+64 
+ #_SYS_SELECT_H_
+
+
+ )
+
+66 
+ ~<sys/pits.h
+>
+
+67 
+ ~<sys/cdefs.h
+>
+
+68 
+ ~<sys/_tys.h
+>
+
+75 
+ #__ed_fd_t
+
+
+ )
+
+76 
+ #__ed_ru_timeec
+
+
+ )
+
+77 
+ #__ed_ru_timev
+
+
+ )
+
+78 
+ ~<sys/_rus.h
+>
+
+85 #idef
+_TIME_T
+
+
+86 
+ #_TIME_T
+
+
+ )
+
+87 
+__dw_time_t
+
+ ttime_t
+;
+
+90 #ide
+_SUSECONDS_T
+
+
+91 
+ #_SUSECONDS_T
+
+
+ )
+
+92 
+__dw_sucds_t
+
+ tsucds_t
+;
+
+95 #ide
+_SIGSET_T
+
+
+96 
+ #_SIGSET_T
+
+
+ )
+
+97 
+__dw_sigt_t
+
+ tsigt_t
+;
+
+112 #idef
+FD_SETSIZE
+
+
+113 
+ #FD_SETSIZE
+
+__DARWIN_FD_SETSIZE
+
+
+ )
+
+115 #ide
+FD_SET
+
+
+116 
+ #FD_SET
+(
+n
+,
+p
+
+ `__DARWIN_FD_SET
+,)
+
+ )
+
+118 #ide
+FD_CLR
+
+
+119 
+ #FD_CLR
+(
+n
+,
+p
+
+ `__DARWIN_FD_CLR
+,)
+
+ )
+
+121 #ide
+FD_ISSET
+
+
+122 
+ #FD_ISSET
+(
+n
+,
+p
+
+ `__DARWIN_FD_ISSET
+,)
+
+ )
+
+124 #ide
+FD_ZERO
+
+
+125 
+ #FD_ZERO
+(
+p
+
+ `__DARWIN_FD_ZERO
+)
+
+ )
+
+127 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+128 #ide
+FD_COPY
+
+
+129 
+ #FD_COPY
+(
+f
+,
+t
+
+ `__DARWIN_FD_COPY
+(f,)
+
+ )
+
+134
+ g__BEGIN_DECLS
+
+
+136 #ide
+__MWERKS__
+
+
+137 
+ $p
+(,
+fd_t
+ *
+__ri
+, fd_set * __restrict,
+
+138
+fd_t
+ *
+__ri
+, cڡ 
+timeec
+ * __restrict,
+
+139 cڡ
+sigt_t
+ *
+__ri
+)
+
+140 #i
+ `defed
+(
+_DARWIN_C_SOURCE
+|| defed(
+_DARWIN_UNLIMITED_SELECT
+)
+
+141
+ $__DARWIN_EXTSN_C
+(
+p
+)
+
+143 #i
+ `defed
+(
+__LP64__
+&& !
+__DARWIN_NON_CANCELABLE
+
+
+144
+ $__DARWIN_1050
+(
+p
+)
+
+146
+ $__DARWIN_ALIAS_C
+(
+p
+)
+
+152 
+ ~<sys/_.h
+>
+
+154
+__END_DECLS
+
+
+ @/usr/include/sys/unistd.h
+
+64 #ide
+_SYS_UNISTD_H_
+
+
+65 
+ #_SYS_UNISTD_H_
+
+
+ )
+
+67 
+ ~<sys/cdefs.h
+>
+
+75 #ifdef
+_NOT_AVAILABLE
+
+
+76 
+ #_POSIX_SAVED_IDS
+
+
+ )
+
+79 
+ #_POSIX_VERSION
+ 200112L
+
+ )
+
+80 
+ #_POSIX2_VERSION
+ 200112L
+
+ )
+
+84 #ide
+_POSIX_VDISABLE
+
+
+85 
+ #_POSIX_VDISABLE
+ (()'\377')
+
+ )
+
+88 
+ #_POSIX_THREAD_KEYS_MAX
+ 128
+
+ )
+
+91 
+ #F_OK
+ 0
+
+ )
+
+92 
+ #X_OK
+ (1<<0
+
+ )
+
+93 
+ #W_OK
+ (1<<1
+
+ )
+
+94 
+ #R_OK
+ (1<<2
+
+ )
+
+96 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+102 
+ #_READ_OK
+ (1<<9
+
+ )
+
+103 
+ #_WRITE_OK
+ (1<<10
+
+ )
+
+104 
+ #_EXECUTE_OK
+ (1<<11
+
+ )
+
+105 
+ #_DELETE_OK
+ (1<<12
+
+ )
+
+106 
+ #_APPEND_OK
+ (1<<13
+
+ )
+
+107 
+ #_RMFILE_OK
+ (1<<14
+
+ )
+
+108 
+ #_RATTR_OK
+ (1<<15
+
+ )
+
+109 
+ #_WATTR_OK
+ (1<<16
+
+ )
+
+110 
+ #_REXT_OK
+ (1<<17
+
+ )
+
+111 
+ #_WEXT_OK
+ (1<<18
+
+ )
+
+112 
+ #_RPERM_OK
+ (1<<19
+
+ )
+
+113 
+ #_WPERM_OK
+ (1<<20
+
+ )
+
+114 
+ #_CHOWN_OK
+ (1<<21
+
+ )
+
+116 
+ #_ACCESS_EXTENDED_MASK
+ (
+_READ_OK
+ |
+_WRITE_OK
+ |
+_EXECUTE_OK
+ | \
+
+117
+_DELETE_OK
+ |
+_APPEND_OK
+ | \
+
+118
+_RMFILE_OK
+ |
+_REXT_OK
+ | \
+
+119
+_WEXT_OK
+ |
+_RATTR_OK
+ |
+_WATTR_OK
+ |
+_RPERM_OK
+ | \
+
+120
+_WPERM_OK
+ |
+_CHOWN_OK
+)
+
+ )
+
+124 #ide
+SEEK_SET
+
+
+125 
+ #SEEK_SET
+ 0
+
+ )
+
+126 
+ #SEEK_CUR
+ 1
+
+ )
+
+127 
+ #SEEK_END
+ 2
+
+ )
+
+130 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+132 
+ #L_SET
+
+SEEK_SET
+
+
+ )
+
+133 
+ #L_INCR
+
+SEEK_CUR
+
+
+ )
+
+134 
+ #L_XTND
+
+SEEK_END
+
+
+ )
+
+137 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+138 
+ sacssx_dest
+ {
+
+139 
+ mad_me_offt
+;
+
+140 
+ mad_ags
+;
+
+141 
+ mad_d
+[2];
+
+143 
+ #ACCESSX_MAX_DESCRIPTORS
+ 100
+
+ )
+
+144 
+ #ACCESSX_MAX_TABLESIZE
+ (16 * 1024)
+
+ )
+
+148 
+ #_PC_LINK_MAX
+ 1
+
+ )
+
+149 
+ #_PC_MAX_CANON
+ 2
+
+ )
+
+150 
+ #_PC_MAX_INPUT
+ 3
+
+ )
+
+151 
+ #_PC_NAME_MAX
+ 4
+
+ )
+
+152 
+ #_PC_PATH_MAX
+ 5
+
+ )
+
+153 
+ #_PC_PIPE_BUF
+ 6
+
+ )
+
+154 
+ #_PC_CHOWN_RESTRICTED
+ 7
+
+ )
+
+155 
+ #_PC_NO_TRUNC
+ 8
+
+ )
+
+156 
+ #_PC_VDISABLE
+ 9
+
+ )
+
+158 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+159 
+ #_PC_NAME_CHARS_MAX
+ 10
+
+ )
+
+160 
+ #_PC_CASE_SENSITIVE
+ 11
+
+ )
+
+161 
+ #_PC_CASE_PRESERVING
+ 12
+
+ )
+
+162 
+ #_PC_EXTENDED_SECURITY_NP
+ 13
+
+ )
+
+163 
+ #_PC_AUTH_OPAQUE_NP
+ 14
+
+ )
+
+166 
+ #_PC_2_SYMLINKS
+ 15
+
+ )
+
+167 
+ #_PC_ALLOC_SIZE_MIN
+ 16
+
+ )
+
+168 
+ #_PC_ASYNC_IO
+ 17
+
+ )
+
+169 
+ #_PC_FILESIZEBITS
+ 18
+
+ )
+
+170 
+ #_PC_PRIO_IO
+ 19
+
+ )
+
+171 
+ #_PC_REC_INCR_XFER_SIZE
+ 20
+
+ )
+
+172 
+ #_PC_REC_MAX_XFER_SIZE
+ 21
+
+ )
+
+173 
+ #_PC_REC_MIN_XFER_SIZE
+ 22
+
+ )
+
+174 
+ #_PC_REC_XFER_ALIGN
+ 23
+
+ )
+
+175 
+ #_PC_SYMLINK_MAX
+ 24
+
+ )
+
+176 
+ #_PC_SYNC_IO
+ 25
+
+ )
+
+179 
+ #_CS_PATH
+ 1
+
+ )
+
+ @/usr/include/sys/wait.h
+
+64 #ide
+_SYS_WAIT_H_
+
+
+65 
+ #_SYS_WAIT_H_
+
+
+ )
+
+67 
+ ~<sys/cdefs.h
+>
+
+68 
+ ~<sys/_tys.h
+>
+
+80
+ mP_ALL
+,
+
+81
+ mP_PID
+,
+
+82
+ mP_PGID
+
+
+83 }
+ tidty_t
+;
+
+89 #ide
+_PID_T
+
+
+90 
+__dw_pid_t
+
+ tpid_t
+;
+
+91 
+ #_PID_T
+
+
+ )
+
+94 #ide
+_ID_T
+
+
+95 
+__dw_id_t
+
+ tid_t
+;
+
+96 
+ #_ID_T
+
+
+ )
+
+116 
+ ~<sys/sigl.h
+>
+
+117 
+ ~<sys/sour.h
+>
+
+128 
+ #WNOHANG
+ 0x00000001
+
+ )
+
+129 
+ #WUNTRACED
+ 0x00000002
+
+ )
+
+135 #i
+defed
+(
+_POSIX_C_SOURCE
+&& !defed(
+_DARWIN_C_SOURCE
+)
+
+136 
+ #_W_INT
+(
+i
+(i)
+
+ )
+
+138 
+ #_W_INT
+(
+w
+(*(*)&(w)
+
+ )
+
+139 
+ #WCOREFLAG
+ 0200
+
+ )
+
+143 
+ #_WSTATUS
+(
+x
+(
+ `_W_INT
+(x& 0177)
+
+ )
+
+144 
+ #_WSTOPPED
+ 0177
+
+ )
+
+150 #i
+__DARWIN_UNIX03
+
+
+151 
+ #WEXITSTATUS
+(
+x
+((
+ `_W_INT
+(x>> 8& 0x000000ff)
+
+ )
+
+153 
+ #WEXITSTATUS
+(
+x
+(
+ `_W_INT
+(x>> 8)
+
+ )
+
+156 
+ #WSTOPSIG
+(
+x
+(
+ `_W_INT
+(x>> 8)
+
+ )
+
+157 
+ #WIFCONTINUED
+(
+x
+(
+ `_WSTATUS
+(x=
+_WSTOPPED
+ &&
+ `WSTOPSIG
+(x=0x13)
+
+ )
+
+158 
+ #WIFSTOPPED
+(
+x
+(
+ `_WSTATUS
+(x=
+_WSTOPPED
+ &&
+ `WSTOPSIG
+(x!0x13)
+
+ )
+
+159 
+ #WIFEXITED
+(
+x
+(
+ `_WSTATUS
+(x=0)
+
+ )
+
+160 
+ #WIFSIGNALED
+(
+x
+(
+ `_WSTATUS
+(x!
+_WSTOPPED
+ && _WSTATUS(x!0)
+
+ )
+
+161 
+ #WTERMSIG
+(
+x
+(
+ `_WSTATUS
+(x))
+
+ )
+
+162 #i(!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+163 
+ #WCOREDUMP
+(
+x
+(
+ `_W_INT
+(x&
+WCOREFLAG
+)
+
+ )
+
+165 
+ #W_EXITCODE
+(
+t
+,
+sig
+(ԑ<< 8 | (sig))
+
+ )
+
+166 
+ #W_STOPCODE
+(
+sig
+((sig<< 8 |
+_WSTOPPED
+)
+
+ )
+
+175 
+ #WEXITED
+ 0x00000004
+
+ )
+
+176 #i
+__DARWIN_UNIX03
+
+
+178 
+ #WSTOPPED
+ 0x00000008
+
+ )
+
+180 
+ #WCONTINUED
+ 0x00000010
+
+ )
+
+181 
+ #WNOWAIT
+ 0x00000020
+
+ )
+
+184 #i(!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+190 
+ #WAIT_ANY
+ (-1
+
+ )
+
+191 
+ #WAIT_MYPGRP
+ 0
+
+ )
+
+193 
+ ~<mache/dn.h
+>
+
+201 
+ uwa
+ {
+
+202 
+ mw_us
+;
+
+207 #i
+__DARWIN_BYTE_ORDER
+ =
+__DARWIN_LITTLE_ENDIAN
+
+
+208 
+ mw_Tmsig
+:7,
+
+209
+ mw_Cedump
+:1,
+
+210
+ mw_Rcode
+:8,
+
+211
+ mw_Fr
+:16;
+
+213 #i
+__DARWIN_BYTE_ORDER
+ =
+__DARWIN_BIG_ENDIAN
+
+
+214 
+ mw_Fr
+:16,
+
+215
+ mw_Rcode
+:8,
+
+216
+ mw_Cedump
+:1,
+
+217
+ mw_Tmsig
+:7;
+
+219 }
+ mw_T
+;
+
+226 #i
+__DARWIN_BYTE_ORDER
+ =
+__DARWIN_LITTLE_ENDIAN
+
+
+227 
+ mw_Stv
+:8,
+
+228
+ mw_Stsig
+:8,
+
+229
+ mw_Fr
+:16;
+
+231 #i
+__DARWIN_BYTE_ORDER
+ =
+__DARWIN_BIG_ENDIAN
+
+
+232 
+ mw_Fr
+:16,
+
+233
+ mw_Stsig
+:8,
+
+234
+ mw_Stv
+:8;
+
+236 }
+ mw_S
+;
+
+238 
+ #w_rmsig
+
+w_T
+.
+w_Tmsig
+
+
+ )
+
+239 
+ #w_cedump
+
+w_T
+.
+w_Cedump
+
+
+ )
+
+240 
+ #w_tcode
+
+w_T
+.
+w_Rcode
+
+
+ )
+
+241 
+ #w_v
+
+w_S
+.
+w_Stv
+
+
+ )
+
+242 
+ #w_sig
+
+w_S
+.
+w_Stsig
+
+
+ )
+
+246 #i!(
+__DARWIN_UNIX03
+ - 0)
+
+251 
+ #WSTOPPED
+
+_WSTOPPED
+
+
+ )
+
+254
+__BEGIN_DECLS
+
+
+255
+pid_t
+
+ $wa
+(*
+ `__DARWIN_ALIAS_C
+(
+wa
+);
+
+256
+pid_t
+
+ $wapid
+(
+pid_t
+, *, 
+ `__DARWIN_ALIAS_C
+(
+wapid
+);
+
+257 #ide
+_ANSI_SOURCE
+
+
+258 
+ $waid
+(
+idty_t
+,
+id_t
+,
+sigfo_t
+ *, 
+ `__DARWIN_ALIAS_C
+(
+waid
+);
+
+260 #i (!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+261
+pid_t
+
+ `wa3
+(*, , 
+ruge
+ *);
+
+262
+pid_t
+
+ `wa4
+id_t, *, , 
+ruge
+ *);
+
+264
+__END_DECLS
+
+
+ @/usr/include/time.h
+
+63 #ide
+_TIME_H_
+
+
+64 
+ #_TIME_H_
+
+
+ )
+
+66 
+ ~<_tys.h
+>
+
+68 
+ #__ed_ru_timeec
+
+
+ )
+
+69 
+ ~<_rus.h
+>
+
+71 #ide
+NULL
+
+
+72 
+ #NULL
+
+__DARWIN_NULL
+
+
+ )
+
+75 #idef
+_CLOCK_T
+
+
+76 
+ #_CLOCK_T
+
+
+ )
+
+77 
+__dw_ock_t
+
+ tock_t
+;
+
+80 #idef
+_SIZE_T
+
+
+81 
+ #_SIZE_T
+
+
+ )
+
+82 
+__dw_size_t
+
+ tsize_t
+;
+
+85 #idef
+_TIME_T
+
+
+86 
+ #_TIME_T
+
+
+ )
+
+87 
+__dw_time_t
+
+ ttime_t
+;
+
+90 
+ stm
+ {
+
+91 
+ mtm_c
+;
+
+92 
+ mtm_m
+;
+
+93 
+ mtm_hour
+;
+
+94 
+ mtm_mday
+;
+
+95 
+ mtm_m
+;
+
+96 
+ mtm_yr
+;
+
+97 
+ mtm_wday
+;
+
+98 
+ mtm_yday
+;
+
+99 
+ mtm_isd
+;
+
+100 
+ mtm_gmtoff
+;
+
+101 *
+ mtm_ze
+;
+
+104 #i
+__DARWIN_UNIX03
+
+
+105 
+ #CLOCKS_PER_SEC
+ 1000000
+
+ )
+
+107 
+ ~<mache/_lims.h
+>
+
+109 
+ #CLOCKS_PER_SEC
+ (
+__DARWIN_CLK_TCK
+)
+
+ )
+
+112 #ide
+_ANSI_SOURCE
+
+
+113 *
+tzme
+[];
+
+116 
+gde_r
+;
+
+117 #i
+__DARWIN_UNIX03
+
+
+118 
+timeze
+
+__DARWIN_ALIAS
+(timezone);
+
+120 
+daylight
+;
+
+122
+__BEGIN_DECLS
+
+
+123 *
+asime
+(cڡ 
+tm
+ *);
+
+124
+ock_t
+
+ $ock
+(
+ `__DARWIN_ALIAS
+(
+ock
+);
+
+125 *
+ `ime
+(cڡ
+time_t
+ *);
+
+126 
+ `difime
+(
+time_t
+,ime_t);
+
+127 
+tm
+ *
+ `gde
+(const *);
+
+128 
+tm
+ *
+ `gmtime
+(cڡ
+time_t
+ *);
+
+129 
+tm
+ *
+ `loime
+(cڡ
+time_t
+ *);
+
+130
+time_t
+
+ $mktime
+(
+tm
+ *
+ `__DARWIN_ALIAS
+(
+mktime
+);
+
+131
+size_t
+
+ $rime
+(*
+__ri
+,
+size_t
+, cڡ * __ri, cڡ 
+tm
+ * __ri
+ `__DARWIN_ALIAS
+(
+rime
+);
+
+132 *
+ $time
+(cڡ *
+__ri
+, cڡ * __ri, 
+tm
+ * __ri
+ `__DARWIN_ALIAS
+(
+time
+);
+
+133
+time_t
+
+ `time
+(time_t *);
+
+135 #ide
+_ANSI_SOURCE
+
+
+136 
+ `tzt
+();
+
+140 *
+ `asime_r
+(cڡ 
+tm
+ *
+__ri
+, * __restrict);
+
+141 *
+ `ime_r
+(cڡ
+time_t
+ *, *);
+
+142 
+tm
+ *
+ `gmtime_r
+(cڡ
+time_t
+ *
+__ri
+, tm * __restrict);
+
+143 
+tm
+ *
+ `loime_r
+(cڡ
+time_t
+ *
+__ri
+, tm * __restrict);
+
+145 #i!
+ `defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+146
+time_t
+
+ `posix2time
+(time_t);
+
+147 #i!
+__DARWIN_UNIX03
+
+
+148 *
+ `timeze
+(, );
+
+150 
+ `tztwl
+();
+
+151
+time_t
+
+ `time2posix
+(time_t);
+
+152
+time_t
+
+ `timol
+(
+tm
+ * const);
+
+153
+time_t
+
+ `timegm
+(
+tm
+ * const);
+
+156 #i!
+ `defed
+(
+_ANSI_SOURCE
+)
+
+157 
+ $nop
+(cڡ 
+timeec
+ *, timee*
+ `__DARWIN_ALIAS_C
+(
+nop
+);
+
+159
+__END_DECLS
+
+
+161 #ifde
+_USE_EXTENDED_LOCALES_
+
+
+162 
+ ~<xlo/_time.h
+>
+
+ @/usr/include/xlocale/_stdio.h
+
+24 #ide
+_XLOCALE__STDIO_H_
+
+
+25 
+ #_XLOCALE__STDIO_H_
+
+
+ )
+
+27
+__BEGIN_DECLS
+
+
+28 
+ $artf_l
+(**,
+lo_t
+, const *, ...)
+
+29
+ `__DARWIN_LDBL_COMPAT2
+(
+artf_l
+);
+
+30 
+ $rtf_l
+(
+FILE
+ *
+__ri
+,
+lo_t
+, const * __restrict, ...)
+
+31
+ `__DARWIN_LDBL_COMPAT2
+(
+rtf_l
+);
+
+32 
+ $fsnf_l
+(
+FILE
+ *
+__ri
+,
+lo_t
+, const * __restrict, ...)
+
+33
+ `__DARWIN_LDBL_COMPAT2
+(
+fsnf_l
+);
+
+34 
+ $tf_l
+(
+lo_t
+, cڡ *
+__ri
+, ...)
+
+35
+ `__DARWIN_LDBL_COMPAT2
+(
+tf_l
+);
+
+36 
+ $snf_l
+(
+lo_t
+, cڡ *
+__ri
+, ...)
+
+37
+ `__DARWIN_LDBL_COMPAT2
+(
+snf_l
+);
+
+38 
+ $tf_l
+(*
+__ri
+,
+size_t
+,
+lo_t
+,
+
+39 cڡ *
+__ri
+, ...
+ `__DARWIN_LDBL_COMPAT2
+(
+tf_l
+);
+
+40 
+ $rtf_l
+(*
+__ri
+,
+lo_t
+, const * __restrict, ...)
+
+41
+ `__DARWIN_LDBL_COMPAT2
+(
+rtf_l
+);
+
+42 
+ $ssnf_l
+(cڡ *
+__ri
+,
+lo_t
+, const * __restrict,
+
+43 ...
+ `__DARWIN_LDBL_COMPAT2
+(
+ssnf_l
+);
+
+44 
+ $vartf_l
+(**,
+lo_t
+, cڡ *,
+va_li
+)
+
+45
+ `__DARWIN_LDBL_COMPAT2
+(
+vartf_l
+);
+
+46 
+ $vrtf_l
+(
+FILE
+ *
+__ri
+,
+lo_t
+, const * __restrict,
+
+47
+va_li
+
+ `__DARWIN_LDBL_COMPAT2
+(
+vrtf_l
+);
+
+48 
+ $vfsnf_l
+(
+FILE
+ *
+__ri
+,
+lo_t
+, const * __restrict,
+
+49
+va_li
+
+ `__DARWIN_LDBL_COMPAT2
+(
+vfsnf_l
+);
+
+50 
+ $vtf_l
+(
+lo_t
+, cڡ *
+__ri
+,
+va_li
+)
+
+51
+ `__DARWIN_LDBL_COMPAT2
+(
+vtf_l
+);
+
+52 
+ $vsnf_l
+(
+lo_t
+, cڡ *
+__ri
+,
+va_li
+)
+
+53
+ `__DARWIN_LDBL_COMPAT2
+(
+vsnf_l
+);
+
+54 
+ $vtf_l
+(*
+__ri
+,
+size_t
+,
+lo_t
+,
+
+55 cڡ *
+__ri
+,
+va_li
+)
+
+56
+ `__DARWIN_LDBL_COMPAT2
+(
+vtf_l
+);
+
+57 
+ $vrtf_l
+(*
+__ri
+,
+lo_t
+, const * __restrict,
+
+58
+va_li
+
+ `__DARWIN_LDBL_COMPAT2
+(
+vrtf_l
+);
+
+59 
+ $vssnf_l
+(cڡ *
+__ri
+,
+lo_t
+, const * __restrict,
+
+60
+va_li
+
+ `__DARWIN_LDBL_COMPAT2
+(
+vssnf_l
+);
+
+61
+__END_DECLS
+
+
+ @/usr/include/xlocale/_stdlib.h
+
+24 #ide
+_XLOCALE__STDLIB_H_
+
+
+25 
+ #_XLOCALE__STDLIB_H_
+
+
+ )
+
+27
+__BEGIN_DECLS
+
+
+28 
+of_l
+(cڡ *,
+lo_t
+);
+
+29 
+oi_l
+(cڡ *,
+lo_t
+);
+
+30 
+_l
+(cڡ *,
+lo_t
+);
+
+31 #i!
+__DARWIN_NO_LONG_LONG
+
+
+33
+l_l
+(cڡ *,
+lo_t
+);
+
+35 
+mbn_l
+(cڡ *,
+size_t
+,
+lo_t
+);
+
+36
+size_t
+
+mbowcs_l
+(
+wch_t
+ *
+__ri
+ , const * __restrict, size_t,
+
+37
+lo_t
+);
+
+38 
+mbtowc_l
+(
+wch_t
+ *
+__ri
+, cڡ * __ri,
+size_t
+,
+
+39
+lo_t
+);
+
+40 
+ $od_l
+(cڡ *, **,
+lo_t
+
+ `__DARWIN_ALIAS
+(
+od_l
+);
+
+41 
+ $of_l
+(cڡ *, **,
+lo_t
+
+ `__DARWIN_ALIAS
+(
+of_l
+);
+
+42 
+ `_l
+(cڡ *, **, ,
+lo_t
+);
+
+44
+ $d_l
+(cڡ *, **,
+lo_t
+)
+
+45
+ `__DARWIN_LDBL_COMPAT2
+(
+d_l
+);
+
+47
+ `l_l
+(cڡ *, **, ,
+lo_t
+);
+
+48 #i!
+__DARWIN_NO_LONG_LONG
+
+
+50
+ `oq_l
+(cڡ *, **, ,
+lo_t
+);
+
+53
+ `oul_l
+(cڡ *, **, ,
+lo_t
+);
+
+55
+ `ou_l
+(cڡ *, **, ,
+lo_t
+);
+
+56 #i!
+__DARWIN_NO_LONG_LONG
+
+
+58
+ `ouq_l
+(cڡ *, **, ,
+lo_t
+);
+
+60
+size_t
+
+ `wcombs_l
+(*
+__ri
+, cڡ
+wch_t
+ * __restrict, size_t,
+
+61
+lo_t
+);
+
+62 
+ `womb_l
+(*,
+wch_t
+,
+lo_t
+);
+
+65 #i!
+ `defed
+(
+__lulus
+&& defed(
+__WCHAR_MAX__
+) && __WCHAR_MAX__ <= 0xffffU
+
+66 #agm
+GCC
+
+pois
+
+mbowcs_l
+
+mbtowc_l
+
+wcombs_l
+
+womb_l
+
+
+68
+__END_DECLS
+
+
+ @/usr/include/_structs.h
+
+24 
+ ~<sys/_rus.h
+>
+
+ @/usr/include/i386/endian.h
+
+66 #ide
+_I386__ENDIAN_H_
+
+
+67 
+ #_I386__ENDIAN_H_
+
+
+ )
+
+69 
+ ~<sys/cdefs.h
+>
+
+78 
+ #_QUAD_HIGHWORD
+ 1
+
+ )
+
+79 
+ #_QUAD_LOWWORD
+ 0
+
+ )
+
+85 
+ #__DARWIN_LITTLE_ENDIAN
+ 1234
+
+ )
+
+86 
+ #__DARWIN_BIG_ENDIAN
+ 4321
+
+ )
+
+87 
+ #__DARWIN_PDP_ENDIAN
+ 3412
+
+ )
+
+89 
+ #__DARWIN_BYTE_ORDER
+
+__DARWIN_LITTLE_ENDIAN
+
+
+ )
+
+91 #if
+defed
+(
+KERNEL
+|| (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+93 
+ #LITTLE_ENDIAN
+
+__DARWIN_LITTLE_ENDIAN
+
+
+ )
+
+94 
+ #BIG_ENDIAN
+
+__DARWIN_BIG_ENDIAN
+
+
+ )
+
+95 
+ #PDP_ENDIAN
+
+__DARWIN_PDP_ENDIAN
+
+
+ )
+
+97 
+ #BYTE_ORDER
+
+__DARWIN_BYTE_ORDER
+
+
+ )
+
+99 
+ ~<sys/_dn.h
+>
+
+ @/usr/include/i386/types.h
+
+66 #idef
+_MACHTYPES_H_
+
+
+67 
+ #_MACHTYPES_H_
+
+
+ )
+
+69 #ide
+__ASSEMBLER__
+
+
+70 
+ ~<i386/_tys.h
+>
+
+71 
+ ~<sys/cdefs.h
+>
+
+76 #ide
+_INT8_T
+
+
+77 
+ #_INT8_T
+
+
+ )
+
+78 
+__sigd
+ 
+ tt8_t
+;
+
+80 
+ tu_t8_t
+;
+
+81 #ide
+_INT16_T
+
+
+82 
+ #_INT16_T
+
+
+ )
+
+83 
+ tt16_t
+;
+
+85 
+ tu_t16_t
+;
+
+86 #ide
+_INT32_T
+
+
+87 
+ #_INT32_T
+
+
+ )
+
+88 
+ tt32_t
+;
+
+90 
+ tu_t32_t
+;
+
+91 #ide
+_INT64_T
+
+
+92 
+ #_INT64_T
+
+
+ )
+
+93 
+ tt64_t
+;
+
+95 
+ tu_t64_t
+;
+
+97 #i
+__LP64__
+
+
+98 
+t64_t
+
+ tgi_t
+;
+
+100 
+t32_t
+
+ tgi_t
+;
+
+103 #ide
+_INTPTR_T
+
+
+104 
+ #_INTPTR_T
+
+
+ )
+
+105 
+__dw__t
+
+ t_t
+;
+
+107 #ide
+_UINTPTR_T
+
+
+108 
+ #_UINTPTR_T
+
+
+ )
+
+109 
+ tu_t
+;
+
+112 #i!
+defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+114 
+u_t64_t
+
+ tur_addr_t
+;
+
+115 
+u_t64_t
+
+ tur_size_t
+;
+
+116 
+t64_t
+
+ tur_ssize_t
+;
+
+117 
+t64_t
+
+ tur_lg_t
+;
+
+118 
+u_t64_t
+
+ tur_ulg_t
+;
+
+119 
+t64_t
+
+ tur_time_t
+;
+
+120 
+ #USER_ADDR_NULL
+ ((
+ur_addr_t
+0)
+
+ )
+
+121 
+ #CAST_USER_ADDR_T
+(
+a_r
+((
+ur_addr_t
+)((
+u_t
+)_r)))
+
+ )
+
+125 
+u_t64_t
+
+ tsys_g_t
+;
+
+127 #ide
+__offtof
+
+
+128 
+ #__offtof
+(
+ty
+,
+fld
+((
+size_t
+)(&(y *)0)->fld))
+
+ )
+
+ @/usr/include/machine/_limits.h
+
+28 #ide
+_BSD_MACHINE__LIMITS_H_
+
+
+29 
+ #_BSD_MACHINE__LIMITS_H_
+
+
+ )
+
+31 #i
+defed
+ (
+__c__
+|| defed (
+__c64__
+)
+
+32 
+ ~"c/_lims.h
+"
+
+33 #i
+defed
+ (
+__i386__
+|| defed(
+__x86_64__
+)
+
+34 
+ ~"i386/_lims.h
+"
+
+35 #i
+defed
+ (
+__m__
+)
+
+36 
+ ~"m/_lims.h
+"
+
+38 #r
+cheu
+
+n
+
+su܋d
+
+
+ @/usr/include/machine/_structs.h
+
+28 #i
+defed
+ (
+__c__
+|| defed (
+__c64__
+)
+
+29 
+ ~"c/_rus.h
+"
+
+30 #i
+defed
+ (
+__i386__
+|| defed (
+__x86_64__
+)
+
+31 
+ ~"i386/_rus.h
+"
+
+32 #i
+defed
+ (
+__m__
+)
+
+33 
+ ~"m/_rus.h
+"
+
+35 #r
+cheu
+
+n
+
+su܋d
+
+
+ @/usr/include/machine/_types.h
+
+28 #ide
+_BSD_MACHINE__TYPES_H_
+
+
+29 
+ #_BSD_MACHINE__TYPES_H_
+
+
+ )
+
+31 #i
+defed
+ (
+__c__
+|| defed (
+__c64__
+)
+
+32 
+ ~"c/_tys.h
+"
+
+33 #i
+defed
+ (
+__i386__
+|| defed(
+__x86_64__
+)
+
+34 
+ ~"i386/_tys.h
+"
+
+35 #i
+defed
+ (
+__m__
+)
+
+36 
+ ~"m/_tys.h
+"
+
+38 #r
+cheu
+
+n
+
+su܋d
+
+
+ @/usr/include/ppc/endian.h
+
+92 #ide
+_PPC_ENDIAN_H_
+
+
+93 
+ #_PPC_ENDIAN_H_
+
+
+ )
+
+95 
+ ~<sys/cdefs.h
+>
+
+100 
+ #_QUAD_HIGHWORD
+ 0
+
+ )
+
+101 
+ #_QUAD_LOWWORD
+ 1
+
+ )
+
+107 
+ #__DARWIN_LITTLE_ENDIAN
+ 1234
+
+ )
+
+108 
+ #__DARWIN_BIG_ENDIAN
+ 4321
+
+ )
+
+109 
+ #__DARWIN_PDP_ENDIAN
+ 3412
+
+ )
+
+111 
+ #__DARWIN_BYTE_ORDER
+
+__DARWIN_BIG_ENDIAN
+
+
+ )
+
+113 #if
+defed
+(
+KERNEL
+|| (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+115 
+ #LITTLE_ENDIAN
+
+__DARWIN_LITTLE_ENDIAN
+
+
+ )
+
+116 
+ #BIG_ENDIAN
+
+__DARWIN_BIG_ENDIAN
+
+
+ )
+
+117 
+ #PDP_ENDIAN
+
+__DARWIN_PDP_ENDIAN
+
+
+ )
+
+119 
+ #BYTE_ORDER
+
+__DARWIN_BYTE_ORDER
+
+
+ )
+
+121 
+ ~<sys/_dn.h
+>
+
+ @/usr/include/ppc/types.h
+
+66 #idef
+_MACHTYPES_H_
+
+
+67 
+ #_MACHTYPES_H_
+
+
+ )
+
+69 #ide
+__ASSEMBLER__
+
+
+70 
+ ~<c/_tys.h
+>
+
+71 
+ ~<sys/cdefs.h
+>
+
+76 #ide
+_INT8_T
+
+
+77 
+ #_INT8_T
+
+
+ )
+
+78 
+__sigd
+ 
+ tt8_t
+;
+
+80 
+ tu_t8_t
+;
+
+81 #ide
+_INT16_T
+
+
+82 
+ #_INT16_T
+
+
+ )
+
+83 
+ tt16_t
+;
+
+85 
+ tu_t16_t
+;
+
+86 #ide
+_INT32_T
+
+
+87 
+ #_INT32_T
+
+
+ )
+
+88 
+ tt32_t
+;
+
+90 
+ tu_t32_t
+;
+
+91 #ide
+_INT64_T
+
+
+92 
+ #_INT64_T
+
+
+ )
+
+93 
+ tt64_t
+;
+
+95 
+ tu_t64_t
+;
+
+97 #i
+defed
+(
+__c64__
+)
+
+98 
+t64_t
+
+ tgi_t
+;
+
+100 
+t32_t
+
+ tgi_t
+;
+
+103 #ide
+_INTPTR_T
+
+
+104 
+ #_INTPTR_T
+
+
+ )
+
+105 
+__dw__t
+
+ t_t
+;
+
+107 #ide
+_UINTPTR_T
+
+
+108 
+ #_UINTPTR_T
+
+
+ )
+
+109 
+ tu_t
+;
+
+112 #i!
+defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+117 
+u_t64_t
+
+ tur_addr_t
+;
+
+118 
+u_t64_t
+
+ tur_size_t
+;
+
+119 
+t64_t
+
+ tur_ssize_t
+;
+
+120 
+t64_t
+
+ tur_lg_t
+;
+
+121 
+u_t64_t
+
+ tur_ulg_t
+;
+
+122 
+t64_t
+
+ tur_time_t
+;
+
+123 
+ #USER_ADDR_NULL
+ ((
+ur_addr_t
+0)
+
+ )
+
+124 
+ #CAST_USER_ADDR_T
+(
+a_r
+((
+ur_addr_t
+)((
+u_t
+)_r)))
+
+ )
+
+128 
+u_t64_t
+
+ tsys_g_t
+;
+
+130 #ide
+__offtof
+
+
+131 
+ #__offtof
+(
+ty
+,
+fld
+((
+size_t
+)(&(y *)0)->fld))
+
+ )
+
+ @/usr/include/secure/_common.h
+
+24 #ide
+_SECURE__COMMON_H_
+
+
+25 
+ #_SECURE__COMMON_H_
+
+
+ )
+
+27 #unde
+_USE_FORTIFY_LEVEL
+
+
+28 #ifde
+_FORTIFY_SOURCE
+ && _FORTIFY_SOURCE > 0
+
+29 #i
+_FORTIFY_SOURCE
+ > 1
+
+30 
+ #_USE_FORTIFY_LEVEL
+ 2
+
+ )
+
+32 
+ #_USE_FORTIFY_LEVEL
+ 1
+
+ )
+
+35 
+ #_USE_FORTIFY_LEVEL
+ 0
+
+ )
+
+38 
+ #__dw_obsz0
+(
+obje
+
+ `__but_obje_size
+ (obje, 0)
+
+ )
+
+39 
+ #__dw_obsz
+(
+obje
+
+ `__but_obje_size
+ (obje,
+_USE_FORTIFY_LEVEL
+ > 1)
+
+ )
+
+ @/usr/include/sys/resource.h
+
+64 #ide
+_SYS_RESOURCE_H_
+
+
+65 
+ #_SYS_RESOURCE_H_
+
+
+ )
+
+67 
+ ~<sys/pits.h
+>
+
+68 
+ ~<sys/cdefs.h
+>
+
+69 
+ ~<sys/_tys.h
+>
+
+75 
+ #__ed_ru_timev
+
+
+ )
+
+76 
+ ~<sys/_rus.h
+>
+
+79 #ide
+_ID_T
+
+
+80 
+ #_ID_T
+
+
+ )
+
+81 
+__dw_id_t
+
+ tid_t
+;
+
+88 
+__ut64_t
+
+ tim_t
+;
+
+99 
+ #PRIO_PROCESS
+ 0
+
+ )
+
+100 
+ #PRIO_PGRP
+ 1
+
+ )
+
+101 
+ #PRIO_USER
+ 2
+
+ )
+
+103 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+104 
+ #PRIO_DARWIN_THREAD
+ 3
+
+ )
+
+109 
+ #PRIO_MIN
+ -20
+
+ )
+
+110 
+ #PRIO_MAX
+ 20
+
+ )
+
+116 
+ #PRIO_DARWIN_BG
+ 0x1000
+
+ )
+
+130 
+ #RUSAGE_SELF
+ 0
+
+ )
+
+131 
+ #RUSAGE_CHILDREN
+ -1
+
+ )
+
+142 
+ sruge
+ {
+
+143 
+timev
+
+ mru_utime
+;
+
+144 
+timev
+
+ mru_ime
+;
+
+145 #i
+defed
+(
+_POSIX_C_SOURCE
+&& !defed(
+_DARWIN_C_SOURCE
+)
+
+146 
+ mru_aque
+[14];
+
+153 
+ mru_maxrss
+;
+
+154 
+ #ru_f
+
+ru_ixrss
+
+
+ )
+
+155 
+ mru_ixrss
+;
+
+156 
+ mru_idrss
+;
+
+157 
+ mru_iss
+;
+
+158 
+ mru_mt
+;
+
+159 
+ mru_majt
+;
+
+160 
+ mru_nsw
+;
+
+161 
+ mru_block
+;
+
+162 
+ mru_oublock
+;
+
+163 
+ mru_msgd
+;
+
+164 
+ mru_msgrcv
+;
+
+165 
+ mru_nsigls
+;
+
+166 
+ mru_nvcsw
+;
+
+167 
+ mru_nivcsw
+;
+
+168 
+ #ru_ϡ
+
+ru_nivcsw
+
+
+ )
+
+184 
+ #RLIM_INFINITY
+ (((
+__ut64_t
+)1 << 63- 1
+
+ )
+
+185 
+ #RLIM_SAVED_MAX
+
+RLIM_INFINITY
+
+
+ )
+
+186 
+ #RLIM_SAVED_CUR
+
+RLIM_INFINITY
+
+
+ )
+
+192 
+ #RLIMIT_CPU
+ 0
+
+ )
+
+193 
+ #RLIMIT_FSIZE
+ 1
+
+ )
+
+194 
+ #RLIMIT_DATA
+ 2
+
+ )
+
+195 
+ #RLIMIT_STACK
+ 3
+
+ )
+
+196 
+ #RLIMIT_CORE
+ 4
+
+ )
+
+197 
+ #RLIMIT_AS
+ 5
+
+ )
+
+198 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+199 
+ #RLIMIT_RSS
+
+RLIMIT_AS
+
+
+ )
+
+200 
+ #RLIMIT_MEMLOCK
+ 6
+
+ )
+
+201 
+ #RLIMIT_NPROC
+ 7
+
+ )
+
+203 
+ #RLIMIT_NOFILE
+ 8
+
+ )
+
+204 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+205 
+ #RLIM_NLIMITS
+ 9
+
+ )
+
+207 
+ #_RLIMIT_POSIX_FLAG
+ 0x1000
+
+ )
+
+213 
+ sim
+ {
+
+214
+im_t
+
+ mim_cur
+;
+
+215
+im_t
+
+ mim_max
+;
+
+218 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+220 
+ #IOPOL_TYPE_DISK
+ 0
+
+ )
+
+223 
+ #IOPOL_SCOPE_PROCESS
+ 0
+
+ )
+
+224 
+ #IOPOL_SCOPE_THREAD
+ 1
+
+ )
+
+227 
+ #IOPOL_DEFAULT
+ 0
+
+ )
+
+228 
+ #IOPOL_NORMAL
+ 1
+
+ )
+
+229 
+ #IOPOL_PASSIVE
+ 2
+
+ )
+
+230 
+ #IOPOL_THROTTLE
+ 3
+
+ )
+
+235
+__BEGIN_DECLS
+
+
+236 
+giܙy
+(,
+id_t
+);
+
+237 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+238 
+giicy_
+(, );
+
+240 
+ $gim
+(, 
+im
+ *
+ `__DARWIN_ALIAS
+(
+gim
+);
+
+241 
+ `gruge
+(, 
+ruge
+ *);
+
+242 
+ `riܙy
+(,
+id_t
+, );
+
+243 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+244 
+ `tiicy_
+(, , );
+
+246 
+ $lim
+(, cڡ 
+im
+ *
+ `__DARWIN_ALIAS
+(
+lim
+);
+
+247
+__END_DECLS
+
+
+ @/usr/include/sys/signal.h
+
+69 #idef
+_SYS_SIGNAL_H_
+
+
+70 
+ #_SYS_SIGNAL_H_
+
+
+ )
+
+72 
+ ~<sys/cdefs.h
+>
+
+73 
+ ~<sys/pits.h
+>
+
+75 
+ #__DARWIN_NSIG
+ 32
+
+ )
+
+77 #i!
+defed
+(
+_ANSI_SOURCE
+&& (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+78 
+ #NSIG
+
+__DARWIN_NSIG
+
+
+ )
+
+81 
+ ~<mache/sigl.h
+>
+
+83 
+ #SIGHUP
+ 1
+
+ )
+
+84 
+ #SIGINT
+ 2
+
+ )
+
+85 
+ #SIGQUIT
+ 3
+
+ )
+
+86 
+ #SIGILL
+ 4
+
+ )
+
+87 
+ #SIGTRAP
+ 5
+
+ )
+
+88 
+ #SIGABRT
+ 6
+
+ )
+
+89 #i (
+defed
+(
+_POSIX_C_SOURCE
+&& !defed(
+_DARWIN_C_SOURCE
+))
+
+90 
+ #SIGPOLL
+ 7
+
+ )
+
+92 
+ #SIGIOT
+
+SIGABRT
+
+
+ )
+
+93 
+ #SIGEMT
+ 7
+
+ )
+
+95 
+ #SIGFPE
+ 8
+
+ )
+
+96 
+ #SIGKILL
+ 9
+
+ )
+
+97 
+ #SIGBUS
+ 10
+
+ )
+
+98 
+ #SIGSEGV
+ 11
+
+ )
+
+99 
+ #SIGSYS
+ 12
+
+ )
+
+100 
+ #SIGPIPE
+ 13
+
+ )
+
+101 
+ #SIGALRM
+ 14
+
+ )
+
+102 
+ #SIGTERM
+ 15
+
+ )
+
+103 
+ #SIGURG
+ 16
+
+ )
+
+104 
+ #SIGSTOP
+ 17
+
+ )
+
+105 
+ #SIGTSTP
+ 18
+
+ )
+
+106 
+ #SIGCONT
+ 19
+
+ )
+
+107 
+ #SIGCHLD
+ 20
+
+ )
+
+108 
+ #SIGTTIN
+ 21
+
+ )
+
+109 
+ #SIGTTOU
+ 22
+
+ )
+
+110 #i (!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+111 
+ #SIGIO
+ 23
+
+ )
+
+113 
+ #SIGXCPU
+ 24
+
+ )
+
+114 
+ #SIGXFSZ
+ 25
+
+ )
+
+115 
+ #SIGVTALRM
+ 26
+
+ )
+
+116 
+ #SIGPROF
+ 27
+
+ )
+
+117 #i (!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+118 
+ #SIGWINCH
+ 28
+
+ )
+
+119 
+ #SIGINFO
+ 29
+
+ )
+
+121 
+ #SIGUSR1
+ 30
+
+ )
+
+122 
+ #SIGUSR2
+ 31
+
+ )
+
+124 #i
+defed
+(
+_ANSI_SOURCE
+||
+__DARWIN_UNIX03
+ || defed(
+__lulus
+)
+
+130 
+ #SIG_DFL
+ ((*)())0
+
+ )
+
+131 
+ #SIG_IGN
+ ((*)())1
+
+ )
+
+132 
+ #SIG_HOLD
+ ((*)())5
+
+ )
+
+133 
+ #SIG_ERR
+ (((*)())-1)
+
+ )
+
+136 
+ #SIG_DFL
+ ((*)))0
+
+ )
+
+137 
+ #SIG_IGN
+ ((*)))1
+
+ )
+
+138 
+ #SIG_HOLD
+ ((*)))5
+
+ )
+
+139 
+ #SIG_ERR
+ (((*)))-1)
+
+ )
+
+142 #ide
+_ANSI_SOURCE
+
+
+143 
+ ~<sys/_tys.h
+>
+
+145 
+ #__ed_mcڋxt_t
+
+
+ )
+
+146 
+ #__ed_ack_t
+
+
+ )
+
+147 
+ #__ed_ucڋxt_t
+
+
+ )
+
+148 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+149 #i
+defed
+(
+__c__
+|| defed(
+__c64__
+)
+
+150 
+ #__ed_mcڋxt64_t
+
+
+ )
+
+151 
+ #__ed_ucڋxt64_t
+
+
+ )
+
+154 
+ ~<sys/_rus.h
+>
+
+156 #ide
+_PID_T
+
+
+157 
+ #_PID_T
+
+
+ )
+
+158 
+__dw_pid_t
+
+ tpid_t
+;
+
+161 #ide
+_PTHREAD_ATTR_T
+
+
+162 
+ #_PTHREAD_ATTR_T
+
+
+ )
+
+163 
+__dw_had__t
+
+ thad__t
+;
+
+166 #ide
+_SIGSET_T
+
+
+167 
+ #_SIGSET_T
+
+
+ )
+
+168 
+__dw_sigt_t
+
+ tsigt_t
+;
+
+171 #idef
+_SIZE_T
+
+
+172 
+ #_SIZE_T
+
+
+ )
+
+173 
+__dw_size_t
+
+ tsize_t
+;
+
+176 #ide
+_UID_T
+
+
+177 
+ #_UID_T
+
+
+ )
+
+178 
+__dw_uid_t
+
+ tuid_t
+;
+
+181 
+ usigv
+ {
+
+183 
+ msiv_t
+;
+
+184 *
+ msiv_r
+;
+
+187 
+ #SIGEV_NONE
+ 0
+
+ )
+
+188 
+ #SIGEV_SIGNAL
+ 1
+
+ )
+
+189 
+ #SIGEV_THREAD
+ 3
+
+ )
+
+191 
+ ssigevt
+ {
+
+192 
+ msigev_nify
+;
+
+193 
+ msigev_signo
+;
+
+194 
+sigv
+
+ msigev_vue
+;
+
+195 (*
+ msigev_nify_funi
+)(
+ msigv
+);
+
+196
+had__t
+ *
+ msigev_nify_ibus
+;
+
+200 
+ s__sigfo
+ {
+
+201 
+ msi_signo
+;
+
+202 
+ msi_o
+;
+
+203 
+ msi_code
+;
+
+204
+pid_t
+
+ msi_pid
+;
+
+205
+uid_t
+
+ msi_uid
+;
+
+206 
+ msi_us
+;
+
+207 *
+ msi_addr
+;
+
+208 
+sigv
+
+ msi_vue
+;
+
+209 
+ msi_bd
+;
+
+210 
+ m__d
+[7];
+
+211 }
+ tsigfo_t
+;
+
+228 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+229 
+ #ILL_NOOP
+ 0
+
+ )
+
+231 
+ #ILL_ILLOPC
+ 1
+
+ )
+
+232 
+ #ILL_ILLTRP
+ 2
+
+ )
+
+233 
+ #ILL_PRVOPC
+ 3
+
+ )
+
+234 
+ #ILL_ILLOPN
+ 4
+
+ )
+
+235 
+ #ILL_ILLADR
+ 5
+
+ )
+
+236 
+ #ILL_PRVREG
+ 6
+
+ )
+
+237 
+ #ILL_COPROC
+ 7
+
+ )
+
+238 
+ #ILL_BADSTK
+ 8
+
+ )
+
+241 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+242 
+ #FPE_NOOP
+ 0
+
+ )
+
+244 
+ #FPE_FLTDIV
+ 1
+
+ )
+
+245 
+ #FPE_FLTOVF
+ 2
+
+ )
+
+246 
+ #FPE_FLTUND
+ 3
+
+ )
+
+247 
+ #FPE_FLTRES
+ 4
+
+ )
+
+248 
+ #FPE_FLTINV
+ 5
+
+ )
+
+249 
+ #FPE_FLTSUB
+ 6
+
+ )
+
+250 
+ #FPE_INTDIV
+ 7
+
+ )
+
+251 
+ #FPE_INTOVF
+ 8
+
+ )
+
+254 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+255 
+ #SEGV_NOOP
+ 0
+
+ )
+
+257 
+ #SEGV_MAPERR
+ 1
+
+ )
+
+258 
+ #SEGV_ACCERR
+ 2
+
+ )
+
+261 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+262 
+ #BUS_NOOP
+ 0
+
+ )
+
+264 
+ #BUS_ADRALN
+ 1
+
+ )
+
+265 
+ #BUS_ADRERR
+ 2
+
+ )
+
+266 
+ #BUS_OBJERR
+ 3
+
+ )
+
+269 
+ #TRAP_BRKPT
+ 1
+
+ )
+
+270 
+ #TRAP_TRACE
+ 2
+
+ )
+
+273 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+274 
+ #CLD_NOOP
+ 0
+
+ )
+
+276 
+ #CLD_EXITED
+ 1
+
+ )
+
+277 
+ #CLD_KILLED
+ 2
+
+ )
+
+278 
+ #CLD_DUMPED
+ 3
+
+ )
+
+279 
+ #CLD_TRAPPED
+ 4
+
+ )
+
+280 
+ #CLD_STOPPED
+ 5
+
+ )
+
+281 
+ #CLD_CONTINUED
+ 6
+
+ )
+
+284 
+ #POLL_IN
+ 1
+
+ )
+
+285 
+ #POLL_OUT
+ 2
+
+ )
+
+286 
+ #POLL_MSG
+ 3
+
+ )
+
+287 
+ #POLL_ERR
+ 4
+
+ )
+
+288 
+ #POLL_PRI
+ 5
+
+ )
+
+289 
+ #POLL_HUP
+ 6
+
+ )
+
+292 
+ u__sigai_u
+ {
+
+293 (*
+ m___hdr
+)();
+
+294 (*
+ m___sigai
+)(, 
+ m__sigfo
+ *,
+
+299 
+ s__sigai
+ {
+
+300 
+__sigai_u
+
+ m__sigai_u
+;
+
+301 (*
+ m_amp
+)(*, , ,
+ msigfo_t
+ *, *);
+
+302
+sigt_t
+
+ m_mask
+;
+
+303 
+ m_ags
+;
+
+309 
+ ssigai
+ {
+
+310 
+__sigai_u
+
+ m__sigai_u
+;
+
+311
+sigt_t
+
+ m_mask
+;
+
+312 
+ m_ags
+;
+
+318 
+ #_hdr
+
+__sigai_u
+.
+___hdr
+
+
+ )
+
+319 
+ #_sigai
+
+__sigai_u
+.
+___sigai
+
+
+ )
+
+321 
+ #SA_ONSTACK
+ 0x0001
+
+ )
+
+322 
+ #SA_RESTART
+ 0x0002
+
+ )
+
+323 
+ #SA_RESETHAND
+ 0x0004
+
+ )
+
+324 
+ #SA_NOCLDSTOP
+ 0x0008
+
+ )
+
+325 
+ #SA_NODEFER
+ 0x0010
+
+ )
+
+326 
+ #SA_NOCLDWAIT
+ 0x0020
+
+ )
+
+327 
+ #SA_SIGINFO
+ 0x0040
+
+ )
+
+328 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+329 
+ #SA_USERTRAMP
+ 0x0100
+
+ )
+
+331 
+ #SA_64REGSET
+ 0x0200
+
+ )
+
+337 
+ #SA_USERSPACE_MASK
+ (
+SA_ONSTACK
+ |
+SA_RESTART
+ |
+SA_RESETHAND
+ |
+SA_NOCLDSTOP
+ |
+SA_NODEFER
+ |
+SA_NOCLDWAIT
+ |
+SA_SIGINFO
+)
+
+ )
+
+342 
+ #SIG_BLOCK
+ 1
+
+ )
+
+343 
+ #SIG_UNBLOCK
+ 2
+
+ )
+
+344 
+ #SIG_SETMASK
+ 3
+
+ )
+
+347 
+ #SI_USER
+ 0x10001
+
+ )
+
+348 
+ #SI_QUEUE
+ 0x10002
+
+ )
+
+349 
+ #SI_TIMER
+ 0x10003
+
+ )
+
+350 
+ #SI_ASYNCIO
+ 0x10004
+
+ )
+
+351 
+ #SI_MESGQ
+ 0x10005
+
+ )
+
+353 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+354 (*
+ tsig_t
+)();
+
+361 
+ #SS_ONSTACK
+ 0x0001
+
+ )
+
+362 
+ #SS_DISABLE
+ 0x0004
+
+ )
+
+363 
+ #MINSIGSTKSZ
+ 32768
+
+ )
+
+364 
+ #SIGSTKSZ
+ 131072
+
+ )
+
+366 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+371 
+ ssigvec
+ {
+
+372 (*
+sv_hdr
+)();
+
+373 
+sv_mask
+;
+
+374 
+sv_ags
+;
+
+377 
+ #SV_ONSTACK
+
+SA_ONSTACK
+
+
+ )
+
+378 
+ #SV_INTERRUPT
+
+SA_RESTART
+
+
+ )
+
+379 
+ #SV_RESETHAND
+
+SA_RESETHAND
+
+
+ )
+
+380 
+ #SV_NODEFER
+
+SA_NODEFER
+
+
+ )
+
+381 
+ #SV_NOCLDSTOP
+
+SA_NOCLDSTOP
+
+
+ )
+
+382 
+ #SV_SIGINFO
+
+SA_SIGINFO
+
+
+ )
+
+384 
+ #sv_ڡack
+
+sv_ags
+
+
+ )
+
+390 
+ ssigack
+ {
+
+391 *
+ss_
+;
+
+392 
+ss_ڡack
+;
+
+395 #i!
+ `defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+400 
+ #sigmask
+(
+m
+(1 << ((m)-1))
+
+ )
+
+403 
+ #BADSIG
+
+SIG_ERR
+
+
+ )
+
+412
+__BEGIN_DECLS
+
+
+413 (*
+ `sigl
+(, (*)()))();
+
+414
+__END_DECLS
+
+
+ @/usr/include/xlocale/_time.h
+
+24 #ide
+_XLOCALE__TIME_H_
+
+
+25 
+ #_XLOCALE__TIME_H_
+
+
+ )
+
+27
+__BEGIN_DECLS
+
+
+28
+size_t
+
+ $rime_l
+(*
+__ri
+,
+size_t
+, const * __restrict,
+
+29 cڡ 
+tm
+ *
+__ri
+,
+lo_t
+)
+
+30
+ `__DARWIN_ALIAS
+(
+rime_l
+);
+
+31 *
+ $time_l
+(cڡ *
+__ri
+, const * __restrict,
+
+32 
+tm
+ *
+__ri
+,
+lo_t
+
+ `__DARWIN_ALIAS
+(
+time_l
+);
+
+33
+__END_DECLS
+
+
+ @/usr/include/i386/_limits.h
+
+22 #idef
+_I386__LIMITS_H_
+
+
+23 
+ #_I386__LIMITS_H_
+
+
+ )
+
+25 
+ #__DARWIN_CLK_TCK
+ 100
+
+ )
+
+ @/usr/include/i386/_structs.h
+
+29 
+ ~<sys/pits.h
+>
+
+31 #ifde
+__ed_mcڋxt_t
+
+
+32 #ide
+__ed_ru_mcڋxt
+
+
+33 
+ #__ed_ru_mcڋxt
+
+
+ )
+
+37 #i
+defed
+(
+__ed_ru_mcڋxt
+)
+
+38 
+ ~<mach/i386/_rus.h
+>
+
+42 #ifde
+__ed_ru_mcڋxt
+
+
+43 #unde
+__ed_ru_mcڋxt
+
+
+45 #ide
+_STRUCT_MCONTEXT32
+
+
+46 #i
+__DARWIN_UNIX03
+
+
+47 
+ #_STRUCT_MCONTEXT32
+ 
+__dw_mcڋxt32
+
+
+ )
+
+48
+ g_STRUCT_MCONTEXT32
+
+
+50
+_STRUCT_X86_EXCEPTION_STATE32
+
+ g__es
+;
+
+51
+_STRUCT_X86_THREAD_STATE32
+
+ g__ss
+;
+
+52
+_STRUCT_X86_FLOAT_STATE32
+
+ g__fs
+;
+
+55 
+ #_STRUCT_MCONTEXT32
+ 
+mcڋxt32
+
+
+ )
+
+56
+ g_STRUCT_MCONTEXT32
+
+
+58
+_STRUCT_X86_EXCEPTION_STATE32
+
+ ges
+;
+
+59
+_STRUCT_X86_THREAD_STATE32
+
+ gss
+;
+
+60
+_STRUCT_X86_FLOAT_STATE32
+
+ gfs
+;
+
+65 #ide
+_STRUCT_MCONTEXT64
+
+
+66 #i
+__DARWIN_UNIX03
+
+
+67 
+ #_STRUCT_MCONTEXT64
+ 
+__dw_mcڋxt64
+
+
+ )
+
+68
+ g_STRUCT_MCONTEXT64
+
+
+70
+_STRUCT_X86_EXCEPTION_STATE64
+
+ g__es
+;
+
+71
+_STRUCT_X86_THREAD_STATE64
+
+ g__ss
+;
+
+72
+_STRUCT_X86_FLOAT_STATE64
+
+ g__fs
+;
+
+75 
+ #_STRUCT_MCONTEXT64
+ 
+mcڋxt64
+
+
+ )
+
+76
+ g_STRUCT_MCONTEXT64
+
+
+78
+_STRUCT_X86_EXCEPTION_STATE64
+
+ ges
+;
+
+79
+_STRUCT_X86_THREAD_STATE64
+
+ gss
+;
+
+80
+_STRUCT_X86_FLOAT_STATE64
+
+ gfs
+;
+
+86 #ifde
+__ed_mcڋxt_t
+
+
+87 #unde
+__ed_mcڋxt_t
+
+
+88 #ide
+_MCONTEXT_T
+
+
+89 
+ #_MCONTEXT_T
+
+
+ )
+
+90 #i
+defed
+(
+__LP64__
+)
+
+91 
+_STRUCT_MCONTEXT64
+ *
+ tmcڋxt_t
+;
+
+92 
+ #_STRUCT_MCONTEXT
+
+_STRUCT_MCONTEXT64
+
+
+ )
+
+94 
+_STRUCT_MCONTEXT32
+ *
+ tmcڋxt_t
+;
+
+95 
+ #_STRUCT_MCONTEXT
+
+_STRUCT_MCONTEXT32
+
+
+ )
+
+100 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+101 #ide
+I386_MCONTEXT_SIZE
+
+
+102 
+ #I386_MCONTEXT_SIZE
+ (
+mcڋxt
+)
+
+ )
+
+ @/usr/include/i386/_types.h
+
+28 #idef
+_BSD_I386__TYPES_H_
+
+
+29 
+ #_BSD_I386__TYPES_H_
+
+
+ )
+
+36 #ifde
+__GNUC__
+
+
+37 
+__sigd
+ 
+ t__t8_t
+;
+
+39 
+ t__t8_t
+;
+
+41 
+ t__ut8_t
+;
+
+42 
+ t__t16_t
+;
+
+43 
+ t__ut16_t
+;
+
+44 
+ t__t32_t
+;
+
+45 
+ t__ut32_t
+;
+
+46 
+ t__t64_t
+;
+
+47 
+ t__ut64_t
+;
+
+49 
+ t__dw__t
+;
+
+50 
+ t__dw_tul_t
+;
+
+70 
+ t__dw__ru_t
+;
+
+77 
+ m__mbe8
+[128];
+
+78 
+ m_mbeL
+;
+
+79 }
+ t__mbe_t
+;
+
+81 
+__mbe_t
+
+ t__dw_mbe_t
+;
+
+83 #i
+defed
+(
+__GNUC__
+&& defed(
+__PTRDIFF_TYPE__
+)
+
+84 
+__PTRDIFF_TYPE__
+
+ t__dw_rdiff_t
+;
+
+86 
+ t__dw_rdiff_t
+;
+
+89 #i
+defed
+(
+__GNUC__
+&& defed(
+__SIZE_TYPE__
+)
+
+90 
+__SIZE_TYPE__
+
+ t__dw_size_t
+;
+
+92 
+ t__dw_size_t
+;
+
+95 #i(
+__GNUC__
+ > 2)
+
+96 
+__but_va_li
+
+ t__dw_va_li
+;
+
+98 *
+ t__dw_va_li
+;
+
+101 #i
+defed
+(
+__GNUC__
+&& defed(
+__WCHAR_TYPE__
+)
+
+102 
+__WCHAR_TYPE__
+
+ t__dw_wch_t
+;
+
+104 
+__dw__ru_t
+
+ t__dw_wch_t
+;
+
+107 
+__dw_wch_t
+
+ t__dw_ru_t
+;
+
+109 #i
+defed
+(
+__GNUC__
+&& defed(
+__WINT_TYPE__
+)
+
+110 
+__WINT_TYPE__
+
+ t__dw_wt_t
+;
+
+112 
+__dw__ru_t
+
+ t__dw_wt_t
+;
+
+115 
+ t__dw_ock_t
+;
+
+116 
+__ut32_t
+
+ t__dw_sockn_t
+;
+
+117 
+ t__dw_ssize_t
+;
+
+118 
+ t__dw_time_t
+;
+
+ @/usr/include/machine/signal.h
+
+28 #ide
+_BSD_MACHINE_SIGNAL_H_
+
+
+29 
+ #_BSD_MACHINE_SIGNAL_H_
+
+
+ )
+
+31 #i
+defed
+ (
+__c__
+|| defed (
+__c64__
+)
+
+32 
+ ~"c/sigl.h
+"
+
+33 #i
+defed
+ (
+__i386__
+|| defed(
+__x86_64__
+)
+
+34 
+ ~"i386/sigl.h
+"
+
+35 #i
+defed
+ (
+__m__
+)
+
+36 
+ ~"m/sigl.h
+"
+
+38 #r
+cheu
+
+n
+
+su܋d
+
+
+ @/usr/include/ppc/_limits.h
+
+22 #idef
+_PPC__LIMITS_H_
+
+
+23 
+ #_PPC__LIMITS_H_
+
+
+ )
+
+25 
+ #__DARWIN_CLK_TCK
+ 100
+
+ )
+
+ @/usr/include/ppc/_structs.h
+
+29 
+ ~<sys/cdefs.h
+>
+
+31 #ifde
+__ed_mcڋxt_t
+
+
+32 #ide
+__ed_ru_mcڋxt
+
+
+33 
+ #__ed_ru_mcڋxt
+
+
+ )
+
+37 #ifde
+__ed_mcڋxt64_t
+
+
+38 #ide
+__ed_ru_mcڋxt64
+
+
+39 
+ #__ed_ru_mcڋxt64
+
+
+ )
+
+43 #i
+defed
+(
+__ed_ru_mcڋxt
+|| defed(
+__ed_ru_mcڋxt64
+)
+
+44 
+ ~<mach/c/_rus.h
+>
+
+47 #ifde
+__ed_ru_mcڋxt
+
+
+48 #unde
+__ed_ru_mcڋxt
+
+
+49 #ide
+_STRUCT_MCONTEXT
+
+
+50 #i
+__DARWIN_UNIX03
+
+
+51 
+ #_STRUCT_MCONTEXT
+ 
+__dw_mcڋxt
+
+
+ )
+
+52
+ g_STRUCT_MCONTEXT
+
+
+54
+_STRUCT_PPC_EXCEPTION_STATE
+
+ g__es
+;
+
+55
+_STRUCT_PPC_THREAD_STATE
+
+ g__ss
+;
+
+56
+_STRUCT_PPC_FLOAT_STATE
+
+ g__fs
+;
+
+57
+_STRUCT_PPC_VECTOR_STATE
+
+ g__vs
+;
+
+60 
+ #_STRUCT_MCONTEXT
+ 
+mcڋxt
+
+
+ )
+
+61
+ g_STRUCT_MCONTEXT
+
+
+63
+_STRUCT_PPC_EXCEPTION_STATE
+
+ ges
+;
+
+64
+_STRUCT_PPC_THREAD_STATE
+
+ gss
+;
+
+65
+_STRUCT_PPC_FLOAT_STATE
+
+ gfs
+;
+
+66
+_STRUCT_PPC_VECTOR_STATE
+
+ gvs
+;
+
+72 #ifde
+__ed_ru_mcڋxt64
+
+
+73 #unde
+__ed_ru_mcڋxt64
+
+
+74 #ide
+_STRUCT_MCONTEXT64
+
+
+75 #i
+__DARWIN_UNIX03
+
+
+76 
+ #_STRUCT_MCONTEXT64
+ 
+__dw_mcڋxt64
+
+
+ )
+
+77
+ g_STRUCT_MCONTEXT64
+
+
+79
+_STRUCT_PPC_EXCEPTION_STATE64
+
+ g__es
+;
+
+80
+_STRUCT_PPC_THREAD_STATE64
+
+ g__ss
+;
+
+81
+_STRUCT_PPC_FLOAT_STATE
+
+ g__fs
+;
+
+82
+_STRUCT_PPC_VECTOR_STATE
+
+ g__vs
+;
+
+85 
+ #_STRUCT_MCONTEXT64
+ 
+mcڋxt64
+
+
+ )
+
+86
+ g_STRUCT_MCONTEXT64
+
+
+88
+_STRUCT_PPC_EXCEPTION_STATE64
+
+ ges
+;
+
+89
+_STRUCT_PPC_THREAD_STATE64
+
+ gss
+;
+
+90
+_STRUCT_PPC_FLOAT_STATE
+
+ gfs
+;
+
+91
+_STRUCT_PPC_VECTOR_STATE
+
+ gvs
+;
+
+97 #ifde
+__ed_mcڋxt_t
+
+
+98 #unde
+__ed_mcڋxt_t
+
+
+99 #ide
+_MCONTEXT_T
+
+
+100 
+ #_MCONTEXT_T
+
+
+ )
+
+101 
+_STRUCT_MCONTEXT
+ *
+ tmcڋxt_t
+;
+
+105 #ifde
+__ed_mcڋxt64_t
+
+
+106 #unde
+__ed_mcڋxt64_t
+
+
+107 #ide
+_MCONTEXT64_T
+
+
+108 
+ #_MCONTEXT64_T
+
+
+ )
+
+109 
+_STRUCT_MCONTEXT64
+ *
+ tmcڋxt64_t
+;
+
+113 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+114 #ide
+PPC_MCONTEXT_SIZE
+
+
+115 
+ #PPC_MCONTEXT_SIZE
+ (
+PPC_THREAD_STATE_COUNT
+ +
+PPC_FLOAT_STATE_COUNT
+ +
+PPC_EXCEPTION_STATE_COUNT
+ +
+PPC_VECTOR_STATE_COUNT
+* ()
+
+ )
+
+117 #ide
+PPC_MCONTEXT64_SIZE
+
+
+118 
+ #PPC_MCONTEXT64_SIZE
+ (
+PPC_THREAD_STATE64_COUNT
+ +
+PPC_FLOAT_STATE_COUNT
+ +
+PPC_EXCEPTION_STATE_COUNT
+ +
+PPC_VECTOR_STATE_COUNT
+* ()
+
+ )
+
+126 #ifde
+__ed_ru_sigcڋxt
+
+
+127 #unde
+__ed_ru_sigcڋxt
+
+
+128 #ide
+_STRUCT_SIGCONTEXT
+
+
+129 #i
+__DARWIN_UNIX03
+
+
+130 
+ #_STRUCT_SIGCONTEXT
+ 
+__dw_sigcڋxt
+
+
+ )
+
+131
+ g_STRUCT_SIGCONTEXT
+
+
+133 
+ g__sc_ڡack
+;
+
+134 
+ g__sc_mask
+;
+
+135 
+ g__sc_
+;
+
+136 
+ g__sc_psw
+;
+
+137 
+ g__sc_
+;
+
+138 *
+ g__sc_gs
+;
+
+141 
+ #_STRUCT_SIGCONTEXT
+ 
+sigcڋxt
+
+
+ )
+
+142
+ g_STRUCT_SIGCONTEXT
+
+
+144 
+ gsc_ڡack
+;
+
+145 
+ gsc_mask
+;
+
+146 
+ gsc_
+;
+
+147 
+ gsc_psw
+;
+
+148 
+ gsc_
+;
+
+149 *
+ gsc_gs
+;
+
+162 #ifde
+__ed_ru_sigcڋxt32
+
+
+163 #unde
+__ed_ru_sigcڋxt32
+
+
+164 #ide
+_STRUCT_SIGCONTEXT32
+
+
+165 #i
+__DARWIN_UNIX03
+
+
+166 
+ #_STRUCT_SIGCONTEXT32
+ 
+__dw_sigcڋxt32
+
+
+ )
+
+167
+ g_STRUCT_SIGCONTEXT32
+
+
+169 
+ g__sc_ڡack
+;
+
+170 
+ g__sc_mask
+;
+
+171 
+ g__sc_
+;
+
+172 
+ g__sc_psw
+;
+
+173 
+ g__sc_
+;
+
+174 *
+ g__sc_gs
+;
+
+177 
+ #_STRUCT_SIGCONTEXT32
+ 
+sigcڋxt32
+
+
+ )
+
+178
+ g_STRUCT_SIGCONTEXT32
+
+
+180 
+ gsc_ڡack
+;
+
+181 
+ gsc_mask
+;
+
+182 
+ gsc_
+;
+
+183 
+ gsc_psw
+;
+
+184 
+ gsc_
+;
+
+185 *
+ gsc_gs
+;
+
+191 #ifde
+__ed_ru_sigcڋxt64
+
+
+192 #unde
+__ed_ru_sigcڋxt64
+
+
+193 #ide
+_STRUCT_SIGCONTEXT64
+
+
+194 #i
+__DARWIN_UNIX03
+
+
+195 
+ #_STRUCT_SIGCONTEXT64
+ 
+__dw_sigcڋxt64
+
+
+ )
+
+196
+ g_STRUCT_SIGCONTEXT64
+
+
+198 
+ g__sc_ڡack
+;
+
+199 
+ g__sc_mask
+;
+
+200 
+ g__sc_
+;
+
+201 
+ g__sc_psw
+;
+
+202 
+ g__sc_
+;
+
+203 *
+ g__sc_gs
+;
+
+206 
+ #_STRUCT_SIGCONTEXT64
+ 
+sigcڋxt64
+
+
+ )
+
+207
+ g_STRUCT_SIGCONTEXT64
+
+
+209 
+ gsc_ڡack
+;
+
+210 
+ gsc_mask
+;
+
+211 
+ gsc_
+;
+
+212 
+ gsc_psw
+;
+
+213 
+ gsc_
+;
+
+214 *
+ gsc_gs
+;
+
+ @/usr/include/ppc/_types.h
+
+28 #idef
+_BSD_PPC__TYPES_H_
+
+
+29 
+ #_BSD_PPC__TYPES_H_
+
+
+ )
+
+36 #ifde
+__GNUC__
+
+
+37 
+__sigd
+ 
+ t__t8_t
+;
+
+39 
+ t__t8_t
+;
+
+41 
+ t__ut8_t
+;
+
+42 
+ t__t16_t
+;
+
+43 
+ t__ut16_t
+;
+
+44 
+ t__t32_t
+;
+
+45 
+ t__ut32_t
+;
+
+46 
+ t__t64_t
+;
+
+47 
+ t__ut64_t
+;
+
+49 
+ t__dw__t
+;
+
+50 
+ t__dw_tul_t
+;
+
+70 
+ t__dw__ru_t
+;
+
+77 
+ m__mbe8
+[128];
+
+78 
+ m_mbeL
+;
+
+79 }
+ t__mbe_t
+;
+
+81 
+__mbe_t
+
+ t__dw_mbe_t
+;
+
+83 #i
+defed
+(
+__GNUC__
+&& defed(
+__PTRDIFF_TYPE__
+)
+
+84 
+__PTRDIFF_TYPE__
+
+ t__dw_rdiff_t
+;
+
+86 
+ t__dw_rdiff_t
+;
+
+89 #i
+defed
+(
+__GNUC__
+&& defed(
+__SIZE_TYPE__
+)
+
+90 
+__SIZE_TYPE__
+
+ t__dw_size_t
+;
+
+92 
+ t__dw_size_t
+;
+
+95 #i(
+__GNUC__
+ > 2)
+
+96 
+__but_va_li
+
+ t__dw_va_li
+;
+
+98 *
+ t__dw_va_li
+;
+
+101 #i
+defed
+(
+__GNUC__
+&& defed(
+__WCHAR_TYPE__
+)
+
+102 
+__WCHAR_TYPE__
+
+ t__dw_wch_t
+;
+
+104 
+__dw__ru_t
+
+ t__dw_wch_t
+;
+
+107 
+__dw_wch_t
+
+ t__dw_ru_t
+;
+
+109 #i
+defed
+(
+__GNUC__
+&& defed(
+__WINT_TYPE__
+)
+
+110 
+__WINT_TYPE__
+
+ t__dw_wt_t
+;
+
+112 
+__dw__ru_t
+
+ t__dw_wt_t
+;
+
+115 
+ t__dw_ock_t
+;
+
+116 
+__ut32_t
+
+ t__dw_sockn_t
+;
+
+117 
+ t__dw_ssize_t
+;
+
+118 
+ t__dw_time_t
+;
+
+ @/usr/include/sys/_endian.h
+
+90 #ide
+_SYS__ENDIAN_H_
+
+
+91 
+ #_SYS__ENDIAN_H_
+
+
+ )
+
+93 
+ ~<sys/cdefs.h
+>
+
+99 #i
+defed
+(
+lt
+)
+
+101
+__BEGIN_DECLS
+
+
+102
+__ut16_t
+
+ohs
+(__uint16_t);
+
+103
+__ut16_t
+
+hts
+(__uint16_t);
+
+104
+__ut32_t
+
+ohl
+(__uint32_t);
+
+105
+__ut32_t
+
+htl
+(__uint32_t);
+
+106
+ g__END_DECLS
+
+
+108 #i
+__DARWIN_BYTE_ORDER
+ =
+__DARWIN_BIG_ENDIAN
+
+
+110 
+ #ohl
+(
+x
+(x)
+
+ )
+
+111 
+ #ohs
+(
+x
+(x)
+
+ )
+
+112 
+ #htl
+(
+x
+(x)
+
+ )
+
+113 
+ #hts
+(
+x
+(x)
+
+ )
+
+115 #i
+defed
+(
+KERNEL
+|| (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+116 
+ #NTOHL
+(
+x
+(x)
+
+ )
+
+117 
+ #NTOHS
+(
+x
+(x)
+
+ )
+
+118 
+ #HTONL
+(
+x
+(x)
+
+ )
+
+119 
+ #HTONS
+(
+x
+(x)
+
+ )
+
+124 
+ ~<libkn/_OSByOrd.h
+>
+
+126 
+ #ohs
+(
+x
+
+ `__DARWIN_OSSwI16
+(x)
+
+ )
+
+127 
+ #hts
+(
+x
+
+ `__DARWIN_OSSwI16
+(x)
+
+ )
+
+129 
+ #ohl
+(
+x
+
+ `__DARWIN_OSSwI32
+(x)
+
+ )
+
+130 
+ #htl
+(
+x
+
+ `__DARWIN_OSSwI32
+(x)
+
+ )
+
+132 #if
+defed
+(
+KERNEL
+|| (!defed(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+))
+
+133 
+ #NTOHL
+(
+x
+(x
+ `ohl
+((
+__ut32_t
+)x)
+
+ )
+
+134 
+ #NTOHS
+(
+x
+(x
+ `ohs
+((
+__ut16_t
+)x)
+
+ )
+
+135 
+ #HTONL
+(
+x
+(x
+ `htl
+((
+__ut32_t
+)x)
+
+ )
+
+136 
+ #HTONS
+(
+x
+(x
+ `hts
+((
+__ut16_t
+)x)
+
+ )
+
+ @/usr/include/i386/signal.h
+
+33 #idef
+_I386_SIGNAL_H_
+
+
+34 
+ #_I386_SIGNAL_H_
+ 1
+
+ )
+
+36 
+ ~<sys/cdefs.h
+>
+
+38 #ide
+_ANSI_SOURCE
+
+
+39 
+ tsig_omic_t
+;
+
+41 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+43 
+ ~<sys/pits.h
+>
+
+45 #ifde
+__APPLE_API_OBSOLETE
+
+
+54 
+ #__ed_ru_sigcڋxt
+
+
+ )
+
+55 
+ ~<i386/_rus.h
+>
+
+ @/usr/include/libkern/_OSByteOrder.h
+
+29 #ide
+_OS__OSBYTEORDER_H
+
+
+30 
+ #_OS__OSBYTEORDER_H
+
+
+ )
+
+40 
+ ~<sys/_tys.h
+>
+
+43 
+ #__DARWIN_OSSwCڡI16
+(
+x
+) \
+
+44 ((
+__ut16_t
+)((((__ut16_t)(
+x
+) & 0xff00) >> 8) | \
+
+45 (((
+__ut16_t
+)(
+x
+& 0x00ff<< 8)))
+
+ )
+
+47 
+ #__DARWIN_OSSwCڡI32
+(
+x
+) \
+
+48 ((
+__ut32_t
+)((((__ut32_t)(
+x
+) & 0xff000000) >> 24) | \
+
+49 (((
+__ut32_t
+)(
+x
+) & 0x00ff0000) >> 8) | \
+
+50 (((
+__ut32_t
+)(
+x
+) & 0x0000ff00) << 8) | \
+
+51 (((
+__ut32_t
+)(
+x
+& 0x000000ff<< 24)))
+
+ )
+
+53 
+ #__DARWIN_OSSwCڡI64
+(
+x
+) \
+
+54 ((
+__ut64_t
+)((((__ut64_t)(
+x
+) & 0xff00000000000000ULL) >> 56) | \
+
+55 (((
+__ut64_t
+)(
+x
+) & 0x00ff000000000000ULL) >> 40) | \
+
+56 (((
+__ut64_t
+)(
+x
+) & 0x0000ff0000000000ULL) >> 24) | \
+
+57 (((
+__ut64_t
+)(
+x
+) & 0x000000ff00000000ULL) >> 8) | \
+
+58 (((
+__ut64_t
+)(
+x
+) & 0x00000000ff000000ULL) << 8) | \
+
+59 (((
+__ut64_t
+)(
+x
+) & 0x0000000000ff0000ULL) << 24) | \
+
+60 (((
+__ut64_t
+)(
+x
+) & 0x000000000000ff00ULL) << 40) | \
+
+61 (((
+__ut64_t
+)(
+x
+& 0x00000000000000ffULL<< 56)))
+
+ )
+
+63 #i
+defed
+(
+__GNUC__
+)
+
+65 #i
+defed
+(
+__i386__
+|| defed(
+__x86_64__
+)
+
+66 
+ ~<libkn/i386/_OSByOrd.h
+>
+
+69 #i
+defed
+(
+__m__
+)
+
+70 
+ ~<libkn/m/OSByOrd.h
+>
+
+74 
+ #__DARWIN_OSSwI16
+(
+x
+) \
+
+75 (
+ `__but_cڡt_p
+(
+x
+?
+ `__DARWIN_OSSwCڡI16
+(x:
+ `_OSSwI16
+(x))
+
+ )
+
+77 
+ #__DARWIN_OSSwI32
+(
+x
+) \
+
+78 (
+ `__but_cڡt_p
+(
+x
+?
+ `__DARWIN_OSSwCڡI32
+(x:
+ `_OSSwI32
+(x))
+
+ )
+
+80 
+ #__DARWIN_OSSwI64
+(
+x
+) \
+
+81 (
+ `__but_cڡt_p
+(
+x
+?
+ `__DARWIN_OSSwCڡI64
+(x:
+ `_OSSwI64
+(x))
+
+ )
+
+85 #i
+defed
+(
+__i386__
+|| defed(
+__x86_64__
+)
+
+87 #i!
+defed
+(
+__DARWIN_OS_INLINE
+)
+
+88 #i
+defed
+(
+__STDC_VERSION__
+) && __STDC_VERSION__ >= 199901L
+
+89 
+ #__DARWIN_OS_INLINE
+ 
+le
+
+
+ )
+
+90 #i
+defed
+(
+__MWERKS__
+|| defed(
+__lulus
+)
+
+91 
+ #__DARWIN_OS_INLINE
+ 
+le
+
+
+ )
+
+93 
+ #__DARWIN_OS_INLINE
+ 
+__le__
+
+
+ )
+
+97
+__DARWIN_OS_INLINE
+
+
+98
+ut16_t
+
+
+99
+ $_OSSwI16
+(
+
+100
+ut16_t
+
+da
+
+
+103 
+ `__DARWIN_OSSwCڡI16
+(
+da
+);
+
+104
+ }
+}
+
+106
+__DARWIN_OS_INLINE
+
+
+107
+ut32_t
+
+
+108
+ $_OSSwI32
+(
+
+109
+ut32_t
+
+da
+
+
+112 
+ `__DARWIN_OSSwCڡI32
+(
+da
+);
+
+113
+ }
+}
+
+115
+__DARWIN_OS_INLINE
+
+
+116
+ut64_t
+
+
+117
+ $_OSSwI64
+(
+
+118
+ut64_t
+
+da
+
+
+121 
+ `__DARWIN_OSSwCڡI64
+(
+da
+);
+
+122
+ }
+}
+
+125 
+ #__DARWIN_OSSwI16
+(
+x
+
+ `_OSSwI16
+(x)
+
+ )
+
+127 
+ #__DARWIN_OSSwI32
+(
+x
+
+ `_OSSwI32
+(x)
+
+ )
+
+129 
+ #__DARWIN_OSSwI64
+(
+x
+
+ `_OSSwI64
+(x)
+
+ )
+
+ @/usr/include/mach/i386/_structs.h
+
+32 #idef
+_MACH_I386__STRUCTS_H_
+
+
+33 
+ #_MACH_I386__STRUCTS_H_
+
+
+ )
+
+41 #i
+__DARWIN_UNIX03
+
+
+42 
+ #_STRUCT_X86_THREAD_STATE32
+ 
+__dw_i386_thad_e
+
+
+ )
+
+43
+ g_STRUCT_X86_THREAD_STATE32
+
+
+45 
+ g__x
+;
+
+46 
+ g__ebx
+;
+
+47 
+ g__ecx
+;
+
+48 
+ g__edx
+;
+
+49 
+ g__edi
+;
+
+50 
+ g__esi
+;
+
+51 
+ g__ebp
+;
+
+52 
+ g__e
+;
+
+53 
+ g__ss
+;
+
+54 
+ g__eags
+;
+
+55 
+ g__e
+;
+
+56 
+ g__cs
+;
+
+57 
+ g__ds
+;
+
+58 
+ g__es
+;
+
+59 
+ g__fs
+;
+
+60 
+ g__gs
+;
+
+63 
+ #_STRUCT_X86_THREAD_STATE32
+ 
+i386_thad_e
+
+
+ )
+
+64
+ g_STRUCT_X86_THREAD_STATE32
+
+
+66 
+ gx
+;
+
+67 
+ gebx
+;
+
+68 
+ gecx
+;
+
+69 
+ gedx
+;
+
+70 
+ gedi
+;
+
+71 
+ gesi
+;
+
+72 
+ gebp
+;
+
+73 
+ ge
+;
+
+74 
+ gss
+;
+
+75 
+ geags
+;
+
+76 
+ ge
+;
+
+77 
+ gcs
+;
+
+78 
+ gds
+;
+
+79 
+ ges
+;
+
+80 
+ gfs
+;
+
+81 
+ ggs
+;
+
+87 #i
+__DARWIN_UNIX03
+
+
+88 
+ #_STRUCT_FP_CONTROL
+ 
+__dw__cڌ
+
+
+ )
+
+89
+ g_STRUCT_FP_CONTROL
+
+
+91 
+ g__vid
+ :1,
+
+92
+ g__dm
+ :1,
+
+93
+ g__zdiv
+ :1,
+
+94
+ g__ovr
+ :1,
+
+95
+ g__und
+ :1,
+
+96
+ g__ecis
+ :1,
+
+98
+ g__pc
+ :2,
+
+99 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+100 
+ #FP_PREC_24B
+ 0
+
+ )
+
+101 
+ #FP_PREC_53B
+ 2
+
+ )
+
+102 
+ #FP_PREC_64B
+ 3
+
+ )
+
+104
+ g__rc
+ :2,
+
+105 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+106 
+ #FP_RND_NEAR
+ 0
+
+ )
+
+107 
+ #FP_RND_DOWN
+ 1
+
+ )
+
+108 
+ #FP_RND_UP
+ 2
+
+ )
+
+109 
+ #FP_CHOP
+ 3
+
+ )
+
+114 
+_STRUCT_FP_CONTROL
+
+ t__dw__cڌ_t
+;
+
+116 
+ #_STRUCT_FP_CONTROL
+ 
+_cڌ
+
+
+ )
+
+117
+ g_STRUCT_FP_CONTROL
+
+
+119 
+ gvid
+ :1,
+
+120
+ gdm
+ :1,
+
+121
+ gzdiv
+ :1,
+
+122
+ govr
+ :1,
+
+123
+ gund
+ :1,
+
+124
+ gecis
+ :1,
+
+126
+ gpc
+ :2,
+
+127 
+ #FP_PREC_24B
+ 0
+
+ )
+
+128 
+ #FP_PREC_53B
+ 2
+
+ )
+
+129 
+ #FP_PREC_64B
+ 3
+
+ )
+
+130
+ grc
+ :2,
+
+131 
+ #FP_RND_NEAR
+ 0
+
+ )
+
+132 
+ #FP_RND_DOWN
+ 1
+
+ )
+
+133 
+ #FP_RND_UP
+ 2
+
+ )
+
+134 
+ #FP_CHOP
+ 3
+
+ )
+
+138 
+_STRUCT_FP_CONTROL
+
+ t_cڌ_t
+;
+
+145 #i
+__DARWIN_UNIX03
+
+
+146 
+ #_STRUCT_FP_STATUS
+ 
+__dw__us
+
+
+ )
+
+147
+ g_STRUCT_FP_STATUS
+
+
+149 
+ g__vid
+ :1,
+
+150
+ g__dm
+ :1,
+
+151
+ g__zdiv
+ :1,
+
+152
+ g__ovr
+ :1,
+
+153
+ g__und
+ :1,
+
+154
+ g__ecis
+ :1,
+
+155
+ g__kt
+ :1,
+
+156
+ g__rsumm
+ :1,
+
+157
+ g__c0
+ :1,
+
+158
+ g__c1
+ :1,
+
+159
+ g__c2
+ :1,
+
+160
+ g__tos
+ :3,
+
+161
+ g__c3
+ :1,
+
+162
+ g__busy
+ :1;
+
+164 
+_STRUCT_FP_STATUS
+
+ t__dw__us_t
+;
+
+166 
+ #_STRUCT_FP_STATUS
+ 
+_us
+
+
+ )
+
+167
+ g_STRUCT_FP_STATUS
+
+
+169 
+ gvid
+ :1,
+
+170
+ gdm
+ :1,
+
+171
+ gzdiv
+ :1,
+
+172
+ govr
+ :1,
+
+173
+ gund
+ :1,
+
+174
+ gecis
+ :1,
+
+175
+ gkt
+ :1,
+
+176
+ grsumm
+ :1,
+
+177
+ gc0
+ :1,
+
+178
+ gc1
+ :1,
+
+179
+ gc2
+ :1,
+
+180
+ gtos
+ :3,
+
+181
+ gc3
+ :1,
+
+182
+ gbusy
+ :1;
+
+184 
+_STRUCT_FP_STATUS
+
+ t_us_t
+;
+
+189 #i
+__DARWIN_UNIX03
+
+
+190 
+ #_STRUCT_MMST_REG
+ 
+__dw_mm_g
+
+
+ )
+
+191
+ g_STRUCT_MMST_REG
+
+
+193 
+ g__mm_g
+[10];
+
+194 
+ g__mm_rv
+[6];
+
+197 
+ #_STRUCT_MMST_REG
+ 
+mm_g
+
+
+ )
+
+198
+ g_STRUCT_MMST_REG
+
+
+200 
+ gmm_g
+[10];
+
+201 
+ gmm_rv
+[6];
+
+208 #i
+__DARWIN_UNIX03
+
+
+209 
+ #_STRUCT_XMM_REG
+ 
+__dw_xmm_g
+
+
+ )
+
+210
+ g_STRUCT_XMM_REG
+
+
+212 
+ g__xmm_g
+[16];
+
+215 
+ #_STRUCT_XMM_REG
+ 
+xmm_g
+
+
+ )
+
+216
+ g_STRUCT_XMM_REG
+
+
+218 
+ gxmm_g
+[16];
+
+226 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+227 
+ #FP_STATE_BYTES
+ 512
+
+ )
+
+230 #i
+__DARWIN_UNIX03
+
+
+231 
+ #_STRUCT_X86_FLOAT_STATE32
+ 
+__dw_i386_t_e
+
+
+ )
+
+232
+ g_STRUCT_X86_FLOAT_STATE32
+
+
+234 
+ g__u_rved
+[2];
+
+235
+_STRUCT_FP_CONTROL
+
+ g__u_fcw
+;
+
+236
+_STRUCT_FP_STATUS
+
+ g__u_fsw
+;
+
+237
+__ut8_t
+
+ g__u_w
+;
+
+238
+__ut8_t
+
+ g__u_rv1
+;
+
+239
+__ut16_t
+
+ g__u_f
+;
+
+240
+__ut32_t
+
+ g__u_
+;
+
+241
+__ut16_t
+
+ g__u_cs
+;
+
+242
+__ut16_t
+
+ g__u_rv2
+;
+
+243
+__ut32_t
+
+ g__u_dp
+;
+
+244
+__ut16_t
+
+ g__u_ds
+;
+
+245
+__ut16_t
+
+ g__u_rv3
+;
+
+246
+__ut32_t
+
+ g__u_mxc
+;
+
+247
+__ut32_t
+
+ g__u_mxcmask
+;
+
+248
+_STRUCT_MMST_REG
+
+ g__u_mm0
+;
+
+249
+_STRUCT_MMST_REG
+
+ g__u_mm1
+;
+
+250
+_STRUCT_MMST_REG
+
+ g__u_mm2
+;
+
+251
+_STRUCT_MMST_REG
+
+ g__u_mm3
+;
+
+252
+_STRUCT_MMST_REG
+
+ g__u_mm4
+;
+
+253
+_STRUCT_MMST_REG
+
+ g__u_mm5
+;
+
+254
+_STRUCT_MMST_REG
+
+ g__u_mm6
+;
+
+255
+_STRUCT_MMST_REG
+
+ g__u_mm7
+;
+
+256
+_STRUCT_XMM_REG
+
+ g__u_xmm0
+;
+
+257
+_STRUCT_XMM_REG
+
+ g__u_xmm1
+;
+
+258
+_STRUCT_XMM_REG
+
+ g__u_xmm2
+;
+
+259
+_STRUCT_XMM_REG
+
+ g__u_xmm3
+;
+
+260
+_STRUCT_XMM_REG
+
+ g__u_xmm4
+;
+
+261
+_STRUCT_XMM_REG
+
+ g__u_xmm5
+;
+
+262
+_STRUCT_XMM_REG
+
+ g__u_xmm6
+;
+
+263
+_STRUCT_XMM_REG
+
+ g__u_xmm7
+;
+
+264 
+ g__u_rv4
+[14*16];
+
+265 
+ g__u_rved1
+;
+
+268 
+ #_STRUCT_X86_FLOAT_STATE32
+ 
+i386_t_e
+
+
+ )
+
+269
+ g_STRUCT_X86_FLOAT_STATE32
+
+
+271 
+ gu_rved
+[2];
+
+272
+_STRUCT_FP_CONTROL
+
+ gu_fcw
+;
+
+273
+_STRUCT_FP_STATUS
+
+ gu_fsw
+;
+
+274
+__ut8_t
+
+ gu_w
+;
+
+275
+__ut8_t
+
+ gu_rv1
+;
+
+276
+__ut16_t
+
+ gu_f
+;
+
+277
+__ut32_t
+
+ gu_
+;
+
+278
+__ut16_t
+
+ gu_cs
+;
+
+279
+__ut16_t
+
+ gu_rv2
+;
+
+280
+__ut32_t
+
+ gu_dp
+;
+
+281
+__ut16_t
+
+ gu_ds
+;
+
+282
+__ut16_t
+
+ gu_rv3
+;
+
+283
+__ut32_t
+
+ gu_mxc
+;
+
+284
+__ut32_t
+
+ gu_mxcmask
+;
+
+285
+_STRUCT_MMST_REG
+
+ gu_mm0
+;
+
+286
+_STRUCT_MMST_REG
+
+ gu_mm1
+;
+
+287
+_STRUCT_MMST_REG
+
+ gu_mm2
+;
+
+288
+_STRUCT_MMST_REG
+
+ gu_mm3
+;
+
+289
+_STRUCT_MMST_REG
+
+ gu_mm4
+;
+
+290
+_STRUCT_MMST_REG
+
+ gu_mm5
+;
+
+291
+_STRUCT_MMST_REG
+
+ gu_mm6
+;
+
+292
+_STRUCT_MMST_REG
+
+ gu_mm7
+;
+
+293
+_STRUCT_XMM_REG
+
+ gu_xmm0
+;
+
+294
+_STRUCT_XMM_REG
+
+ gu_xmm1
+;
+
+295
+_STRUCT_XMM_REG
+
+ gu_xmm2
+;
+
+296
+_STRUCT_XMM_REG
+
+ gu_xmm3
+;
+
+297
+_STRUCT_XMM_REG
+
+ gu_xmm4
+;
+
+298
+_STRUCT_XMM_REG
+
+ gu_xmm5
+;
+
+299
+_STRUCT_XMM_REG
+
+ gu_xmm6
+;
+
+300
+_STRUCT_XMM_REG
+
+ gu_xmm7
+;
+
+301 
+ gu_rv4
+[14*16];
+
+302 
+ gu_rved1
+;
+
+306 #i
+__DARWIN_UNIX03
+
+
+307 
+ #_STRUCT_X86_EXCEPTION_STATE32
+ 
+__dw_i386_exi_e
+
+
+ )
+
+308
+ g_STRUCT_X86_EXCEPTION_STATE32
+
+
+310 
+ g__no
+;
+
+311 
+ g__r
+;
+
+312 
+ g__uvaddr
+;
+
+315 
+ #_STRUCT_X86_EXCEPTION_STATE32
+ 
+i386_exi_e
+
+
+ )
+
+316
+ g_STRUCT_X86_EXCEPTION_STATE32
+
+
+318 
+ gno
+;
+
+319 
+ gr
+;
+
+320 
+ guvaddr
+;
+
+324 #i
+__DARWIN_UNIX03
+
+
+325 
+ #_STRUCT_X86_DEBUG_STATE32
+ 
+__dw_x86_debug_e32
+
+
+ )
+
+326
+ g_STRUCT_X86_DEBUG_STATE32
+
+
+328 
+ g__dr0
+;
+
+329 
+ g__dr1
+;
+
+330 
+ g__dr2
+;
+
+331 
+ g__dr3
+;
+
+332 
+ g__dr4
+;
+
+333 
+ g__dr5
+;
+
+334 
+ g__dr6
+;
+
+335 
+ g__dr7
+;
+
+338 
+ #_STRUCT_X86_DEBUG_STATE32
+ 
+x86_debug_e32
+
+
+ )
+
+339
+ g_STRUCT_X86_DEBUG_STATE32
+
+
+341 
+ gdr0
+;
+
+342 
+ gdr1
+;
+
+343 
+ gdr2
+;
+
+344 
+ gdr3
+;
+
+345 
+ gdr4
+;
+
+346 
+ gdr5
+;
+
+347 
+ gdr6
+;
+
+348 
+ gdr7
+;
+
+356 #i
+__DARWIN_UNIX03
+
+
+357 
+ #_STRUCT_X86_THREAD_STATE64
+ 
+__dw_x86_thad_e64
+
+
+ )
+
+358
+ g_STRUCT_X86_THREAD_STATE64
+
+
+360
+__ut64_t
+
+ g__x
+;
+
+361
+__ut64_t
+
+ g__rbx
+;
+
+362
+__ut64_t
+
+ g__rcx
+;
+
+363
+__ut64_t
+
+ g__rdx
+;
+
+364
+__ut64_t
+
+ g__rdi
+;
+
+365
+__ut64_t
+
+ g__rsi
+;
+
+366
+__ut64_t
+
+ g__rbp
+;
+
+367
+__ut64_t
+
+ g__r
+;
+
+368
+__ut64_t
+
+ g__r8
+;
+
+369
+__ut64_t
+
+ g__r9
+;
+
+370
+__ut64_t
+
+ g__r10
+;
+
+371
+__ut64_t
+
+ g__r11
+;
+
+372
+__ut64_t
+
+ g__r12
+;
+
+373
+__ut64_t
+
+ g__r13
+;
+
+374
+__ut64_t
+
+ g__r14
+;
+
+375
+__ut64_t
+
+ g__r15
+;
+
+376
+__ut64_t
+
+ g__r
+;
+
+377
+__ut64_t
+
+ g__rags
+;
+
+378
+__ut64_t
+
+ g__cs
+;
+
+379
+__ut64_t
+
+ g__fs
+;
+
+380
+__ut64_t
+
+ g__gs
+;
+
+383 
+ #_STRUCT_X86_THREAD_STATE64
+ 
+x86_thad_e64
+
+
+ )
+
+384
+ g_STRUCT_X86_THREAD_STATE64
+
+
+386
+__ut64_t
+
+ gx
+;
+
+387
+__ut64_t
+
+ grbx
+;
+
+388
+__ut64_t
+
+ grcx
+;
+
+389
+__ut64_t
+
+ grdx
+;
+
+390
+__ut64_t
+
+ grdi
+;
+
+391
+__ut64_t
+
+ grsi
+;
+
+392
+__ut64_t
+
+ grbp
+;
+
+393
+__ut64_t
+
+ gr
+;
+
+394
+__ut64_t
+
+ gr8
+;
+
+395
+__ut64_t
+
+ gr9
+;
+
+396
+__ut64_t
+
+ gr10
+;
+
+397
+__ut64_t
+
+ gr11
+;
+
+398
+__ut64_t
+
+ gr12
+;
+
+399
+__ut64_t
+
+ gr13
+;
+
+400
+__ut64_t
+
+ gr14
+;
+
+401
+__ut64_t
+
+ gr15
+;
+
+402
+__ut64_t
+
+ gr
+;
+
+403
+__ut64_t
+
+ grags
+;
+
+404
+__ut64_t
+
+ gcs
+;
+
+405
+__ut64_t
+
+ gfs
+;
+
+406
+__ut64_t
+
+ ggs
+;
+
+411 #i
+__DARWIN_UNIX03
+
+
+412 
+ #_STRUCT_X86_FLOAT_STATE64
+ 
+__dw_x86_t_e64
+
+
+ )
+
+413
+ g_STRUCT_X86_FLOAT_STATE64
+
+
+415 
+ g__u_rved
+[2];
+
+416
+_STRUCT_FP_CONTROL
+
+ g__u_fcw
+;
+
+417
+_STRUCT_FP_STATUS
+
+ g__u_fsw
+;
+
+418
+__ut8_t
+
+ g__u_w
+;
+
+419
+__ut8_t
+
+ g__u_rv1
+;
+
+420
+__ut16_t
+
+ g__u_f
+;
+
+423
+__ut32_t
+
+ g__u_
+;
+
+424
+__ut16_t
+
+ g__u_cs
+;
+
+426
+__ut16_t
+
+ g__u_rv2
+;
+
+429
+__ut32_t
+
+ g__u_dp
+;
+
+430
+__ut16_t
+
+ g__u_ds
+;
+
+432
+__ut16_t
+
+ g__u_rv3
+;
+
+433
+__ut32_t
+
+ g__u_mxc
+;
+
+434
+__ut32_t
+
+ g__u_mxcmask
+;
+
+435
+_STRUCT_MMST_REG
+
+ g__u_mm0
+;
+
+436
+_STRUCT_MMST_REG
+
+ g__u_mm1
+;
+
+437
+_STRUCT_MMST_REG
+
+ g__u_mm2
+;
+
+438
+_STRUCT_MMST_REG
+
+ g__u_mm3
+;
+
+439
+_STRUCT_MMST_REG
+
+ g__u_mm4
+;
+
+440
+_STRUCT_MMST_REG
+
+ g__u_mm5
+;
+
+441
+_STRUCT_MMST_REG
+
+ g__u_mm6
+;
+
+442
+_STRUCT_MMST_REG
+
+ g__u_mm7
+;
+
+443
+_STRUCT_XMM_REG
+
+ g__u_xmm0
+;
+
+444
+_STRUCT_XMM_REG
+
+ g__u_xmm1
+;
+
+445
+_STRUCT_XMM_REG
+
+ g__u_xmm2
+;
+
+446
+_STRUCT_XMM_REG
+
+ g__u_xmm3
+;
+
+447
+_STRUCT_XMM_REG
+
+ g__u_xmm4
+;
+
+448
+_STRUCT_XMM_REG
+
+ g__u_xmm5
+;
+
+449
+_STRUCT_XMM_REG
+
+ g__u_xmm6
+;
+
+450
+_STRUCT_XMM_REG
+
+ g__u_xmm7
+;
+
+451
+_STRUCT_XMM_REG
+
+ g__u_xmm8
+;
+
+452
+_STRUCT_XMM_REG
+
+ g__u_xmm9
+;
+
+453
+_STRUCT_XMM_REG
+
+ g__u_xmm10
+;
+
+454
+_STRUCT_XMM_REG
+
+ g__u_xmm11
+;
+
+455
+_STRUCT_XMM_REG
+
+ g__u_xmm12
+;
+
+456
+_STRUCT_XMM_REG
+
+ g__u_xmm13
+;
+
+457
+_STRUCT_XMM_REG
+
+ g__u_xmm14
+;
+
+458
+_STRUCT_XMM_REG
+
+ g__u_xmm15
+;
+
+459 
+ g__u_rv4
+[6*16];
+
+460 
+ g__u_rved1
+;
+
+463 
+ #_STRUCT_X86_FLOAT_STATE64
+ 
+x86_t_e64
+
+
+ )
+
+464
+ g_STRUCT_X86_FLOAT_STATE64
+
+
+466 
+ gu_rved
+[2];
+
+467
+_STRUCT_FP_CONTROL
+
+ gu_fcw
+;
+
+468
+_STRUCT_FP_STATUS
+
+ gu_fsw
+;
+
+469
+__ut8_t
+
+ gu_w
+;
+
+470
+__ut8_t
+
+ gu_rv1
+;
+
+471
+__ut16_t
+
+ gu_f
+;
+
+474
+__ut32_t
+
+ gu_
+;
+
+475
+__ut16_t
+
+ gu_cs
+;
+
+477
+__ut16_t
+
+ gu_rv2
+;
+
+480
+__ut32_t
+
+ gu_dp
+;
+
+481
+__ut16_t
+
+ gu_ds
+;
+
+483
+__ut16_t
+
+ gu_rv3
+;
+
+484
+__ut32_t
+
+ gu_mxc
+;
+
+485
+__ut32_t
+
+ gu_mxcmask
+;
+
+486
+_STRUCT_MMST_REG
+
+ gu_mm0
+;
+
+487
+_STRUCT_MMST_REG
+
+ gu_mm1
+;
+
+488
+_STRUCT_MMST_REG
+
+ gu_mm2
+;
+
+489
+_STRUCT_MMST_REG
+
+ gu_mm3
+;
+
+490
+_STRUCT_MMST_REG
+
+ gu_mm4
+;
+
+491
+_STRUCT_MMST_REG
+
+ gu_mm5
+;
+
+492
+_STRUCT_MMST_REG
+
+ gu_mm6
+;
+
+493
+_STRUCT_MMST_REG
+
+ gu_mm7
+;
+
+494
+_STRUCT_XMM_REG
+
+ gu_xmm0
+;
+
+495
+_STRUCT_XMM_REG
+
+ gu_xmm1
+;
+
+496
+_STRUCT_XMM_REG
+
+ gu_xmm2
+;
+
+497
+_STRUCT_XMM_REG
+
+ gu_xmm3
+;
+
+498
+_STRUCT_XMM_REG
+
+ gu_xmm4
+;
+
+499
+_STRUCT_XMM_REG
+
+ gu_xmm5
+;
+
+500
+_STRUCT_XMM_REG
+
+ gu_xmm6
+;
+
+501
+_STRUCT_XMM_REG
+
+ gu_xmm7
+;
+
+502
+_STRUCT_XMM_REG
+
+ gu_xmm8
+;
+
+503
+_STRUCT_XMM_REG
+
+ gu_xmm9
+;
+
+504
+_STRUCT_XMM_REG
+
+ gu_xmm10
+;
+
+505
+_STRUCT_XMM_REG
+
+ gu_xmm11
+;
+
+506
+_STRUCT_XMM_REG
+
+ gu_xmm12
+;
+
+507
+_STRUCT_XMM_REG
+
+ gu_xmm13
+;
+
+508
+_STRUCT_XMM_REG
+
+ gu_xmm14
+;
+
+509
+_STRUCT_XMM_REG
+
+ gu_xmm15
+;
+
+510 
+ gu_rv4
+[6*16];
+
+511 
+ gu_rved1
+;
+
+515 #i
+__DARWIN_UNIX03
+
+
+516 
+ #_STRUCT_X86_EXCEPTION_STATE64
+ 
+__dw_x86_exi_e64
+
+
+ )
+
+517
+ g_STRUCT_X86_EXCEPTION_STATE64
+
+
+519 
+ g__no
+;
+
+520 
+ g__r
+;
+
+521
+__ut64_t
+
+ g__uvaddr
+;
+
+524 
+ #_STRUCT_X86_EXCEPTION_STATE64
+ 
+x86_exi_e64
+
+
+ )
+
+525
+ g_STRUCT_X86_EXCEPTION_STATE64
+
+
+527 
+ gno
+;
+
+528 
+ gr
+;
+
+529
+__ut64_t
+
+ guvaddr
+;
+
+533 #i
+__DARWIN_UNIX03
+
+
+534 
+ #_STRUCT_X86_DEBUG_STATE64
+ 
+__dw_x86_debug_e64
+
+
+ )
+
+535
+ g_STRUCT_X86_DEBUG_STATE64
+
+
+537
+__ut64_t
+
+ g__dr0
+;
+
+538
+__ut64_t
+
+ g__dr1
+;
+
+539
+__ut64_t
+
+ g__dr2
+;
+
+540
+__ut64_t
+
+ g__dr3
+;
+
+541
+__ut64_t
+
+ g__dr4
+;
+
+542
+__ut64_t
+
+ g__dr5
+;
+
+543
+__ut64_t
+
+ g__dr6
+;
+
+544
+__ut64_t
+
+ g__dr7
+;
+
+547 
+ #_STRUCT_X86_DEBUG_STATE64
+ 
+x86_debug_e64
+
+
+ )
+
+548
+ g_STRUCT_X86_DEBUG_STATE64
+
+
+550
+__ut64_t
+
+ gdr0
+;
+
+551
+__ut64_t
+
+ gdr1
+;
+
+552
+__ut64_t
+
+ gdr2
+;
+
+553
+__ut64_t
+
+ gdr3
+;
+
+554
+__ut64_t
+
+ gdr4
+;
+
+555
+__ut64_t
+
+ gdr5
+;
+
+556
+__ut64_t
+
+ gdr6
+;
+
+557
+__ut64_t
+
+ gdr7
+;
+
+ @/usr/include/mach/ppc/_structs.h
+
+32 #idef
+_MACH_PPC__STRUCTS_H_
+
+
+33 
+ #_MACH_PPC__STRUCTS_H_
+
+
+ )
+
+35 
+ ~<sys/cdefs.h
+>
+
+43 #i
+__DARWIN_UNIX03
+
+
+44 
+ #_STRUCT_PPC_THREAD_STATE
+ 
+__dw_c_thad_e
+
+
+ )
+
+45
+ g_STRUCT_PPC_THREAD_STATE
+
+
+47 
+ g__r0
+;
+
+48 
+ g__r1
+;
+
+49 
+ g__r0
+;
+
+50 
+ g__r1
+;
+
+51 
+ g__r2
+;
+
+52 
+ g__r3
+;
+
+53 
+ g__r4
+;
+
+54 
+ g__r5
+;
+
+55 
+ g__r6
+;
+
+56 
+ g__r7
+;
+
+57 
+ g__r8
+;
+
+58 
+ g__r9
+;
+
+59 
+ g__r10
+;
+
+60 
+ g__r11
+;
+
+61 
+ g__r12
+;
+
+62 
+ g__r13
+;
+
+63 
+ g__r14
+;
+
+64 
+ g__r15
+;
+
+65 
+ g__r16
+;
+
+66 
+ g__r17
+;
+
+67 
+ g__r18
+;
+
+68 
+ g__r19
+;
+
+69 
+ g__r20
+;
+
+70 
+ g__r21
+;
+
+71 
+ g__r22
+;
+
+72 
+ g__r23
+;
+
+73 
+ g__r24
+;
+
+74 
+ g__r25
+;
+
+75 
+ g__r26
+;
+
+76 
+ g__r27
+;
+
+77 
+ g__r28
+;
+
+78 
+ g__r29
+;
+
+79 
+ g__r30
+;
+
+80 
+ g__r31
+;
+
+82 
+ g__
+;
+
+83 
+ g__x
+;
+
+84 
+ g__
+;
+
+85 
+ g__r
+;
+
+86 
+ g__mq
+;
+
+88 
+ g__vrve
+;
+
+91 
+ #_STRUCT_PPC_THREAD_STATE
+ 
+c_thad_e
+
+
+ )
+
+92
+ g_STRUCT_PPC_THREAD_STATE
+
+
+94 
+ gr0
+;
+
+95 
+ gr1
+;
+
+96 
+ gr0
+;
+
+97 
+ gr1
+;
+
+98 
+ gr2
+;
+
+99 
+ gr3
+;
+
+100 
+ gr4
+;
+
+101 
+ gr5
+;
+
+102 
+ gr6
+;
+
+103 
+ gr7
+;
+
+104 
+ gr8
+;
+
+105 
+ gr9
+;
+
+106 
+ gr10
+;
+
+107 
+ gr11
+;
+
+108 
+ gr12
+;
+
+109 
+ gr13
+;
+
+110 
+ gr14
+;
+
+111 
+ gr15
+;
+
+112 
+ gr16
+;
+
+113 
+ gr17
+;
+
+114 
+ gr18
+;
+
+115 
+ gr19
+;
+
+116 
+ gr20
+;
+
+117 
+ gr21
+;
+
+118 
+ gr22
+;
+
+119 
+ gr23
+;
+
+120 
+ gr24
+;
+
+121 
+ gr25
+;
+
+122 
+ gr26
+;
+
+123 
+ gr27
+;
+
+124 
+ gr28
+;
+
+125 
+ gr29
+;
+
+126 
+ gr30
+;
+
+127 
+ gr31
+;
+
+129 
+ g
+;
+
+130 
+ gx
+;
+
+131 
+ g
+;
+
+132 
+ gr
+;
+
+133 
+ gmq
+;
+
+135 
+ gvrve
+;
+
+139 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+141 #agm
+ck
+(4)
+
+143 #i
+__DARWIN_UNIX03
+
+
+144 
+ #_STRUCT_PPC_THREAD_STATE64
+ 
+__dw_c_thad_e64
+
+
+ )
+
+145
+ g_STRUCT_PPC_THREAD_STATE64
+
+
+147 
+ g__r0
+;
+
+148 
+ g__r1
+;
+
+149 
+ g__r0
+;
+
+150 
+ g__r1
+;
+
+151 
+ g__r2
+;
+
+152 
+ g__r3
+;
+
+153 
+ g__r4
+;
+
+154 
+ g__r5
+;
+
+155 
+ g__r6
+;
+
+156 
+ g__r7
+;
+
+157 
+ g__r8
+;
+
+158 
+ g__r9
+;
+
+159 
+ g__r10
+;
+
+160 
+ g__r11
+;
+
+161 
+ g__r12
+;
+
+162 
+ g__r13
+;
+
+163 
+ g__r14
+;
+
+164 
+ g__r15
+;
+
+165 
+ g__r16
+;
+
+166 
+ g__r17
+;
+
+167 
+ g__r18
+;
+
+168 
+ g__r19
+;
+
+169 
+ g__r20
+;
+
+170 
+ g__r21
+;
+
+171 
+ g__r22
+;
+
+172 
+ g__r23
+;
+
+173 
+ g__r24
+;
+
+174 
+ g__r25
+;
+
+175 
+ g__r26
+;
+
+176 
+ g__r27
+;
+
+177 
+ g__r28
+;
+
+178 
+ g__r29
+;
+
+179 
+ g__r30
+;
+
+180 
+ g__r31
+;
+
+182 
+ g__
+;
+
+183 
+ g__x
+;
+
+184 
+ g__
+;
+
+185 
+ g__r
+;
+
+187 
+ g__vrve
+;
+
+190 
+ #_STRUCT_PPC_THREAD_STATE64
+ 
+c_thad_e64
+
+
+ )
+
+191
+ g_STRUCT_PPC_THREAD_STATE64
+
+
+193 
+ gr0
+;
+
+194 
+ gr1
+;
+
+195 
+ gr0
+;
+
+196 
+ gr1
+;
+
+197 
+ gr2
+;
+
+198 
+ gr3
+;
+
+199 
+ gr4
+;
+
+200 
+ gr5
+;
+
+201 
+ gr6
+;
+
+202 
+ gr7
+;
+
+203 
+ gr8
+;
+
+204 
+ gr9
+;
+
+205 
+ gr10
+;
+
+206 
+ gr11
+;
+
+207 
+ gr12
+;
+
+208 
+ gr13
+;
+
+209 
+ gr14
+;
+
+210 
+ gr15
+;
+
+211 
+ gr16
+;
+
+212 
+ gr17
+;
+
+213 
+ gr18
+;
+
+214 
+ gr19
+;
+
+215 
+ gr20
+;
+
+216 
+ gr21
+;
+
+217 
+ gr22
+;
+
+218 
+ gr23
+;
+
+219 
+ gr24
+;
+
+220 
+ gr25
+;
+
+221 
+ gr26
+;
+
+222 
+ gr27
+;
+
+223 
+ gr28
+;
+
+224 
+ gr29
+;
+
+225 
+ gr30
+;
+
+226 
+ gr31
+;
+
+228 
+ g
+;
+
+229 
+ gx
+;
+
+230 
+ g
+;
+
+231 
+ gr
+;
+
+233 
+ gvrve
+;
+
+237 #agm
+ck
+()
+
+243 #i
+__DARWIN_UNIX03
+
+
+244 
+ #_STRUCT_PPC_FLOAT_STATE
+ 
+__dw_c_t_e
+
+
+ )
+
+245
+ g_STRUCT_PPC_FLOAT_STATE
+
+
+247 
+ g__gs
+[32];
+
+249 
+ g__s_d
+;
+
+250 
+ g__s
+;
+
+253 
+ #_STRUCT_PPC_FLOAT_STATE
+ 
+c_t_e
+
+
+ )
+
+254
+ g_STRUCT_PPC_FLOAT_STATE
+
+
+256 
+ ggs
+[32];
+
+258 
+ gs_d
+;
+
+259 
+ gs
+;
+
+263 #agm
+ck
+(4)
+
+265 #i
+__DARWIN_UNIX03
+
+
+266 
+ #_STRUCT_PPC_VECTOR_STATE
+ 
+__dw_c_ve_e
+
+
+ )
+
+267
+ g_STRUCT_PPC_VECTOR_STATE
+
+
+269 #i
+defed
+(
+__LP64__
+)
+
+270 
+ g__ve_vr
+[32][4];
+
+271 
+ g__ve_vs
+[4];
+
+273 
+ g__ve_vr
+[32][4];
+
+274 
+ g__ve_vs
+[4];
+
+276 
+ g__ve_d5
+[4];
+
+277 
+ g__ve_vrvid
+;
+
+278 
+ g__ve_d6
+[7];
+
+281 
+ #_STRUCT_PPC_VECTOR_STATE
+ 
+c_ve_e
+
+
+ )
+
+282
+ g_STRUCT_PPC_VECTOR_STATE
+
+
+284 #i
+defed
+(
+__LP64__
+)
+
+285 
+ gve_vr
+[32][4];
+
+286 
+ gve_vs
+[4];
+
+288 
+ gve_vr
+[32][4];
+
+289 
+ gve_vs
+[4];
+
+291 
+ gve_d5
+[4];
+
+292 
+ gve_vrvid
+;
+
+293 
+ gve_d6
+[7];
+
+297 #agm
+ck
+()
+
+316 #agm
+ck
+(4)
+
+318 #i
+__DARWIN_UNIX03
+
+
+319 
+ #_STRUCT_PPC_EXCEPTION_STATE
+ 
+__dw_c_exi_e
+
+
+ )
+
+320
+ g_STRUCT_PPC_EXCEPTION_STATE
+
+
+322 #i
+defed
+(
+__LP64__
+)
+
+323 
+ g__d
+;
+
+324 
+ g__dsi
+;
+
+325 
+ g__exi
+;
+
+326 
+ g__d0
+;
+
+327 
+ g__d1
+[4];
+
+329 
+ g__d
+;
+
+330 
+ g__dsi
+;
+
+331 
+ g__exi
+;
+
+332 
+ g__d0
+;
+
+333 
+ g__d1
+[4];
+
+337 
+ #_STRUCT_PPC_EXCEPTION_STATE
+ 
+c_exi_e
+
+
+ )
+
+338
+ g_STRUCT_PPC_EXCEPTION_STATE
+
+
+340 #i
+defed
+(
+__LP64__
+)
+
+341 
+ gd
+;
+
+342 
+ gdsi
+;
+
+343 
+ gexi
+;
+
+344 
+ gd0
+;
+
+345 
+ gd1
+[4];
+
+347 
+ gd
+;
+
+348 
+ gdsi
+;
+
+349 
+ gexi
+;
+
+350 
+ gd0
+;
+
+351 
+ gd1
+[4];
+
+356 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+357 #i
+__DARWIN_UNIX03
+
+
+358 
+ #_STRUCT_PPC_EXCEPTION_STATE64
+ 
+__dw_c_exi_e64
+
+
+ )
+
+359
+ g_STRUCT_PPC_EXCEPTION_STATE64
+
+
+361 
+ g__d
+;
+
+362 #i
+defed
+(
+__LP64__
+)
+
+363 
+ g__dsi
+;
+
+364 
+ g__exi
+;
+
+365 
+ g__d1
+[4];
+
+367 
+ g__dsi
+;
+
+368 
+ g__exi
+;
+
+369 
+ g__d1
+[4];
+
+373 
+ #_STRUCT_PPC_EXCEPTION_STATE64
+ 
+c_exi_e64
+
+
+ )
+
+374
+ g_STRUCT_PPC_EXCEPTION_STATE64
+
+
+376 
+ gd
+;
+
+377 #i
+defed
+(
+__LP64__
+)
+
+378 
+ gdsi
+;
+
+379 
+ gexi
+;
+
+380 
+ gd1
+[4];
+
+382 
+ gdsi
+;
+
+383 
+ gexi
+;
+
+384 
+ gd1
+[4];
+
+390 #agm
+ck
+()
+
+ @/usr/include/ppc/signal.h
+
+32 #idef
+_PPC_SIGNAL_H_
+
+
+33 
+ #_PPC_SIGNAL_H_
+ 1
+
+ )
+
+35 
+ ~<sys/cdefs.h
+>
+
+37 #ide
+_ANSI_SOURCE
+
+
+39 
+ tsig_omic_t
+;
+
+41 
+ ~<sys/pits.h
+>
+
+43 #ifde
+__APPLE_API_OBSOLETE
+
+
+45 #i!
+defed
+(
+_POSIX_C_SOURCE
+|| defed(
+_DARWIN_C_SOURCE
+)
+
+47 
+ #__ed_ru_sigcڋxt
+
+
+ )
+
+48 
+ #__ed_ru_sigcڋxt32
+
+
+ )
+
+49 
+ #__ed_ru_sigcڋxt64
+
+
+ )
+
+50 
+ ~<c/_rus.h
+>
+
+55 
+ #SV_SAVE_REGS
+ 0x1000
+
+ )
+
+69
+ mREGS_SAVED_NONE
+,
+
+70
+ mREGS_SAVED_CALLER
+,
+
+73
+ mREGS_SAVED_ALL
+
+
+74 }
+ tgs_ved_t
+;
+
+ @/usr/include/libkern/i386/_OSByteOrder.h
+
+29 #ide
+_OS__OSBYTEORDERI386_H
+
+
+30 
+ #_OS__OSBYTEORDERI386_H
+
+
+ )
+
+32 #i!
+defed
+(
+__DARWIN_OS_INLINE
+)
+
+33 #i
+defed
+(
+__STDC_VERSION__
+) && __STDC_VERSION__ >= 199901L
+
+34 
+ #__DARWIN_OS_INLINE
+ 
+le
+
+
+ )
+
+35 #i
+defed
+(
+__MWERKS__
+|| defed(
+__lulus
+)
+
+36 
+ #__DARWIN_OS_INLINE
+ 
+le
+
+
+ )
+
+38 
+ #__DARWIN_OS_INLINE
+ 
+__le__
+
+
+ )
+
+44
+__DARWIN_OS_INLINE
+
+
+45
+__ut16_t
+
+
+46
+ $_OSSwI16
+(
+
+47
+__ut16_t
+
+_da
+
+
+50  ((
+_da
+ << 8) | (_data >> 8));
+
+51
+ }
+}
+
+53
+__DARWIN_OS_INLINE
+
+
+54
+__ut32_t
+
+
+55
+ $_OSSwI32
+(
+
+56
+__ut32_t
+
+_da
+
+
+59
+ `__asm__
+ ("bsw %0" : "+r" (
+_da
+));
+
+60 
+_da
+;
+
+61
+ }
+}
+
+63 #i
+defed
+(
+__i386__
+)
+
+64
+__DARWIN_OS_INLINE
+
+
+65
+__ut64_t
+
+
+66
+ $_OSSwI64
+(
+
+67
+__ut64_t
+
+_da
+
+
+70
+ `__asm__
+ ("bswap %%eax\n\t"
+
+73 : "+A" (
+_da
+));
+
+74 
+_da
+;
+
+75
+ }
+}
+
+76 #i
+defed
+(
+__x86_64__
+)
+
+77
+__DARWIN_OS_INLINE
+
+
+78
+__ut64_t
+
+
+79
+ $_OSSwI64
+(
+
+80
+__ut64_t
+
+_da
+
+
+83
+ `__asm__
+ ("bsw %0" : "+r" (
+_da
+));
+
+84 
+_da
+;
+
+85
+ }
+}
+
+87 #r
+Unknown
+
+cheu
+
+
+ @
+1
+.
+1
+/usr/include
+69
+1617
+debug.h
+filterfs.c
+filterfs.h
+lib.c
+lib.h
+lnode.c
+lnode.h
+ncache.c
+ncache.h
+node.c
+node.h
+options.c
+options.h
+/usr/include/dirent.h
+/usr/include/fcntl.h
+/usr/include/stddef.h
+/usr/include/stdio.h
+/usr/include/stdlib.h
+/usr/include/sys/mman.h
+/usr/include/sys/stat.h
+/usr/include/sys/time.h
+/usr/include/sys/types.h
+/usr/include/unistd.h
+/usr/include/_types.h
+/usr/include/_xlocale.h
+/usr/include/alloca.h
+/usr/include/available.h
+/usr/include/machine/endian.h
+/usr/include/machine/types.h
+/usr/include/secure/_stdio.h
+/usr/include/sys/_select.h
+/usr/include/sys/_structs.h
+/usr/include/sys/_types.h
+/usr/include/sys/appleapiopts.h
+/usr/include/sys/cdefs.h
+/usr/include/sys/dirent.h
+/usr/include/sys/fcntl.h
+/usr/include/sys/select.h
+/usr/include/sys/unistd.h
+/usr/include/sys/wait.h
+/usr/include/time.h
+/usr/include/xlocale/_stdio.h
+/usr/include/xlocale/_stdlib.h
+/usr/include/_structs.h
+/usr/include/i386/endian.h
+/usr/include/i386/types.h
+/usr/include/machine/_limits.h
+/usr/include/machine/_structs.h
+/usr/include/machine/_types.h
+/usr/include/ppc/endian.h
+/usr/include/ppc/types.h
+/usr/include/secure/_common.h
+/usr/include/sys/resource.h
+/usr/include/sys/signal.h
+/usr/include/xlocale/_time.h
+/usr/include/i386/_limits.h
+/usr/include/i386/_structs.h
+/usr/include/i386/_types.h
+/usr/include/machine/signal.h
+/usr/include/ppc/_limits.h
+/usr/include/ppc/_structs.h
+/usr/include/ppc/_types.h
+/usr/include/sys/_endian.h
+/usr/include/i386/signal.h
+/usr/include/libkern/_OSByteOrder.h
+/usr/include/mach/i386/_structs.h
+/usr/include/mach/ppc/_structs.h
+/usr/include/ppc/signal.h
+/usr/include/libkern/i386/_OSByteOrder.h
diff --git a/netfs-sample/debug.h b/netfs-sample/debug.h
new file mode 100644
index 00000000..606d7e79
--- /dev/null
+++ b/netfs-sample/debug.h
@@ -0,0 +1,60 @@
+/*----------------------------------------------------------------------------*/
+/*debug.h*/
+/*----------------------------------------------------------------------------*/
+/*Simple facilities for debugging messages*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __DEBUG_H__
+#define __DEBUG_H__
+
+/*----------------------------------------------------------------------------*/
+#include <stdio.h>
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*Print debug messages here*/
+#define DEBUG_OUTPUT "/var/tmp/filterfs.dbg"
+/*----------------------------------------------------------------------------*/
+#ifdef DEBUG
+ /*Initializes the log*/
+# define INIT_LOG() filterfs_dbg = fopen(DEBUG_OUTPUT, "wt")
+ /*Closes the log*/
+# define CLOSE_LOG() fclose(filterfs_dbg)
+ /*Prints a debug message and flushes the debug output*/
+# define LOG_MSG(fmt, args...) {fprintf(filterfs_dbg, fmt"\n", ##args);\
+ fflush(filterfs_dbg);}
+#else
+ /*Remove requests for debugging output*/
+# define INIT_LOG()
+# define CLOSE_LOG()
+# define LOG_MSG(fmt, args...)
+#endif /*DEBUG*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The file to write debugging info to*/
+extern FILE * filterfs_dbg;
+/*----------------------------------------------------------------------------*/
+
+#endif /*__DEBUG_H__*/
diff --git a/netfs-sample/errors b/netfs-sample/errors
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/netfs-sample/errors
diff --git a/netfs-sample/filtered b/netfs-sample/filtered
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/netfs-sample/filtered
diff --git a/netfs-sample/filterfs b/netfs-sample/filterfs
new file mode 100755
index 00000000..012a5b3a
--- /dev/null
+++ b/netfs-sample/filterfs
Binary files differ
diff --git a/netfs-sample/filterfs.c b/netfs-sample/filterfs.c
new file mode 100644
index 00000000..d768e18b
--- /dev/null
+++ b/netfs-sample/filterfs.c
@@ -0,0 +1,1236 @@
+/*----------------------------------------------------------------------------*/
+/*filter.c*/
+/*----------------------------------------------------------------------------*/
+/*The filtering translator*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+#define _GNU_SOURCE 1
+/*----------------------------------------------------------------------------*/
+#include "filterfs.h"
+/*----------------------------------------------------------------------------*/
+#include <error.h>
+#include <argp.h>
+#include <argz.h>
+#include <hurd/netfs.h>
+#include <fcntl.h>
+/*----------------------------------------------------------------------------*/
+#include "debug.h"
+#include "options.h"
+#include "ncache.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*The state modes use in open*/
+#define OPENONLY_STATE_MODES (O_CREAT | O_EXCL | O_NOLINK | O_NOTRANS \
+ | O_NONBLOCK)
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The name of the server*/
+char * netfs_server_name = "filterfs";
+/*----------------------------------------------------------------------------*/
+/*The version of the server*/
+char * netfs_server_version = "0.0";
+/*----------------------------------------------------------------------------*/
+/*The maximal length of a chain of symbolic links*/
+int netfs_maxsymlinks = 12;
+/*----------------------------------------------------------------------------*/
+/*A port to the underlying node*/
+mach_port_t underlying_node;
+/*----------------------------------------------------------------------------*/
+/*Status information for the underlying node*/
+io_statbuf_t underlying_node_stat;
+/*----------------------------------------------------------------------------*/
+/*Mapped time used for updating node information*/
+volatile struct mapped_time_value * maptime;
+/*----------------------------------------------------------------------------*/
+/*The filesystem ID*/
+pid_t fsid;
+/*----------------------------------------------------------------------------*/
+/*The file to print debug messages to*/
+FILE * filterfs_dbg;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Attempts to create a file named `name` in `dir` for `user` with mode `mode`*/
+error_t
+netfs_attempt_create_file
+(
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ mode_t mode,
+ struct node ** node
+)
+{
+ LOG_MSG("netfs_attempt_create_file");
+
+ /*Unlock `dir` and say that we can do nothing else here*/
+ mutex_unlock(&dir->lock);
+ return EOPNOTSUPP;
+}/*netfs_attempt_create_file*/
+/*----------------------------------------------------------------------------*/
+/*Return an error if the process of opening a file should not be allowed
+ to complete because of insufficient permissions*/
+error_t
+netfs_check_open_permissions
+(
+ struct iouser * user,
+ struct node * np,
+ int flags,
+ int newnode
+)
+{
+ LOG_MSG("netfs_check_open_permissions: '%s'", np->nn->lnode->name);
+
+ error_t err = 0;
+
+ /*Cheks user's permissions*/
+ if(flags & O_READ)
+ err = fshelp_access(&np->nn_stat, S_IREAD, user);
+ if(!err && (flags & O_WRITE))
+ err = fshelp_access(&np->nn_stat, S_IWRITE, user);
+ if(!err && (flags & O_EXEC))
+ err = fshelp_access(&np->nn_stat, S_IEXEC, user);
+
+ /*Return the result of the check*/
+ return err;
+}/*netfs_check_open_permissions*/
+/*----------------------------------------------------------------------------*/
+/*Attempts an utimes call for the user `cred` on node `node`*/
+error_t
+netfs_attempt_utimes
+(
+ struct iouser * cred,
+ struct node * node,
+ struct timespec * atime,
+ struct timespec * mtime
+)
+{
+ LOG_MSG("netfs_attempt_utimes");
+
+ error_t err = 0;
+
+ /*See what information is to be updated*/
+ int flags = TOUCH_CTIME;
+
+ /*Check if the user is indeed the owner of the node*/
+ err = fshelp_isowner(&node->nn_stat, cred);
+
+ /*If the user is allowed to do utimes*/
+ if(!err)
+ {
+ /*If atime is to be updated*/
+ if(atime)
+ /*update the atime*/
+ node->nn_stat.st_atim = *atime;
+ else
+ /*the current time will be set as the atime*/
+ flags |= TOUCH_ATIME;
+
+ /*If mtime is to be updated*/
+ if(mtime)
+ /*update the mtime*/
+ node->nn_stat.st_mtim = *mtime;
+ else
+ /*the current time will be set as mtime*/
+ flags |= TOUCH_MTIME;
+
+ /*touch the file*/
+ fshelp_touch(&node->nn_stat, flags, maptime);
+ }
+
+ /*Return the result of operations*/
+ return err;
+}/*netfs_attempt_utimes*/
+/*----------------------------------------------------------------------------*/
+/*Returns the valid access types for file `node` and user `cred`*/
+error_t
+netfs_report_access
+(
+ struct iouser * cred,
+ struct node * np,
+ int * types
+)
+{
+ LOG_MSG("netfs_report_access");
+
+ /*No access at first*/
+ *types = 0;
+
+ /*Check the access and set the required bits*/
+ if(fshelp_access(&np->nn_stat, S_IREAD, cred) == 0)
+ *types |= O_READ;
+ if(fshelp_access(&np->nn_stat, S_IWRITE, cred) == 0)
+ *types |= O_WRITE;
+ if(fshelp_access(&np->nn_stat, S_IEXEC, cred) == 0)
+ *types |= O_EXEC;
+
+ /*Everything OK*/
+ return 0;
+}/*netfs_report_access*/
+/*----------------------------------------------------------------------------*/
+/*Validates the stat data for the node*/
+error_t
+netfs_validate_stat
+(
+ struct node * np,
+ struct iouser * cred
+)
+{
+ LOG_MSG("netfs_validate_stat: '%s'", np->nn->lnode->name);
+
+ error_t err = 0;
+
+ /*If we are not at the root*/
+ if(np != netfs_root_node)
+ {
+ /*If the node is not surely up-to-date*/
+ if(!(np->nn->flags & FLAG_NODE_ULFS_UPTODATE))
+ {
+ /*update it*/
+ err = node_update(np);
+ }
+
+ /*If no errors have yet occurred*/
+ if(!err)
+ {
+ /*If the port to the file corresponding to `np` is valid*/
+ if(np->nn->port != MACH_PORT_NULL)
+ {
+ /*We have a directory here (normally, only they maintain an open port).
+ Generally, our only concern is to maintain an open port in this case*/
+
+ /*attempt to stat this file*/
+ err = io_stat(np->nn->port, &np->nn_stat);
+
+ /*If stat information has been successfully obtained for the file*/
+ if(!err)
+ /*duplicate the st_mode field of stat structure*/
+ np->nn_translated = np->nn_stat.st_mode;
+ }
+ else
+ {
+ /*We, most probably, have something which is not a directory. Therefore
+ we will open the port and close it after the stat, so that additional
+ resources are not consumed.*/
+
+ /*the parent node of the current node*/
+ node_t * dnp;
+
+ /*obtain the parent node of the the current node*/
+ err = ncache_node_lookup(np->nn->lnode->dir, &dnp);
+
+ /*the lookup should never fail here*/
+ assert(!err);
+
+ /*open a port to the file we are interested in*/
+ mach_port_t p = file_name_lookup_under
+ (dnp->nn->port, np->nn->lnode->name, 0, 0);
+
+ /*put `dnp` back, since we don't need it any more*/
+ netfs_nput(dnp);
+
+ if(!p)
+ return EBADF;
+
+ /*try to stat the node*/
+ err = io_stat(p, &np->nn_stat);
+
+ /*deallocate the port*/
+ PORT_DEALLOC(p);
+ }
+ }
+ }
+ /*If we are at the root*/
+ else
+ /*put the size of the node into the stat structure belonging to `np`*/
+ node_get_size(np, (OFFSET_T *)&np->nn_stat.st_size);
+
+ /*Return the result of operations*/
+ return err;
+}/*netfs_validate_stat*/
+/*----------------------------------------------------------------------------*/
+/*Syncs `node` completely to disk*/
+error_t
+netfs_attempt_sync
+(
+ struct iouser * cred,
+ struct node * node,
+ int wait
+)
+{
+ LOG_MSG("netfs_attempt_sync");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_sync*/
+/*----------------------------------------------------------------------------*/
+/*Fetches a directory*/
+error_t
+netfs_get_dirents
+(
+ struct iouser * cred,
+ struct node * dir,
+ int first_entry,
+ int num_entries,
+ char ** data,
+ mach_msg_type_number_t * data_len,
+ vm_size_t max_data_len,
+ int * data_entries
+)
+{
+ LOG_MSG("netfs_get_dirents: '%s'", dir->nn->lnode->name);
+
+ error_t err;
+
+ /*Two pointers required for processing the list of dirents*/
+ node_dirent_t * dirent_start, * dirent_current;
+
+ /*The pointer to the beginning of the list of dirents*/
+ node_dirent_t * dirent_list = NULL;
+
+ /*The size of the current dirent*/
+ size_t size = 0;
+
+ /*The number of dirents added*/
+ int count = 0;
+
+ /*The dereferenced value of parameter `data`*/
+ char * data_p;
+
+ /*Takes into account the size of the given dirent*/
+ int
+ bump_size
+ (
+ const char * name
+ )
+ {
+ /*If the required number of entries has not been listed yet*/
+ if((num_entries == -1) || (count < num_entries))
+ {
+ /*take the current size and take into account the length of the name*/
+ size_t new_size = size + DIRENT_LEN(strlen(name));
+
+ /*If there is a limit for the received size and it has been exceeded*/
+ if((max_data_len > 0) && (new_size > max_data_len))
+ /*a new dirent cannot be added*/
+ return 0;
+
+ /*memorize the new size*/
+ size = new_size;
+
+ /*increase the number of dirents added*/
+ ++count;
+
+ /*everything is OK*/
+ return 1;
+ }
+ else
+ {
+ /*dirents cannot be added*/
+ return 0;
+ }
+ }/*bump_size*/
+
+ /*Adds a dirent to the list of dirents*/
+ int
+ add_dirent
+ (
+ const char * name,
+ ino_t ino,
+ int type
+ )
+ {
+ /*If the required number of dirents has not been listed yet*/
+ if((num_entries == -1) || (count < num_entries))
+ {
+ /*create a new dirent*/
+ struct dirent hdr;
+
+ /*obtain the length of the name*/
+ size_t name_len = strlen(name);
+
+ /*compute the full size of the dirent*/
+ size_t sz = DIRENT_LEN(name_len);
+
+ /*If there is no room for this dirent*/
+ if(sz > size)
+ /*stop*/
+ return 0;
+ else
+ /*take into account the fact that a new dirent has just been added*/
+ size -= sz;
+
+ /*setup the dirent*/
+ hdr.d_ino = ino;
+ hdr.d_reclen = sz;
+ hdr.d_type = type;
+ hdr.d_namlen = name_len;
+
+ /*The following two lines of code reflect the old layout of
+ dirents in the memory. Now libnetfs expects the layout
+ identical to the layout provided by dir_readdir (see dir_entries_get)*/
+
+ /*copy the header of the dirent into the final block of dirents*/
+ memcpy(data_p, &hdr, DIRENT_NAME_OFFS);
+
+ /*copy the name of the dirent into the block of dirents*/
+ strcpy(data_p + DIRENT_NAME_OFFS, name);
+
+ /*This line is commented for the same reason as the two specifically
+ commented lines above.*/
+ /*move the current pointer in the block of dirents*/
+ data_p += sz;
+
+ /*count the new dirent*/
+ ++count;
+
+ /*everything was OK, so say it*/
+ return 1;
+ }
+ else
+ /*no [new] dirents allowed*/
+ return 0;
+ }/*add_dirent*/
+
+ /*List the dirents for node `dir`*/
+ err = node_entries_get(dir, &dirent_list);
+
+ /*If listing was successful*/
+ if(!err)
+ {
+ /*find the entry whose number is `first_entry`*/
+ for
+ (
+ dirent_start = dirent_list, count = 2;
+ dirent_start && (count < first_entry);
+ dirent_start = dirent_start->next, ++count
+ );
+
+ /*reset number of dirents added so far*/
+ count = 0;
+
+ /*make space for entries '.' and '..', if required*/
+ if(first_entry == 0)
+ bump_size(".");
+ if(first_entry <= 1)
+ bump_size("..");
+
+ /*Go through all dirents*/
+ for
+ (
+ dirent_current = dirent_start;
+ dirent_current;
+ dirent_current = dirent_current->next
+ )
+ /*If another dirent cannot be added succesfully*/
+ if(bump_size(dirent_current->dirent->d_name) == 0)
+ /*stop here*/
+ break;
+
+ /*allocate the required space for dirents*/
+ *data = mmap(0, size, PROT_READ | PROT_WRITE, MAP_ANON, 0, 0);
+
+ /*check if any error occurred*/
+ err = ((void *)*data == MAP_FAILED) ? (errno) : (0);
+ }
+
+ /*If no errors have occurred so far*/
+ if(!err)
+ {
+ /*obtain the pointer to the beginning of the block of dirents*/
+ data_p = *data;
+
+ /*fill the parameters with useful values*/
+ *data_len = size;
+ *data_entries = count;
+
+ /*reset the number of dirents added*/
+ count = 0;
+
+ /*add entries '.' and '..', if required*/
+ if(first_entry == 0)
+ add_dirent(".", 2, DT_DIR);
+ if(first_entry <= 1)
+ add_dirent("..", 2, DT_DIR);
+
+ /*Follow the list of dirents beginning with dirents_start*/
+ for
+ (
+ dirent_current = dirent_start; dirent_current;
+ dirent_current = dirent_current->next
+ )
+ /*If the addition of the current dirent fails*/
+ if
+ (
+ add_dirent
+ (dirent_current->dirent->d_name, dirent_current->dirent->d_fileno,
+ dirent_current->dirent->d_type) == 0
+ )
+ /*stop adding dirents*/
+ break;
+ }
+
+ /*If the list of dirents has been allocated, free it*/
+ if(dirent_list)
+ node_entries_free(dirent_list);
+
+ /*The directory has been read right now, modify the access time*/
+ fshelp_touch(&dir->nn_stat, TOUCH_ATIME, maptime);
+
+ /*Return the result of listing the dirents*/
+ return err;
+}/*netfs_get_dirents*/
+/*----------------------------------------------------------------------------*/
+/*Looks up `name` under `dir` for `user`*/
+error_t
+netfs_attempt_lookup
+(
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ struct node ** node
+)
+{
+ LOG_MSG("netfs_attempt_lookup: '%s'", name);
+
+ error_t err = 0;
+
+ /*If we are asked to fetch the current directory*/
+ if(strcmp(name, ".") == 0)
+ {
+ /*add a reference to `dir` and put it into `node`*/
+ netfs_nref(dir);
+ *node = dir;
+
+ /*everything is OK*/
+ return 0;
+ }
+ /*If we are asked to fetch the parent directory*/
+ else if(strcmp(name, "..") == 0)
+ {
+ /*If the supplied node is not root*/
+ if(dir->nn->lnode->dir)
+ {
+ /*The node corresponding to the parent directory must exist here*/
+ assert(dir->nn->lnode->dir->node);
+
+ /*put the parent node of `dir` into the result*/
+ err = ncache_node_lookup(dir->nn->lnode->dir, node);
+ }
+ /*The supplied node is root*/
+ else
+ {
+ /*this node is not included into our filesystem*/
+ err = ENOENT;
+ *node = NULL;
+ }
+
+ /*unlock the directory*/
+ mutex_unlock(&dir->lock);
+
+ /*stop here*/
+ return err;
+ }
+
+ /*Checks whether the given name satisfied the required property*/
+ int
+ check_property
+ (
+ const char * name
+ )
+ {
+ /*If there is no property*/
+ if(!property)
+ /*no filtering will be applied, any name is OK*/
+ return 0;
+
+ /*The number of occurrences of PROPERTY_PARAM in the property*/
+ int param_entries_count = 0;
+
+ /*The pointer to the current occurrence of PROPERTY_PARAM*/
+ char * occurrence = strstr(property, PROPERTY_PARAM);
+
+ /*Count the number of occurrences*/
+ for(; occurrence;
+ occurrence = strstr(occurrence + 1, PROPERTY_PARAM),
+ ++param_entries_count);
+
+ /*Compute the length of the property param*/
+ size_t property_param_len = strlen(PROPERTY_PARAM);
+
+ /*The length of the property*/
+ size_t property_len = (property) ? (strlen(property)) : (0);
+
+ /*Everything OK at first*/
+ err = 0;
+
+ /*Compute the length of the full name once*/
+ size_t full_name_len = strlen(dir->nn->lnode->path) + 1 + strlen(name) + 1;
+
+ /*Try to allocate the required space*/
+ char * full_name = malloc(full_name_len);
+ if(!full_name)
+ {
+ err = ENOMEM;
+ return 0;
+ }
+
+ /*Initialize `full_name` as a valid string*/
+ full_name[0] = 0;
+
+ /*Construct the full name*/
+ strcpy(full_name, dir->nn->lnode->path);
+ strcat(full_name, "/");
+ strcat(full_name, name);
+
+ LOG_MSG("netfs_attempt_lookup: Applying filter to %s...", full_name);
+
+ /*Compute the space required for the final filtering command*/
+ size_t sz = property_len + (strlen(full_name) - property_param_len)
+ * param_entries_count;
+
+ /*Try to allocate the space for the command*/
+ char * cmd = malloc(sz);
+ if(!cmd)
+ {
+ free(full_name);
+ err = ENOMEM;
+ return 0;
+ }
+
+ /*Initialize `cmd` as a valid string*/
+ cmd[0] = 0;
+
+ /*The current occurence of PROPERTY_PARAM in property*/
+ char * p = strstr(property, PROPERTY_PARAM);
+
+ /*The pointer to the current position in the property*/
+ char * propp = property;
+
+ /*While the command has not been constructed*/
+ for(; p; p = strstr(propp, PROPERTY_PARAM))
+ {
+ /*add the new part of the property to the command*/
+ strncat(cmd, propp, p - propp);
+
+ /*add the filename to the command*/
+ strcat(cmd, full_name);
+
+ /*LOG_MSG("\tcmd = '%s'", cmd);*/
+
+ /*advance the pointer in the property*/
+ propp = p + property_param_len;
+
+ /*LOG_MSG("\tpropp points at '%s'", propp);*/
+ }
+
+ /*Copy the rest of the property to the command*/
+ strcat(cmd, propp);
+
+ /*LOG_MSG("node_entries_get: The filtering command: '%s'.", cmd);*/
+
+ /*Execute the command*/
+ int xcode = WEXITSTATUS(system(cmd));
+
+ /*Return the exit code of the command*/
+ return xcode;
+ }/*check_property*/
+
+ /*If the given name does not satisfy the property*/
+ if(check_property(name) != 0)
+ {
+ /*unlock the directory*/
+ mutex_unlock(&dir->lock);
+
+ /*no such file in the directory*/
+ return ENOENT;
+ }
+
+ /*Try to lookup the given file in the underlying directory*/
+ mach_port_t p = file_name_lookup_under(dir->nn->port, name, 0, 0);
+
+ /*If the lookup failed*/
+ if(p == MACH_PORT_NULL)
+ {
+ /*unlock the directory*/
+ mutex_unlock(&dir->lock);
+
+ /*no such entry*/
+ return ENOENT;
+ }
+
+ /*Obtain the stat information about the file*/
+ io_statbuf_t stat;
+ err = io_stat(p, &stat);
+
+ /*Deallocate the obtained port*/
+ PORT_DEALLOC(p);
+
+ /*If this file is not a directory*/
+ if(err || !S_ISDIR(stat.st_mode))
+ {
+ /*do not set the port*/
+ p = MACH_PORT_NULL;
+ }
+ else
+ {
+ /*lookup the port with the right to read the contents of the directory*/
+ p = file_name_lookup_under(dir->nn->port, name, O_READ | O_DIRECTORY, 0);
+ if(p == MACH_PORT_NULL)
+ {
+ return EBADF; /*not enough rights?*/
+ }
+ }
+
+ /*The lnode corresponding to the entry we are supposed to fetch*/
+ lnode_t * lnode;
+
+ /*Finalizes the execution of this function*/
+ void
+ finalize(void)
+ {
+ /*If some errors have occurred*/
+ if(err)
+ {
+ /*the user should receive nothing*/
+ *node = NULL;
+
+ /*If there is some port, free it*/
+ if(p != MACH_PORT_NULL)
+ PORT_DEALLOC(p);
+ }
+ /*If there is a node to return*/
+ if(*node)
+ {
+ /*unlock the node*/
+ mutex_unlock(&(*node)->lock);
+
+ /*add the node to the cache*/
+ ncache_node_add(*node);
+ }
+
+ /*Unlock the mutexes in `dir`*/
+ mutex_unlock(&dir->nn->lnode->lock);
+ mutex_unlock(&dir->lock);
+ }/*finalize*/
+
+ /*Try to find an lnode called `name` under the lnode corresponding to `dir`*/
+ err = lnode_get(dir->nn->lnode, name, &lnode);
+
+ /*If such an entry does not exist*/
+ if(err == ENOENT)
+ {
+ /*create a new lnode with the supplied name*/
+ err = lnode_create(name, &lnode);
+ if(err)
+ {
+ finalize();
+ return err;
+ }
+
+ /*install the new lnode into the directory*/
+ lnode_install(dir->nn->lnode, lnode);
+ }
+
+ /*Obtain the node corresponding to this lnode*/
+ err = ncache_node_lookup(lnode, node);
+
+ /*Remove an extra reference from the lnode*/
+ lnode_ref_remove(lnode);
+
+ /*If the lookup in the cache failed*/
+ if(err)
+ {
+ /*stop*/
+ finalize();
+ return err;
+ }
+
+ /*Store the port in the node*/
+ (*node)->nn->port = p;
+
+ /*Construct the full path to the node*/
+ err = lnode_path_construct(lnode, NULL);
+ if(err)
+ {
+ finalize();
+ return err;
+ }
+
+ /*Now the node is up-to-date*/
+ (*node)->nn->flags = FLAG_NODE_ULFS_UPTODATE;
+
+ /*Return the result of performing the operations*/
+ finalize();
+ return err;
+}/*netfs_attempt_lookup*/
+/*----------------------------------------------------------------------------*/
+/*Deletes `name` in `dir` for `user`*/
+error_t
+netfs_attempt_unlink
+(
+ struct iouser * user,
+ struct node * dir,
+ char * name
+)
+{
+ LOG_MSG("netfs_attempt_unlink");
+
+ return 0;
+}/*netfs_attempt_unlink*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to rename `fromdir`/`fromname` to `todir`/`toname`*/
+error_t
+netfs_attempt_rename
+(
+ struct iouser * user,
+ struct node * fromdir,
+ char * fromname,
+ struct node * todir,
+ char * toname,
+ int excl
+)
+{
+ LOG_MSG("netfs_attempt_rename");
+
+ /*Operation not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_rename*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to create a new directory*/
+error_t
+netfs_attempt_mkdir
+(
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ mode_t mode
+)
+{
+ LOG_MSG("netfs_attempt_mkdir");
+
+ return 0;
+}/*netfs_attempt_mkdir*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to remove directory `name` in `dir` for `user`*/
+error_t
+netfs_attempt_rmdir
+(
+ struct iouser * user,
+ struct node * dir,
+ char * name
+)
+{
+ LOG_MSG("netfs_attempt_rmdir");
+
+ return 0;
+}/*netfs_attempt_rmdir*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the mode of `node` for user `cred` to `uid`:`gid`*/
+error_t
+netfs_attempt_chown
+(
+ struct iouser * cred,
+ struct node * node,
+ uid_t uid,
+ uid_t gid
+)
+{
+ LOG_MSG("netfs_attempt_chown");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_chown*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the author of `node` to `author`*/
+error_t
+netfs_attempt_chauthor
+(
+ struct iouser * cred,
+ struct node * node,
+ uid_t author
+)
+{
+ LOG_MSG("netfs_attempt_chauthor");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_chauthor*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the mode of `node` to `mode` for `cred`*/
+error_t
+netfs_attempt_chmod
+(
+ struct iouser * user,
+ struct node * node,
+ mode_t mode
+)
+{
+ LOG_MSG("netfs_attempt_chmod");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_chmod*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to turn `node` into a symlink targetting `name`*/
+error_t
+netfs_attempt_mksymlink
+(
+ struct iouser * cred,
+ struct node * node,
+ char * name
+)
+{
+ LOG_MSG("netfs_attempt_mksymlink");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_mksymlink*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to turn `node` into a device; type can be either S_IFBLK or S_IFCHR*/
+error_t
+netfs_attempt_mkdev
+(
+ struct iouser * cred,
+ struct node * node,
+ mode_t type,
+ dev_t indexes
+)
+{
+ LOG_MSG("netfs_attempt_mkdev");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_mkdev*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to set the passive translator record for `file` passing `argz`*/
+error_t
+netfs_set_translator
+(
+ struct iouser * cred,
+ struct node * node,
+ char * argz,
+ size_t arglen
+)
+{
+ LOG_MSG("netfs_set_translator");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_set_translator */
+/*----------------------------------------------------------------------------*/
+/*Attempts to call chflags for `node`*/
+error_t
+netfs_attempt_chflags
+(
+ struct iouser * cred,
+ struct node * node,
+ int flags
+)
+{
+ LOG_MSG("netfs_attempt_chflags");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_chflags*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to set the size of file `node`*/
+error_t
+netfs_attempt_set_size
+(
+ struct iouser * cred,
+ struct node * node,
+ loff_t size
+)
+{
+ LOG_MSG("netfs_attempt_set_size");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_set_size*/
+/*----------------------------------------------------------------------------*/
+/*Fetches the filesystem status information*/
+error_t
+netfs_attempt_statfs
+(
+ struct iouser * cred,
+ struct node * node,
+ fsys_statfsbuf_t * st
+)
+{
+ LOG_MSG("netfs_attempt_statfs");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_statfs*/
+/*----------------------------------------------------------------------------*/
+/*Syncs the filesystem*/
+error_t
+netfs_attempt_syncfs
+(
+ struct iouser * cred,
+ int wait
+)
+{
+ LOG_MSG("netfs_attempt_syncfs");
+
+ /*Everythin OK*/
+ return 0;
+}/*netfs_attempt_syncfs*/
+/*----------------------------------------------------------------------------*/
+/*Creates a link in `dir` with `name` to `file`*/
+error_t
+netfs_attempt_link
+(
+ struct iouser * user,
+ struct node * dir,
+ struct node * file,
+ char * name,
+ int excl
+)
+{
+ LOG_MSG("netfs_attempt_link");
+
+ /*Operation not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_link*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to create an anonymous file related to `dir` with `mode`*/
+error_t
+netfs_attempt_mkfile
+(
+ struct iouser * user,
+ struct node * dir,
+ mode_t mode,
+ struct node ** node
+)
+{
+ LOG_MSG("netfs_attempt_mkfile");
+
+ /*Unlock the directory*/
+ mutex_unlock(&dir->lock);
+
+ /*Operation not supported*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_mkfile*/
+/*----------------------------------------------------------------------------*/
+/*Reads the contents of symlink `node` into `buf`*/
+error_t
+netfs_attempt_readlink
+(
+ struct iouser * user,
+ struct node * node,
+ char * buf
+)
+{
+ LOG_MSG("netfs_attempt_readlink");
+
+ /*Operation not supported (why?..)*/
+ return EOPNOTSUPP;
+}/*netfs_attempt_readlink*/
+/*----------------------------------------------------------------------------*/
+/*Reads from file `node` up to `len` bytes from `offset` into `data`*/
+error_t
+netfs_attempt_read
+(
+ struct iouser * cred,
+ struct node * np,
+ loff_t offset,
+ size_t * len,
+ void * data
+)
+{
+ LOG_MSG("netfs_attempt_read");
+
+ error_t err = 0;
+
+ /*If there is no port open for the current node*/
+ if(np->nn->port == MACH_PORT_NULL)
+ {
+ /*the parent node of the current node*/
+ node_t * dnp;
+
+ /*obtain the parent node of the the current node*/
+ err = ncache_node_lookup(np->nn->lnode->dir, &dnp);
+
+ /*the lookup should never fail here*/
+ assert(!err);
+
+ /*open a port to the file we are interested in*/
+ mach_port_t p = file_name_lookup_under
+ (dnp->nn->port, np->nn->lnode->name, O_READ, 0);
+
+ /*put `dnp` back, since we don't need it any more*/
+ netfs_nput(dnp);
+
+ if(!p)
+ return EBADF;
+
+ /*store the port in the node*/
+ np->nn->port = p;
+ }
+
+ /*Read the required data from the file*/
+ err = io_read(np->nn->port, (char **)&data, len, offset, *len);
+
+ /*Return the result of reading*/
+ return err;
+}/*netfs_attempt_read*/
+/*----------------------------------------------------------------------------*/
+/*Writes to file `node` up to `len` bytes from offset from `data`*/
+error_t
+netfs_attempt_write
+(
+ struct iouser * cred,
+ struct node * node,
+ loff_t offset,
+ size_t * len,
+ void * data
+)
+{
+ LOG_MSG("netfs_attempt_write");
+
+ return 0;
+}/*netfs_attempt_write*/
+/*----------------------------------------------------------------------------*/
+/*Frees all storage associated with the node*/
+void
+netfs_node_norefs
+(
+ struct node * np
+)
+{
+ /*Destroy the node*/
+ node_destroy(np);
+}/*netfs_node_norefs*/
+/*----------------------------------------------------------------------------*/
+/*Entry point*/
+int
+main
+(
+ int argc,
+ char ** argv
+)
+{
+ /*Start logging*/
+ INIT_LOG();
+ LOG_MSG(">> Starting initialization...");
+
+ /*The port on which this translator will be set upon*/
+ mach_port_t bootstrap_port;
+
+ error_t err = 0;
+
+ /*Parse the command line arguments*/
+ argp_parse(&argp_startup, argc, argv, ARGP_IN_ORDER, 0, 0);
+ LOG_MSG("Command line arguments parsed.");
+
+ /*Try to create the root node*/
+ err = node_create_root(&netfs_root_node);
+ if(err)
+ error(EXIT_FAILURE, err, "Failed to create the root node");
+ LOG_MSG("Root node created.");
+
+ /*Obtain the bootstrap port*/
+ task_get_bootstrap_port(mach_task_self(), &bootstrap_port);
+
+ /*Initialize the translator*/
+ netfs_init();
+
+ /*Obtain a port to the underlying node*/
+ underlying_node = netfs_startup(bootstrap_port, O_READ);
+ LOG_MSG("netfs initialization complete.");
+
+ /*Initialize the root node*/
+ err = node_init_root(netfs_root_node);
+ if(err)
+ error(EXIT_FAILURE, err, "Failed to initialize the root node");
+ LOG_MSG("Root node initialized.");
+ LOG_MSG("\tRoot node address: 0x%lX", (unsigned long)netfs_root_node);
+
+ /*Map the time for updating node information*/
+ err = maptime_map(0, 0, &maptime);
+ if(err)
+ error(EXIT_FAILURE, err, "Failed to map the time");
+ LOG_MSG("Time mapped.");
+
+ /*Initialize the cache with the required number of nodes*/
+ ncache_init(ncache_size);
+ LOG_MSG("Cache initialized.");
+
+ /*Obtain stat information about the underlying node*/
+ err = io_stat(underlying_node, &underlying_node_stat);
+ if(err)
+ error(EXIT_FAILURE, err,
+ "Cannot obtain stat information about the underlying node");
+ LOG_MSG("Stat information for undelying node obtained.");
+
+ /*Obtain the ID of the current process*/
+ fsid = getpid();
+
+ /*Setup the stat information for the root node*/
+ netfs_root_node->nn_stat = underlying_node_stat;
+
+ netfs_root_node->nn_stat.st_ino = FILTERFS_ROOT_INODE;
+ netfs_root_node->nn_stat.st_fsid = fsid;
+ netfs_root_node->nn_stat.st_mode = S_IFDIR | (underlying_node_stat.st_mode
+ & ~S_IFMT & ~S_ITRANS); /*we are providing a translated directory*/
+
+ netfs_root_node->nn_translated = netfs_root_node->nn_stat.st_mode;
+
+ /*If the underlying node is not a directory, enhance the permissions
+ of the root node of filterfs*/
+ if(!S_ISDIR(underlying_node_stat.st_mode))
+ {
+ /*can be read by owner*/
+ if(underlying_node_stat.st_mode & S_IRUSR)
+ /*allow execution by the owner*/
+ netfs_root_node->nn_stat.st_mode |= S_IXUSR;
+ /*can be read by group*/
+ if(underlying_node_stat.st_mode & S_IRGRP)
+ /*allow execution by the group*/
+ netfs_root_node->nn_stat.st_mode |= S_IXGRP;
+ /*can be read by others*/
+ if(underlying_node_stat.st_mode & S_IROTH)
+ /*allow execution by the others*/
+ netfs_root_node->nn_stat.st_mode |= S_IXOTH;
+ }
+
+ /*Update the timestamps of the root node*/
+ fshelp_touch
+ (&netfs_root_node->nn_stat, TOUCH_ATIME | TOUCH_MTIME | TOUCH_CTIME,
+ maptime);
+
+ LOG_MSG(">> Initialization complete. Entering netfs server loop...");
+
+ /*Start serving clients*/
+ for(;;)
+ netfs_server_loop();
+}/*main*/
+/*----------------------------------------------------------------------------*/
diff --git a/netfs-sample/filterfs.c~ b/netfs-sample/filterfs.c~
new file mode 100644
index 00000000..5aaacf75
--- /dev/null
+++ b/netfs-sample/filterfs.c~
@@ -0,0 +1,1236 @@
+/*----------------------------------------------------------------------------*/
+/*filter.c*/
+/*----------------------------------------------------------------------------*/
+/*The filtering translator*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+#define _GNU_SOURCE 1
+/*----------------------------------------------------------------------------*/
+#include "filterfs.h"
+/*----------------------------------------------------------------------------*/
+#include <error.h>
+#include <argp.h>
+#include <argz.h>
+#include <hurd/netfs.h>
+#include <fcntl.h>
+/*----------------------------------------------------------------------------*/
+#include "debug.h"
+#include "options.h"
+#include "ncache.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*The state modes use in open*/
+#define OPENONLY_STATE_MODES (O_CREAT | O_EXCL | O_NOLINK | O_NOTRANS \
+ | O_NONBLOCK)
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The name of the server*/
+char * netfs_server_name = "filterfs";
+/*----------------------------------------------------------------------------*/
+/*The version of the server*/
+char * netfs_server_version = "0.0";
+/*----------------------------------------------------------------------------*/
+/*The maximal length of a chain of symbolic links*/
+int netfs_maxsymlinks = 12;
+/*----------------------------------------------------------------------------*/
+/*A port to the underlying node*/
+mach_port_t underlying_node;
+/*----------------------------------------------------------------------------*/
+/*Status information for the underlying node*/
+io_statbuf_t underlying_node_stat;
+/*----------------------------------------------------------------------------*/
+/*Mapped time used for updating node information*/
+volatile struct mapped_time_value * maptime;
+/*----------------------------------------------------------------------------*/
+/*The filesystem ID*/
+pid_t fsid;
+/*----------------------------------------------------------------------------*/
+/*The file to print debug messages to*/
+FILE * filterfs_dbg;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Attempts to create a file named `name` in `dir` for `user` with mode `mode`*/
+error_t
+netfs_attempt_create_file
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ mode_t mode,
+ struct node ** node
+ )
+ {
+ LOG_MSG("netfs_attempt_create_file");
+
+ /*Unlock `dir` and say that we can do nothing else here*/
+ mutex_unlock(&dir->lock);
+ return EOPNOTSUPP;
+ }/*netfs_attempt_create_file*/
+/*----------------------------------------------------------------------------*/
+/*Return an error if the process of opening a file should not be allowed
+ to complete because of insufficient permissions*/
+error_t
+netfs_check_open_permissions
+ (
+ struct iouser * user,
+ struct node * np,
+ int flags,
+ int newnode
+ )
+ {
+ LOG_MSG("netfs_check_open_permissions: '%s'", np->nn->lnode->name);
+
+ error_t err = 0;
+
+ /*Cheks user's permissions*/
+ if(flags & O_READ)
+ err = fshelp_access(&np->nn_stat, S_IREAD, user);
+ if(!err && (flags & O_WRITE))
+ err = fshelp_access(&np->nn_stat, S_IWRITE, user);
+ if(!err && (flags & O_EXEC))
+ err = fshelp_access(&np->nn_stat, S_IEXEC, user);
+
+ /*Return the result of the check*/
+ return err;
+ }/*netfs_check_open_permissions*/
+/*----------------------------------------------------------------------------*/
+/*Attempts an utimes call for the user `cred` on node `node`*/
+error_t
+netfs_attempt_utimes
+ (
+ struct iouser * cred,
+ struct node * node,
+ struct timespec * atime,
+ struct timespec * mtime
+ )
+ {
+ LOG_MSG("netfs_attempt_utimes");
+
+ error_t err = 0;
+
+ /*See what information is to be updated*/
+ int flags = TOUCH_CTIME;
+
+ /*Check if the user is indeed the owner of the node*/
+ err = fshelp_isowner(&node->nn_stat, cred);
+
+ /*If the user is allowed to do utimes*/
+ if(!err)
+ {
+ /*If atime is to be updated*/
+ if(atime)
+ /*update the atime*/
+ node->nn_stat.st_atim = *atime;
+ else
+ /*the current time will be set as the atime*/
+ flags |= TOUCH_ATIME;
+
+ /*If mtime is to be updated*/
+ if(mtime)
+ /*update the mtime*/
+ node->nn_stat.st_mtim = *mtime;
+ else
+ /*the current time will be set as mtime*/
+ flags |= TOUCH_MTIME;
+
+ /*touch the file*/
+ fshelp_touch(&node->nn_stat, flags, maptime);
+ }
+
+ /*Return the result of operations*/
+ return err;
+ }/*netfs_attempt_utimes*/
+/*----------------------------------------------------------------------------*/
+/*Returns the valid access types for file `node` and user `cred`*/
+error_t
+netfs_report_access
+ (
+ struct iouser * cred,
+ struct node * np,
+ int * types
+ )
+ {
+ LOG_MSG("netfs_report_access");
+
+ /*No access at first*/
+ *types = 0;
+
+ /*Check the access and set the required bits*/
+ if(fshelp_access(&np->nn_stat, S_IREAD, cred) == 0)
+ *types |= O_READ;
+ if(fshelp_access(&np->nn_stat, S_IWRITE, cred) == 0)
+ *types |= O_WRITE;
+ if(fshelp_access(&np->nn_stat, S_IEXEC, cred) == 0)
+ *types |= O_EXEC;
+
+ /*Everything OK*/
+ return 0;
+ }/*netfs_report_access*/
+/*----------------------------------------------------------------------------*/
+/*Validates the stat data for the node*/
+error_t
+netfs_validate_stat
+ (
+ struct node * np,
+ struct iouser * cred
+ )
+ {
+ LOG_MSG("netfs_validate_stat: '%s'", np->nn->lnode->name);
+
+ error_t err = 0;
+
+ /*If we are not at the root*/
+ if(np != netfs_root_node)
+ {
+ /*If the node is not surely up-to-date*/
+ if(!(np->nn->flags & FLAG_NODE_ULFS_UPTODATE))
+ {
+ /*update it*/
+ err = node_update(np);
+ }
+
+ /*If no errors have yet occurred*/
+ if(!err)
+ {
+ /*If the port to the file corresponding to `np` is valid*/
+ if(np->nn->port != MACH_PORT_NULL)
+ {
+ /*We have a directory here (normally, only they maintain an open port).
+ Generally, our only concern is to maintain an open port in this case*/
+
+ /*attempt to stat this file*/
+ err = io_stat(np->nn->port, &np->nn_stat);
+
+ /*If stat information has been successfully obtained for the file*/
+ if(!err)
+ /*duplicate the st_mode field of stat structure*/
+ np->nn_translated = np->nn_stat.st_mode;
+ }
+ else
+ {
+ /*We, most probably, have something which is not a directory. Therefore
+ we will open the port and close it after the stat, so that additional
+ resources are not consumed.*/
+
+ /*the parent node of the current node*/
+ node_t * dnp;
+
+ /*obtain the parent node of the the current node*/
+ err = ncache_node_lookup(np->nn->lnode->dir, &dnp);
+
+ /*the lookup should never fail here*/
+ assert(!err);
+
+ /*open a port to the file we are interested in*/
+ mach_port_t p = file_name_lookup_under
+ (dnp->nn->port, np->nn->lnode->name, 0, 0);
+
+ /*put `dnp` back, since we don't need it any more*/
+ netfs_nput(dnp);
+
+ if(!p)
+ return EBADF;
+
+ /*try to stat the node*/
+ err = io_stat(p, &np->nn_stat);
+
+ /*deallocate the port*/
+ PORT_DEALLOC(p);
+ }
+ }
+ }
+ /*If we are at the root*/
+ else
+ /*put the size of the node into the stat structure belonging to `np`*/
+ node_get_size(np, (OFFSET_T *)&np->nn_stat.st_size);
+
+ /*Return the result of operations*/
+ return err;
+ }/*netfs_validate_stat*/
+/*----------------------------------------------------------------------------*/
+/*Syncs `node` completely to disk*/
+error_t
+netfs_attempt_sync
+ (
+ struct iouser * cred,
+ struct node * node,
+ int wait
+ )
+ {
+ LOG_MSG("netfs_attempt_sync");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_sync*/
+/*----------------------------------------------------------------------------*/
+/*Fetches a directory*/
+error_t
+netfs_get_dirents
+ (
+ struct iouser * cred,
+ struct node * dir,
+ int first_entry,
+ int num_entries,
+ char ** data,
+ mach_msg_type_number_t * data_len,
+ vm_size_t max_data_len,
+ int * data_entries
+ )
+ {
+ LOG_MSG("netfs_get_dirents: '%s'", dir->nn->lnode->name);
+
+ error_t err;
+
+ /*Two pointers required for processing the list of dirents*/
+ node_dirent_t * dirent_start, * dirent_current;
+
+ /*The pointer to the beginning of the list of dirents*/
+ node_dirent_t * dirent_list = NULL;
+
+ /*The size of the current dirent*/
+ size_t size = 0;
+
+ /*The number of dirents added*/
+ int count = 0;
+
+ /*The dereferenced value of parameter `data`*/
+ char * data_p;
+
+ /*Takes into account the size of the given dirent*/
+ int
+ bump_size
+ (
+ const char * name
+ )
+ {
+ /*If the required number of entries has not been listed yet*/
+ if((num_entries == -1) || (count < num_entries))
+ {
+ /*take the current size and take into account the length of the name*/
+ size_t new_size = size + DIRENT_LEN(strlen(name));
+
+ /*If there is a limit for the received size and it has been exceeded*/
+ if((max_data_len > 0) && (new_size > max_data_len))
+ /*a new dirent cannot be added*/
+ return 0;
+
+ /*memorize the new size*/
+ size = new_size;
+
+ /*increase the number of dirents added*/
+ ++count;
+
+ /*everything is OK*/
+ return 1;
+ }
+ else
+ {
+ /*dirents cannot be added*/
+ return 0;
+ }
+ }/*bump_size*/
+
+ /*Adds a dirent to the list of dirents*/
+ int
+ add_dirent
+ (
+ const char * name,
+ ino_t ino,
+ int type
+ )
+ {
+ /*If the required number of dirents has not been listed yet*/
+ if((num_entries == -1) || (count < num_entries))
+ {
+ /*create a new dirent*/
+ struct dirent hdr;
+
+ /*obtain the length of the name*/
+ size_t name_len = strlen(name);
+
+ /*compute the full size of the dirent*/
+ size_t sz = DIRENT_LEN(name_len);
+
+ /*If there is no room for this dirent*/
+ if(sz > size)
+ /*stop*/
+ return 0;
+ else
+ /*take into account the fact that a new dirent has just been added*/
+ size -= sz;
+
+ /*setup the dirent*/
+ hdr.d_ino = ino;
+ hdr.d_reclen = sz;
+ hdr.d_type = type;
+ hdr.d_namlen = name_len;
+
+ /*The following two lines of code reflect the old layout of
+ dirents in the memory. Now libnetfs expects the layout
+ identical to the layout provided by dir_readdir (see dir_entries_get)*/
+
+ /*copy the header of the dirent into the final block of dirents*/
+ memcpy(data_p, &hdr, DIRENT_NAME_OFFS);
+
+ /*copy the name of the dirent into the block of dirents*/
+ strcpy(data_p + DIRENT_NAME_OFFS, name);
+
+ /*This line is commented for the same reason as the two specifically
+ commented lines above.*/
+ /*move the current pointer in the block of dirents*/
+ data_p += sz;
+
+ /*count the new dirent*/
+ ++count;
+
+ /*everything was OK, so say it*/
+ return 1;
+ }
+ else
+ /*no [new] dirents allowed*/
+ return 0;
+ }/*add_dirent*/
+
+ /*List the dirents for node `dir`*/
+ err = node_entries_get(dir, &dirent_list);
+
+ /*If listing was successful*/
+ if(!err)
+ {
+ /*find the entry whose number is `first_entry`*/
+ for
+ (
+ dirent_start = dirent_list, count = 2;
+ dirent_start && (count < first_entry);
+ dirent_start = dirent_start->next, ++count
+ );
+
+ /*reset number of dirents added so far*/
+ count = 0;
+
+ /*make space for entries '.' and '..', if required*/
+ if(first_entry == 0)
+ bump_size(".");
+ if(first_entry <= 1)
+ bump_size("..");
+
+ /*Go through all dirents*/
+ for
+ (
+ dirent_current = dirent_start;
+ dirent_current;
+ dirent_current = dirent_current->next
+ )
+ /*If another dirent cannot be added succesfully*/
+ if(bump_size(dirent_current->dirent->d_name) == 0)
+ /*stop here*/
+ break;
+
+ /*allocate the required space for dirents*/
+ *data = mmap(0, size, PROT_READ | PROT_WRITE, MAP_ANON, 0, 0);
+
+ /*check if any error occurred*/
+ err = ((void *)*data == MAP_FAILED) ? (errno) : (0);
+ }
+
+ /*If no errors have occurred so far*/
+ if(!err)
+ {
+ /*obtain the pointer to the beginning of the block of dirents*/
+ data_p = *data;
+
+ /*fill the parameters with useful values*/
+ *data_len = size;
+ *data_entries = count;
+
+ /*reset the number of dirents added*/
+ count = 0;
+
+ /*add entries '.' and '..', if required*/
+ if(first_entry == 0)
+ add_dirent(".", 2, DT_DIR);
+ if(first_entry <= 1)
+ add_dirent("..", 2, DT_DIR);
+
+ /*Follow the list of dirents beginning with dirents_start*/
+ for
+ (
+ dirent_current = dirent_start; dirent_current;
+ dirent_current = dirent_current->next
+ )
+ /*If the addition of the current dirent fails*/
+ if
+ (
+ add_dirent
+ (dirent_current->dirent->d_name, dirent_current->dirent->d_fileno,
+ dirent_current->dirent->d_type) == 0
+ )
+ /*stop adding dirents*/
+ break;
+ }
+
+ /*If the list of dirents has been allocated, free it*/
+ if(dirent_list)
+ node_entries_free(dirent_list);
+
+ /*The directory has been read right now, modify the access time*/
+ fshelp_touch(&dir->nn_stat, TOUCH_ATIME, maptime);
+
+ /*Return the result of listing the dirents*/
+ return err;
+ }/*netfs_get_dirents*/
+/*----------------------------------------------------------------------------*/
+/*Looks up `name` under `dir` for `user`*/
+error_t
+netfs_attempt_lookup
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ struct node ** node
+ )
+ {
+ LOG_MSG("netfs_attempt_lookup: '%s'", name);
+
+ error_t err = 0;
+
+ /*If we are asked to fetch the current directory*/
+ if(strcmp(name, ".") == 0)
+ {
+ /*add a reference to `dir` and put it into `node`*/
+ netfs_nref(dir);
+ *node = dir;
+
+ /*everything is OK*/
+ return 0;
+ }
+ /*If we are asked to fetch the parent directory*/
+ else if(strcmp(name, "..") == 0)
+ {
+ /*If the supplied node is not root*/
+ if(dir->nn->lnode->dir)
+ {
+ /*The node corresponding to the parent directory must exist here*/
+ assert(dir->nn->lnode->dir->node);
+
+ /*put the parent node of `dir` into the result*/
+ err = ncache_node_lookup(dir->nn->lnode->dir, node);
+ }
+ /*The supplied node is root*/
+ else
+ {
+ /*this node is not included into our filesystem*/
+ err = ENOENT;
+ *node = NULL;
+ }
+
+ /*unlock the directory*/
+ mutex_unlock(&dir->lock);
+
+ /*stop here*/
+ return err;
+ }
+
+ /*Checks whether the given name satisfied the required property*/
+ int
+ check_property
+ (
+ const char * name
+ )
+ {
+ /*If there is no property*/
+ if(!property)
+ /*no filtering will be applied, any name is OK*/
+ return 0;
+
+ /*The number of occurrences of PROPERTY_PARAM in the property*/
+ int param_entries_count = 0;
+
+ /*The pointer to the current occurrence of PROPERTY_PARAM*/
+ char * occurrence = strstr(property, PROPERTY_PARAM);
+
+ /*Count the number of occurrences*/
+ for(; occurrence;
+ occurrence = strstr(occurrence + 1, PROPERTY_PARAM),
+ ++param_entries_count);
+
+ /*Compute the length of the property param*/
+ size_t property_param_len = strlen(PROPERTY_PARAM);
+
+ /*The length of the property*/
+ size_t property_len = (property) ? (strlen(property)) : (0);
+
+ /*Everything OK at first*/
+ err = 0;
+
+ /*Compute the length of the full name once*/
+ size_t full_name_len = strlen(dir->nn->lnode->path) + 1 + strlen(name) + 1;
+
+ /*Try to allocate the required space*/
+ char * full_name = malloc(full_name_len);
+ if(!full_name)
+ {
+ err = ENOMEM;
+ return 0;
+ }
+
+ /*Initialize `full_name` as a valid string*/
+ full_name[0] = 0;
+
+ /*Construct the full name*/
+ strcpy(full_name, dir->nn->lnode->path);
+ strcat(full_name, "/");
+ strcat(full_name, name);
+
+ LOG_MSG("netfs_attempt_lookup: Applying filter to %s...", full_name);
+
+ /*Compute the space required for the final filtering command*/
+ size_t sz = property_len + (strlen(full_name) - property_param_len)
+ * param_entries_count;
+
+ /*Try to allocate the space for the command*/
+ char * cmd = malloc(sz);
+ if(!cmd)
+ {
+ free(full_name);
+ err = ENOMEM;
+ return 0;
+ }
+
+ /*Initialize `cmd` as a valid string*/
+ cmd[0] = 0;
+
+ /*The current occurence of PROPERTY_PARAM in property*/
+ char * p = strstr(property, PROPERTY_PARAM);
+
+ /*The pointer to the current position in the property*/
+ char * propp = property;
+
+ /*While the command has not been constructed*/
+ for(; p; p = strstr(propp, PROPERTY_PARAM))
+ {
+ /*add the new part of the property to the command*/
+ strncat(cmd, propp, p - propp);
+
+ /*add the filename to the command*/
+ strcat(cmd, full_name);
+
+ /*LOG_MSG("\tcmd = '%s'", cmd);*/
+
+ /*advance the pointer in the property*/
+ propp = p + property_param_len;
+
+ /*LOG_MSG("\tpropp points at '%s'", propp);*/
+ }
+
+ /*Copy the rest of the property to the command*/
+ strcat(cmd, propp);
+
+ /*LOG_MSG("node_entries_get: The filtering command: '%s'.", cmd);*/
+
+ /*Execute the command*/
+ int xcode = WEXITSTATUS(system(cmd));
+
+ /*Return the exit code of the command*/
+ return xcode;
+ }/*check_property*/
+
+ /*If the given name does not satisfy the property*/
+ if(check_property(name) != 0)
+ {
+ /*unlock the directory*/
+ mutex_unlock(&dir->lock);
+
+ /*no such file in the directory*/
+ return ENOENT;
+ }
+
+ /*Try to lookup the given file in the underlying directory*/
+ mach_port_t p = file_name_lookup_under(dir->nn->port, name, 0, 0);
+
+ /*If the lookup failed*/
+ if(p == MACH_PORT_NULL)
+ {
+ /*unlock the directory*/
+ mutex_unlock(&dir->lock);
+
+ /*no such entry*/
+ return ENOENT;
+ }
+
+ /*Obtain the stat information about the file*/
+ io_statbuf_t stat;
+ err = io_stat(p, &stat);
+
+ /*Deallocate the obtained port*/
+ PORT_DEALLOC(p);
+
+ /*If this file is not a directory*/
+ if(err || !S_ISDIR(stat.st_mode))
+ {
+ /*do not set the port*/
+ p = MACH_PORT_NULL;
+ }
+ else
+ {
+ /*lookup the port with the right to read the contents of the directory*/
+ p = file_name_lookup_under(dir->nn->port, name, O_READ | O_DIRECTORY, 0);
+ if(p == MACH_PORT_NULL)
+ {
+ return EBADF; /*not enough rights?*/
+ }
+ }
+
+ /*The lnode corresponding to the entry we are supposed to fetch*/
+ lnode_t * lnode;
+
+ /*Finalizes the execution of this function*/
+ void
+ finalize(void)
+ {
+ /*If some errors have occurred*/
+ if(err)
+ {
+ /*the user should receive nothing*/
+ *node = NULL;
+
+ /*If there is some port, free it*/
+ if(p != MACH_PORT_NULL)
+ PORT_DEALLOC(p);
+ }
+ /*If there is a node to return*/
+ if(*node)
+ {
+ /*unlock the node*/
+ mutex_unlock(&(*node)->lock);
+
+ /*add the node to the cache*/
+ ncache_node_add(*node);
+ }
+
+ /*Unlock the mutexes in `dir`*/
+ mutex_unlock(&dir->nn->lnode->lock);
+ mutex_unlock(&dir->lock);
+ }/*finalize*/
+
+ /*Try to find an lnode called `name` under the lnode corresponding to `dir`*/
+ err = lnode_get(dir->nn->lnode, name, &lnode);
+
+ /*If such an entry does not exist*/
+ if(err == ENOENT)
+ {
+ /*create a new lnode with the supplied name*/
+ err = lnode_create(name, &lnode);
+ if(err)
+ {
+ finalize();
+ return err;
+ }
+
+ /*install the new lnode into the directory*/
+ lnode_install(dir->nn->lnode, lnode);
+ }
+
+ /*Obtain the node corresponding to this lnode*/
+ err = ncache_node_lookup(lnode, node);
+
+ /*Remove an extra reference from the lnode*/
+ lnode_ref_remove(lnode);
+
+ /*If the lookup in the cache failed*/
+ if(err)
+ {
+ /*stop*/
+ finalize();
+ return err;
+ }
+
+ /*Store the port in the node*/
+ (*node)->nn->port = p;
+
+ /*Construct the full path to the node*/
+ err = lnode_path_construct(lnode, NULL);
+ if(err)
+ {
+ finalize();
+ return err;
+ }
+
+ /*Now the node is up-to-date*/
+ (*node)->nn->flags = FLAG_NODE_ULFS_UPTODATE;
+
+ /*Return the result of performing the operations*/
+ finalize();
+ return err;
+ }/*netfs_attempt_lookup*/
+/*----------------------------------------------------------------------------*/
+/*Deletes `name` in `dir` for `user`*/
+error_t
+netfs_attempt_unlink
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name
+ )
+ {
+ LOG_MSG("netfs_attempt_unlink");
+
+ return 0;
+ }/*netfs_attempt_unlink*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to rename `fromdir`/`fromname` to `todir`/`toname`*/
+error_t
+netfs_attempt_rename
+ (
+ struct iouser * user,
+ struct node * fromdir,
+ char * fromname,
+ struct node * todir,
+ char * toname,
+ int excl
+ )
+ {
+ LOG_MSG("netfs_attempt_rename");
+
+ /*Operation not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_rename*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to create a new directory*/
+error_t
+netfs_attempt_mkdir
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ mode_t mode
+ )
+ {
+ LOG_MSG("netfs_attempt_mkdir");
+
+ return 0;
+ }/*netfs_attempt_mkdir*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to remove directory `name` in `dir` for `user`*/
+error_t
+netfs_attempt_rmdir
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name
+ )
+ {
+ LOG_MSG("netfs_attempt_rmdir");
+
+ return 0;
+ }/*netfs_attempt_rmdir*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the mode of `node` for user `cred` to `uid`:`gid`*/
+error_t
+netfs_attempt_chown
+ (
+ struct iouser * cred,
+ struct node * node,
+ uid_t uid,
+ uid_t gid
+ )
+ {
+ LOG_MSG("netfs_attempt_chown");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_chown*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the author of `node` to `author`*/
+error_t
+netfs_attempt_chauthor
+ (
+ struct iouser * cred,
+ struct node * node,
+ uid_t author
+ )
+ {
+ LOG_MSG("netfs_attempt_chauthor");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_chauthor*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the mode of `node` to `mode` for `cred`*/
+error_t
+netfs_attempt_chmod
+ (
+ struct iouser * user,
+ struct node * node,
+ mode_t mode
+ )
+ {
+ LOG_MSG("netfs_attempt_chmod");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_chmod*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to turn `node` into a symlink targetting `name`*/
+error_t
+netfs_attempt_mksymlink
+ (
+ struct iouser * cred,
+ struct node * node,
+ char * name
+ )
+ {
+ LOG_MSG("netfs_attempt_mksymlink");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_mksymlink*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to turn `node` into a device; type can be either S_IFBLK or S_IFCHR*/
+error_t
+netfs_attempt_mkdev
+ (
+ struct iouser * cred,
+ struct node * node,
+ mode_t type,
+ dev_t indexes
+ )
+ {
+ LOG_MSG("netfs_attempt_mkdev");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_mkdev*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to set the passive translator record for `file` passing `argz`*/
+error_t
+netfs_set_translator
+ (
+ struct iouser * cred,
+ struct node * node,
+ char * argz,
+ size_t arglen
+ )
+ {
+ LOG_MSG("netfs_set_translator");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_set_translator */
+/*----------------------------------------------------------------------------*/
+/*Attempts to call chflags for `node`*/
+error_t
+netfs_attempt_chflags
+ (
+ struct iouser * cred,
+ struct node * node,
+ int flags
+ )
+ {
+ LOG_MSG("netfs_attempt_chflags");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_chflags*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to set the size of file `node`*/
+error_t
+netfs_attempt_set_size
+ (
+ struct iouser * cred,
+ struct node * node,
+ loff_t size
+ )
+ {
+ LOG_MSG("netfs_attempt_set_size");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_set_size*/
+/*----------------------------------------------------------------------------*/
+/*Fetches the filesystem status information*/
+error_t
+netfs_attempt_statfs
+ (
+ struct iouser * cred,
+ struct node * node,
+ fsys_statfsbuf_t * st
+ )
+ {
+ LOG_MSG("netfs_attempt_statfs");
+
+ /*Operation is not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_statfs*/
+/*----------------------------------------------------------------------------*/
+/*Syncs the filesystem*/
+error_t
+netfs_attempt_syncfs
+ (
+ struct iouser * cred,
+ int wait
+ )
+ {
+ LOG_MSG("netfs_attempt_syncfs");
+
+ /*Everythin OK*/
+ return 0;
+ }/*netfs_attempt_syncfs*/
+/*----------------------------------------------------------------------------*/
+/*Creates a link in `dir` with `name` to `file`*/
+error_t
+netfs_attempt_link
+ (
+ struct iouser * user,
+ struct node * dir,
+ struct node * file,
+ char * name,
+ int excl
+ )
+ {
+ LOG_MSG("netfs_attempt_link");
+
+ /*Operation not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_link*/
+/*----------------------------------------------------------------------------*/
+/*Attempts to create an anonymous file related to `dir` with `mode`*/
+error_t
+netfs_attempt_mkfile
+ (
+ struct iouser * user,
+ struct node * dir,
+ mode_t mode,
+ struct node ** node
+ )
+ {
+ LOG_MSG("netfs_attempt_mkfile");
+
+ /*Unlock the directory*/
+ mutex_unlock(&dir->lock);
+
+ /*Operation not supported*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_mkfile*/
+/*----------------------------------------------------------------------------*/
+/*Reads the contents of symlink `node` into `buf`*/
+error_t
+netfs_attempt_readlink
+ (
+ struct iouser * user,
+ struct node * node,
+ char * buf
+ )
+ {
+ LOG_MSG("netfs_attempt_readlink");
+
+ /*Operation not supported (why?..)*/
+ return EOPNOTSUPP;
+ }/*netfs_attempt_readlink*/
+/*----------------------------------------------------------------------------*/
+/*Reads from file `node` up to `len` bytes from `offset` into `data`*/
+error_t
+netfs_attempt_read
+ (
+ struct iouser * cred,
+ struct node * np,
+ loff_t offset,
+ size_t * len,
+ void * data
+ )
+ {
+ LOG_MSG("netfs_attempt_read");
+
+ error_t err = 0;
+
+ /*If there is no port open for the current node*/
+ if(np->nn->port == MACH_PORT_NULL)
+ {
+ /*the parent node of the current node*/
+ node_t * dnp;
+
+ /*obtain the parent node of the the current node*/
+ err = ncache_node_lookup(np->nn->lnode->dir, &dnp);
+
+ /*the lookup should never fail here*/
+ assert(!err);
+
+ /*open a port to the file we are interested in*/
+ mach_port_t p = file_name_lookup_under
+ (dnp->nn->port, np->nn->lnode->name, O_READ, 0);
+
+ /*put `dnp` back, since we don't need it any more*/
+ netfs_nput(dnp);
+
+ if(!p)
+ return EBADF;
+
+ /*store the port in the node*/
+ np->nn->port = p;
+ }
+
+ /*Read the required data from the file*/
+ err = io_read(np->nn->port, (char **)&data, len, offset, *len);
+
+ /*Return the result of reading*/
+ return err;
+ }/*netfs_attempt_read*/
+/*----------------------------------------------------------------------------*/
+/*Writes to file `node` up to `len` bytes from offset from `data`*/
+error_t
+netfs_attempt_write
+ (
+ struct iouser * cred,
+ struct node * node,
+ loff_t offset,
+ size_t * len,
+ void * data
+ )
+ {
+ LOG_MSG("netfs_attempt_write");
+
+ return 0;
+ }/*netfs_attempt_write*/
+/*----------------------------------------------------------------------------*/
+/*Frees all storage associated with the node*/
+void
+netfs_node_norefs
+ (
+ struct node * np
+ )
+ {
+ /*Destroy the node*/
+ node_destroy(np);
+ }/*netfs_node_norefs*/
+/*----------------------------------------------------------------------------*/
+/*Entry point*/
+int
+main
+ (
+ int argc,
+ char ** argv
+ )
+ {
+ /*Start logging*/
+ INIT_LOG();
+ LOG_MSG(">> Starting initialization...");
+
+ /*The port on which this translator will be set upon*/
+ mach_port_t bootstrap_port;
+
+ error_t err = 0;
+
+ /*Parse the command line arguments*/
+ argp_parse(&argp_startup, argc, argv, ARGP_IN_ORDER, 0, 0);
+ LOG_MSG("Command line arguments parsed.");
+
+ /*Try to create the root node*/
+ err = node_create_root(&netfs_root_node);
+ if(err)
+ error(EXIT_FAILURE, err, "Failed to create the root node");
+ LOG_MSG("Root node created.");
+
+ /*Obtain the bootstrap port*/
+ task_get_bootstrap_port(mach_task_self(), &bootstrap_port);
+
+ /*Initialize the translator*/
+ netfs_init();
+
+ /*Obtain a port to the underlying node*/
+ underlying_node = netfs_startup(bootstrap_port, O_READ);
+ LOG_MSG("netfs initialization complete.");
+
+ /*Initialize the root node*/
+ err = node_init_root(netfs_root_node);
+ if(err)
+ error(EXIT_FAILURE, err, "Failed to initialize the root node");
+ LOG_MSG("Root node initialized.");
+ LOG_MSG("\tRoot node address: 0x%lX", (unsigned long)netfs_root_node);
+
+ /*Map the time for updating node information*/
+ err = maptime_map(0, 0, &maptime);
+ if(err)
+ error(EXIT_FAILURE, err, "Failed to map the time");
+ LOG_MSG("Time mapped.");
+
+ /*Initialize the cache with the required number of nodes*/
+ ncache_init(ncache_size);
+ LOG_MSG("Cache initialized.");
+
+ /*Obtain stat information about the underlying node*/
+ err = io_stat(underlying_node, &underlying_node_stat);
+ if(err)
+ error(EXIT_FAILURE, err,
+ "Cannot obtain stat information about the underlying node");
+ LOG_MSG("Stat information for undelying node obtained.");
+
+ /*Obtain the ID of the current process*/
+ fsid = getpid();
+
+ /*Setup the stat information for the root node*/
+ netfs_root_node->nn_stat = underlying_node_stat;
+
+ netfs_root_node->nn_stat.st_ino = FILTERFS_ROOT_INODE;
+ netfs_root_node->nn_stat.st_fsid = fsid;
+ netfs_root_node->nn_stat.st_mode = S_IFDIR | (underlying_node_stat.st_mode
+ & ~S_IFMT & ~S_ITRANS); /*we are providing a translated directory*/
+
+ netfs_root_node->nn_translated = netfs_root_node->nn_stat.st_mode;
+
+ /*If the underlying node is not a directory, enhance the permissions
+ of the root node of filterfs*/
+ if(!S_ISDIR(underlying_node_stat.st_mode))
+ {
+ /*can be read by owner*/
+ if(underlying_node_stat.st_mode & S_IRUSR)
+ /*allow execution by the owner*/
+ netfs_root_node->nn_stat.st_mode |= S_IXUSR;
+ /*can be read by group*/
+ if(underlying_node_stat.st_mode & S_IRGRP)
+ /*allow execution by the group*/
+ netfs_root_node->nn_stat.st_mode |= S_IXGRP;
+ /*can be read by others*/
+ if(underlying_node_stat.st_mode & S_IROTH)
+ /*allow execution by the others*/
+ netfs_root_node->nn_stat.st_mode |= S_IXOTH;
+ }
+
+ /*Update the timestamps of the root node*/
+ fshelp_touch
+ (&netfs_root_node->nn_stat, TOUCH_ATIME | TOUCH_MTIME | TOUCH_CTIME,
+ maptime);
+
+ LOG_MSG(">> Initialization complete. Entering netfs server loop...");
+
+ /*Start serving clients*/
+ for(;;)
+ netfs_server_loop();
+ }/*main*/
+/*----------------------------------------------------------------------------*/
diff --git a/netfs-sample/filterfs.h b/netfs-sample/filterfs.h
new file mode 100644
index 00000000..4470a7fb
--- /dev/null
+++ b/netfs-sample/filterfs.h
@@ -0,0 +1,453 @@
+/*----------------------------------------------------------------------------*/
+/*filter.h*/
+/*----------------------------------------------------------------------------*/
+/*The definitions for the filtering translator*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __FILTERFS_H__
+#define __FILTERFS_H__
+/*----------------------------------------------------------------------------*/
+#include <stddef.h>
+#include <stdlib.h>
+#include <cthreads.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/statfs.h>
+#include <sys/time.h>
+#include <hurd/ihash.h>
+#include <hurd/iohelp.h>
+/*----------------------------------------------------------------------------*/
+#include "lib.h"
+#include "node.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*The inode for the root node*/
+#define FILTERFS_ROOT_INODE 1
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*A mapped time value for filterfs*/
+/*Required for a very fast access to time*/
+extern volatile struct mapped_time_value * maptime;
+/*----------------------------------------------------------------------------*/
+/*A port to the underlying node*/
+extern mach_port_t underlying_node;
+/*----------------------------------------------------------------------------*/
+/*The stat information about the underlying node*/
+extern io_statbuf_t underlying_node_stat;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Structures----------------------------------------------------------*/
+/*A single entry in a directory*/
+struct filterfs_dir_entry
+ {
+ char * name; /*name of the entry*/
+ size_t hv; /*hash value of NAME*/
+
+ struct node * node; /*the active node referred to by this node (may be 0)*/
+ /*NETFS_NDOE_REFCNT_LOCK should be hel whule frobbing this*/
+
+ struct stat stat; /*status information*/
+
+ char * symlink_target; /*the name of the node this entry might refer to*/
+
+ time_t stat_timestamp; /*the moment at which the status information was retreieved*/
+
+ /*the directory to which this entry belongs*/
+ struct filterfs_dir * dir;
+
+ /*link to the entry in hash bucket and the address of the previous entry's
+ (or hashtable's) pointer to this entry*/
+ /*If self_p is null, then this entry is deleted and awaiting
+ the final disposal*/
+ struct filterfs_dir_entry * next, ** self_p;
+
+ /*the next and the previous entries in the 'directory order'; 0 if there
+ are none*/
+ struct filterfs_dir_entry * ordered_next, ** ordered_self_p;
+
+ /*when the presence/absence of this file was last checked*/
+ time_t name_timestamp;
+
+ /*used for removing this entry*/
+ hurd_ihash_locp_t inode_locp;
+
+ /*a field for a negative result of lookup*/
+ int noent : 1;
+
+ /*a marker for gabage collecting*/
+ int valid : 1;
+ };/*struct filterfs_dir_entry*/
+/*----------------------------------------------------------------------------*/
+/*A directory*/
+struct filterfs_dir
+ {
+ /*the number of entries in the hash table*/
+ size_t num_entries;
+
+ /*the number of entries that have nodes attached*/
+ /*We keep an additional reference to our node if there is any,
+ to prevent it from going away*/
+ size_t num_live_entries;
+
+ /*the hash table for entries*/
+ struct filterfs_dir_entry ** htable;
+ size_t htable_len; /*the lenght of the hash table*/
+
+ /*the list of entries in 'directory order'.*/
+ /*The entries are listed in a linked list using the ordered_next
+ and ordered_self_p fields in each entry. Not all entries in htable
+ need to be in this list*/
+ struct filterfs_dir_entry * ordered;
+
+ /*the filesystem node corresponding to this directory*/
+ struct node * node;
+
+ /*the filesystem this directory is in*/
+ struct filterfs * fs;
+
+ /*when the presence/absence of this file was last checked*/
+ time_t name_timestamp;
+
+ /*used for removing this entry*/
+ hurd_ihash_locp_t inode_locp;
+
+ /*Stuff for detecting bulk stats (?)*/
+ /*Might be reduntant for this project*/
+
+ /*the timestamp of the first sample in bulk_stat_count1, rounded to
+ BULK_STAT_PERIOD seconds*/
+ time_t buld_stat_base_stamp;
+
+ /*the number of stats done in the period
+ [bulk_stat_base_stamp, bulk_stat_base_stamp + BULK_STAT_PERIOD]*/
+ unsigned bulk_stat_count_first_half;
+
+ /*the number of stats done in the period
+ [bulk_stat_bast_stamp + BULK_STAT_PERIOD,
+ bulk_stat_bast_stamp + 2 * BULK_STAT_PERIOD]*/
+ unsigned bulk_stat_count_second_half;
+ };/*struct filterfs_dir*/
+/*----------------------------------------------------------------------------*/
+/*A particular filesystem*/
+struct filterfs
+ {
+ /*the root of the filesystem*/
+ struct node * root;
+
+ /*inode numbers*/
+ /*Assigned sequentially in the order of creation*/
+ ino_t next_inode;
+
+ /*the identifier of the filesystem (?)*/
+ int fsid;
+
+ /*a hash table mapping inode numbers to directory entries*/
+ struct hurd_ihash inode_mappings;
+
+ /*the lock for the hash table*/
+ spin_lock_t inode_mappings_lock;
+ };/*struct filterfs*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Attempts to create a file named `name` in `dir` for `user` with mode `mode`*/
+error_t
+netfs_attempt_create_file
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ mode_t mode,
+ struct node ** node
+ );
+/*----------------------------------------------------------------------------*/
+/*Returns an error if the process of opening a file should not be allowed
+ to complete because of insufficient permissions*/
+error_t
+netfs_check_open_permissions
+ (
+ struct iouser * user,
+ struct node * np,
+ int flags,
+ int newnode
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts an utimes call for the user `cred` on node `node`*/
+error_t
+netfs_attempt_utimes
+ (
+ struct iouser * cred,
+ struct node * node,
+ struct timespec * atime,
+ struct timespec * mtime
+ );
+/*----------------------------------------------------------------------------*/
+/*Returns the valid access types for file `node` and user `cred`*/
+error_t
+netfs_report_access
+ (
+ struct iouser * cred,
+ struct node * np,
+ int * types
+ );
+/*----------------------------------------------------------------------------*/
+/*Validates the stat data for the node*/
+error_t
+netfs_validate_stat
+ (
+ struct node * np,
+ struct iouser * cred
+ );
+/*----------------------------------------------------------------------------*/
+/*Syncs `node` completely to disk*/
+error_t
+netfs_attempt_sync
+ (
+ struct iouser * cred,
+ struct node * node,
+ int wait
+ );
+/*----------------------------------------------------------------------------*/
+/*Fetches a directory*/
+error_t
+netfs_get_dirents
+ (
+ struct iouser * cred,
+ struct node * dir,
+ int first_entry,
+ int num_entries,
+ char ** data,
+ mach_msg_type_number_t * data_len,
+ vm_size_t max_data_len,
+ int * data_entries
+ );
+/*----------------------------------------------------------------------------*/
+/*Looks up `name` under `dir` for `user`*/
+error_t
+netfs_attempt_lookup
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ struct node ** node
+ );
+/*----------------------------------------------------------------------------*/
+/*Deletes `name` in `dir` for `user`*/
+error_t
+netfs_attempt_unlink
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to rename `fromdir`/`fromname` to `todir`/`toname`*/
+error_t
+netfs_attempt_rename
+ (
+ struct iouser * user,
+ struct node * fromdir,
+ char * fromname,
+ struct node * todir,
+ char * toname,
+ int excl
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to create a new directory*/
+error_t
+netfs_attempt_mkdir
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name,
+ mode_t mode
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to remove directory `name` in `dir` for `user`*/
+error_t
+netfs_attempt_rmdir
+ (
+ struct iouser * user,
+ struct node * dir,
+ char * name
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the owner of `node` for user `cred` to `uid`:`gid`*/
+error_t
+netfs_attempt_chown
+ (
+ struct iouser * cred,
+ struct node * node,
+ uid_t uid,
+ uid_t gid
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the author of `node` to `author`*/
+error_t
+netfs_attempt_chauthor
+ (
+ struct iouser * cred,
+ struct node * node,
+ uid_t author
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to change the mode of `node` to `mode` for `cred`*/
+error_t
+netfs_attempt_chmod
+ (
+ struct iouser * user,
+ struct node * node,
+ mode_t mode
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to turn `node` into a symlink targetting `name`*/
+error_t
+netfs_attempt_mksymlink
+ (
+ struct iouser * cred,
+ struct node * node,
+ char * name
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to turn `node` into a device; type can be either S_IFBLK or S_IFCHR*/
+error_t
+netfs_attempt_mkdev
+ (
+ struct iouser * cred,
+ struct node * node,
+ mode_t type,
+ dev_t indexes
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to set the passive translator record for `file` passing `argz`*/
+error_t
+netfs_set_translator
+ (
+ struct iouser * cred,
+ struct node * node,
+ char * argz,
+ size_t arglen
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to call chflags for `node`*/
+error_t
+netfs_attempt_chflags
+ (
+ struct iouser * cred,
+ struct node * node,
+ int flags
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to set the size of file `node`*/
+error_t
+netfs_attempt_set_size
+ (
+ struct iouser * cred,
+ struct node * node,
+ loff_t size
+ );
+/*----------------------------------------------------------------------------*/
+/*Fetches the filesystem status information*/
+error_t
+netfs_attempt_statfs
+ (
+ struct iouser * cred,
+ struct node * node,
+ fsys_statfsbuf_t * st
+ );
+/*----------------------------------------------------------------------------*/
+/*Syncs the filesystem*/
+error_t
+netfs_attempt_syncfs
+ (
+ struct iouser * cred,
+ int wait
+ );
+/*----------------------------------------------------------------------------*/
+/*Creates a link in `dir` with `name` to `file`*/
+error_t
+netfs_attempt_link
+ (
+ struct iouser * user,
+ struct node * dir,
+ struct node * file,
+ char * name,
+ int excl
+ );
+/*----------------------------------------------------------------------------*/
+/*Attempts to create an anonymous file related to `dir` with `mode`*/
+error_t
+netfs_attempt_mkfile
+ (
+ struct iouser * user,
+ struct node * dir,
+ mode_t mode,
+ struct node ** node
+ );
+/*----------------------------------------------------------------------------*/
+/*Reads the contents of symlink `node` into `buf`*/
+error_t
+netfs_attempt_readlink
+ (
+ struct iouser * user,
+ struct node * node,
+ char * buf
+ );
+/*----------------------------------------------------------------------------*/
+/*Reads from file `node` up to `len` bytes from `offset` into `data`*/
+error_t
+netfs_attempt_read
+ (
+ struct iouser * cred,
+ struct node * np,
+ loff_t offset,
+ size_t * len,
+ void * data
+ );
+/*----------------------------------------------------------------------------*/
+/*Writes to file `node` up to `len` bytes from offset from `data`*/
+error_t
+netfs_attempt_write
+ (
+ struct iouser * cred,
+ struct node * node,
+ loff_t offset,
+ size_t * len,
+ void * data
+ );
+/*----------------------------------------------------------------------------*/
+/*Frees all storage associated with the node*/
+void
+netfs_node_norefs
+ (
+ struct node * np
+ );
+/*----------------------------------------------------------------------------*/
+#endif
diff --git a/netfs-sample/lib.c b/netfs-sample/lib.c
new file mode 100644
index 00000000..aa0ff0be
--- /dev/null
+++ b/netfs-sample/lib.c
@@ -0,0 +1,193 @@
+/*----------------------------------------------------------------------------*/
+/*lib.h*/
+/*----------------------------------------------------------------------------*/
+/*Basic routines for filesystem manipulations*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+#define _GNU_SOURCE 1
+/*----------------------------------------------------------------------------*/
+#include <sys/mman.h>
+/*----------------------------------------------------------------------------*/
+#include "lib.h"
+#include "debug.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Fetches directory entries for `dir`*/
+error_t
+dir_entries_get
+ (
+ file_t dir,
+ char ** dirent_data, /*the list of directory entries as returned
+ by dir_readdir*/
+ size_t * dirent_data_size, /*the size of `dirent_data`*/
+ struct dirent *** dirent_list /*the array of pointers to beginnings of
+ dirents in dirent_data*/
+ )
+ {
+ error_t err = 0;
+
+ /*The data (array of dirents(?)) returned by dir_readdir*/
+ char * data;
+
+ /*The size of `data`*/
+ size_t data_size;
+
+ /*The number of entries in `data`*/
+ int entries_num;
+
+ /*Try to read the contents of the specified directory*/
+ err = dir_readdir(dir, &data, &data_size, 0, -1, 0, &entries_num);
+ if(err)
+ return err;
+
+ /*Create a new list of dirents*/
+ struct dirent ** list;
+
+ /*Allocate the memory for the list of dirents and for the
+ finalizing element*/
+ list = malloc(sizeof(struct dirent *) * (entries_num + 1));
+
+ /*If memory allocation has failed*/
+ if(!list)
+ {
+ /*free the result of dir_readdir*/
+ munmap(data, data_size);
+
+ /*return the corresponding error*/
+ return ENOMEM;
+ }
+
+ /*The current directory entry*/
+ struct dirent * dp;
+
+ int i;
+
+ /*Go through every element of the list of dirents*/
+ for
+ (
+ i = 0, dp = (struct dirent *)data;
+ i < entries_num;
+ ++i, dp = (struct dirent *)((char *)dp + dp->d_reclen))
+ /*copy the current value into the list*/
+ *(list + i) = dp;
+
+ /*Nullify the last element of the list*/
+ *(list + i) = NULL;
+
+ /*Copy the required values in the parameters*/
+ *dirent_data = data;
+ *dirent_data_size = data_size;
+ *dirent_list = list;
+
+ /*Return success*/
+ return err;
+ }/*dir_entries_get*/
+/*----------------------------------------------------------------------------*/
+/*Lookup `name` under `dir` (or cwd, if `dir` is invalid)*/
+error_t
+file_lookup
+ (
+ file_t dir,
+ char * name,
+ int flags0, /*try to open with these flags first*/
+ int flags1, /*try to open with these flags, if `flags0` fail*/
+ int mode, /*if the file is to be created, create it with this mode*/
+ file_t * port, /*store the port to the looked up file here*/
+ io_statbuf_t * stat /*store the stat information here*/
+ )
+ {
+ error_t err = 0;
+
+ /*The port to the looked up file*/
+ file_t p;
+
+ /*The stat information about the looked up file*/
+ io_statbuf_t s;
+
+ /*Performs a lookup under 'dir' or in cwd, if `dir` is invalid*/
+ file_t
+ do_file_lookup
+ (
+ file_t dir,
+ char * name, /*lookup this file*/
+ int flags, /*lookup the file with these flags*/
+ int mode /*if a new file is to be created, create it with this mode*/
+ )
+ {
+ /*The result of lookup*/
+ file_t p;
+
+ /*If `dir` is a valid port*/
+ if(dir != MACH_PORT_NULL)
+ /*try to lookup `name` under `dir`*/
+ p = file_name_lookup_under(dir, name, flags, mode);
+ else
+ /*lookup `name` under current cwd*/
+ p = file_name_lookup(name, flags, mode);
+
+ /*Return the result of the lookup*/
+ return p;
+ }/*do_file_lookup*/
+
+ /*Lookup `name` under the suggested `dir`*/
+ p = do_file_lookup(dir, name, flags0, mode);
+
+ /*If the lookup failed*/
+ if(p == MACH_PORT_NULL)
+ /*try to lookup for `name` using alternative flags `flags1`*/
+ p = do_file_lookup(dir, name, flags1, mode);
+
+ /*If the port is valid*/
+ if(p != MACH_PORT_NULL)
+ {
+ /*If stat information is required*/
+ if(stat)
+ {
+ /*obtain stat information for `p`*/
+ err = io_stat(p, &s);
+ if(err)
+ PORT_DEALLOC(p);
+ }
+ }
+ else
+ /*copy `errno` into `err`*/
+ err = errno;
+
+ /*If no errors have happened during lookup*/
+ if(!err)
+ {
+ /*copy the resulting port into *`port`*/
+ *port = p;
+
+ /*fill in the receiver for stat information, if requried*/
+ if(stat)
+ *stat = s;
+ }
+
+ /*Return the result of performing operations*/
+ return err;
+ }/*file_lookup*/
+/*----------------------------------------------------------------------------*/
diff --git a/netfs-sample/lib.h b/netfs-sample/lib.h
new file mode 100644
index 00000000..6335efcf
--- /dev/null
+++ b/netfs-sample/lib.h
@@ -0,0 +1,82 @@
+/*----------------------------------------------------------------------------*/
+/*lib.h*/
+/*----------------------------------------------------------------------------*/
+/*Declarations of basic routines for filesystem manipulations*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __LIB_H__
+#define __LIB_H__
+
+/*----------------------------------------------------------------------------*/
+#define __USE_FILE_OFFSET64
+/*----------------------------------------------------------------------------*/
+#include <hurd.h>
+#include <dirent.h>
+#include <stddef.h>
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*Alignment of directory entries*/
+#define DIRENT_ALIGN 4
+/*----------------------------------------------------------------------------*/
+/*The offset of the directory name in the directory entry structure*/
+#define DIRENT_NAME_OFFS offsetof(struct dirent, d_name)
+/*----------------------------------------------------------------------------*/
+/*Computes the length of the structure before the name + the name + 0,
+ all padded to DIRENT_ALIGN*/
+#define DIRENT_LEN(name_len)\
+ ((DIRENT_NAME_OFFS + (name_len) + 1 + DIRENT_ALIGN - 1) &\
+ ~(DIRENT_ALIGN - 1))
+/*----------------------------------------------------------------------------*/
+/*Deallocate the given port for the current task*/
+#define PORT_DEALLOC(p) (mach_port_deallocate(mach_task_self(), (p)))
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Fetches directory entries for `dir`*/
+error_t
+dir_entries_get
+ (
+ file_t dir,
+ char ** dirent_data, /*the list of directory entries as returned
+ by dir_readdir*/
+ size_t * dirent_data_size, /*the size of `dirent_data`*/
+ struct dirent *** dirent_list /*the array of pointers to beginnings of
+ dirents in dirent_data*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Lookup `name` under `dir` (or cwd, if `dir` is invalid)*/
+error_t
+file_lookup
+ (
+ file_t dir,
+ char * name,
+ int flags0, /*try to open with these flags first*/
+ int flags1, /*try to open with these flags, if `flags0` fail*/
+ int mode, /*if the file is to be created, create it with this mode*/
+ file_t * port, /*store the port to the looked up file here*/
+ io_statbuf_t * stat /*store the stat information here*/
+ );
+/*----------------------------------------------------------------------------*/
+#endif /*__LIB_H__*/
diff --git a/netfs-sample/lnode.c b/netfs-sample/lnode.c
new file mode 100644
index 00000000..33394ed0
--- /dev/null
+++ b/netfs-sample/lnode.c
@@ -0,0 +1,305 @@
+/*----------------------------------------------------------------------------*/
+/*lnode.c*/
+/*----------------------------------------------------------------------------*/
+/*Implementation of policies of management of 'light nodes'*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+#define _GNU_SOURCE
+/*----------------------------------------------------------------------------*/
+#include "lnode.h"
+#include "debug.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Adds a reference to the `lnode` (which must be locked)*/
+void
+lnode_ref_add
+ (
+ lnode_t * node
+ )
+ {
+ /*Increment the number of references*/
+ ++node->references;
+ }/*lnode_ref_add*/
+/*----------------------------------------------------------------------------*/
+/*Removes a reference from `node` (which must be locked). If that was the last
+ reference, destroy the node*/
+void
+lnode_ref_remove
+ (
+ lnode_t * node
+ )
+ {
+ /*Fail if the node is not referenced by anybody*/
+ assert(node->references);
+
+ /*Decrement the number of references to `node`*/
+ --node->references;
+
+ /*If there are no references remaining*/
+ if(node->references == 0)
+ {
+ /*uninstall the node from the directory it is in and destroy it*/
+ lnode_uninstall(node);
+ lnode_destroy(node);
+ }
+ else
+ /*simply unlock the node*/
+ mutex_unlock(&node->lock);
+ }/*lnode_ref_remove*/
+/*----------------------------------------------------------------------------*/
+/*Creates a new lnode with `name`; the new node is locked and contains
+ a single reference*/
+error_t
+lnode_create
+ (
+ char * name,
+ lnode_t ** node /*put the result here*/
+ )
+ {
+ /*Allocate the memory for the node*/
+ lnode_t * node_new = malloc(sizeof(lnode_t));
+
+ /*If the memory has not been allocated*/
+ if(!node_new)
+ {
+ /*stop*/
+ return ENOMEM;
+ }
+
+ /*The copy of the name*/
+ char * name_cp = NULL;
+
+ /*If the name exists*/
+ if(name)
+ {
+ /*duplicate it*/
+ name_cp = strdup(name);
+
+ /*If the name has not been duplicated*/
+ if(!name_cp)
+ {
+ /*free the node*/
+ free(node_new);
+
+ /*stop*/
+ return ENOMEM;
+ }
+ }
+
+ /*Setup the new node*/
+ memset(node_new, 0, sizeof(lnode_t));
+ node_new->name = name_cp;
+ node_new->name_len = (name_cp) ? (strlen(name_cp)) : (0);
+
+ /*Setup one reference to this lnode*/
+ node_new->references = 1;
+
+ /*Initialize the mutex and acquire a lock on this lnode*/
+ mutex_init(&node_new->lock);
+ mutex_lock(&node_new->lock);
+
+ /*Store the result in the second parameter*/
+ *node = node_new;
+
+ /*Return success*/
+ return 0;
+ }/*lnode_create*/
+/*----------------------------------------------------------------------------*/
+/*Destroys the given lnode*/
+void
+lnode_destroy
+ (
+ lnode_t * node /*destroy this*/
+ )
+ {
+ /*Destroy the name of the node*/
+ free(node->name);
+
+ /*Destroy the node itself*/
+ free(node);
+ }/*lnode_destroy*/
+/*----------------------------------------------------------------------------*/
+/*Constructs the full path for the given lnode and stores the result both in
+ the parameter and inside the lnode (the same string, actually)*/
+error_t
+lnode_path_construct
+ (
+ lnode_t * node,
+ char ** path /*store the path here*/
+ )
+ {
+ error_t err = 0;
+
+ /*The final path*/
+ char * p;
+
+ /*The final length of the path*/
+ int p_len = 0;
+
+ /*A temporary pointer to an lnode*/
+ lnode_t * n;
+
+ /*While the root node of the filterfs filesystem has not been reached*/
+ for(n = node; n && n->dir; n = n->dir)
+ /*add the length of the name of `n` to `p_len` make some space for
+ the delimiter '/', if we are not approaching the root node*/
+ /*p_len += n->name_len + ((n->dir->dir) ? (1) : (0));*/
+ /*There is some path to our root node, so we will anyway have to
+ add a '/'*/
+ p_len += n->name_len + 1;
+
+ /*Include the space for the path to the root node of the filterfs
+ (n is now the root of the filesystem)*/
+ p_len += strlen(n->path) + 1;
+
+ /*Try to allocate the space for the string*/
+ p = malloc(p_len * sizeof(char));
+ if(!p)
+ err = ENOMEM;
+ /*If memory allocation has been successful*/
+ else
+ {
+ /*put a terminal 0 at the end of the path*/
+ p[--p_len] = 0;
+
+ /*While the root node of the filterfs filesystem has not been reached*/
+ for(n = node; n && n->dir; n = n->dir)
+ {
+ /*compute the position where the name of `n` is to be inserted*/
+ p_len -= n->name_len;
+
+ /*copy the name of the node into the path (omit the terminal 0)*/
+ strncpy(p + p_len, n->name, n->name_len);
+
+ /*If we are not at the root node of the filterfs filesystem, add the
+ separator*/
+ /*if(n->dir->dir)
+ p[--p_len] = '/';*/
+ /*we anyway have to add the separator slash*/
+ p[--p_len] = '/';
+ }
+
+ /*put the path to the root node at the beginning of the first path
+ (n is at the root now)*/
+ strncpy(p, n->path, strlen(n->path));
+
+ /*destroy the former path in lnode, if it exists*/
+ if(node->path)
+ free(node->path);
+
+ /*store the new path inside the lnode*/
+ node->path = p;
+
+ /*store the path in the parameter*/
+ if(path)
+ *path = p;
+ }
+
+ /*Return the result of operations*/
+ return err;
+ }/*lnode_path_construct*/
+/*----------------------------------------------------------------------------*/
+/*Gets a light node by its name, locks it and increments its refcount*/
+error_t
+lnode_get
+ (
+ lnode_t * dir, /*search here*/
+ char * name, /*search for this name*/
+ lnode_t ** node /*put the result here*/
+ )
+ {
+ error_t err = 0;
+
+ /*The pointer to the required lnode*/
+ lnode_t * n;
+
+ /*Find `name` among the names of entries in `dir`*/
+ for(n = dir->entries; n && (strcmp(n->name, name) != 0); n = n->next);
+
+ /*If the search has been successful*/
+ if(n)
+ {
+ /*lock the node*/
+ mutex_lock(&n->lock);
+
+ /*increment the refcount of the found lnode*/
+ lnode_ref_add(n);
+
+ /*put a pointer to `n` into the parameter*/
+ *node = n;
+ }
+ else
+ err = ENOENT;
+
+ /*Return the result of operations*/
+ return err;
+ }/*lnode_get*/
+/*----------------------------------------------------------------------------*/
+/*Install the lnode into the lnode tree: add a reference to `dir` (which must
+ be locked)*/
+void
+lnode_install
+ (
+ lnode_t * dir, /*install here*/
+ lnode_t * node /*install this*/
+ )
+ {
+ /*Install `node` into the list of entries in `dir`*/
+ node->next = dir->entries;
+ node->prevp = &dir->entries; /*this node is the first on the list*/
+ if(dir->entries)
+ dir->entries->prevp = &node->next; /*here `prevp` gets the value
+ corresponding to its meaning*/
+ dir->entries = node;
+
+ /*Add a new reference to dir*/
+ lnode_ref_add(dir);
+
+ /*Setup the `dir` link in node*/
+ node->dir = dir;
+ }/*lnode_install*/
+/*----------------------------------------------------------------------------*/
+/*Unistall the node from the node tree; remove a reference from the lnode
+ containing `node`*/
+void
+lnode_uninstall
+ (
+ lnode_t * node
+ )
+ {
+ /*Remove a reference from the parent*/
+ lnode_ref_remove(node->dir);
+
+ /*Make the next pointer in the previous element point to the element,
+ which follows `node`*/
+ *node->prevp = node->next;
+
+ /*If the current node is not the last one, connect the list after removal
+ of the current node*/
+ if(node->next)
+ node->next->prevp = &node->next;
+ }/*lnode_uninstall*/
+/*----------------------------------------------------------------------------*/
diff --git a/netfs-sample/lnode.h b/netfs-sample/lnode.h
new file mode 100644
index 00000000..7c42c8d4
--- /dev/null
+++ b/netfs-sample/lnode.h
@@ -0,0 +1,143 @@
+/*----------------------------------------------------------------------------*/
+/*lnode.h*/
+/*----------------------------------------------------------------------------*/
+/*Management of cheap 'light nodes'*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __LNODE_H__
+#define __LNODE_H__
+
+/*----------------------------------------------------------------------------*/
+#include <error.h>
+#include <hurd/netfs.h>
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*A candy synonym for the fundamental libnetfs node*/
+typedef struct node node_t;
+/*----------------------------------------------------------------------------*/
+/*The light node*/
+struct lnode
+ {
+ /*the name of the lnode*/
+ char * name;
+
+ /*the length of the name; `name` does not change, and this value is used
+ quite often, therefore calculate it just once*/
+ size_t name_len;
+
+ /*the full path to the lnode*/
+ char * path;
+
+ /*the associated flags*/
+ int flags;
+
+ /*the number of references to this lnode*/
+ int references;
+
+ /*the reference to the real node*/
+ node_t * node;
+
+ /*the next lnode and the pointer to this lnode from the previous one*/
+ struct lnode * next, **prevp;
+
+ /*the lnode (directory) in which this node is contained*/
+ struct lnode * dir;
+
+ /*the beginning of the list of entries contained in this lnode (directory)*/
+ struct lnode * entries;
+
+ /*a lock*/
+ struct mutex lock;
+ };/*struct lnode*/
+/*----------------------------------------------------------------------------*/
+typedef struct lnode lnode_t;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Adds a reference to the `lnode` (which must be locked)*/
+void
+lnode_ref_add
+ (
+ lnode_t * node
+ );
+/*----------------------------------------------------------------------------*/
+/*Removes a reference from `node` (which must be locked). If that was the last
+ reference, destroy the node*/
+void
+lnode_ref_remove
+ (
+ lnode_t * node
+ );
+/*----------------------------------------------------------------------------*/
+/*Creates a new lnode with `name`; the new node is locked and contains
+ a single reference*/
+error_t
+lnode_create
+ (
+ char * name,
+ lnode_t ** node /*put the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Destroys the given lnode*/
+void
+lnode_destroy
+ (
+ lnode_t * node /*destroy this*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Constructs the full path for the given lnode and stores the result both in
+ the parameter and inside the lnode (the same string, actually)*/
+error_t
+lnode_path_construct
+ (
+ lnode_t * node,
+ char ** path /*store the path here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Gets a light node by its name, locks it and increments its refcount*/
+error_t
+lnode_get
+ (
+ lnode_t * dir, /*search here*/
+ char * name, /*search for this name*/
+ lnode_t ** node /*put the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Install the lnode into the lnode tree: add a reference to `dir` (which must
+ be locked)*/
+void
+lnode_install
+ (
+ lnode_t * dir, /*install here*/
+ lnode_t * node /*install this*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Unistall the node from the node tree; remove a reference from the lnode*/
+void
+lnode_uninstall
+ (
+ lnode_t * node
+ );
+/*----------------------------------------------------------------------------*/
+#endif /*__LNODE_H__*/
diff --git a/netfs-sample/ncache.c b/netfs-sample/ncache.c
new file mode 100644
index 00000000..12462d31
--- /dev/null
+++ b/netfs-sample/ncache.c
@@ -0,0 +1,221 @@
+/*----------------------------------------------------------------------------*/
+/*ncache.h*/
+/*----------------------------------------------------------------------------*/
+/*The implementation of the cache of nodes*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+#define _GNU_SOURCE 1
+/*----------------------------------------------------------------------------*/
+#include "ncache.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The global cache chain*/
+ncache_t ncache;
+/*----------------------------------------------------------------------------*/
+/*Cache size (may be overwritten by the user)*/
+int ncache_size = NCACHE_SIZE;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Initializes the node cache*/
+void
+ncache_init
+ (
+ int size_max
+ )
+ {
+ /*Reset the LRU and MRU ends of the list*/
+ ncache.mru = ncache.lru = NULL;
+
+ /*Set the maximal size according to the parameter*/
+ ncache.size_max = size_max;
+
+ /*The cache is empty so far; remark that*/
+ ncache.size_current = 0;
+
+ /*Init the lock*/
+ mutex_init(&ncache.lock);
+ }/*ncache_init*/
+/*----------------------------------------------------------------------------*/
+/*Looks up the lnode and stores the result in `node`; creates a new entry
+ in the cache if the lookup fails*/
+error_t
+ncache_node_lookup
+ (
+ lnode_t * lnode, /*search for this*/
+ node_t ** node /*put the result here*/
+ )
+ {
+ error_t err = 0;
+
+ /*Obtain the pointer to the node corresponding to `lnode`*/
+ node_t * n = lnode->node;
+
+ /*If a node has already been created for the given lnode*/
+ if(n != NULL)
+ {
+ /*count a new reference to 'n'*/
+ netfs_nref(n);
+ }
+ else
+ {
+ /*create a new node for the given lnode and store the result in `n`*/
+ err = node_create(lnode, &n);
+ }
+
+ /*If no errors have occurred during the previous operations*/
+ if(!err)
+ {
+ /*lock the mutex in the looked up node*/
+ mutex_lock(&n->lock);
+
+ /*store the lookup result in `node`*/
+ *node = n;
+ }
+
+ /*Return the result of operations*/
+ return err;
+ }/*ncache_node_lookup*/
+/*----------------------------------------------------------------------------*/
+/*Removes the given node from the cache*/
+static
+void
+ncache_node_remove
+ (
+ node_t * node
+ )
+ {
+ /*Obtain the pointer to the netnode (this contains the information
+ specific of us)*/
+ struct netnode * nn = node->nn;
+
+ /*If there exists a successor of this node in the cache chain*/
+ if(nn->ncache_next)
+ /*remove the reference in the successor*/
+ nn->ncache_next->nn->ncache_prev = nn->ncache_prev;
+ /*If there exists a predecessor of this node in the cache chain*/
+ if(nn->ncache_prev)
+ /*remove the reference in the predecessor*/
+ nn->ncache_prev->nn->ncache_next = nn->ncache_next;
+
+ /*If the node was located at the MRU end of the list*/
+ if(ncache.mru == node)
+ /*shift the MRU end to the next node*/
+ ncache.mru = nn->ncache_next;
+ /*If the node was located at the LRU end of the list*/
+ if(ncache.lru == node)
+ /*shift the LRU end to the previous node*/
+ ncache.lru = nn->ncache_prev;
+
+ /*Invalidate the references inside the node*/
+ nn->ncache_next = nn->ncache_prev = NULL;
+
+ /*Count the removal of a node*/
+ --ncache.size_current;
+ }/*ncache_node_remove*/
+/*----------------------------------------------------------------------------*/
+/*Resets the node cache*/
+void
+ncache_reset(void)
+ {
+ /*The node being currently deleted*/
+ node_t * node;
+
+ /*Acquire a lock on the cache*/
+ mutex_lock(&ncache.lock);
+
+ /*Remove the whole cache chain*/
+ for(node = ncache.mru; node != NULL; ncache_node_remove(node), node = ncache.mru);
+
+ /*Release the lock*/
+ mutex_unlock(&ncache.lock);
+ }/*ncache_reset*/
+/*----------------------------------------------------------------------------*/
+/*Adds the given node to the cache*/
+void
+ncache_node_add
+ (
+ node_t * node /*the node to add*/
+ )
+ {
+ /*Acquire a lock on the cache*/
+ mutex_lock(&ncache.lock);
+
+ /*If there already are some nodes in the cache and it is enabled*/
+ if((ncache.size_max > 0) || (ncache.size_current > 0))
+ {
+ /*If the node to be added is not at the MRU end already*/
+ if(ncache.mru != node)
+ {
+ /*If the node is correctly integrated in the cache*/
+ if((node->nn->ncache_next != NULL) && (node->nn->ncache_prev != NULL))
+ /*remove the old entry*/
+ ncache_node_remove(node);
+ else
+ /*add a new reference to the node*/
+ netfs_nref(node);
+
+ /*put the node at the MRU end of the cache chain*/
+ node->nn->ncache_next = ncache.mru;
+ node->nn->ncache_prev = NULL;
+
+ /*setup the pointer in the old MRU end, if it exists*/
+ if(ncache.mru != NULL)
+ ncache.mru->nn->ncache_prev = node;
+
+ /*setup the LRU end of the cache chain, if it did not exist previously*/
+ if(ncache.lru == NULL)
+ ncache.lru = node;
+
+ /*shift the MRU end to the new node*/
+ ncache.mru = node;
+
+ /*count the addition*/
+ ++ncache.size_current;
+ }
+ }
+
+ /*While the size of the cache is exceeding the maximal size*/
+ node_t * old_lru;
+ for
+ (
+ old_lru = ncache.lru;
+ ncache.size_current > ncache.size_max;
+ old_lru = ncache.lru
+ )
+ {
+ /*remove the current LRU end of the list from the cache*/
+ ncache_node_remove(old_lru);
+
+ /*release the reference to the node owned by this thread*/
+ netfs_nrele(old_lru);
+ }
+
+ /*Release the lock on the cache*/
+ mutex_unlock(&ncache.lock);
+ }/*ncache_node_add*/
+/*----------------------------------------------------------------------------*/
diff --git a/netfs-sample/ncache.h b/netfs-sample/ncache.h
new file mode 100644
index 00000000..124d514e
--- /dev/null
+++ b/netfs-sample/ncache.h
@@ -0,0 +1,100 @@
+/*----------------------------------------------------------------------------*/
+/*ncache.h*/
+/*----------------------------------------------------------------------------*/
+/*The cache of nodes*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __NCACHE_H__
+#define __NCACHE_H__
+
+/*----------------------------------------------------------------------------*/
+#include <error.h>
+#include <hurd/netfs.h>
+/*----------------------------------------------------------------------------*/
+#include "node.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*The default maximal cache size*/
+#define NCACHE_SIZE 256
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*A cache chain*/
+struct ncache
+ {
+ /*the MRU end of the cache chain*/
+ node_t * mru;
+
+ /*the LRU end of the cache chain*/
+ node_t * lru;
+
+ /*the maximal number of nodes to cache*/
+ int size_max;
+
+ /*the current length of the cache chain*/
+ int size_current;
+
+ /*a lock*/
+ struct mutex lock;
+ };/*struct ncache*/
+/*----------------------------------------------------------------------------*/
+typedef struct ncache ncache_t;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The cache size (may be overwritten by the user)*/
+extern int cache_size;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Initializes the node cache*/
+void
+ncache_init
+ (
+ int size_max
+ );
+/*----------------------------------------------------------------------------*/
+/*Looks up the lnode and stores the result in `node`; creates a new entry
+ in the cache if the lookup fails*/
+error_t
+ncache_node_lookup
+ (
+ lnode_t * lnode, /*search for this*/
+ node_t ** node /*put the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Resets the node cache*/
+void
+ncache_reset(void);
+/*----------------------------------------------------------------------------*/
+/*Adds the given node to the cache*/
+void
+ncache_node_add
+ (
+ node_t * node /*the node to add*/
+ );
+/*----------------------------------------------------------------------------*/
+#endif /*__NCACHE_H__*/
diff --git a/netfs-sample/node.c b/netfs-sample/node.c
new file mode 100644
index 00000000..602660b6
--- /dev/null
+++ b/netfs-sample/node.c
@@ -0,0 +1,803 @@
+/*----------------------------------------------------------------------------*/
+/*node.c*/
+/*----------------------------------------------------------------------------*/
+/*Implementation of node management strategies*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+#define _GNU_SOURCE 1
+/*----------------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <stdio.h>
+/*----------------------------------------------------------------------------*/
+#include "debug.h"
+#include "node.h"
+#include "options.h"
+#include "lib.h"
+#include "filterfs.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The lock protecting the underlying filesystem*/
+struct mutex ulfs_lock = MUTEX_INITIALIZER;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Derives a new node from `lnode` and adds a reference to `lnode`*/
+error_t
+node_create
+(
+ lnode_t * lnode,
+ node_t ** node /*store the result here*/
+)
+{
+ error_t err = 0;
+
+ /*Create a new netnode*/
+ netnode_t * netnode_new = malloc(sizeof(netnode_t));
+
+ /*If the memory could not be allocated*/
+ if(netnode_new == NULL)
+ err = ENOMEM;
+ else
+ {
+ /*create a new node from the netnode*/
+ node_t * node_new = netfs_make_node(netnode_new);
+
+ /*If the creation failed*/
+ if(node_new == NULL)
+ {
+ /*set the error code*/
+ err = ENOMEM;
+
+ /*destroy the netnode created above*/
+ free(netnode_new);
+
+ /*stop*/
+ return err;
+ }
+
+ /*link the lnode to the new node*/
+ lnode->node = node_new;
+ lnode_ref_add(lnode);
+
+ /*setup the references in the newly created node*/
+ node_new->nn->lnode = lnode;
+ node_new->nn->flags = 0;
+ node_new->nn->ncache_next = node_new->nn->ncache_prev = NULL;
+
+ /*store the result of creation in the second parameter*/
+ *node = node_new;
+ }
+
+ /*Return the result of operations*/
+ return err;
+}/*node_create*/
+/*----------------------------------------------------------------------------*/
+/*Destroys the specified node and removes a light reference from the
+ associated light node*/
+void
+node_destroy
+(
+ node_t * np
+)
+{
+ /*Die if the node does not belong to node cache*/
+ assert(!np->nn->ncache_next || !np->nn->ncache_prev);
+
+ /*Destroy the port to the underlying filesystem allocated to the node*/
+ PORT_DEALLOC(np->nn->port);
+
+ /*Lock the lnode corresponding to the current node*/
+ mutex_lock(&np->nn->lnode->lock);
+
+ /*Orphan the light node*/
+ np->nn->lnode->node = NULL;
+
+ /*Remove a reference from the lnode*/
+ lnode_ref_remove(np->nn->lnode);
+
+ /*Free the netnode and the node itself*/
+ free(np->nn);
+ free(np);
+}/*node_destroy*/
+/*----------------------------------------------------------------------------*/
+/*Creates the root node and the corresponding lnode*/
+error_t
+node_create_root
+(
+ node_t ** root_node /*store the result here*/
+)
+{
+ /*Try to create a new lnode*/
+ lnode_t * lnode;
+ error_t err = lnode_create(NULL, &lnode);
+
+ /*Stop, if the creation failed*/
+ if(err)
+ return err;
+
+ /*Try to derive the node corresponding to `lnode`*/
+ node_t * node;
+ err = node_create(lnode, &node);
+
+ /*If the operation failed*/
+ if(err)
+ {
+ /*destroy the created lnode*/
+ lnode_destroy(lnode);
+
+ /*stop*/
+ return err;
+ }
+
+ /*Release the lock on the lnode*/
+ mutex_unlock(&lnode->lock);
+
+ /*Store the result in the parameter*/
+ *root_node = node;
+
+ /*Return the result*/
+ return err;
+}/*node_create_root*/
+/*----------------------------------------------------------------------------*/
+/*Initializes the port to the underlying filesystem for the root node*/
+error_t
+node_init_root
+(
+ node_t * node /*the root node*/
+)
+{
+ error_t err = 0;
+
+ /*Acquire a lock for operations on the underlying filesystem*/
+ mutex_lock(&ulfs_lock);
+
+ /*Open the port to the directory specified in `dir`*/
+ node->nn->port = file_name_lookup(dir, O_READ | O_DIRECTORY, 0);
+
+ /*If the directory could not be opened*/
+ if(node->nn->port == MACH_PORT_NULL)
+ {
+ /*set the error code accordingly*/
+ err = errno;
+ LOG_MSG("node_init_root: Could not open the port for %s.", dir);
+
+ /*release the lock and stop*/
+ mutex_unlock(&ulfs_lock);
+ return err;
+ }
+
+ LOG_MSG("node_init_root: Port for %s opened successfully.", dir);
+ LOG_MSG("\tPort: 0x%lX", (unsigned long)node->nn->port);
+
+ /*Stat the root node*/
+ err = io_stat(node->nn->port, &node->nn_stat);
+ if(err)
+ {
+ /*deallocate the port*/
+ PORT_DEALLOC(node->nn->port);
+
+ LOG_MSG("node_init_root: Could not stat the root node.");
+
+ /*unlock the mutex and exit*/
+ mutex_unlock(&ulfs_lock);
+ return err;
+ }
+
+ /*Set the path to the corresponding lnode to `dir`*/
+ node->nn->lnode->path = strdup(dir);
+ if(!node->nn->lnode->path)
+ {
+ /*deallocate the port*/
+ PORT_DEALLOC(node->nn->port);
+
+ /*unlock the mutex*/
+ mutex_unlock(&ulfs_lock);
+
+ LOG_MSG("node_init_root: Could not strdup the directory.");
+ return ENOMEM;
+ }
+
+ /*The current position in dir*/
+ char * p = dir + strlen(dir);
+
+ /*Go through the path from end to beginning*/
+ for(; p >= dir; --p)
+ {
+ /*If the current character is a '/'*/
+ if(*p == '/')
+ {
+ /*If p is not the first character*/
+ if(p > dir)
+ {
+ /*if this slash is escaped, skip it*/
+ if(*(p - 1) == '\\')
+ continue;
+ }
+
+ /*advance the pointer to the first character after the slash*/
+ ++p;
+
+ /*stop*/
+ break;
+ }
+ }
+
+ LOG_MSG("node_init_root: The name of root node is %s.", p);
+
+ /*Set the name of the lnode to the last element in the path to dir*/
+ node->nn->lnode->name = strdup(p);
+ /*If the name of the node could not be duplicated*/
+ if(!node->nn->lnode->name)
+ {
+ /*free the name of the path to the node and deallocate teh port*/
+ free(node->nn->lnode->path);
+ PORT_DEALLOC(node->nn->port);
+
+ /*unlock the mutex*/
+ mutex_unlock(&ulfs_lock);
+
+ LOG_MSG("node_init_root: Could not strdup the name of the root node.");
+ return ENOMEM;
+ }
+
+ /*Compute the length of the name of the root node*/
+ node->nn->lnode->name_len = strlen(p);
+
+ /*Release the lock for operations on the undelying filesystem*/
+ mutex_unlock(&ulfs_lock);
+
+ /*Return the result of operations*/
+ return err;
+}/*node_init_root*/
+/*----------------------------------------------------------------------------*/
+/*Frees a list of dirents*/
+void
+node_entries_free
+(
+ node_dirent_t * dirents /*free this*/
+)
+{
+ /*The current and the next elements*/
+ node_dirent_t * dirent, * dirent_next;
+
+ /*Go through all elements of the list*/
+ for(dirent = dirents; dirent; dirent = dirent_next)
+ {
+ /*store the next element*/
+ dirent_next = dirent->next;
+
+ /*free the dirent stored in the current element of the list*/
+ free(dirent->dirent);
+
+ /*free the current element*/
+ free(dirent);
+ }
+}/*node_entries_free*/
+/*----------------------------------------------------------------------------*/
+/*Reads the directory entries from `node`, which must be locked*/
+error_t
+node_entries_get
+(
+ node_t * node,
+ node_dirent_t ** dirents /*store the result here*/
+)
+{
+ error_t err = 0;
+
+ /*Obtain the path to the current node*/
+ char * path_to_node = node->nn->lnode->path;
+
+ /*The number of PROPERTY_PARAMs in the property*/
+ int param_entries_count = 0;
+
+ /*The length of the property*/
+ size_t property_len = (property) ? (strlen(property)) : (0);
+
+ /*The length of PROPERTY_PARAM*/
+ size_t property_param_len = strlen(PROPERTY_PARAM);
+
+ /*The full name and the filtering command*/
+ char * full_name = NULL, * cmd = NULL;
+
+ /*The lengths of the full name and the filtering command in chunks*/
+ size_t full_name_size = 1, cmd_size = 1;
+
+ /*If some property was indeed specified*/
+ if(property_len != 0)
+ {
+ /*the pointer to the current occurrence of PROPERTY_PARAM*/
+ char * occurrence = strstr(property, PROPERTY_PARAM);
+
+ /*count the number of occurrences*/
+ for(; occurrence;
+ occurrence = strstr(occurrence + 1, PROPERTY_PARAM),
+ ++param_entries_count);
+
+ /*try allocate the memory for the fullname and the filtering command*/
+ full_name = malloc(full_name_size * STRING_CHUNK);
+ if(!full_name)
+ return ENOMEM;
+
+ cmd = malloc(cmd_size * STRING_CHUNK);
+ if(!cmd)
+ {
+ free(full_name);
+ return ENOMEM;
+ }
+ }
+
+ /*Obtain the length of the path*/
+ size_t pathlen = strlen(path_to_node);
+
+ /*Checks if the given file satisfies the property. Zero value means that
+ the entry must be filtered out*/
+ int
+ check_property
+ (
+ const char * name /*the name of the file*/
+ )
+ {
+ /*If there is no property*/
+ if(!property)
+ /*no filtering will be applied, any name is OK*/
+ return 0;
+
+ /*Everything OK at first*/
+ err = 0;
+
+ /*Compute the length of the full name once*/
+ size_t full_name_len = pathlen + 1 + strlen(name) + 1;
+
+ /*See how much space (in chunks) is required for the full name*/
+ int chunks = full_name_size;
+ for(; full_name_len > chunks * STRING_CHUNK; ++chunks);
+
+ /*If more memory is requied*/
+ if(chunks > full_name_size)
+ {
+ /*free the old full name*/
+ free(full_name);
+
+ /*try to allocate the new memory*/
+ full_name = malloc(chunks * STRING_CHUNK);
+ if(!full_name)
+ {
+ err = ENOMEM;
+ free(cmd); /*the string for the command is definitely allocated here*/
+ return 0;
+ }
+
+ /*store the new size*/
+ full_name_size = chunks;
+ }
+
+ /*Initialize `full_name` as a valid string*/
+ full_name[0] = 0;
+
+ /*Construct the full name*/
+ strcpy(full_name, path_to_node);
+ strcat(full_name, "/");
+ strcat(full_name, name);
+
+ /*LOG_MSG("node_entries_get: Applying filter to %s...", full_name);*/
+
+ /*Compute the space required for the final filtering command*/
+ size_t sz = property_len + (strlen(full_name) - property_param_len)
+ * param_entries_count;
+
+ /*See how much space (in chunks) is required for the command*/
+ for(chunks = cmd_size; sz > chunks * STRING_CHUNK; ++chunks);
+
+ /*If more memory is requied*/
+ if(chunks > cmd_size)
+ {
+ /*free the old command*/
+ free(cmd);
+
+ /*try to allocate the new memory*/
+ cmd = malloc(chunks * STRING_CHUNK);
+ if(!cmd)
+ {
+ err = ENOMEM;
+ free(full_name); /*the string for the full name is
+ definitely allocated here*/
+ return 0;
+ }
+
+ /*store the new size*/
+ cmd_size = chunks;
+ }
+
+ /*Initialize `cmd` as a valid string*/
+ cmd[0] = 0;
+
+ /*The current occurence of PROPERTY_PARAM in property*/
+ char * p = strstr(property, PROPERTY_PARAM);
+
+ /*The pointer to the current position in the property*/
+ char * propp = property;
+
+ /*While the command has not been constructed*/
+ for(; p; p = strstr(propp, PROPERTY_PARAM))
+ {
+ /*add the new part of the property to the command*/
+ strncat(cmd, propp, p - propp);
+
+ /*add the filename to the command*/
+ strcat(cmd, full_name);
+
+ /*LOG_MSG("\tcmd = '%s'", cmd);*/
+
+ /*advance the pointer in the property*/
+ propp = p + property_param_len;
+
+ /*LOG_MSG("\tpropp points at '%s'", propp);*/
+ }
+
+ /*Copy the rest of the property to the command*/
+ strcat(cmd, propp);
+
+ /*LOG_MSG("node_entries_get: The filtering command: '%s'.", cmd);*/
+
+ /*Execute the command*/
+ int xcode = WEXITSTATUS(system(cmd));
+
+ /*Return the exit code of the command*/
+ return xcode;
+ }/*check_property*/
+
+ /*The list of dirents*/
+ struct dirent ** dirent_list, **dirent;
+
+ /*The head of the list of dirents*/
+ node_dirent_t * node_dirent_list = NULL;
+
+ /*The size of the array of pointers to dirent*/
+ size_t dirent_data_size;
+
+ /*The array of dirents*/
+ char * dirent_data;
+
+ /*Obtain the directory entries for the given node*/
+ err = dir_entries_get
+ (node->nn->port, &dirent_data, &dirent_data_size, &dirent_list);
+ if(err)
+ {
+ return err;
+ }
+
+ /*The new entry in the list*/
+ node_dirent_t * node_dirent_new;
+
+ /*The new dirent*/
+ struct dirent * dirent_new;
+
+ /*LOG_MSG("node_entries_get: Getting entries for %p", node);*/
+
+ /*The name of the current dirent*/
+ char * name;
+
+ /*The length of the current name*/
+ size_t name_len;
+
+ /*The size of the current dirent*/
+ size_t size;
+
+ /*The exit code of property*/
+ int good;
+
+ /*Go through all elements of the list of pointers to dirent*/
+ for(dirent = dirent_list; *dirent; ++dirent)
+ {
+ /*obtain the name of the current dirent*/
+ name = &((*dirent)->d_name[0]);
+
+ /*If the current dirent is either '.' or '..', skip it*/
+ if((strcmp(name, ".") == 0) || (strcmp(name, "..") == 0))
+ continue;
+
+ /*check if the current dirent has the property*/
+ good = check_property(name);
+ if(err)
+ break;
+
+ /*If the current entry is not good, skip it*/
+ if(good != 0)
+ continue;
+
+ /*obtain the length of the current name*/
+ name_len = strlen(name);
+
+ /*obtain the length of the current dirent*/
+ size = DIRENT_LEN(name_len);
+
+ /*create a new list element*/
+ node_dirent_new = malloc(sizeof(node_dirent_t));
+ if(!node_dirent_new)
+ {
+ err = ENOMEM;
+ break;
+ }
+
+ /*create a new dirent*/
+ dirent_new = malloc(size);
+ if(!dirent_new)
+ {
+ free(node_dirent_new);
+ err = ENOMEM;
+ break;
+ }
+
+ /*fill the dirent with information*/
+ dirent_new->d_ino = (*dirent)->d_ino;
+ dirent_new->d_type = (*dirent)->d_type;
+ dirent_new->d_reclen = size;
+ strcpy((char *)dirent_new + DIRENT_NAME_OFFS, name);
+
+ /*add the dirent to the list*/
+ node_dirent_new->dirent = dirent_new;
+ node_dirent_new->next = node_dirent_list;
+ node_dirent_list = node_dirent_new;
+ }
+
+ /*If something went wrong in the loop*/
+ if(err)
+ /*free the list of dirents*/
+ node_entries_free(node_dirent_list);
+ else
+ /*store the list of dirents in the second parameter*/
+ *dirents = node_dirent_list;
+
+ /*Free the list of pointers to dirent*/
+ free(dirent_list);
+
+ /*Free the results of listing the dirents*/
+ munmap(dirent_data, dirent_data_size);
+
+ /*Free the full name and the command (if these are present at all)*/
+ if(full_name)
+ free(full_name);
+ if(cmd)
+ free(cmd);
+
+ /*Return the result of operations*/
+ return err;
+}/*node_entries_get*/
+/*----------------------------------------------------------------------------*/
+/*Makes sure that all ports to the underlying filesystem of `node` are up to
+ date*/
+error_t
+node_update
+(
+ node_t * node
+)
+{
+ error_t err = 0;
+
+ /*The full path to this node*/
+ char * path;
+
+ /*Stat information for `node`*/
+ io_statbuf_t stat;
+
+ /*The port to the file corresponding to `node`*/
+ file_t port;
+
+ /*If the specified node is the root node or if it must not be updated*/
+ if(NODE_IS_ROOT(node) || (node->nn->flags & FLAG_NODE_ULFS_FIXED))
+ /*do nothing*/
+ return err; /*return 0; actually*/
+
+ /*Gain exclusive access to the root node of the filesystem*/
+ mutex_lock(&netfs_root_node->lock);
+
+ /*Construct the full path to `node`*/
+ err = lnode_path_construct(node->nn->lnode, &path);
+ if(err)
+ {
+ mutex_unlock(&netfs_root_node->lock);
+ return err;
+ }
+
+ /*Deallocate `node`'s port to the underlying filesystem*/
+ if(node->nn->port)
+ PORT_DEALLOC(node->nn->port);
+
+ /*Try to lookup the file for `node` in its untranslated version*/
+ err = file_lookup
+ (
+ netfs_root_node->nn->port, path, O_READ | O_NOTRANS, O_NOTRANS,
+ 0, &port, &stat
+ );
+ if(err)
+ {
+ node->nn->port = MACH_PORT_NULL;
+ err = 0; /*failure (?)*/
+ return err;
+ }
+
+ /*If the node looked up is actually the root node of filterfs filesystem*/
+ if
+ (
+ (stat.st_ino == underlying_node_stat.st_ino)
+ && (stat.st_fsid == underlying_node_stat.st_fsid)
+ )
+ /*set `err` accordingly*/
+ err = ELOOP;
+ else
+ {
+ /*deallocate the obtained port*/
+ PORT_DEALLOC(port);
+
+ /*obtain the translated version of the required node*/
+ err = file_lookup
+ (netfs_root_node->nn->port, path, O_READ, 0, 0, &port, &stat);
+ }
+
+ /*If there have been errors*/
+ if(err)
+ /*reset the port*/
+ port = MACH_PORT_NULL;
+
+ /*Store the port in the node*/
+ node->nn->port = port;
+
+ /*Remove the flag about the invalidity of the current node and set the
+ flag that the node is up-to-date*/
+ node->nn->flags &= ~FLAG_NODE_INVALIDATE;
+ node->nn->flags |= FLAG_NODE_ULFS_UPTODATE;
+
+ /*Release the lock on the root node of filterfs filesystem*/
+ mutex_unlock(&netfs_root_node->lock);
+
+ /*Return the result of operations*/
+ return err;
+}/*node_update*/
+/*----------------------------------------------------------------------------*/
+/*Computes the size of the given directory*/
+error_t
+node_get_size
+(
+ node_t * dir,
+ OFFSET_T * off
+)
+{
+ error_t err = 0;
+
+ /*The final size*/
+ size_t size = 0;
+
+ /*The number of directory entries*/
+ /*int count = 0;*/
+
+ /*The the node in the directory entries list from which we start counting*/
+ /*node_dirent_t * dirent_start = NULL;*/
+
+ /*The currently analyzed dirent*/
+ node_dirent_t * dirent_current = NULL;
+
+ /*The pointer to the beginning of the list of dirents*/
+ node_dirent_t * dirent_list = NULL;
+
+ /*The first entry we have to analyze*/
+ /*int first_entry = 2;*/
+
+ /*Takes into consideration the name of the current dirent*/
+ void
+ bump_size
+ (
+ const char * name
+ )
+ {
+ /*Increment the current size by the size of the current dirent*/
+ size += DIRENT_LEN(strlen(name));
+
+ /*Count the current dirent*/
+ /*++count;*/
+ }/*bump_size*/
+
+ /*Obtain the list of entries in the current directory*/
+ err = node_entries_get(dir, &dirent_list);
+ if(err)
+ return err;
+
+ /*Obtain the pointer to the dirent which has the number first_entry*/
+ /*Actually, the first element of the list*/
+ /*This code is included in unionfs, but it's completely useless here*/
+ /*for
+ (
+ dirent_start = dirent_list, count = 2;
+ dirent_start && count < first_entry;
+ dirent_start = dirent_start->next, ++count
+ );*/
+
+ /*Reset the count*/
+ /*count = 0;*/
+
+ /*Make space for '.' and '..' entries*/
+ /*This code is included in unionfs, but it's completely useless here*/
+ /*if(first_entry == 0)
+ bump_size(".");
+ if(first_entry <= 1)
+ bump_size("..");*/
+
+ /*See how much space is required for the node*/
+ for
+ (
+ dirent_current = dirent_list/*dirent_start*/; dirent_current;
+ dirent_current = dirent_current->next
+ )
+ bump_size(dirent_current->dirent->d_name);
+
+ /*Free the list of dirents*/
+ node_entries_free(dirent_list);
+
+ /*Return the size*/
+ *off = size;
+ return 0;
+}/*node_get_size*/
+/*----------------------------------------------------------------------------*/
+/*Remove the file called `name` under `dir`*/
+error_t
+node_unlink_file
+(
+ node_t * dir,
+ char * name
+)
+{
+ error_t err = 0;
+
+ /*The port to the file which will be unlinked*/
+ mach_port_t p;
+
+ /*Stat information about the file which will be unlinked*/
+ io_statbuf_t stat;
+
+ /*If port corresponding to `dir` is invalid*/
+ if(dir->nn->port == MACH_PORT_NULL)
+ /*stop with an error*/
+ return ENOENT; /*FIXME: Is the return value indeed meaningful here?*/
+
+ /*Attempt to lookup the specified file*/
+ err = file_lookup(dir->nn->port, name, O_NOTRANS, O_NOTRANS, 0, &p, &stat);
+ if(err)
+ return err;
+
+ /*Deallocate the obtained port*/
+ PORT_DEALLOC(p);
+
+ /*Unlink file `name` under `dir`*/
+ err = dir_unlink(dir->nn->port, name);
+ if(err)
+ return err;
+
+ return err;
+}/*node_unlink_file*/
+/*----------------------------------------------------------------------------*/
diff --git a/netfs-sample/node.c~ b/netfs-sample/node.c~
new file mode 100644
index 00000000..ec83b41b
--- /dev/null
+++ b/netfs-sample/node.c~
@@ -0,0 +1,803 @@
+/*----------------------------------------------------------------------------*/
+/*node.c*/
+/*----------------------------------------------------------------------------*/
+/*Implementation of node management strategies*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+#define _GNU_SOURCE 1
+/*----------------------------------------------------------------------------*/
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <stdio.h>
+/*----------------------------------------------------------------------------*/
+#include "debug.h"
+#include "node.h"
+#include "options.h"
+#include "lib.h"
+#include "filterfs.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The lock protecting the underlying filesystem*/
+struct mutex ulfs_lock = MUTEX_INITIALIZER;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Derives a new node from `lnode` and adds a reference to `lnode`*/
+error_t
+node_create
+ (
+ lnode_t * lnode,
+ node_t ** node /*store the result here*/
+ )
+ {
+ error_t err = 0;
+
+ /*Create a new netnode*/
+ netnode_t * netnode_new = malloc(sizeof(netnode_t));
+
+ /*If the memory could not be allocated*/
+ if(netnode_new == NULL)
+ err = ENOMEM;
+ else
+ {
+ /*create a new node from the netnode*/
+ node_t * node_new = netfs_make_node(netnode_new);
+
+ /*If the creation failed*/
+ if(node_new == NULL)
+ {
+ /*set the error code*/
+ err = ENOMEM;
+
+ /*destroy the netnode created above*/
+ free(netnode_new);
+
+ /*stop*/
+ return err;
+ }
+
+ /*link the lnode to the new node*/
+ lnode->node = node_new;
+ lnode_ref_add(lnode);
+
+ /*setup the references in the newly created node*/
+ node_new->nn->lnode = lnode;
+ node_new->nn->flags = 0;
+ node_new->nn->ncache_next = node_new->nn->ncache_prev = NULL;
+
+ /*store the result of creation in the second parameter*/
+ *node = node_new;
+ }
+
+ /*Return the result of operations*/
+ return err;
+ }/*node_create*/
+/*----------------------------------------------------------------------------*/
+/*Destroys the specified node and removes a light reference from the
+ associated light node*/
+void
+node_destroy
+ (
+ node_t * np
+ )
+ {
+ /*Die if the node does not belong to node cache*/
+ assert(!np->nn->ncache_next || !np->nn->ncache_prev);
+
+ /*Destroy the port to the underlying filesystem allocated to the node*/
+ PORT_DEALLOC(np->nn->port);
+
+ /*Lock the lnode corresponding to the current node*/
+ mutex_lock(&np->nn->lnode->lock);
+
+ /*Orphan the light node*/
+ np->nn->lnode->node = NULL;
+
+ /*Remove a reference from the lnode*/
+ lnode_ref_remove(np->nn->lnode);
+
+ /*Free the netnode and the node itself*/
+ free(np->nn);
+ free(np);
+ }/*node_destroy*/
+/*----------------------------------------------------------------------------*/
+/*Creates the root node and the corresponding lnode*/
+error_t
+node_create_root
+ (
+ node_t ** root_node /*store the result here*/
+ )
+ {
+ /*Try to create a new lnode*/
+ lnode_t * lnode;
+ error_t err = lnode_create(NULL, &lnode);
+
+ /*Stop, if the creation failed*/
+ if(err)
+ return err;
+
+ /*Try to derive the node corresponding to `lnode`*/
+ node_t * node;
+ err = node_create(lnode, &node);
+
+ /*If the operation failed*/
+ if(err)
+ {
+ /*destroy the created lnode*/
+ lnode_destroy(lnode);
+
+ /*stop*/
+ return err;
+ }
+
+ /*Release the lock on the lnode*/
+ mutex_unlock(&lnode->lock);
+
+ /*Store the result in the parameter*/
+ *root_node = node;
+
+ /*Return the result*/
+ return err;
+ }/*node_create_root*/
+/*----------------------------------------------------------------------------*/
+/*Initializes the port to the underlying filesystem for the root node*/
+error_t
+node_init_root
+ (
+ node_t * node /*the root node*/
+ )
+ {
+ error_t err = 0;
+
+ /*Acquire a lock for operations on the underlying filesystem*/
+ mutex_lock(&ulfs_lock);
+
+ /*Open the port to the directory specified in `dir`*/
+ node->nn->port = file_name_lookup(dir, O_READ | O_DIRECTORY, 0);
+
+ /*If the directory could not be opened*/
+ if(node->nn->port == MACH_PORT_NULL)
+ {
+ /*set the error code accordingly*/
+ err = errno;
+ LOG_MSG("node_init_root: Could not open the port for %s.", dir);
+
+ /*release the lock and stop*/
+ mutex_unlock(&ulfs_lock);
+ return err;
+ }
+
+ LOG_MSG("node_init_root: Port for %s opened successfully.", dir);
+ LOG_MSG("\tPort: 0x%lX", (unsigned long)node->nn->port);
+
+ /*Stat the root node*/
+ err = io_stat(node->nn->port, &node->nn_stat);
+ if(err)
+ {
+ /*deallocate the port*/
+ PORT_DEALLOC(node->nn->port);
+
+ LOG_MSG("node_init_root: Could not stat the root node.");
+
+ /*unlock the mutex and exit*/
+ mutex_unlock(&ulfs_lock);
+ return err;
+ }
+
+ /*Set the path to the corresponding lnode to `dir`*/
+ node->nn->lnode->path = strdup(dir);
+ if(!node->nn->lnode->path)
+ {
+ /*deallocate the port*/
+ PORT_DEALLOC(node->nn->port);
+
+ /*unlock the mutex*/
+ mutex_unlock(&ulfs_lock);
+
+ LOG_MSG("node_init_root: Could not strdup the directory.");
+ return ENOMEM;
+ }
+
+ /*The current position in dir*/
+ char * p = dir + strlen(dir);
+
+ /*Go through the path from end to beginning*/
+ for(; p >= dir; --p)
+ {
+ /*If the current character is a '/'*/
+ if(*p == '/')
+ {
+ /*If p is not the first character*/
+ if(p > dir)
+ {
+ /*if this slash is escaped, skip it*/
+ if(*(p - 1) == '\\')
+ continue;
+ }
+
+ /*advance the pointer to the first character after the slash*/
+ ++p;
+
+ /*stop*/
+ break;
+ }
+ }
+
+ LOG_MSG("node_init_root: The name of root node is %s.", p);
+
+ /*Set the name of the lnode to the last element in the path to dir*/
+ node->nn->lnode->name = strdup(p);
+ /*If the name of the node could not be duplicated*/
+ if(!node->nn->lnode->name)
+ {
+ /*free the name of the path to the node and deallocate teh port*/
+ free(node->nn->lnode->path);
+ PORT_DEALLOC(node->nn->port);
+
+ /*unlock the mutex*/
+ mutex_unlock(&ulfs_lock);
+
+ LOG_MSG("node_init_root: Could not strdup the name of the root node.");
+ return ENOMEM;
+ }
+
+ /*Compute the length of the name of the root node*/
+ node->nn->lnode->name_len = strlen(p);
+
+ /*Release the lock for operations on the undelying filesystem*/
+ mutex_unlock(&ulfs_lock);
+
+ /*Return the result of operations*/
+ return err;
+ }/*node_init_root*/
+/*----------------------------------------------------------------------------*/
+/*Frees a list of dirents*/
+void
+node_entries_free
+ (
+ node_dirent_t * dirents /*free this*/
+ )
+ {
+ /*The current and the next elements*/
+ node_dirent_t * dirent, * dirent_next;
+
+ /*Go through all elements of the list*/
+ for(dirent = dirents; dirent; dirent = dirent_next)
+ {
+ /*store the next element*/
+ dirent_next = dirent->next;
+
+ /*free the dirent stored in the current element of the list*/
+ free(dirent->dirent);
+
+ /*free the current element*/
+ free(dirent);
+ }
+ }/*node_entries_free*/
+/*----------------------------------------------------------------------------*/
+/*Reads the directory entries from `node`, which must be locked*/
+error_t
+node_entries_get
+ (
+ node_t * node,
+ node_dirent_t ** dirents /*store the result here*/
+ )
+ {
+ error_t err = 0;
+
+ /*Obtain the path to the current node*/
+ char * path_to_node = node->nn->lnode->path;
+
+ /*The number of PROPERTY_PARAMs in the property*/
+ int param_entries_count = 0;
+
+ /*The length of the property*/
+ size_t property_len = (property) ? (strlen(property)) : (0);
+
+ /*The length of PROPERTY_PARAM*/
+ size_t property_param_len = strlen(PROPERTY_PARAM);
+
+ /*The full name and the filtering command*/
+ char * full_name = NULL, * cmd = NULL;
+
+ /*The lengths of the full name and the filtering command in chunks*/
+ size_t full_name_size = 1, cmd_size = 1;
+
+ /*If some property was indeed specified*/
+ if(property_len != 0)
+ {
+ /*the pointer to the current occurrence of PROPERTY_PARAM*/
+ char * occurrence = strstr(property, PROPERTY_PARAM);
+
+ /*count the number of occurrences*/
+ for(; occurrence;
+ occurrence = strstr(occurrence + 1, PROPERTY_PARAM),
+ ++param_entries_count);
+
+ /*try allocate the memory for the fullname and the filtering command*/
+ full_name = malloc(full_name_size * STRING_CHUNK);
+ if(!full_name)
+ return ENOMEM;
+
+ cmd = malloc(cmd_size * STRING_CHUNK);
+ if(!cmd)
+ {
+ free(full_name);
+ return ENOMEM;
+ }
+ }
+
+ /*Obtain the length of the path*/
+ size_t pathlen = strlen(path_to_node);
+
+ /*Checks if the given file satisfies the property. Zero value means that
+ the entry must be filtered out*/
+ int
+ check_property
+ (
+ const char * name /*the name of the file*/
+ )
+ {
+ /*If there is no property*/
+ if(!property)
+ /*no filtering will be applied, any name is OK*/
+ return 0;
+
+ /*Everything OK at first*/
+ err = 0;
+
+ /*Compute the length of the full name once*/
+ size_t full_name_len = pathlen + 1 + strlen(name) + 1;
+
+ /*See how much space (in chunks) is required for the full name*/
+ int chunks = full_name_size;
+ for(; full_name_len > chunks * STRING_CHUNK; ++chunks);
+
+ /*If more memory is requied*/
+ if(chunks > full_name_size)
+ {
+ /*free the old full name*/
+ free(full_name);
+
+ /*try to allocate the new memory*/
+ full_name = malloc(chunks * STRING_CHUNK);
+ if(!full_name)
+ {
+ err = ENOMEM;
+ free(cmd); /*the string for the command is definitely allocated here*/
+ return 0;
+ }
+
+ /*store the new size*/
+ full_name_size = chunks;
+ }
+
+ /*Initialize `full_name` as a valid string*/
+ full_name[0] = 0;
+
+ /*Construct the full name*/
+ strcpy(full_name, path_to_node);
+ strcat(full_name, "/");
+ strcat(full_name, name);
+
+ /*LOG_MSG("node_entries_get: Applying filter to %s...", full_name);*/
+
+ /*Compute the space required for the final filtering command*/
+ size_t sz = property_len + (strlen(full_name) - property_param_len)
+ * param_entries_count;
+
+ /*See how much space (in chunks) is required for the command*/
+ for(chunks = cmd_size; sz > chunks * STRING_CHUNK; ++chunks);
+
+ /*If more memory is requied*/
+ if(chunks > cmd_size)
+ {
+ /*free the old command*/
+ free(cmd);
+
+ /*try to allocate the new memory*/
+ cmd = malloc(chunks * STRING_CHUNK);
+ if(!cmd)
+ {
+ err = ENOMEM;
+ free(full_name); /*the string for the full name is
+ definitely allocated here*/
+ return 0;
+ }
+
+ /*store the new size*/
+ cmd_size = chunks;
+ }
+
+ /*Initialize `cmd` as a valid string*/
+ cmd[0] = 0;
+
+ /*The current occurence of PROPERTY_PARAM in property*/
+ char * p = strstr(property, PROPERTY_PARAM);
+
+ /*The pointer to the current position in the property*/
+ char * propp = property;
+
+ /*While the command has not been constructed*/
+ for(; p; p = strstr(propp, PROPERTY_PARAM))
+ {
+ /*add the new part of the property to the command*/
+ strncat(cmd, propp, p - propp);
+
+ /*add the filename to the command*/
+ strcat(cmd, full_name);
+
+ /*LOG_MSG("\tcmd = '%s'", cmd);*/
+
+ /*advance the pointer in the property*/
+ propp = p + property_param_len;
+
+ /*LOG_MSG("\tpropp points at '%s'", propp);*/
+ }
+
+ /*Copy the rest of the property to the command*/
+ strcat(cmd, propp);
+
+ /*LOG_MSG("node_entries_get: The filtering command: '%s'.", cmd);*/
+
+ /*Execute the command*/
+ int xcode = WEXITSTATUS(system(cmd));
+
+ /*Return the exit code of the command*/
+ return xcode;
+ }/*check_property*/
+
+ /*The list of dirents*/
+ struct dirent ** dirent_list, **dirent;
+
+ /*The head of the list of dirents*/
+ node_dirent_t * node_dirent_list = NULL;
+
+ /*The size of the array of pointers to dirent*/
+ size_t dirent_data_size;
+
+ /*The array of dirents*/
+ char * dirent_data;
+
+ /*Obtain the directory entries for the given node*/
+ err = dir_entries_get
+ (node->nn->port, &dirent_data, &dirent_data_size, &dirent_list);
+ if(err)
+ {
+ return err;
+ }
+
+ /*The new entry in the list*/
+ node_dirent_t * node_dirent_new;
+
+ /*The new dirent*/
+ struct dirent * dirent_new;
+
+ /*LOG_MSG("node_entries_get: Getting entries for %p", node);*/
+
+ /*The name of the current dirent*/
+ char * name;
+
+ /*The length of the current name*/
+ size_t name_len;
+
+ /*The size of the current dirent*/
+ size_t size;
+
+ /*The exit code of property*/
+ int good;
+
+ /*Go through all elements of the list of pointers to dirent*/
+ for(dirent = dirent_list; *dirent; ++dirent)
+ {
+ /*obtain the name of the current dirent*/
+ name = &((*dirent)->d_name[0]);
+
+ /*If the current dirent is either '.' or '..', skip it*/
+ if((strcmp(name, ".") == 0) || (strcmp(name, "..") == 0))
+ continue;
+
+ /*check if the current dirent has the property*/
+ good = check_property(name);
+ if(err)
+ break;
+
+ /*If the current entry is not good, skip it*/
+ if(good != 0)
+ continue;
+
+ /*obtain the length of the current name*/
+ name_len = strlen(name);
+
+ /*obtain the length of the current dirent*/
+ size = DIRENT_LEN(name_len);
+
+ /*create a new list element*/
+ node_dirent_new = malloc(sizeof(node_dirent_t));
+ if(!node_dirent_new)
+ {
+ err = ENOMEM;
+ break;
+ }
+
+ /*create a new dirent*/
+ dirent_new = malloc(size);
+ if(!dirent_new)
+ {
+ free(node_dirent_new);
+ err = ENOMEM;
+ break;
+ }
+
+ /*fill the dirent with information*/
+ dirent_new->d_ino = (*dirent)->d_ino;
+ dirent_new->d_type = (*dirent)->d_type;
+ dirent_new->d_reclen = size;
+ strcpy((char *)dirent_new + DIRENT_NAME_OFFS, name);
+
+ /*add the dirent to the list*/
+ node_dirent_new->dirent = dirent_new;
+ node_dirent_new->next = node_dirent_list;
+ node_dirent_list = node_dirent_new;
+ }
+
+ /*If something went wrong in the loop*/
+ if(err)
+ /*free the list of dirents*/
+ node_entries_free(node_dirent_list);
+ else
+ /*store the list of dirents in the second parameter*/
+ *dirents = node_dirent_list;
+
+ /*Free the list of pointers to dirent*/
+ free(dirent_list);
+
+ /*Free the results of listing the dirents*/
+ munmap(dirent_data, dirent_data_size);
+
+ /*Free the full name and the command (if these are present at all)*/
+ if(full_name)
+ free(full_name);
+ if(cmd)
+ free(cmd);
+
+ /*Return the result of operations*/
+ return err;
+ }/*node_entries_get*/
+/*----------------------------------------------------------------------------*/
+/*Makes sure that all ports to the underlying filesystem of `node` are up to
+ date*/
+error_t
+node_update
+ (
+ node_t * node
+ )
+ {
+ error_t err = 0;
+
+ /*The full path to this node*/
+ char * path;
+
+ /*Stat information for `node`*/
+ io_statbuf_t stat;
+
+ /*The port to the file corresponding to `node`*/
+ file_t port;
+
+ /*If the specified node is the root node or if it must not be updated*/
+ if(NODE_IS_ROOT(node) || (node->nn->flags & FLAG_NODE_ULFS_FIXED))
+ /*do nothing*/
+ return err; /*return 0; actually*/
+
+ /*Gain exclusive access to the root node of the filesystem*/
+ mutex_lock(&netfs_root_node->lock);
+
+ /*Construct the full path to `node`*/
+ err = lnode_path_construct(node->nn->lnode, &path);
+ if(err)
+ {
+ mutex_unlock(&netfs_root_node->lock);
+ return err;
+ }
+
+ /*Deallocate `node`'s port to the underlying filesystem*/
+ if(node->nn->port)
+ PORT_DEALLOC(node->nn->port);
+
+ /*Try to lookup the file for `node` in its untranslated version*/
+ err = file_lookup
+ (
+ netfs_root_node->nn->port, path, O_READ | O_NOTRANS, O_NOTRANS,
+ 0, &port, &stat
+ );
+ if(err)
+ {
+ node->nn->port = MACH_PORT_NULL;
+ err = 0; /*failure (?)*/
+ return err;
+ }
+
+ /*If the node looked up is actually the root node of filterfs filesystem*/
+ if
+ (
+ (stat.st_ino == underlying_node_stat.st_ino)
+ && (stat.st_fsid == underlying_node_stat.st_fsid)
+ )
+ /*set `err` accordingly*/
+ err = ELOOP;
+ else
+ {
+ /*deallocate the obtained port*/
+ PORT_DEALLOC(port);
+
+ /*obtain the translated version of the required node*/
+ err = file_lookup
+ (netfs_root_node->nn->port, path, O_READ, 0, 0, &port, &stat);
+ }
+
+ /*If there have been errors*/
+ if(err)
+ /*reset the port*/
+ port = MACH_PORT_NULL;
+
+ /*Store the port in the node*/
+ node->nn->port = port;
+
+ /*Remove the flag about the invalidity of the current node and set the
+ flag that the node is up-to-date*/
+ node->nn->flags &= ~FLAG_NODE_INVALIDATE;
+ node->nn->flags |= FLAG_NODE_ULFS_UPTODATE;
+
+ /*Release the lock on the root node of filterfs filesystem*/
+ mutex_unlock(&netfs_root_node->lock);
+
+ /*Return the result of operations*/
+ return err;
+ }/*node_update*/
+/*----------------------------------------------------------------------------*/
+/*Computes the size of the given directory*/
+error_t
+node_get_size
+ (
+ node_t * dir,
+ OFFSET_T * off
+ )
+ {
+ error_t err = 0;
+
+ /*The final size*/
+ size_t size = 0;
+
+ /*The number of directory entries*/
+ /*int count = 0;*/
+
+ /*The the node in the directory entries list from which we start counting*/
+ /*node_dirent_t * dirent_start = NULL;*/
+
+ /*The currently analyzed dirent*/
+ node_dirent_t * dirent_current = NULL;
+
+ /*The pointer to the beginning of the list of dirents*/
+ node_dirent_t * dirent_list = NULL;
+
+ /*The first entry we have to analyze*/
+ /*int first_entry = 2;*/
+
+ /*Takes into consideration the name of the current dirent*/
+ void
+ bump_size
+ (
+ const char * name
+ )
+ {
+ /*Increment the current size by the size of the current dirent*/
+ size += DIRENT_LEN(strlen(name));
+
+ /*Count the current dirent*/
+ /*++count;*/
+ }/*bump_size*/
+
+ /*Obtain the list of entries in the current directory*/
+ err = node_entries_get(dir, &dirent_list);
+ if(err)
+ return err;
+
+ /*Obtain the pointer to the dirent which has the number first_entry*/
+ /*Actually, the first element of the list*/
+ /*This code is included in unionfs, but it's completely useless here*/
+ /*for
+ (
+ dirent_start = dirent_list, count = 2;
+ dirent_start && count < first_entry;
+ dirent_start = dirent_start->next, ++count
+ );*/
+
+ /*Reset the count*/
+ /*count = 0;*/
+
+ /*Make space for '.' and '..' entries*/
+ /*This code is included in unionfs, but it's completely useless here*/
+ /*if(first_entry == 0)
+ bump_size(".");
+ if(first_entry <= 1)
+ bump_size("..");*/
+
+ /*See how much space is required for the node*/
+ for
+ (
+ dirent_current = dirent_list/*dirent_start*/; dirent_current;
+ dirent_current = dirent_current->next
+ )
+ bump_size(dirent_current->dirent->d_name);
+
+ /*Free the list of dirents*/
+ node_entries_free(dirent_list);
+
+ /*Return the size*/
+ *off = size;
+ return 0;
+ }/*node_get_size*/
+/*----------------------------------------------------------------------------*/
+/*Remove the file called `name` under `dir`*/
+error_t
+node_unlink_file
+ (
+ node_t * dir,
+ char * name
+ )
+ {
+ error_t err = 0;
+
+ /*The port to the file which will be unlinked*/
+ mach_port_t p;
+
+ /*Stat information about the file which will be unlinked*/
+ io_statbuf_t stat;
+
+ /*If port corresponding to `dir` is invalid*/
+ if(dir->nn->port == MACH_PORT_NULL)
+ /*stop with an error*/
+ return ENOENT; /*FIXME: Is the return value indeed meaningful here?*/
+
+ /*Attempt to lookup the specified file*/
+ err = file_lookup(dir->nn->port, name, O_NOTRANS, O_NOTRANS, 0, &p, &stat);
+ if(err)
+ return err;
+
+ /*Deallocate the obtained port*/
+ PORT_DEALLOC(p);
+
+ /*Unlink file `name` under `dir`*/
+ err = dir_unlink(dir->nn->port, name);
+ if(err)
+ return err;
+
+ return err;
+ }/*node_unlink_file*/
+/*----------------------------------------------------------------------------*/
diff --git a/netfs-sample/node.h b/netfs-sample/node.h
new file mode 100644
index 00000000..dcd618d4
--- /dev/null
+++ b/netfs-sample/node.h
@@ -0,0 +1,168 @@
+/*----------------------------------------------------------------------------*/
+/*node.h*/
+/*----------------------------------------------------------------------------*/
+/*Node management. Also see lnode.h*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __NODE_H__
+#define __NODE_H__
+
+/*----------------------------------------------------------------------------*/
+#include <error.h>
+#include <sys/stat.h>
+#include <hurd/netfs.h>
+/*----------------------------------------------------------------------------*/
+#include "lnode.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*Checks whether the give node is the root of the filterfs filesystem*/
+#define NODE_IS_ROOT(n) (((n)->nn->lnode->dir) ? (0) : (1))
+/*----------------------------------------------------------------------------*/
+/*Node flags*/
+#define FLAG_NODE_ULFS_FIXED 0x00000001 /*this node should not be updated*/
+#define FLAG_NODE_INVALIDATE 0x00000002 /*this node must be updated*/
+#define FLAG_NODE_ULFS_UPTODATE 0x00000004 /*this node has just been updated*/
+/*----------------------------------------------------------------------------*/
+/*The type of offset corresponding to the current platform*/
+#ifdef __USE_FILE_OFFSET64
+# define OFFSET_T __off64_t
+#else
+# define OFFSET_T __off_t
+#endif /*__USE_FILE_OFFSET64*/
+/*----------------------------------------------------------------------------*/
+/*The size of a chunk of a string (for a small optimization in checking
+ the property)*/
+#define STRING_CHUNK 256
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*The user-defined node for libnetfs*/
+struct netnode
+ {
+ /*the reference to the corresponding light node*/
+ lnode_t * lnode;
+
+ /*the flags associated with this node (might be not required)*/
+ int flags;
+
+ /*a port to the underlying filesystem*/
+ file_t port;
+
+ /*the neighbouring entries in the cache*/
+ node_t * ncache_prev, * ncache_next;
+ };/*struct netnode*/
+/*----------------------------------------------------------------------------*/
+typedef struct netnode netnode_t;
+/*----------------------------------------------------------------------------*/
+/*A list element containing directory entry*/
+struct node_dirent
+ {
+ /*the directory entry*/
+ struct dirent * dirent;
+
+ /*the next element*/
+ struct node_dirent * next;
+ };/*struct node_dirent*/
+/*----------------------------------------------------------------------------*/
+typedef struct node_dirent node_dirent_t;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The lock protecting the underlying filesystem*/
+extern struct mutex ulfs_lock;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Derives a new node from `lnode` and adds a reference to `lnode`*/
+error_t
+node_create
+ (
+ lnode_t * lnode,
+ node_t ** node /*store the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Destroys the specified node and removes a light reference from the
+ associated light node*/
+void
+node_destroy
+ (
+ node_t * np
+ );
+/*----------------------------------------------------------------------------*/
+/*Creates the root node and the corresponding lnode*/
+error_t
+node_create_root
+ (
+ node_t ** root_node /*store the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Initializes the port to the underlying filesystem for the root node*/
+error_t
+node_init_root
+ (
+ node_t * node /*the root node*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Frees a list of dirents*/
+void
+node_entries_free
+ (
+ node_dirent_t * dirents /*free this*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Reads the directory entries from `node`, which must be locked*/
+error_t
+node_entries_get
+ (
+ node_t * node,
+ node_dirent_t ** dirents /*store the result here*/
+ );
+/*----------------------------------------------------------------------------*/
+/*Makes sure that all ports to the underlying filesystem of `node` are up to
+ date*/
+error_t
+node_update
+ (
+ node_t * node
+ );
+/*----------------------------------------------------------------------------*/
+/*Computes the size of the given directory*/
+error_t
+node_get_size
+ (
+ node_t * dir,
+ OFFSET_T * off
+ );
+/*----------------------------------------------------------------------------*/
+/*Remove the file called `name` under `dir`*/
+error_t
+node_unlink_file
+ (
+ node_t * dir,
+ char * name
+ );
+/*----------------------------------------------------------------------------*/
+#endif /*__NODE_H__*/
diff --git a/netfs-sample/options.c b/netfs-sample/options.c
new file mode 100644
index 00000000..c39d3f2b
--- /dev/null
+++ b/netfs-sample/options.c
@@ -0,0 +1,255 @@
+/*----------------------------------------------------------------------------*/
+/*options.h*/
+/*----------------------------------------------------------------------------*/
+/*Definitions for parsing the command line switches*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+#define _GNU_SOURCE 1
+/*----------------------------------------------------------------------------*/
+#include <argp.h>
+#include <error.h>
+/*----------------------------------------------------------------------------*/
+#include "debug.h"
+#include "options.h"
+#include "ncache.h"
+#include "node.h"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*Short documentation for argp*/
+#define ARGS_DOC "DIR"
+#define DOC "Shows the contents of DIR filtered according to PROPERTY.\
+ If DIR is not specified, ~/ is assumed."
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Forward Declarations------------------------------------------------*/
+/*Argp parser function for the common options*/
+static
+error_t
+argp_parse_common_options
+ (
+ int key,
+ char * arg,
+ struct argp_state * state
+ );
+/*----------------------------------------------------------------------------*/
+/*Argp parser function for the startup options*/
+static
+error_t
+argp_parse_startup_options
+ (
+ int key,
+ char * arg,
+ struct argp_state * state
+ );
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*This variable is set to a non-zero value after the parsing of starup options
+ is finished*/
+/*Whenever the argument parser is later called to modify the
+ options of filterfs the root node will be initialized accordingly directly
+ by the parser*/
+static int parsing_startup_options_finished;
+/*----------------------------------------------------------------------------*/
+/*Argp options common to both the runtime and the startup parser*/
+static const struct argp_option argp_common_options[] =
+ {
+ {OPT_LONG_CACHE_SIZE, OPT_CACHE_SIZE, "SIZE", 0,
+ "The maximal number of nodes in the node cache"},
+ {OPT_LONG_PROPERTY, OPT_PROPERTY, "PROPERTY", 0,
+ "The command which will act as a filter"}
+ };
+/*----------------------------------------------------------------------------*/
+/*Argp options only meaningful for startupp parsing*/
+static const struct argp_option argp_startup_options[] =
+ {
+ {0}
+ };
+/*----------------------------------------------------------------------------*/
+/*Argp parser for only the common options*/
+static const struct argp argp_parser_common_options =
+ {argp_common_options, argp_parse_common_options, 0, 0, 0};
+/*----------------------------------------------------------------------------*/
+/*Argp parser for only the startup options*/
+static const struct argp argp_parser_startup_options =
+ {argp_startup_options, argp_parse_startup_options, 0, 0, 0};
+/*----------------------------------------------------------------------------*/
+/*The list of children parsers for runtime arguments*/
+static const struct argp_child argp_children_runtime[] =
+ {
+ {&argp_parser_common_options},
+ {&netfs_std_runtime_argp},
+ {0}
+ };
+/*----------------------------------------------------------------------------*/
+/*The list of children parsers for startup arguments*/
+static const struct argp_child argp_children_startup[] =
+ {
+ {&argp_parser_startup_options},
+ {&argp_parser_common_options},
+ {&netfs_std_startup_argp},
+ {0}
+ };
+/*----------------------------------------------------------------------------*/
+/*The version of the server for argp*/
+const char * argp_program_version = "0.0";
+/*----------------------------------------------------------------------------*/
+/*The arpg parser for runtime arguments*/
+struct argp argp_runtime =
+ {0, 0, 0, 0, argp_children_runtime};
+/*----------------------------------------------------------------------------*/
+/*The argp parser for startup arguments*/
+struct argp argp_startup =
+ {0, 0, ARGS_DOC, DOC, argp_children_startup};
+/*----------------------------------------------------------------------------*/
+/*The filtering command*/
+char * property = NULL;
+/*----------------------------------------------------------------------------*/
+/*The directory to filter*/
+char * dir = NULL;
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Functions-----------------------------------------------------------*/
+/*Argp parser function for the common options*/
+static
+error_t
+argp_parse_common_options
+ (
+ int key,
+ char * arg,
+ struct argp_state * state
+ )
+ {
+ error_t err = 0;
+
+ /*Go through the possible options*/
+ switch(key)
+ {
+ case OPT_CACHE_SIZE:
+ {
+ /*store the new cache-size*/
+ ncache_size = strtol(arg, NULL, 10);
+
+ break;
+ }
+ case OPT_PROPERTY:
+ {
+ /*try to duplicate the filtering command*/
+ property = strdup(arg);
+ if(!property)
+ error(EXIT_FAILURE, ENOMEM, "Could not strdup the property");
+
+ break;
+ }
+ case ARGP_KEY_ARG: /*the directory to filter*/
+ {
+ /*try to duplicate the directory name*/
+ dir = strdup(arg);
+ if(!dir)
+ error(EXIT_FAILURE, ENOMEM, "argp_parse_common_options: "
+ "Could not strdup the directory");
+
+ /*fill all trailing spaces with 0*/
+ int i = strlen(dir) - 1;
+ /*for(i = strlen(dir) - 1; (i >= 0) && (dir[i] == ' '); dir[i--] = 0);*/
+ /*the original filename may contain spaces*/
+
+ /*If the last non blank symbol is a '/' and it's not the only one*/
+ if((dir[i] == '/') && (i != 0))
+ /*put 0 instead*/
+ dir[i] = 0;
+
+ LOG_MSG("argp_parse_common_options: Filtering the directory %s.", dir);
+
+ break;
+ }
+ case ARGP_KEY_END:
+ {
+ /*If parsing of startup options has not finished*/
+ if(!parsing_startup_options_finished)
+ {
+ /*reset the cache*/
+ ncache_reset();
+
+ /*If the directory has not been specified*/
+ if(!dir)
+ {
+ /*assume the directory to be the home directory*/
+ ;
+
+ /*FIXME: The default directory is /var/tmp*/
+ dir = "/var/tmp";
+ }
+
+ /*set the flag that the startup options have already been parsed*/
+ parsing_startup_options_finished = 1;
+ }
+ else
+ {
+/*TODO: Take care of runtime calls modifying the property*/
+ }
+ }
+ /*If the option could not be recognized*/
+ default:
+ {
+ /*set the error code*/
+ err = ARGP_ERR_UNKNOWN;
+ }
+ }
+
+ /*Return the result*/
+ return err;
+ }/*argp_parse_common_options*/
+/*----------------------------------------------------------------------------*/
+/*Argp parser function for the startup options*/
+static
+error_t
+argp_parse_startup_options
+ (
+ int key,
+ char * arg,
+ struct argp_state * state
+ )
+ {
+ /*Do nothing in a beautiful way*/
+ error_t err = 0;
+
+ switch(key)
+ {
+ default:
+ {
+ err = ARGP_ERR_UNKNOWN;
+
+ break;
+ }
+ }
+
+ return err;
+ }/*argp_parse_startup_options*/
+/*----------------------------------------------------------------------------*/
diff --git a/netfs-sample/options.h b/netfs-sample/options.h
new file mode 100644
index 00000000..0f917bb0
--- /dev/null
+++ b/netfs-sample/options.h
@@ -0,0 +1,64 @@
+/*----------------------------------------------------------------------------*/
+/*options.h*/
+/*----------------------------------------------------------------------------*/
+/*Declarations for parsing the command line switches*/
+/*----------------------------------------------------------------------------*/
+/*Based on the code of unionfs translator.*/
+/*----------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*----------------------------------------------------------------------------*/
+#ifndef __OPTIONS_H__
+#define __OPTIONS_H__
+
+/*----------------------------------------------------------------------------*/
+/*--------Macros--------------------------------------------------------------*/
+/*The possible short options*/
+#define OPT_CACHE_SIZE 'c'
+/*the property according to which filtering will be performed*/
+#define OPT_PROPERTY 'p'
+/*----------------------------------------------------------------------------*/
+/*The corresponding long options*/
+#define OPT_LONG_CACHE_SIZE "cache-size"
+#define OPT_LONG_PROPERTY "property"
+/*----------------------------------------------------------------------------*/
+/*Makes a long option out of option name*/
+#define OPT_LONG(o) "--"o
+/*----------------------------------------------------------------------------*/
+/*The substring of the property which shall be replaced by the filename*/
+#define PROPERTY_PARAM "{}"
+/*----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------*/
+/*--------Global Variables----------------------------------------------------*/
+/*The argp parser for startup arguments*/
+extern struct argp argp_startup;
+/*----------------------------------------------------------------------------*/
+/*The argp parser for rutime arguments*/
+extern struct argp argp_runtime;
+/*----------------------------------------------------------------------------*/
+/*The number of nodes in cache (see ncache.{c,h})*/
+extern int ncache_size;
+/*----------------------------------------------------------------------------*/
+/*The filtering command*/
+extern char * property;
+/*----------------------------------------------------------------------------*/
+/*The directory to filter*/
+extern char * dir;
+/*----------------------------------------------------------------------------*/
+#endif /*__OPTIONS_H__*/