view lua/luadyncall/src/path.lua @ 63:9b6cdffd30dd

- further fixes of inccorect overflow errors for int (and long on LLP64 systems) * prev commit had bugs * added overflow tests for also int, long, long long (for both, lp64 and llp64) - while at it, fixing a reference leak when not using python with utf8 caching
author Tassilo Philipp
date Sun, 19 May 2024 15:33:18 +0200
parents 0cfcc391201f
children
line wrap: on
line source

-- functions to initialize and search through paths.
-- path strings specify a set of directory patterns separated by ';'.
-- the searchpath function 

--- Initialize lua-style paths.
-- Looks up environment variable envname and substitute all ';;' by syspath
-- @param envname name of environment variable
-- @param syspath default value if envname is not set and substitution for all ';;'.
-- @return value from env variable or syspath. ';;' in env will be substituted by syspath.

function pathinit(envname, syspath)
  local envvar = os.getenv(envname)
  local path
  if envvar then 
    path = envvar:gsub(";;",syspath)
  else
    path = syspath
  end
  return path
end


--- find object by searching through the path 
-- @param openfun function(expanded)
-- @return found, expanded 

function pathfind(path,name,openfun)  
  local replaced = path:gsub("?", name)
  local found = nil
  local fails = {}
  for expanded in replaced:gmatch("([^;]+)") do
    found = openfun(expanded)
    if found then return found, expanded end
    table.insert(fails, expanded)
  end
  return nil, fails
end