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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
This patch makes it possible to compile lufis without the lufs package.
It has been merged to the lufis cvs tree.
We would like to remove lufs soon in favour of the newer system fuse.
diff -Naur lufis-0.2.orig/lufs/fs.h lufis-0.2/lufs/fs.h
--- lufis-0.2.orig/lufs/fs.h 1970-01-01 01:00:00.000000000 +0100
+++ lufis-0.2/lufs/fs.h 2004-11-12 21:07:45.714978800 +0100
@@ -0,0 +1,112 @@
+/*
+ * lufs.h
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _LUFS_FS_H_
+#define _LUFS_FS_H_
+
+#include <sys/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct dir_cache;
+struct directory;
+struct lufs_fattr;
+struct file_system;
+struct list_head;
+struct dir_cache;
+
+#define MAX_LEN 64
+
+struct credentials{
+ char user[MAX_LEN];
+ char group[MAX_LEN];
+ uid_t uid;
+ gid_t gid;
+};
+
+
+struct directory* lu_cache_mkdir(char*);
+int lu_cache_add2dir(struct directory*, char*, char*, struct lufs_fattr*);
+int lu_cache_lookup(struct dir_cache*, char*, char*, struct lufs_fattr*, char*, int);
+void lu_cache_add_dir(struct dir_cache*, struct directory*);
+void lu_cache_killdir(struct directory*);
+
+int lu_check_to(int, int, int);
+int lu_atomic_read(int, char*, int, int);
+int lu_atomic_write(int, char*, int, int);
+
+int lu_opt_loadcfg(struct list_head*, char*);
+int lu_opt_parse(struct list_head*, char*, char*);
+int lu_opt_getint(struct list_head*, char*, char*, long int*, int);
+const char* lu_opt_getchar(struct list_head*, char*, char*);
+
+
+#ifdef __cplusplus
+} /* end of extern "C" { */
+#endif
+
+#ifdef TRACE
+#undef TRACE
+#endif
+#ifdef WARN
+#undef WARN
+#endif
+#ifdef ERROR
+#undef ERROR
+#endif
+
+#ifdef __cplusplus
+
+#include <iostream>
+
+#ifdef DEBUG
+#define TRACE(x) cout<<std::hex<<"["<<getpid()<<"]("<<__func__<<")"<<x<<"\n"
+#define WARN(x) cerr<<std::hex<<"["<<getpid()<<"]("<<__func__<<")"<<x<<"\n"
+#define ERROR(x) cerr<<std::hex<<"["<<getpid()<<"]("<<__func__<<")"<<x<<"\n"
+#else
+#define TRACE(x...) do{}while(0)
+#define WARN(x...) do{}while(0)
+#define ERROR(x...) cerr<<x<<"\n"
+#endif
+
+#else
+
+#include <stdio.h>
+
+#ifdef DEBUG
+#define TRACE(x...) do{fprintf(stderr, "[%x](%s) ", getpid(), __func__); fprintf(stderr, x); fprintf(stderr, "\n");}while(0)
+#define WARN(x...) do{fprintf(stderr, "[%x](%s) ", getpid(), __func__); fprintf(stderr, x); fprintf(stderr, "\n");}while(0)
+#define ERROR(x...) do{fprintf(stderr, "[%x](%s) ", getpid(), __func__); fprintf(stderr, x); fprintf(stderr, "\n");}while(0)
+#else
+#define TRACE(x...) do{}while(0)
+#define WARN(x...) do{}while(0)
+#define ERROR(x...) do{fprintf(stderr, x); fprintf(stderr, "\n");}while(0)
+#endif
+
+#endif
+
+
+
+#endif
+
diff -Naur lufis-0.2.orig/lufs/proto.h lufis-0.2/lufs/proto.h
--- lufis-0.2.orig/lufs/proto.h 1970-01-01 01:00:00.000000000 +0100
+++ lufis-0.2/lufs/proto.h 2004-11-12 21:07:45.715978648 +0100
@@ -0,0 +1,116 @@
+/*
+ * proto.h
+ * Copyright (C) 2002 Florin Malita <mali@go.ro>
+ *
+ * This file is part of LUFS, a free userspace filesystem implementation.
+ * See http://lufs.sourceforge.net/ for updates.
+ *
+ * LUFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * LUFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _LU_PROTO_H_
+#define _LU_PROTO_H_
+
+#define LU_MAXDATA 4096
+
+#define PVERSION 0x02
+
+#define PTYPE_OK 0x00
+#define PTYPE_MOUNT 0x01
+#define PTYPE_READ 0x02
+#define PTYPE_WRITE 0x03
+#define PTYPE_READDIR 0x04
+#define PTYPE_STAT 0x05
+#define PTYPE_UMOUNT 0x06
+#define PTYPE_SETATTR 0x07
+#define PTYPE_MKDIR 0x08
+#define PTYPE_RMDIR 0x09
+#define PTYPE_CREATE 0x0A
+#define PTYPE_UNLINK 0x0B
+#define PTYPE_RENAME 0x0C
+#define PTYPE_OPEN 0x0D
+#define PTYPE_RELEASE 0x0E
+#define PTYPE_READLINK 0x0F
+#define PTYPE_LINK 0x10
+#define PTYPE_SYMLINK 0x11
+#define PTYPE_STATFS 0x12
+
+#define PTYPE_MAX 0x12
+
+
+#define PTYPE_ERROR 0x100
+
+#define PERROR(x) (-(x & (PTYPE_ERROR - 1)) - 1)
+#define PIS_ERROR(x) (x & PTYPE_ERROR)
+
+struct lu_msg {
+ unsigned short msg_version;
+ unsigned short msg_type;
+ unsigned short msg_datalen;
+ unsigned short msg_pid;
+};
+
+
+struct lufs_fattr{
+ unsigned long f_ino;
+ unsigned long f_mode;
+ unsigned long f_nlink;
+ unsigned long f_uid;
+ unsigned long f_gid;
+ long long f_size;
+ unsigned long f_atime;
+ unsigned long f_mtime;
+ unsigned long f_ctime;
+ unsigned long f_blksize;
+ unsigned long f_blocks;
+};
+
+
+struct lufs_sbattr{ /* struct statfs64 */
+ unsigned long long sb_bytes;
+ unsigned long long sb_bytes_free;
+ unsigned long long sb_bytes_available;
+ unsigned long long sb_files;
+ unsigned long long sb_ffree;
+};
+
+
+struct lufs_req_readdir{
+ unsigned short offset;
+ char dirname[0];
+};
+
+struct lufs_req_mkdir{
+ int mode;
+ char dirname[0];
+};
+
+struct lufs_req_rw{
+ long long offset;
+ unsigned long count;
+ char name[0];
+};
+
+struct lufs_req_open{
+ unsigned mode;
+ char name[0];
+};
+
+struct lufs_req_setattr{
+ struct lufs_fattr fattr;
+ char name[0];
+};
+
+#endif
diff -Naur lufis-0.2.orig/Makefile lufis-0.2/Makefile
--- lufis-0.2.orig/Makefile 2004-11-12 21:07:36.138434656 +0100
+++ lufis-0.2/Makefile 2004-11-12 21:10:04.342904152 +0100
@@ -1,5 +1,5 @@
CC = gcc
-CFLAGS = -Wall -W -g
+CFLAGS += -Wall -W -g -I.
LDLIBS = -lfuse -lpthread -ldl -rdynamic
CPPFLAGS := -D_FILE_OFFSET_BITS=64
#CPPFLAGS += -DDEBUG
|