1 | /**
|
---|
2 | * \file lslr.c
|
---|
3 | * Test program for the POSIX user space environment.
|
---|
4 | */
|
---|
5 |
|
---|
6 | /*-
|
---|
7 | * Copyright (c) 2006 Christoph Pfisterer
|
---|
8 | *
|
---|
9 | * Redistribution and use in source and binary forms, with or without
|
---|
10 | * modification, are permitted provided that the following conditions are
|
---|
11 | * met:
|
---|
12 | *
|
---|
13 | * * Redistributions of source code must retain the above copyright
|
---|
14 | * notice, this list of conditions and the following disclaimer.
|
---|
15 | *
|
---|
16 | * * Redistributions in binary form must reproduce the above copyright
|
---|
17 | * notice, this list of conditions and the following disclaimer in the
|
---|
18 | * documentation and/or other materials provided with the
|
---|
19 | * distribution.
|
---|
20 | *
|
---|
21 | * * Neither the name of Christoph Pfisterer nor the names of the
|
---|
22 | * contributors may be used to endorse or promote products derived
|
---|
23 | * from this software without specific prior written permission.
|
---|
24 | *
|
---|
25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
---|
26 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
---|
27 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
---|
28 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
---|
29 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
---|
30 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
---|
31 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
---|
32 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
---|
33 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
---|
34 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
---|
35 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
---|
36 | */
|
---|
37 |
|
---|
38 | #include "fsw_posix.h"
|
---|
39 |
|
---|
40 |
|
---|
41 | //extern struct fsw_fstype_table FSW_FSTYPE_TABLE_NAME(ext2);
|
---|
42 | //extern struct fsw_fstype_table FSW_FSTYPE_TABLE_NAME(reiserfs);
|
---|
43 | extern struct fsw_fstype_table FSW_FSTYPE_TABLE_NAME(FSTYPE);
|
---|
44 |
|
---|
45 | static struct fsw_fstype_table *fstypes[] = {
|
---|
46 | //&FSW_FSTYPE_TABLE_NAME(ext2),
|
---|
47 | //&FSW_FSTYPE_TABLE_NAME(reiserfs),
|
---|
48 | &FSW_FSTYPE_TABLE_NAME(FSTYPE ),
|
---|
49 | NULL
|
---|
50 | };
|
---|
51 |
|
---|
52 | static int listdir(struct fsw_posix_volume *vol, char *path, int level)
|
---|
53 | {
|
---|
54 | struct fsw_posix_dir *dir;
|
---|
55 | struct dirent *dent;
|
---|
56 | int i;
|
---|
57 | char subpath[4096];
|
---|
58 |
|
---|
59 | dir = fsw_posix_opendir(vol, path);
|
---|
60 | if (dir == NULL) {
|
---|
61 | printf("opendir(%s) call failed.\n", path);
|
---|
62 | return 1;
|
---|
63 | }
|
---|
64 | while ((dent = fsw_posix_readdir(dir)) != NULL) {
|
---|
65 | for (i = 0; i < level*2; i++)
|
---|
66 | fputc(' ', stdout);
|
---|
67 | printf("%d %s\n", dent->d_type, dent->d_name);
|
---|
68 |
|
---|
69 | if (dent->d_type == DT_DIR) {
|
---|
70 | snprintf(subpath, 4095, "%s%s/", path, dent->d_name);
|
---|
71 | listdir(vol, subpath, level + 1);
|
---|
72 | }
|
---|
73 | }
|
---|
74 | fsw_posix_closedir(dir);
|
---|
75 |
|
---|
76 | return 0;
|
---|
77 | }
|
---|
78 |
|
---|
79 | static int catfile(struct fsw_posix_volume *vol, char *path)
|
---|
80 | {
|
---|
81 | struct fsw_posix_file *file;
|
---|
82 | int r;
|
---|
83 | char buf[256];
|
---|
84 |
|
---|
85 | file = fsw_posix_open(vol, path, 0, 0);
|
---|
86 | if (file == NULL) {
|
---|
87 | printf("open(%s) call failed.\n", path);
|
---|
88 | return 1;
|
---|
89 | }
|
---|
90 | while ((r=fsw_posix_read(file, buf, sizeof(buf))) > 0)
|
---|
91 | {
|
---|
92 | int i;
|
---|
93 | for (i=0; i<r; i++)
|
---|
94 | {
|
---|
95 | printf("%c", buf[i]);
|
---|
96 | }
|
---|
97 | }
|
---|
98 | fsw_posix_close(file);
|
---|
99 |
|
---|
100 | return 0;
|
---|
101 | }
|
---|
102 |
|
---|
103 | int main(int argc, char **argv)
|
---|
104 | {
|
---|
105 | struct fsw_posix_volume *vol;
|
---|
106 | int i;
|
---|
107 |
|
---|
108 | if (argc != 2) {
|
---|
109 | printf("Usage: lslr <file/device>\n");
|
---|
110 | return 1;
|
---|
111 | }
|
---|
112 |
|
---|
113 | for (i = 0; fstypes[i]; i++) {
|
---|
114 | vol = fsw_posix_mount(argv[1], fstypes[i]);
|
---|
115 | if (vol != NULL) {
|
---|
116 | printf("Mounted as '%s'.\n", fstypes[i]->name.data);
|
---|
117 | break;
|
---|
118 | }
|
---|
119 | }
|
---|
120 | if (vol == NULL) {
|
---|
121 | printf("Mounting failed.\n");
|
---|
122 | return 1;
|
---|
123 | }
|
---|
124 |
|
---|
125 | //listdir(vol, "/System/Library/Extensions/udf.kext/", 0);
|
---|
126 | //listdir(vol, "/System/Library/Extensions/AppleACPIPlatform.kext/", 0);
|
---|
127 | //listdir(vol, "/System/Library/Extensions/", 0);
|
---|
128 | catfile(vol, "/System/Library/Extensions/AppleHPET.kext/Contents/Info.plist");
|
---|
129 | //listdir(vol, "/", 0);
|
---|
130 |
|
---|
131 | fsw_posix_unmount(vol);
|
---|
132 |
|
---|
133 | return 0;
|
---|
134 | }
|
---|
135 |
|
---|
136 | // EOF
|
---|