blob: 086c2faeef2ca68a69748a70f9c55deec914bedc [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001SYNOPSIS
Zesstrad59c3892019-11-28 20:53:39 +01002 object previous_object()
3 object previous_object(int i)
MG Mud User88f12472016-06-24 23:31:02 +02004
5BESCHREIBUNG
6 Liefert einen Pointer auf das letzte Objekt, das einen Aufruf (mittels
7 call_other(), funcall() etc.) auf das aktuelle Objekt this_object()
8 gemacht hat. Wenn dieses aufrufende Objekt inzwischen zerstoert wurde,
9 liefert previous_object() 0.
MG Mud User88f12472016-06-24 23:31:02 +020010
11 Wird das Argument <i> angegeben, so verfolgt previous_object() den
12 Aufruf <i> Stufen zurueck. Zum Beispiel liefert previous_object(1) das
13 aufrufende Objekt des aufrufenden Objekts. Fuer <i> muss gelten:
14 0 <= i < call_stack_depth(). Ein Wert <i> < 0 liefert das erste
15 aufrufende Object zurueck.
16
17 Es gibt einen wichtigen Spezialfall: in Funktionen, die vom Gamedriver
18 auf Grund eines externen Ereignises aufgerufen wurden (zum Beispiel
Zesstrad59c3892019-11-28 20:53:39 +010019 Kommandos, die mit add_action() definiert wurden), liefert
20 previous_object() den Wert von this_object(), previous_object(0)
21 hingegen 0.
MG Mud User88f12472016-06-24 23:31:02 +020022
Zesstrad59c3892019-11-28 20:53:39 +010023BEISPIELE
24 int sicherheitscheck() {
MG Mud User88f12472016-06-24 23:31:02 +020025 object prev;
Zesstrad59c3892019-11-28 20:53:39 +010026 if (!(prev=previous_object()));
27 else if (getuid(prev) != getuid(this_object()));
28 else if (geteuid(prev) != geteuid(this_object()));
MG Mud User88f12472016-06-24 23:31:02 +020029 else return 1;
30 return 0;
31 }
Zesstrad59c3892019-11-28 20:53:39 +010032 void sensible_funktion() {
33 if (!sicherheitscheck())
34 return;
MG Mud User88f12472016-06-24 23:31:02 +020035 ...
36 }
37
38 Diese Funktion zeigt, wie man ueberpruefen kann, ob der letzte Aufruf
39 einer Funktion im aktuellen Objekt sicher war, oder ob die
40 Verarbeitung abgebrochen werden sollte.
41
42FEHLER
43 Werte von <i> < 0 werden wie <i> == 0 behandelt - dies ist historisch.
44
45SIEHE AUCH
Zesstrad59c3892019-11-28 20:53:39 +010046 call_other(E), this_object(E), this_player(E), caller_stack(E),
47 caller_stack_depth(E), extern_call(E)