Patch title: Release 94 bulk changes
Abstract:
File: /pliant/language/context/computer.pli
Key:
    Removed line
    Added line
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 2
# as published by the Free Software Foundation.
#
# 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
# version 2 along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

abstract
  [Sets the 'computer_name' and 'computer_domain' context variables.]

scope "/pliant/language/"
module "internals.pli"
module "/pliant/install/ring2.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"
module "/pliant/appli/database/light.pli"
module "/pliant/storage/database/light.pli"


gvar Str computer_name computer_domain computer_fullname
gvar Str security data

if os_api="posix"
  function gethostname phname size -> err
    arg Address phname ; arg Int size err
    external os_libc_filename "gethostname"

function find_computer_name p fh
  arg Address p ; arg Int fh
  if pliant_root_path="/usr/share/pliant/"
    security := "/etc/pliant/"
    data := "/var/lib/pliant/"
  else
    var Str prefix := pliant_root_path 0 ((pliant_root_path 0 pliant_root_path:len-1) search_last "/" 0)
    security :=prefix+"/pliant_security/"
    data := prefix+"/pliant_data/"
  pliant_multi_file_system mount "security:/" security "direcory_mode "+(string 7*8^2)+" file_mode "+(string 6*8^2) pliant_os_file_system
  pliant_multi_file_system mount "data:/" data ""  pliant_os_file_system
  if os_api="posix"
    os_constant os_MAXHOSTNAMELEN "sys/param.h" MAXHOSTNAMELEN
    (var Str n) set (memory_allocate os_MAXHOSTNAMELEN+1 null) os_MAXHOSTNAMELEN+1 true
    if (gethostname n:characters os_MAXHOSTNAMELEN+1)<>0
      computer_name := ""
      computer_domain := ""
    else
      n := n 0 (n search "[0]" n:len)
      var Int dot_pos := n search "." n:len
      computer_name := n 0 dot_pos
      computer_domain := n dot_pos+1 n:len
  if os_api="linux" or os_api="posix"
    (var Stream s) open "file:/proc/sys/kernel/hostname" in+safe
    var Str n := s readline
    if n<>"" and n<>"(none)"
      computer_name := n
    s open "file:/proc/sys/kernel/domainname" in+safe
    var Str d := s readline
    if d<>"" and d<>"(none)"
      computer_domain := d
  if (data_read "security:/this_computer.pdb" "/env/pliant/identity/name" (var Str n))=success
    computer_name := n
  if (data_read "security:/this_computer.pdb" "/env/pliant/identity/domain" (var Str d))=success
    computer_domain := d
  computer_fullname := computer_name+(shunt computer_domain<>"" "." "")+computer_domain

find_computer_name null 0
gvar DelayedAction da
da function :> the_function find_computer_name Address Int
pliant_restore_actions insert_after pliant_restore_actions:first addressof:da

module "/pliant/language/debug/compile_log.pli"
compile_log "this computer name is "+computer_name+" in domain "+computer_domain
compile_log "security path is file:"+security
compile_log "data path is file:"+data

export computer_name computer_domain computer_fullname