summaryrefslogtreecommitdiffstats
path: root/games/naev/files/patch-src_pilot__hook.c
blob: e4fa07d543e020c5c66d0be54e182d6937d1d993 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Origin: https://github.com/naev/naev/commit/6f4005f921650c1a8930721bbd1c0eab163673f8
# Subject: * Hook param off by one.
# https://github.com/naev/naev/commit/3ba9cafb369f94115c897717b6f38415348f4c8f
# Subject: * Too many bugs in the code, should fix bugs with pilot hooks when using >1 parameter.

--- src/pilot_hook.c.orig	2015-02-16 17:49:03 UTC
+++ src/pilot_hook.c
@@ -39,26 +39,26 @@ static int pilot_hookCleanup = 0; /**< A
 int pilot_runHookParam( Pilot* p, int hook_type, HookParam* param, int nparam )
 {
    int n, i, run, ret;
-   HookParam hparam[3], *hdynparam;
+   HookParam hstaparam[5], *hdynparam, *hparam;
 
    /* Set up hook parameters. */
-   if (nparam <= 1) {
-      hparam[0].type       = HOOK_PARAM_PILOT;
-      hparam[0].u.lp.pilot = p->id;
+   if (nparam <= 3) {
+      hstaparam[0].type       = HOOK_PARAM_PILOT;
+      hstaparam[0].u.lp.pilot = p->id;
       n  = 1;
-      if (nparam == 1) {
-         memcpy( &hparam[n], param, sizeof(HookParam) );
-         n++;
-      }
-      hparam[n].type    = HOOK_PARAM_SENTINEL;
+      memcpy( &hstaparam[n], param, sizeof(HookParam)*nparam );
+      n += nparam;
+      hstaparam[n].type = HOOK_PARAM_SENTINEL;
       hdynparam         = NULL;
+      hparam            = hstaparam;
    }
    else {
       hdynparam   = malloc( sizeof(HookParam) * (nparam+2) );
       hdynparam[0].type       = HOOK_PARAM_PILOT;
       hdynparam[0].u.lp.pilot = p->id;
       memcpy( &hdynparam[1], param, sizeof(HookParam)*nparam );
-      hdynparam[nparam].type  = HOOK_PARAM_SENTINEL;
+      hdynparam[nparam+1].type  = HOOK_PARAM_SENTINEL;
+      hparam                  = hdynparam;
    }
 
    /* Run pilot specific hooks. */
OpenPOWER on IntegriCloud