- static int done_once = 0;
- struct stat st;
- char *cmd = "cat /usr/src/linux/README";
- if (!(done_once++) && !stat (cmd+4, &st))
- oprogram = cmd;
- else
-#endif
- oprogram = ZIPPY_PROGRAM;
+ {
+ static int done_once = 0;
+ if (!done_once)
+ {
+ struct utsname uts;
+ struct stat st;
+ done_once = 1;
+ if (uname (&uts) == 0)
+ {
+ static char cmd[200];
+ char *s;
+ /* strip version at the first non-digit-dash-dot, to
+ lose any "SMP" crap at the end. */
+ for (s = uts.release; *s; s++)
+ if (!isdigit(*s) && *s != '.' && *s != '-')
+ *s = 0;
+ sprintf (cmd, "cat /usr/src/linux-%s/README", uts.release);
+ if (!stat (cmd+4, &st))
+ oprogram = cmd;
+ }
+ }
+ }
+#endif /* __linux__ */