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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
--- lxdvdrip.c.orig Wed Jan 12 23:31:49 2005
+++ lxdvdrip.c Wed Jan 26 21:31:51 2005
@@ -229,6 +229,11 @@
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/mount.h>
+#ifndef __FreeBSD__
+#include <sys/statfs.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -621,16 +626,19 @@
// Gibt die Groesse einer Datei zurueck, ohne die stat Beschraenkung auf < 2 GB
long long filesize64 (char * szFileName)
{
+#ifdef __FreeBSD__
+ struct stat buf;
+
+ if (stat(szFileName, &buf) < 0)
+ return 0LL;
+
+ return buf.st_size;
+#else
FILE * fp;
long long lSize;
char szBuffer[128];
char szTempl[32] = "/tmp/groesse.lxdvdrip";
-// FreeBSD hat fopen64 als Standard
-#ifdef _FREEBSD
- fp = (FILE*)fopen (szFileName, "rb");
-#else
fp = (FILE*)fopen64 (szFileName, "rb");
-#endif
if (!fp)
{
return (long long)0;
@@ -644,39 +652,28 @@
system ("rm /tmp/groesse.lxdvdrip");
lSize = atoll (szBuffer);
return lSize;
+#endif
}
// Berechnet freien Festplattenplatz
long long calculate_discfree (char * szPfad, long lSprache)
{
- char szTempl[32] = "/tmp/lxdf.lxdvdrip";
- char szBefehl[1024];
+ struct statfs buf;
long long lGroesse=0;
- sprintf (szBefehl, "stat -f %s -c ", szPfad);
- strcat (szBefehl, "'%a %s' > ");
- strcat (szBefehl, szTempl);
- if (system (szBefehl) == 0)
+
+ if (statfs(szPfad, &buf) < 0)
+ return 0;
+
+ lGroesse = buf.f_bavail*buf.f_bsize;
+
+ switch (lSprache)
{
- FILE * fTmp;
- long long lFrei;
- long long lBlockGroesse;
- fTmp = fopen(szTempl,"r");
- if (fTmp)
- {
- fscanf (fTmp, "%lld %lld", &lFrei, &lBlockGroesse);
- fclose (fTmp);
- lGroesse = lFrei * lBlockGroesse;
- }
- system ("rm /tmp/lxdf.lxdvdrip");
- switch (lSprache)
- {
- case 0: printf ("Frei in %s: %lld Bytes\n", szPfad, lGroesse);
- break;
- case 1: printf ("Free in %s: %lld Bytes\n", szPfad, lGroesse);
- break;
- case 2: printf ("Espace libre sur %s: %lld octets\n", szPfad, lGroesse);
- break;
- }
+ case 0: printf ("Frei in %s: %lld Bytes\n", szPfad, lGroesse);
+ break;
+ case 1: printf ("Free in %s: %lld Bytes\n", szPfad, lGroesse);
+ break;
+ case 2: printf ("Espace libre sur %s: %lld octets\n", szPfad, lGroesse);
+ break;
}
return lGroesse;
}
|