mcexec load_elf_desc: print error after returning
Running "mcexec dfsafds" did not print any message in normal use. Rather than looking for which message shows in debug and turn in into eprintf, add a single coherent message (more shell-like) at the end and turn other messages off. There is a small loss of information but this is equivalent to what shells give (a single errno value with no details), and it is now easy to add --debug to mcexec to see more information if required Change-Id: Id2c3a47880b7d1d7467883351e6e7af561f91bbf
This commit is contained in:
@ -632,36 +632,36 @@ int load_elf_desc(char *filename, struct program_load_desc **desc_p,
|
|||||||
char header[1024];
|
char header[1024];
|
||||||
|
|
||||||
if ((ret = access(filename, X_OK)) != 0) {
|
if ((ret = access(filename, X_OK)) != 0) {
|
||||||
fprintf(stderr, "Error: %s is not an executable?, errno: %d\n",
|
__dprintf("Error: %s is not an executable?, errno: %d\n",
|
||||||
filename, errno);
|
filename, errno);
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ret = stat(filename, &sb)) == -1) {
|
if ((ret = stat(filename, &sb)) == -1) {
|
||||||
fprintf(stderr, "Error: failed to stat %s\n", filename);
|
__dprintf("Error: failed to stat %s\n", filename);
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sb.st_size == 0) {
|
if (sb.st_size == 0) {
|
||||||
fprintf(stderr, "Error: file %s is zero length\n", filename);
|
__dprintf("Error: file %s is zero length\n", filename);
|
||||||
return ENOEXEC;
|
return ENOEXEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
fp = fopen(filename, "rb");
|
fp = fopen(filename, "rb");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
fprintf(stderr, "Error: Failed to open %s\n", filename);
|
__dprintf("Error: Failed to open %s\n", filename);
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fread(&header, 1, 2, fp) != 2) {
|
if (fread(&header, 1, 2, fp) != 2) {
|
||||||
fprintf(stderr, "Error: Failed to read header from %s\n", filename);
|
__dprintf("Error: Failed to read header from %s\n", filename);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmp(header, "#!", 2)) {
|
if (!strncmp(header, "#!", 2)) {
|
||||||
if (getline(&shebang, &shebang_len, fp) == -1) {
|
if (getline(&shebang, &shebang_len, fp) == -1) {
|
||||||
fprintf(stderr, "Error: reading shebang path %s\n",
|
__dprintf("Error: reading shebang path %s\n",
|
||||||
filename);
|
filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -779,7 +779,7 @@ int load_elf_desc_shebang(char *shebang_argv0,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((ret = load_elf_desc(path, desc_p, &shebang)) != 0) {
|
if ((ret = load_elf_desc(path, desc_p, &shebang)) != 0) {
|
||||||
__eprintf("error: loading file: %s\n", shebang_argv0);
|
__dprintf("error: loading file: %s\n", shebang_argv0);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2398,8 +2398,12 @@ int main(int argc, char **argv)
|
|||||||
__dprintf("mcoverlay disable\n");
|
__dprintf("mcoverlay disable\n");
|
||||||
#endif // ENABLE_MCOVERLAYFS
|
#endif // ENABLE_MCOVERLAYFS
|
||||||
|
|
||||||
if (load_elf_desc_shebang(argv[optind], &desc, &shebang_argv))
|
if ((ret = load_elf_desc_shebang(argv[optind], &desc,
|
||||||
|
&shebang_argv))) {
|
||||||
|
fprintf(stderr, "%s: could not load program: %s\n",
|
||||||
|
argv[optind], strerror(ret));
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ADD_ENVS_OPTION
|
#ifdef ADD_ENVS_OPTION
|
||||||
/* Collect environment variables */
|
/* Collect environment variables */
|
||||||
|
|||||||
Reference in New Issue
Block a user