aboutsummaryrefslogtreecommitdiff
path: root/src/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/file.c')
-rw-r--r--src/file.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/file.c b/src/file.c
new file mode 100644
index 0000000..c6823b9
--- /dev/null
+++ b/src/file.c
@@ -0,0 +1,23 @@
+#include <errno.h>
+#include <string.h>
+
+#include "file.h"
+#include "print.h"
+
+long
+file_size(FILE *const file)
+{
+ fpos_t p;
+
+ if ((fgetpos(file, &p) != 0) || (fseek(file, 0L, SEEK_END) != 0)) {
+ return -1;
+ }
+
+ const long size = ftell(file);
+
+ if (fsetpos(file, &p) != 0) {
+ return -1;
+ }
+
+ return size;
+}