aboutsummaryrefslogtreecommitdiff
path: root/src/input/file_input_plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/file_input_plugin.c')
-rw-r--r--src/input/file_input_plugin.c38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/input/file_input_plugin.c b/src/input/file_input_plugin.c
index 73dcf4c0..e8ad87f4 100644
--- a/src/input/file_input_plugin.c
+++ b/src/input/file_input_plugin.c
@@ -32,8 +32,15 @@
#undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "input_file"
+static inline GQuark
+file_quark(void)
+{
+ return g_quark_from_static_string("file");
+}
+
static bool
-input_file_open(struct input_stream *is, const char *filename)
+input_file_open(struct input_stream *is, const char *filename,
+ GError **error_r)
{
int fd, ret;
struct stat st;
@@ -43,9 +50,10 @@ input_file_open(struct input_stream *is, const char *filename)
fd = open_cloexec(filename, O_RDONLY, 0);
if (fd < 0) {
- is->error = errno;
- g_debug("Failed to open \"%s\": %s",
- filename, g_strerror(errno));
+ if (errno != ENOENT && errno != ENOTDIR)
+ g_set_error(error_r, file_quark(), errno,
+ "Failed to open \"%s\": %s",
+ filename, g_strerror(errno));
return false;
}
@@ -53,14 +61,16 @@ input_file_open(struct input_stream *is, const char *filename)
ret = fstat(fd, &st);
if (ret < 0) {
- is->error = errno;
+ g_set_error(error_r, file_quark(), errno,
+ "Failed to stat \"%s\": %s",
+ filename, g_strerror(errno));
close(fd);
return false;
}
if (!S_ISREG(st.st_mode)) {
- g_debug("Not a regular file: %s", filename);
- is->error = EINVAL;
+ g_set_error(error_r, file_quark(), 0,
+ "Not a regular file: %s", filename);
close(fd);
return false;
}
@@ -79,13 +89,15 @@ input_file_open(struct input_stream *is, const char *filename)
}
static bool
-input_file_seek(struct input_stream *is, goffset offset, int whence)
+input_file_seek(struct input_stream *is, goffset offset, int whence,
+ GError **error_r)
{
int fd = GPOINTER_TO_INT(is->data);
offset = (goffset)lseek(fd, (off_t)offset, whence);
if (offset < 0) {
- is->error = errno;
+ g_set_error(error_r, file_quark(), errno,
+ "Failed to seek: %s", g_strerror(errno));
return false;
}
@@ -94,16 +106,16 @@ input_file_seek(struct input_stream *is, goffset offset, int whence)
}
static size_t
-input_file_read(struct input_stream *is, void *ptr, size_t size)
+input_file_read(struct input_stream *is, void *ptr, size_t size,
+ GError **error_r)
{
int fd = GPOINTER_TO_INT(is->data);
ssize_t nbytes;
nbytes = read(fd, ptr, size);
if (nbytes < 0) {
- is->error = errno;
- g_debug("input_file_read: error reading: %s\n",
- strerror(is->error));
+ g_set_error(error_r, file_quark(), errno,
+ "Failed to read: %s", g_strerror(errno));
return 0;
}