Patch title: Release 94 bulk changes
Abstract:
File: /pliant/linux/storage/fuse.pli
Key:
    Removed line
    Added line
   
# gcc -I/usr/src/fuse-1.3/include -shared -s -o fuse.so -u f
# gcc -I/usr/src/fuse-1.3/include -shared -s -o fuse.so -u fuse_main /usr/src/fuse-2.1/lib/.libs/libfuse.a -lpthread




constant trace true
constant trace false
constant cache true


type fuse_operations
  field Address getattr
  field Address readlink
  field Address getdir
  field Address mknod
  field Address mkdir
  field Address unlink
  field Address rmdir
  field Address symlink
  field Address rename
  field Address link
  field Address chmod
  field Address chown
  field Address truncate
  field Address utime
  field Address open
  field Address read
  field Address write
  field Address statfs


type fuse_operations
  field Address getattr
  field Address readlink
  field Address getdir
  field Address mknod
  field Address mkdir
  field Address unlink
  field Address rmdir
  field Address symlink
  field Address rename
  field Address link
  field Address chmod
  field Address chown
  field Address truncate
  field Address utime
  field Address open
  field Address read
  field Address write
  field Address statfs
  field Address flush
  field Address release
  field Address fsync
  field Address release
  field Address fsync
  field Address setxattr
  field Address getxattr
  field Address listxattr
  field Address removexattr



function fuse_main argc argv operations
  arg Int argc ; arg Address argv ; arg fuse_operations oper
  external "/pliant/pliant/linux/storage/fuse.so" "fuse_main


gvar Str root
function fuse_main argc argv operations
  arg Int argc ; arg Address argv ; arg fuse_operations oper
  external "/pliant/pliant/linux/storage/fuse.so" "fuse_main


gvar Str root
if cache
  gvar Sem cache_sem
  gvar Str cache_path
  gvar Intn cache_offset
  gvar Stream cache_stream


function read path buf size offset1 offset2 -> err
  arg CStr path ; arg Address buf ; arg Int size ; arg uInt 
  external_calling_convention


function read path buf size offset1 offset2 -> err
  arg CStr path ; arg Address buf ; arg Int size ; arg uInt 
  external_calling_convention
  var Intn offset := offset1+2n^30*offset2
  if cache
    cache_sem request
    if path=cache_path and offset=cache_offset
      if trace
        console "cache " (cast path Str) " " offset1 " " offset2 eol
      cache_stream read_available (var Address adr) err size
      memory_copy adr buf err
      cache_offset += err
      cache_sem release
      return
    cache_sem release
  if trace
    console "read " (cast path Str) " " offset1 " " offset2 
  if trace
    console "read " (cast path Str) " " offset1 " " offset2 
  (var Stream s) open root+path in+safe+seek
  (var Stream s) open root+path in+safe+bigcache+(shunt offset<>0 seek 0)
  if s=success
  if s=success
    var Intn offset := offset1+2n^30*offset2
    s configure "seek "+string:offset
    if offset<>0
      s configure "seek "+string:offset
    s read_available (var Address adr) err size
    memory_copy adr buf err
  else
    err := -2 # -ENOENT
    s read_available (var Address adr) err size
    memory_copy adr buf err
  else
    err := -2 # -ENOENT
  if cache and err>0
    cache_sem request
    cache_path := path
    cache_offset := offset+err
    swap s cache_stream
    cache_sem release



export fuse_mount



export fuse_mount