|
|
1.1 root 1: From research!cithep!sickkids!mark Thu Nov 7 15:24 EST 1985
2: I need to make a couple minor changes to dump, and having looked through
3: the code I've been reminded of just how sleazy it is. I've already told
4: you about how it uses 1 rather than 0 as its normal exit status, thus
5: ignoring all the standard unix conventions regarding such things. Now
6: I found another goodie. There's an option which permits messages to be
7: broadcast to all logged in users whom the program deems to be operators.
8: The broadcasting is done by a subprocess. (Never mind why; that's another
9: story.) What you may be amused and/or disgusted by is the following code
10: fragment ...
11:
12: switch (pid = fork()) {
13: case -1:
14: return;
15: case 0:
16: break;
17: default:
18: while (wait(&s) != pid)
19: continue;
20: return;
21: }
22:
23: if (!notify || gp == 0)
24: exit(0);
25:
26: Given that the default is notify==0, think of all those poor processes,
27: spawned only to die an immediate death!
28:
29: But wait -- there's more! It goes on to do its thing. When it finishes
30: up, it does ...
31:
32: Exit(0); /* the wait in this same routine will catch this */
33:
34: ... which is correct, provided you think it makes sense to do all this in a
35: subprocess. However, before getting to this point, one finds the following:
36:
37: if((f_utmp = fopen("/etc/utmp", "r")) == NULL) {
38: msg("Cannot open /etc/utmp\n");
39: return;
40: }
41:
42: Yes, "return", not "exit"! Who wrote this mess, anyway? It seems worse
43: than even my wildest nightmare of the possible product of a Joy/Horton
44: collaboration.
45:
46:
47:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.