9 #include "../src/global.h"
10 #include "../src/tty.h" /* enable/disable interrupt key */
11 #include "../src/wtools.h" /* message() */
12 #include "../src/main.h" /* print_vfs_message */
17 /* Note: Some of this functions are not static. This has rather good
18 * reason: exactly same functions would have to appear in sfs.c. This
19 * saves both computer's memory and my work. <pavel@ucw.cz>
22 static struct vfs_class vfs_local_ops
;
25 local_open (struct vfs_class
*me
, const char *file
, int flags
, int mode
)
32 fd
= open (file
, NO_LINEAR (flags
), mode
);
36 local_info
= g_new (int, 1);
43 local_read (void *data
, char *buffer
, int count
)
50 while ((n
= read (*((int *) data
), buffer
, count
)) == -1){
52 if (errno
== EAGAIN
) continue;
55 if (errno
== EINTR
) continue;
63 local_close (void *data
)
76 local_errno (struct vfs_class
*me
)
83 local_opendir (struct vfs_class
*me
, const char *dirname
)
90 dir
= opendir (dirname
);
94 local_info
= (DIR **) g_new (DIR *, 1);
101 local_readdir (void *data
)
103 return readdir (*(DIR **) data
);
107 local_closedir (void *data
)
111 i
= closedir (* (DIR **) data
);
117 local_stat (struct vfs_class
*me
, const char *path
, struct stat
*buf
)
121 return stat (path
, buf
);
125 local_lstat (struct vfs_class
*me
, const char *path
, struct stat
*buf
)
129 #ifndef HAVE_STATLSTAT
130 return lstat (path
,buf
);
132 return statlstat (path
, buf
);
137 local_fstat (void *data
, struct stat
*buf
)
139 /* FIXME: avoid type cast */
140 return fstat (*((int *) data
), buf
);
144 local_chmod (struct vfs_class
*me
, const char *path
, int mode
)
148 return chmod (path
, mode
);
152 local_chown (struct vfs_class
*me
, const char *path
, int owner
, int group
)
156 return chown (path
, owner
, group
);
160 local_utime (struct vfs_class
*me
, const char *path
, struct utimbuf
*times
)
164 return utime (path
, times
);
168 local_readlink (struct vfs_class
*me
, const char *path
, char *buf
, size_t size
)
172 return readlink (path
, buf
, size
);
176 local_unlink (struct vfs_class
*me
, const char *path
)
180 return unlink (path
);
184 local_symlink (struct vfs_class
*me
, const char *n1
, const char *n2
)
188 return symlink (n1
, n2
);
192 local_write (void *data
, const char *buf
, int nbyte
)
201 while ((n
= write (fd
, buf
, nbyte
)) == -1){
203 if (errno
== EAGAIN
) continue;
206 if (errno
== EINTR
) continue;
214 local_rename (struct vfs_class
*me
, const char *a
, const char *b
)
218 return rename (a
, b
);
222 local_chdir (struct vfs_class
*me
, const char *path
)
230 local_lseek (void *data
, off_t offset
, int whence
)
232 int fd
= * (int *) data
;
234 return lseek (fd
, offset
, whence
);
238 local_mknod (struct vfs_class
*me
, const char *path
, int mode
, int dev
)
242 return mknod (path
, mode
, dev
);
246 local_link (struct vfs_class
*me
, const char *p1
, const char *p2
)
250 return link (p1
, p2
);
254 local_mkdir (struct vfs_class
*me
, const char *path
, mode_t mode
)
258 return mkdir (path
, mode
);
262 local_rmdir (struct vfs_class
*me
, const char *path
)
270 local_getlocalcopy (struct vfs_class
*me
, const char *path
)
274 return g_strdup (path
);
278 local_ungetlocalcopy (struct vfs_class
*me
, const char *path
,
279 const char *local
, int has_changed
)
290 local_which (struct vfs_class
*me
, const char *path
)
295 return 0; /* Every path which other systems do not like is expected to be ours */
301 vfs_local_ops
.name
= "localfs";
302 vfs_local_ops
.flags
= VFSF_LOCAL
;
303 vfs_local_ops
.which
= local_which
;
304 vfs_local_ops
.open
= local_open
;
305 vfs_local_ops
.close
= local_close
;
306 vfs_local_ops
.read
= local_read
;
307 vfs_local_ops
.write
= local_write
;
308 vfs_local_ops
.opendir
= local_opendir
;
309 vfs_local_ops
.readdir
= local_readdir
;
310 vfs_local_ops
.closedir
= local_closedir
;
311 vfs_local_ops
.stat
= local_stat
;
312 vfs_local_ops
.lstat
= local_lstat
;
313 vfs_local_ops
.fstat
= local_fstat
;
314 vfs_local_ops
.chmod
= local_chmod
;
315 vfs_local_ops
.chown
= local_chown
;
316 vfs_local_ops
.utime
= local_utime
;
317 vfs_local_ops
.readlink
= local_readlink
;
318 vfs_local_ops
.symlink
= local_symlink
;
319 vfs_local_ops
.link
= local_link
;
320 vfs_local_ops
.unlink
= local_unlink
;
321 vfs_local_ops
.rename
= local_rename
;
322 vfs_local_ops
.chdir
= local_chdir
;
323 vfs_local_ops
.ferrno
= local_errno
;
324 vfs_local_ops
.lseek
= local_lseek
;
325 vfs_local_ops
.mknod
= local_mknod
;
326 vfs_local_ops
.getlocalcopy
= local_getlocalcopy
;
327 vfs_local_ops
.ungetlocalcopy
= local_ungetlocalcopy
;
328 vfs_local_ops
.mkdir
= local_mkdir
;
329 vfs_local_ops
.rmdir
= local_rmdir
;
330 vfs_register_class (&vfs_local_ops
);