Skip to content

Commit d631bce

Browse files
committed
src/runtime.c: use 127 as exit status if payload launching failed
Signed-off-by: Tim Janik <[email protected]>
1 parent 835ce21 commit d631bce

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

src/runtime.c

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@
5656
#endif
5757
#include "squashfuse_dlopen.h"
5858

59+
/* Exit status to use when launching an AppImage fails.
60+
* For applications that assign meanings to exit status codes (e.g. rsync),
61+
* we avoid "cluttering" pre-defined exit status codes by using 127 which
62+
* is known to alias an application exit status and also known as launcher
63+
* error, see SYSTEM(3POSIX).
64+
*/
65+
#define EXIT_EXECERROR 127 /* Execution error exit status. */
66+
5967
//#include "notify.c"
6068
extern int notify(char *title, char *body, int timeout);
6169
struct stat st;
@@ -64,7 +72,7 @@ static ssize_t fs_offset; // The offset at which a filesystem image is expected
6472

6573
static void die(const char *msg) {
6674
fprintf(stderr, "%s\n", msg);
67-
exit(1);
75+
exit(EXIT_EXECERROR);
6876
}
6977

7078
/* Check whether directory is writable */
@@ -544,7 +552,7 @@ int main(int argc, char *argv[]) {
544552
// error check
545553
if (fs_offset < 0) {
546554
printf("Failed to get fs offset for %s\n", appimage_path);
547-
exit(EXIT_FAILURE);
555+
exit(EXIT_EXECERROR);
548556
}
549557

550558
arg=getArg(argc,argv,'-');
@@ -556,7 +564,7 @@ int main(int argc, char *argv[]) {
556564
ssize_t length = readlink(appimage_path, fullpath, sizeof(fullpath));
557565
if (length < 0) {
558566
printf("Error getting realpath for %s\n", appimage_path);
559-
exit(EXIT_FAILURE);
567+
exit(EXIT_EXECERROR);
560568
}
561569
fullpath[length] = '\0';
562570

@@ -603,7 +611,7 @@ int main(int argc, char *argv[]) {
603611
FILE* f = fopen(appimage_path, "rb");
604612
if (f == NULL) {
605613
perror("Failed to open AppImage file");
606-
exit(1);
614+
exit(EXIT_EXECERROR);
607615
}
608616

609617
Md5Context ctx;
@@ -628,14 +636,14 @@ int main(int argc, char *argv[]) {
628636

629637
if (!extract_appimage(appimage_path, prefix, NULL, false)) {
630638
fprintf(stderr, "Failed to extract AppImage\n");
631-
exit(1);
639+
exit(EXIT_EXECERROR);
632640
}
633641

634642
int pid;
635643
if ((pid = fork()) == -1) {
636644
int error = errno;
637645
fprintf(stderr, "fork() failed: %s\n", strerror(error));
638-
exit(1);
646+
exit(EXIT_EXECERROR);
639647
} else if (pid == 0) {
640648
const char apprun_fname[] = "AppRun";
641649
char* apprun_path = malloc(strlen(prefix) + 1 + strlen(apprun_fname) + 1);
@@ -674,7 +682,7 @@ int main(int argc, char *argv[]) {
674682
// template == prefix, must be freed only once
675683
free(prefix);
676684

677-
exit(rv >= 0 ? 0 : 1);
685+
exit(rv >= 0 ? 0 : EXIT_EXECERROR);
678686
}
679687

680688
if(arg && strcmp(arg,"appimage-version")==0) {
@@ -742,18 +750,18 @@ int main(int argc, char *argv[]) {
742750

743751
if (mkdtemp(mount_dir) == NULL) {
744752
perror ("create mount dir error");
745-
exit (1);
753+
exit (EXIT_EXECERROR);
746754
}
747755

748756
if (pipe (keepalive_pipe) == -1) {
749757
perror ("pipe error");
750-
exit (1);
758+
exit (EXIT_EXECERROR);
751759
}
752760

753761
pid = fork ();
754762
if (pid == -1) {
755763
perror ("fork error");
756-
exit (1);
764+
exit (EXIT_EXECERROR);
757765
}
758766

759767
if (pid == 0) {
@@ -801,13 +809,13 @@ int main(int argc, char *argv[]) {
801809
dir_fd = open (mount_dir, O_RDONLY);
802810
if (dir_fd == -1) {
803811
perror ("open dir error");
804-
exit (1);
812+
exit (EXIT_EXECERROR);
805813
}
806814

807815
res = dup2 (dir_fd, 1023);
808816
if (res == -1) {
809817
perror ("dup2 error");
810-
exit (1);
818+
exit (EXIT_EXECERROR);
811819
}
812820
close (dir_fd);
813821

@@ -876,7 +884,7 @@ int main(int argc, char *argv[]) {
876884
execv (filename, real_argv);
877885
/* Error if we continue here */
878886
perror("execv error");
879-
exit(1);
887+
exit(EXIT_EXECERROR);
880888
}
881889

882890
return 0;

0 commit comments

Comments
 (0)