diff options
Diffstat (limited to 'win32/mntent.c')
-rw-r--r-- | win32/mntent.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/win32/mntent.c b/win32/mntent.c new file mode 100644 index 000000000..9b04a9c5e --- /dev/null +++ b/win32/mntent.c | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * A simple WIN32 implementation of mntent routines. It only handles | ||
3 | * fixed logical drives. | ||
4 | */ | ||
5 | #include "libbb.h" | ||
6 | |||
7 | struct mntdata { | ||
8 | DWORD flags; | ||
9 | int index; | ||
10 | }; | ||
11 | |||
12 | FILE *setmntent(const char *file UNUSED_PARAM, const char *mode UNUSED_PARAM) | ||
13 | { | ||
14 | struct mntdata *data; | ||
15 | |||
16 | if ( (data=malloc(sizeof(struct mntdata))) == NULL ) { | ||
17 | return NULL; | ||
18 | } | ||
19 | |||
20 | data->flags = GetLogicalDrives(); | ||
21 | data->index = -1; | ||
22 | |||
23 | return (FILE *)data; | ||
24 | } | ||
25 | |||
26 | struct mntent *getmntent(FILE *stream) | ||
27 | { | ||
28 | struct mntdata *data = (struct mntdata *)stream; | ||
29 | static char mnt_fsname[4]; | ||
30 | static char mnt_dir[4]; | ||
31 | static char mnt_type[100]; | ||
32 | static char mnt_opts[4]; | ||
33 | static struct mntent my_mount_entry = | ||
34 | { mnt_fsname, mnt_dir, mnt_type, mnt_opts, 0, 0 }; | ||
35 | struct mntent *entry; | ||
36 | |||
37 | entry = NULL; | ||
38 | while ( ++data->index < 26 ) { | ||
39 | if ( (data->flags & 1<<data->index) != 0 ) { | ||
40 | mnt_fsname[0] = 'A' + data->index; | ||
41 | mnt_fsname[1] = ':'; | ||
42 | mnt_fsname[2] = '\0'; | ||
43 | mnt_dir[0] = 'A' + data->index; | ||
44 | mnt_dir[1] = ':'; | ||
45 | mnt_dir[2] = '\\'; | ||
46 | mnt_dir[3] = '\0'; | ||
47 | mnt_type[0] = '\0'; | ||
48 | mnt_opts[0] = '\0'; | ||
49 | |||
50 | if ( GetDriveType(mnt_dir) == DRIVE_FIXED ) { | ||
51 | if ( !GetVolumeInformation(mnt_dir, NULL, 0, NULL, NULL, | ||
52 | NULL, mnt_type, 100) ) { | ||
53 | mnt_type[0] = '\0'; | ||
54 | } | ||
55 | |||
56 | entry = &my_mount_entry; | ||
57 | break; | ||
58 | } | ||
59 | } | ||
60 | } | ||
61 | |||
62 | return entry; | ||
63 | } | ||
64 | |||
65 | int endmntent(FILE *stream) | ||
66 | { | ||
67 | free(stream); | ||
68 | return 0; | ||
69 | } | ||