+ int fd = -1;
+
+ if (!use_stdin) {
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
+ return NULL;
+ } else {
+ /* from stdin, use a temporary file to mmap */
+ FILE *infile;
+ char buffer[1024];
+ size_t n;
+
+ infile = tmpfile();
+ if (infile == NULL) {
+ perror("tmpfile");
+ return NULL;
+ }
+ while (!feof(stdin)) {
+ n = fread(buffer, 1, sizeof(buffer), stdin);
+ if (fwrite(buffer, 1, n, infile) != n)
+ goto failed;
+ }
+ fflush(infile);
+ fd = fileno(infile);
+ }