+static unsigned long
+append_extra_args_file(void *data, unsigned long maxchars)
+{
+ char *p = data;
+ char *file = opts.extra_opts_file;
+ int fd = STDIN_FILENO;
+ ssize_t num_read=0;
+ unsigned long appended=0;
+
+ if (!data) return 0;
+
+ if (file && strncmp(file, "-", 1))
+ fd = open(file, O_RDONLY);
+
+ if (fd == -1) {
+ perror("Failed to open extra arguments file");
+ return 0;
+ }
+
+ do {
+ num_read = read(fd, p, maxchars - appended);
+ if (num_read < 0) {
+ perror("Error reading extra arguments file");
+ break;
+ }
+ else if (num_read>0) {
+ appended += num_read;
+ p += num_read;
+ }
+ } while (num_read > 0 && ((maxchars - appended) > 0));
+
+ if (fd != STDIN_FILENO)
+ close(fd);
+
+ return appended;
+}
+