#pragma strict_types, rtt_checks, pedantic, 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), "/");
}

