diff --git a/kitty/launcher/cmdline.c b/kitty/launcher/cmdline.c index c3ff1a17b..6fc8c42bf 100644 --- a/kitty/launcher/cmdline.c +++ b/kitty/launcher/cmdline.c @@ -45,8 +45,9 @@ get_argv_from(const char *filename, const char *argv0, argv_array *final_ans) { size_t src_sz; char* src = read_full_file(filename, &src_sz); if (!src) { + if (errno == ENOENT || errno == ENOTDIR) return true; fprintf(stderr, "Failed to read from %s ", filename); perror("with error"); - return false; + return true; } ShlexState s = {0}; argv_array ans = {0}; diff --git a/kitty/launcher/utils.h b/kitty/launcher/utils.h index 13164df9f..30613ceb1 100644 --- a/kitty/launcher/utils.h +++ b/kitty/launcher/utils.h @@ -215,7 +215,9 @@ safe_read_stream(void* ptr, size_t size, FILE* stream) { static char* read_full_file(const char* filename, size_t *sz) { - FILE* file = fopen(filename, "rb"); + FILE* file = NULL; + errno = EINTR; + while (file == NULL && errno == EINTR) file = fopen(filename, "rb"); if (!file) return NULL; fseek(file, 0, SEEK_END); unsigned long file_size = ftell(file);