comparison xrogue/daemon.c @ 134:cfa9d1609b78

xrogue: fix definition of struct delayed_action. Arrays of struct delayed_action were declared before the definition. Also, daemon.c and state.c defined it differently. The state.c definition, in which d_arg is a union, is now used everywhere. This is the least bad option, but fuses and daemons are still a disheartening morass that undoubtedly shelters more bugs.
author John "Elwin" Edwards
date Tue, 21 Apr 2015 10:11:02 -0400
parents e6179860cb76
children cadff8f047a1
comparison
equal deleted inserted replaced
133:e6179860cb76 134:cfa9d1609b78
22 #define EMPTY 0 22 #define EMPTY 0
23 #define DAEMON -1 23 #define DAEMON -1
24 24
25 #define _X_ { EMPTY } 25 #define _X_ { EMPTY }
26 26
27 struct delayed_action {
28 int d_type;
29 int (*d_func)();
30 VOID *d_arg;
31 int d_time;
32 } ;
33 struct delayed_action d_list[MAXDAEMONS] = { 27 struct delayed_action d_list[MAXDAEMONS] = {
34 _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_ 28 _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_
35 }; 29 };
36 struct delayed_action f_list[MAXFUSES] = { 30 struct delayed_action f_list[MAXFUSES] = {
37 _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, 31 _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_, _X_,
105 99
106 dev = d_slot(); 100 dev = d_slot();
107 if (dev != NULL) { 101 if (dev != NULL) {
108 dev->d_type = type; 102 dev->d_type = type;
109 dev->d_func = dfunc; 103 dev->d_func = dfunc;
110 dev->d_arg = arg; 104 dev->d_arg.vp = arg;
111 dev->d_time = DAEMON; 105 dev->d_time = DAEMON;
112 demoncnt += 1; /* update count */ 106 demoncnt += 1; /* update count */
113 } 107 }
114 } 108 }
115 109
131 if (i >= MAXDAEMONS) return; /* if not found, forget it */ 125 if (i >= MAXDAEMONS) return; /* if not found, forget it */
132 /* 126 /*
133 * Take it out of the list 127 * Take it out of the list
134 */ 128 */
135 dev->d_type = EMPTY; 129 dev->d_type = EMPTY;
136 dev->d_arg = NULL; 130 dev->d_arg.vp = NULL;
137 dev->d_func = NULL; 131 dev->d_func = NULL;
138 dev->d_time = 0; 132 dev->d_time = 0;
139 133
140 demoncnt -= 1; /* update count */ 134 demoncnt -= 1; /* update count */
141 } 135 }
160 dev = &d_list[i]; 154 dev = &d_list[i];
161 /* 155 /*
162 * Executing each one, giving it the proper arguments 156 * Executing each one, giving it the proper arguments
163 */ 157 */
164 if ((dev->d_type == flag) && (dev->d_time == DAEMON) && (dev->d_func != NULL)) 158 if ((dev->d_type == flag) && (dev->d_time == DAEMON) && (dev->d_func != NULL))
165 (*dev->d_func)(dev->d_arg); 159 (*dev->d_func)(dev->d_arg.vp);
166 } 160 }
167 } 161 }
168 162
169 /* 163 /*
170 * fuse: 164 * fuse:
179 173
180 wire = f_slot(); 174 wire = f_slot();
181 if (wire != NULL) { 175 if (wire != NULL) {
182 wire->d_type = type; 176 wire->d_type = type;
183 wire->d_func = dfunc; 177 wire->d_func = dfunc;
184 wire->d_arg = arg; 178 wire->d_arg.vp = arg;
185 wire->d_time = time; 179 wire->d_time = time;
186 fusecnt += 1; /* update count */ 180 fusecnt += 1; /* update count */
187 } 181 }
188 } 182 }
189 183
214 208
215 if ((wire = find_slot(dfunc)) == NULL) 209 if ((wire = find_slot(dfunc)) == NULL)
216 return; 210 return;
217 wire->d_type = EMPTY; 211 wire->d_type = EMPTY;
218 wire->d_func = NULL; 212 wire->d_func = NULL;
219 wire->d_arg = NULL; 213 wire->d_arg.vp = NULL;
220 wire->d_time = 0; 214 wire->d_time = 0;
221 fusecnt -= 1; 215 fusecnt -= 1;
222 } 216 }
223 217
224 /* 218 /*
243 */ 237 */
244 if(flag == wire->d_type && wire->d_time > 0 && 238 if(flag == wire->d_type && wire->d_time > 0 &&
245 --wire->d_time == 0) { 239 --wire->d_time == 0) {
246 wire->d_type = EMPTY; 240 wire->d_type = EMPTY;
247 if (wire->d_func != NULL) 241 if (wire->d_func != NULL)
248 (*wire->d_func)(wire->d_arg); 242 (*wire->d_func)(wire->d_arg.vp);
249 fusecnt -= 1; 243 fusecnt -= 1;
250 } 244 }
251 } 245 }
252 } 246 }
253 247