From 7e27102b6fc6991a6a4eca422b513781a26b1639 Mon Sep 17 00:00:00 2001 From: Alexey Gladkov Date: Wed, 21 Aug 2019 13:29:16 +0200 Subject: [PATCH] libkbdfile: Check compression suffix even if the suffix is part of filename Link: https://github.com/legionus/kbd/issues/32 Signed-off-by: Alexey Gladkov --- src/libkbdfile/kbdfile.c | 25 ++++++++++++------------- src/libkbdfile/kbdfile.h | 2 ++ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/libkbdfile/kbdfile.c b/src/libkbdfile/kbdfile.c index fb8e035..487b434 100644 --- a/src/libkbdfile/kbdfile.c +++ b/src/libkbdfile/kbdfile.c @@ -344,20 +344,13 @@ StartScan: snprintf(fp->pathname, sizeof(fp->pathname), "%s/%s%s%s", dir, fnam, suf[index], (dc ? dc->ext : "")); if (!dc) { - fp->flags &= ~KBDFILE_PIPE; - fp->fd = fopen(fp->pathname, "r"); + rc = maybe_pipe_open(fp); + goto EndScan; + } - if (!(fp->fd)) { - strerror_r(errno, errbuf, sizeof(errbuf)); - ERR(fp->ctx, "fopen: %s: %s", fp->pathname, errbuf); - rc = -1; - goto EndScan; - } - } else { - if (pipe_open(dc, fp) < 0) { - rc = -1; - goto EndScan; - } + if (pipe_open(dc, fp) < 0) { + rc = -1; + goto EndScan; } } @@ -457,3 +450,9 @@ kbdfile_open(struct kbdfile_ctx *ctx, const char *filename) return fp; } + +int +kbdfile_is_compressed(struct kbdfile *fp) +{ + return (fp->flags & KBDFILE_PIPE); +} diff --git a/src/libkbdfile/kbdfile.h b/src/libkbdfile/kbdfile.h index 412179a..0318a8e 100644 --- a/src/libkbdfile/kbdfile.h +++ b/src/libkbdfile/kbdfile.h @@ -45,6 +45,8 @@ int kbdfile_set_pathname(struct kbdfile *fp, const char *pathname); FILE *kbdfile_get_file(struct kbdfile *fp); int kbdfile_set_file(struct kbdfile *fp, FILE *x); +int kbdfile_is_compressed(struct kbdfile *fp); + #include void