diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/cmd/isaexec/Makefile | 8 | ||||
-rw-r--r-- | usr/src/cmd/isaexec/isaexec.c | 92 |
2 files changed, 24 insertions, 76 deletions
diff --git a/usr/src/cmd/isaexec/Makefile b/usr/src/cmd/isaexec/Makefile index a09f3092c6..284cfe9ea8 100644 --- a/usr/src/cmd/isaexec/Makefile +++ b/usr/src/cmd/isaexec/Makefile @@ -2,9 +2,8 @@ # CDDL HEADER START # # The contents of this file are subject to the terms of the -# Common Development and Distribution License, Version 1.0 only -# (the "License"). You may not use this file except in compliance -# with the License. +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. @@ -20,7 +19,7 @@ # CDDL HEADER END # # -# Copyright 2004 Sun Microsystems, Inc. All rights reserved. +# Copyright 2006 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # #ident "%Z%%M% %I% %E% SMI" @@ -30,6 +29,7 @@ PROG= isaexec include ../Makefile.cmd +CFLAGS += -xstrconst CFLAGS += $(CCVERBOSE) .KEEP_STATE: diff --git a/usr/src/cmd/isaexec/isaexec.c b/usr/src/cmd/isaexec/isaexec.c index 8dba854adc..e1f4aa3d8c 100644 --- a/usr/src/cmd/isaexec/isaexec.c +++ b/usr/src/cmd/isaexec/isaexec.c @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -20,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -28,12 +27,11 @@ #include <stdio.h> #include <stdlib.h> -#include <unistd.h> #include <string.h> -#include <limits.h> +#include <errno.h> +#include <libintl.h> +#include <unistd.h> #include <locale.h> -#include <sys/types.h> -#include <sys/systeminfo.h> /*ARGSUSED*/ int @@ -41,12 +39,6 @@ main(int argc, char **argv, char **envp) { const char *execname; const char *fname; - char *isalist; - ssize_t isalen; - char *pathname; - ssize_t len; - char scratch[1]; - char *str; #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */ #define TEXT_DOMAIN "SYS_TEST" /* Use this only if it wasn't */ @@ -55,77 +47,33 @@ main(int argc, char **argv, char **envp) (void) textdomain(TEXT_DOMAIN); /* - * Get the isa list. - */ - if ((isalen = sysinfo(SI_ISALIST, scratch, 1)) == -1 || - (isalist = malloc(isalen)) == NULL || - sysinfo(SI_ISALIST, isalist, isalen) == -1) { - (void) fprintf(stderr, - gettext("%s: cannot find the ISA list\n"), - argv[0]); - return (1); - } - - /* * Get the exec name. */ if ((execname = getexecname()) == NULL) { (void) fprintf(stderr, - gettext("%s: getexecname() failed\n"), - argv[0]); + gettext("%s: getexecname() failed\n"), + argv[0]); return (1); } /* - * Allocate a path name buffer. The sum of the lengths of the - * execname and isalist strings is guaranteed to be big enough. + * Get the base name of the executable. */ - len = strlen(execname) + isalen; - if ((pathname = malloc(len)) == NULL) { - (void) fprintf(stderr, - gettext("%s: malloc(%d) failed\n"), - argv[0], (int)len); - return (1); - } - - /* - * Break the exec name into directory and file name components. - */ - (void) strcpy(pathname, execname); - if ((str = strrchr(pathname, '/')) != NULL) { - *++str = '\0'; - fname = execname + (str - pathname); - } else { - fname = execname; - *pathname = '\0'; - } - len = strlen(pathname); + fname = strrchr(execname, '/'); + fname = (fname != NULL) ? (fname+1) : execname; - /* - * For each name in the isa list, look for an executable file - * with the given file name in the corresponding subdirectory. - */ - str = strtok(isalist, " "); - do { - (void) strcpy(pathname+len, str); - (void) strcat(pathname+len, "/"); - (void) strcat(pathname+len, fname); - if (access(pathname, X_OK) == 0) { - /* - * File exists and is marked executable. Attempt - * to execute the file from the subdirectory, - * using the user-supplied argv and envp. - */ - (void) execve(pathname, argv, envp); + if (isaexec(execname, argv, envp) == -1) { + if (errno == ENOENT) { (void) fprintf(stderr, - gettext("%s: execve(\"%s\") failed\n"), - argv[0], pathname); + gettext("%s: cannot find/execute \"%s\"" + " in ISA subdirectories\n"), + argv[0], fname); + return (1); } - } while ((str = strtok(NULL, " ")) != NULL); + } (void) fprintf(stderr, - gettext("%s: cannot find/execute \"%s\" in ISA subdirectories\n"), - argv[0], fname); - + gettext("%s: isaexec(\"%s\") failed\n"), + argv[0], fname); return (1); } |