blob: 6a712ad7daf94dada97ff11cdf777d43f58ba00f [file] [log] [blame]
SYNOPSIS
object previous_object();
object previous_object(int i);
BESCHREIBUNG
Liefert einen Pointer auf das letzte Objekt, das einen Aufruf (mittels
call_other(), funcall() etc.) auf das aktuelle Objekt this_object()
gemacht hat. Wenn dieses aufrufende Objekt inzwischen zerstoert wurde,
liefert previous_object() 0.
Bei einem Aufruf einer eigenen Funktion durch ein Objekt bleibt das
bisherige previous_object() unveraendert.
Wird das Argument <i> angegeben, so verfolgt previous_object() den
Aufruf <i> Stufen zurueck. Zum Beispiel liefert previous_object(1) das
aufrufende Objekt des aufrufenden Objekts. Fuer <i> muss gelten:
0 <= i < call_stack_depth(). Ein Wert <i> < 0 liefert das erste
aufrufende Object zurueck.
Es gibt einen wichtigen Spezialfall: in Funktionen, die vom Gamedriver
auf Grund eines externen Ereignises aufgerufen wurden (zum Beispiel
Kommandi, die mit add_action() definiert wurden), liefert
previous_object() this_object(), previous_object(0) hingegen 0.
BEISPIEL
int sicherheitscheck()
{
object prev;
if(!(prev=previous_object()));
else if(getuid(prev)!=getuid(this_object()));
else if(geteuid(prev)!=geteuid(this_object()));
else return 1;
return 0;
}
void sensible_funktion()
{
if(!sicherheitscheck())
return;
...
}
Diese Funktion zeigt, wie man ueberpruefen kann, ob der letzte Aufruf
einer Funktion im aktuellen Objekt sicher war, oder ob die
Verarbeitung abgebrochen werden sollte.
FEHLER
Werte von <i> < 0 werden wie <i> == 0 behandelt - dies ist historisch.
SIEHE AUCH
call_other(E), this_object(E), this_player(E)
caller_stack(E), caller_stack_depth(E), extern_call(E)