Patch title: Release 94 bulk changes
Abstract:
File: /pliant/linux/storage/filesystem.pli
Key:
    Removed line
    Added line
   
abstract
  [This module will give you the ability to deal with Linux 



abstract
  [This module will give you the ability to deal with Linux 



function os_umount name -> err
  arg CStr name ; arg Int err
  kernel_function 22
function os_umount name flags -> err
  arg CStr name ; arg Int flags err
  kernel_function 52






function filesystem_bus device -> bus
  arg Str device bus
  bus := ""
  if (file_os_name:device eparse "/dev/" any:(var Str dev))
    var FileInfo info := file_query "file:/sys/block/"+dev+"/device" extended
    var Str link := info:options option "link" Str
    if (link eparse "../../devices/" any:(var Str remain))
      link := remain
    while (link eparse any:(var Str first) "/" any:(var Str remain)) and (first search ":" -1)<>(-1)
      link := remain
    if (link eparse any:(var Str first) "/" any)
      if (first eparse any:(var Str s) (var Int i))
        bus := s

doc
  ['filesystem_scan' will call 'filesystem_name' on all stan


doc
  ['filesystem_scan' will call 'filesystem_name' on all stan


function filesystem_dev_dismount name -> status
  arg Str name ; arg Status status
  var Int err := os_umount file_os_name:name
function filesystem_dev_dismount name options -> status
  arg Str name options ; arg Status status
  var Int err := os_umount file_os_name:name (shunt (options option "force") 1 0)+(shunt (options option "lazy") 2 0)
  status := shunt err=0 success failure
  


function filesystem_mount name path options -> status
  arg Str name path options ; arg Status status
  var Str device
  if file_os_name:name<>""
    device := name
  eif { var Pointer:Arrow a :> partitions first name ; a<>nu
    device := a map Str
  else
    return failure
  if (file_query device standard)=undefined
    kernel_make_device device
  var Str fs := options option "filesystem" Str
  if fs=""
    fs := filesystem_filesystem device
  if not (options option "nocheck") and (fs="ext2" or fs="ex
  status := shunt err=0 success failure
  


function filesystem_mount name path options -> status
  arg Str name path options ; arg Status status
  var Str device
  if file_os_name:name<>""
    device := name
  eif { var Pointer:Arrow a :> partitions first name ; a<>nu
    device := a map Str
  else
    return failure
  if (file_query device standard)=undefined
    kernel_make_device device
  var Str fs := options option "filesystem" Str
  if fs=""
    fs := filesystem_filesystem device
  if not (options option "nocheck") and (fs="ext2" or fs="ex
    var Int err := execute "e2fsck -y"+(shunt (options optio
    var Int err := execute "e2fsck -y"+(shunt (options option "check") " -f" "")+(shunt (options option "surface") " -c" "")+" "+file_os_name:device quiet
    if err<>0
      console "Failed to check " device " partition (error c
      err := execute "e2fsck -y"+(shunt (options option "che
      if err<>0
        console "Failed to check " device " partition !  (er
  if (options option "check") and fs="xfs" and not filesyste
    var Int err := execute "xfs_repair "+file_os_name:device
    if err<>0
      console "Failed to repair " device " partition !  (err
  if (options option "tune")
    execute "tune2fs -e remount-ro -r 1024 "+device quiet
  file_tree_create path
  status := filesystem_dev_mount device path fs options



    if err<>0
      console "Failed to check " device " partition (error c
      err := execute "e2fsck -y"+(shunt (options option "che
      if err<>0
        console "Failed to check " device " partition !  (er
  if (options option "check") and fs="xfs" and not filesyste
    var Int err := execute "xfs_repair "+file_os_name:device
    if err<>0
      console "Failed to repair " device " partition !  (err
  if (options option "tune")
    execute "tune2fs -e remount-ro -r 1024 "+device quiet
  file_tree_create path
  status := filesystem_dev_mount device path fs options



function filesystem_dismount name -> status
  arg Str name ; arg Status status
function filesystem_dismount name options -> status
  arg Str name options ; arg Status status
  var Str device
  if file_os_name:name<>""
    device := name
  eif { var Pointer:Arrow a :> partitions first name ; a<>nu
    device := a map Str
  else
    return failure
  var Str device
  if file_os_name:name<>""
    device := name
  eif { var Pointer:Arrow a :> partitions first name ; a<>nu
    device := a map Str
  else
    return failure
  status := filesystem_dev_dismount device
  status := filesystem_dev_dismount device options
  
  
function filesystem_dismount name -> status
  arg Str name ; arg Status status
  status := filesystem_dismount name ""



#-----------------------------------------------------------


#-----------------------------------------------------------


export filesystem_filesystem filesystem_name
export filesystem_filesystem filesystem_name filesystem_bus
export filesystem_scan filesystem_mount filesystem_dismount 
export filesystem_scan filesystem_mount filesystem_dismount