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.
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
Kommandos, die mit add_action() definiert wurden), liefert
previous_object() den Wert von this_object(), previous_object(0)
hingegen 0.
BEISPIELE
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)
|