summaryrefslogtreecommitdiff
path: root/filesystems/progsreiserfs/files/patch-libdal_file.c
blob: 76a7926d532f5a5f281ba39e3942782e49cdf50c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
--- libdal/file.c.orig	2002-12-12 12:32:34 UTC
+++ libdal/file.c
@@ -14,6 +14,7 @@
 
 #if defined(__freebsd__)
 #  define O_LARGEFILE 0
+#  include <sys/disk.h>
 #endif
 
 #ifndef DJGPP
@@ -154,6 +155,15 @@ static count_t file_len(dal_t *dal) {
     
 #endif
     
+#ifdef DIOCGMEDIASIZE
+
+    if (ioctl(*((int *)dal->entity), DIOCGMEDIASIZE, &size) >= 0)
+        return (count_t)(size / dal->blocksize);
+
+    file_save_error(dal);
+    
+#endif
+
     if ((max_off = lseek(*((int *)dal->entity), 0, SEEK_END)) == (off_t)-1) {
 	file_save_error(dal);
 	return 0;