24424045d4e0981dd44f8c79b27f88911a9261b6
[samba.git] / examples / libsmbclient / testfstatvfs.c
1 #include <sys/types.h>
2 #include <sys/statvfs.h>
3 #include <stdio.h> 
4 #include <unistd.h>
5 #include <string.h> 
6 #include <time.h> 
7 #include <errno.h>
8 #include <libsmbclient.h> 
9 #include "get_auth_data_fn.h"
10
11
12 int main(int argc, char * argv[]) 
13
14     int             fd;
15     int             ret;
16     int             debug = 0;
17     char *          p;
18     char            path[2048];
19     struct stat     statbuf;
20     struct statvfs  statvfsbuf;
21     
22     smbc_init(get_auth_data_fn, debug); 
23     
24     for (;;)
25     {
26         fprintf(stdout, "Path: ");
27         *path = '\0';
28         fgets(path, sizeof(path) - 1, stdin);
29         if (strlen(path) == 0)
30         {
31             return 0;
32         }
33
34         p = path + strlen(path) - 1;
35         if (*p == '\n')
36         {
37             *p = '\0';
38         }
39     
40         /* Determine if it's a file or a folder */
41         if (smbc_stat(path, &statbuf) < 0)
42         {
43             perror("smbc_stat");
44             continue;
45         }
46
47         if (S_ISREG(statbuf.st_mode))
48         {
49             if ((fd = smbc_open(path, O_RDONLY, 0)) < 0)
50             {
51                 perror("smbc_open");
52                 continue;
53             }
54         }
55         else
56         {
57             if ((fd = smbc_opendir(path)) < 0)
58             {
59                 perror("smbc_opendir");
60                 continue;
61             }
62         }
63
64         ret = smbc_fstatvfs(fd, &statvfsbuf);
65
66         smbc_close(fd);
67
68         if (ret < 0)
69         {
70             perror("fstatvfs");
71         }
72         else
73         {
74             printf("\n");
75             printf("Block Size: %lu\n", statvfsbuf.f_bsize);
76             printf("Fragment Size: %lu\n", statvfsbuf.f_frsize);
77             printf("Blocks: %llu\n",
78                    (unsigned long long) statvfsbuf.f_blocks);
79             printf("Free Blocks: %llu\n",
80                    (unsigned long long) statvfsbuf.f_bfree);
81             printf("Available Blocks: %llu\n",
82                    (unsigned long long) statvfsbuf.f_bavail);
83             printf("Files : %llu\n",
84                    (unsigned long long) statvfsbuf.f_files);
85             printf("Free Files: %llu\n",
86                    (unsigned long long) statvfsbuf.f_ffree);
87             printf("Available Files: %llu\n",
88                    (unsigned long long) statvfsbuf.f_favail);
89             printf("File System ID: %lu\n",
90                    (unsigned long) statvfsbuf.f_fsid);
91             printf("\n");
92
93             printf("Flags: 0x%lx\n", statvfsbuf.f_flag);
94             printf("Extended Features: ");
95
96             if (statvfsbuf.f_flag & SMBC_VFS_FEATURE_NO_UNIXCIFS)
97             {
98                 printf("NO_UNIXCIFS ");
99             }
100             else
101             {
102                 printf("unixcifs ");
103             }
104
105             if (statvfsbuf.f_flag & SMBC_VFS_FEATURE_CASE_INSENSITIVE)
106             {
107                 printf("CASE_INSENSITIVE ");
108             }
109             else
110             {
111                 printf("case_sensitive ");
112             }
113
114             if (statvfsbuf.f_flag & SMBC_VFS_FEATURE_DFS)
115             {
116                 printf("DFS ");
117             }
118             else
119             {
120                 printf("no_dfs ");
121             }
122
123             printf("\n");
124         }
125     }
126
127     return 0; 
128 }