This is run.c in view mode; [Download] [Up]
/* * Copyright (c) 1992 Michael A. Cooper. * This software may be freely distributed provided it is not sold for * profit and the author is credited appropriately. */ #ifndef lint static char *RCSid = "$Header: /src/common/usc/bin/sysinfo/RCS/run.c,v 1.4 1992/04/26 23:32:06 mcooper Exp $"; #endif /* * $Log: run.c,v $ * Revision 1.4 1992/04/26 23:32:06 mcooper * Add Copyright notice * * Revision 1.3 1992/04/17 01:07:59 mcooper * More de-linting * * Revision 1.2 1992/04/16 02:25:39 mcooper * Bug fixes, de-linting, and other changes found with CodeCenter. * * Revision 1.1 1992/03/22 00:20:10 mcooper * Initial revision * */ /* * Things related to running system commands. */ #include <stdio.h> #include "system.h" #include "defs.h" /* * Specific command to determine our model name. */ #if defined(MODEL_COMMAND) char *ModelCommand[] = { MODEL_COMMAND, NULL }; #endif /* MODEL_COMMAND */ /* * Application architecture commands. * These commands should print the system's application architecture. */ char *AppArchCmds[] = { "/bin/arch", "/bin/mach", "/bin/machine", NULL }; /* * Kernel architecture commands. * These commands should print the system's kernel architecture. */ char *KernArchCmds[] = { "/bin/arch -k", "/bin/mach", "/bin/machine", NULL }; /* * Architecture test files. * Each test file is run and if the exit status is 0, * the basename of the command is the name of the system architecture. */ char *ArchFiles[] = { "/bin/alliant", "/bin/vax", "/bin/sun", NULL }; /* * CPU type test files. * Each test file is run and if the exit status is 0, * the basename of the command is the name of the system CPU type. */ char *CPUFiles[] = { "/bin/sparc", "/bin/mc68010", "/bin/mc68020", "/bin/mc68030", "/bin/mc68040", "/bin/m68k", "/bin/vax", "/bin/alliant", "/bin/i386", "/bin/i860", "/bin/iAPX286", "/bin/pdp11", "/bin/u370", "/bin/u3b15", "/bin/u3b2", "/bin/u3b5", "/bin/u3b", NULL }; /* * Run a list of commands (found in cmds) and return command output. */ extern char *RunCmds(Cmds) char **Cmds; { static char Buf[BUFSIZ]; int l; FILE *pf; register char *p; char **Cmd; for (Cmd = Cmds; Cmd != NULL && *Cmd != NULL; ++Cmd) { /* * If this command has any args, nuke them for the access() test. */ strcpy(Buf, *Cmd); p = index(Buf, ' '); if (p != NULL) *p = C_NULL; if (access(Buf, X_OK) != 0) continue; if ((pf = popen(*Cmd, "r")) == NULL) continue; if (fgets(Buf, sizeof(Buf), pf) == NULL) { pclose(pf); continue; } pclose(pf); l = strlen(Buf); if (Buf[l-1] == '\n') Buf[l-1] = C_NULL; return(Buf); } return((char *) NULL); } /* * Run a list of test files. Each test file is run and if the * exit status is 0, we return the basename of the command. * e.g. If "/bin/vax" exists and returns status 0, return string "vax". */ extern char *RunTestFiles(Cmds) char **Cmds; { char **Cmd; register char *p; static char Buf[BUFSIZ]; for (Cmd = Cmds; Cmd != NULL && *Cmd != NULL; ++Cmd) { /* * If this command has any args, nuke them for the access() test. */ strcpy(Buf, *Cmd); p = index(Buf, ' '); if (p != NULL) *p = C_NULL; if (access(Buf, X_OK) != 0) continue; if (system(*Cmd) != 0) continue; /* * The name of this architecture is the last part of the Cmd name. */ strcpy(Buf, *Cmd); p = rindex(Buf, '/'); if (p != NULL) ++p; return(p); } return(NULL); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.