#pragma strict_types, rtt_checks, range_check, no_clone

#include <config.h>
#include <shells.h>
#include <defines.h>

// Ersetzt Platzhalter im Pfad und versorgt relative Pfade mit P_CURRENTDIR
// Funktionalitaet war mal im master() in der Rechtepruefung, gehoert da aber
// wirklich nicht hin.
string expand_path(string path, string user)
{
  string cwd;
  if (!sizeof(path))
    return path;
  switch(path[0])
  {
    // expand nur fuer nicht-absolute Pfade
    case '/':
      break;
    case '+':
      if(sizeof(path)==1)
        path="/"DOMAINDIR;
      path="/"DOMAINDIR"/" + path[1..];
      break;
    case '~':
      if (sizeof(path)==1)
      {
        if(user)
          path="/"WIZARDDIR"/"+user;
        else
          path="/"WIZARDDIR;
      }
      else
      {
        if(user && sizeof(path)>1 && path[1]=='/') // "~/"
          path="/"WIZARDDIR"/" + user + "/" + path[2..];
        else
          path="/"WIZARDDIR"/" + path[1..];
      }
      break;
    default:
      if(user && PL && getuid(PL) == user
          && (cwd=(string)PL->QueryProp(P_CURRENTDIR)))
        path=cwd + "/" + path;
  }
  return path;
}

// Besser benamste Version von _get_path() aus master().
// Normalisiert den Pfad, expandiert Platzhalter auf Wunsch, benutzt ggf. RPL
// oder PL als User, wenn nicht angegeben.
varargs string normalize_path(string path, string user, int expand) {
  if (!user && (RPL || PL))
    user = getuid(RPL || PL);
  if (expand)
    path=expand_path(path, user);
  return implode(master()->path_array(path), "/");
}

