summaryrefslogtreecommitdiff
path: root/yavta.c
diff options
context:
space:
mode:
Diffstat (limited to 'yavta.c')
-rw-r--r--yavta.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/yavta.c b/yavta.c
index 1490878..2d49131 100644
--- a/yavta.c
+++ b/yavta.c
@@ -1334,6 +1334,31 @@ static int video_parse_control_array(const struct v4l2_query_ext_ctrl *query,
__u32 value;
for ( ; isspace(*val); ++val) { };
+
+ if (*val == '<') {
+ /* Read the control value from the given file. */
+ ssize_t size;
+ int fd;
+
+ val++;
+ fd = open(val, O_RDONLY);
+ if (fd < 0) {
+ printf("unable to open control file `%s'\n", val);
+ return -EINVAL;
+ }
+
+ size = read(fd, ctrl->ptr, ctrl->size);
+ if (size != (ssize_t)ctrl->size) {
+ printf("error reading control file `%s' (%s)\n", val,
+ strerror(errno));
+ close(fd);
+ return -EINVAL;
+ }
+
+ close(fd);
+ return 0;
+ }
+
if (*val++ != '{')
return -EINVAL;