.PHONY: clean distclean depend test
-reverse: reverse.o reverse_lib.o
-reverse_test: reverse_test.o reverse_lib.o
+reverse: reverse.o reverse_lib.o temp_file.o
+reverse_test: reverse_test.o reverse_lib.o temp_file.o
$(CC) -o $@ $^ $(CFLAGS)
%.o: %.c
-#define _GNU_SOURCE
#define _FILE_OFFSET_BITS 64
+#include "temp_file.h"
+
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
if (close(fd) == -1) err(EX_IOERR, "Could not close input");
}
-/* Create a temporary file in $TMPDIR, or /tmp if TMPDIR is not set.
- * Caller must free temp_filename and fclose temp_file. Succeeds or terminates
- * the process. */
-static void make_temporary_file(char** temp_filename, FILE** temp_file) {
- char* TMPDIR = getenv("TMPDIR");
- if (TMPDIR == NULL) {
- TMPDIR = "/tmp";
- }
- if (asprintf(temp_filename, "%s/reverse.XXXXXX", TMPDIR) == -1) {
- errx(EX_OSERR, "Could not assemble temporary filename");
- }
- int fd = mkstemp(*temp_filename);
- if (fd == -1) err(EX_IOERR, "Could not make a temporary file");
- *temp_file = fdopen(fd, "w");
- if (*temp_file == NULL) err(EX_IOERR, "Could not open temporary file");
-}
-
/* Copy data from input to output until EOF is reached. */
static void copy(FILE* input, FILE* output) {
for (;;) {
--- /dev/null
+#define _GNU_SOURCE
+
+#include "temp_file.h"
+
+#include <err.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <sysexits.h>
+
+void make_temporary_file(char** temp_filename, FILE** temp_file) {
+ char* TMPDIR = getenv("TMPDIR");
+ if (TMPDIR == NULL) {
+ TMPDIR = "/tmp";
+ }
+ if (asprintf(temp_filename, "%s/reverse.XXXXXX", TMPDIR) == -1) {
+ errx(EX_OSERR, "Could not assemble temporary filename");
+ }
+ int fd = mkstemp(*temp_filename);
+ if (fd == -1) err(EX_IOERR, "Could not make a temporary file");
+ *temp_file = fdopen(fd, "w");
+ if (*temp_file == NULL) err(EX_IOERR, "Could not open temporary file");
+}
--- /dev/null
+#ifndef _OVERONION_TEMP_FILE_H
+#define _OVERONION_TEMP_FILE_H
+
+#include <stdio.h>
+
+/* Create a temporary file in $TMPDIR, or /tmp if TMPDIR is not set.
+ * Caller must free temp_filename and fclose temp_file. Succeeds or terminates
+ * the process. */
+void make_temporary_file(char** temp_filename, FILE** temp_file);
+
+#endif /* _OVERONION_TEMP_FILE_H */