4 * \brief Source: local FS
14 #include "../src/global.h"
15 #include "../src/tty.h" /* enable/disable interrupt key */
16 #include "../src/wtools.h" /* message() */
17 #include "../src/main.h" /* print_vfs_message */
23 * Note: Some of this functions are not static. This has rather good
24 * reason: exactly same functions would have to appear in sfs.c. This
25 * saves both computer's memory and my work. <pavel@ucw.cz>
28 static struct vfs_class vfs_local_ops
;
31 local_open (struct vfs_class
*me
, const char *file
, int flags
, int mode
)
38 fd
= open (file
, NO_LINEAR (flags
), mode
);
42 local_info
= g_new (int, 1);
49 local_read (void *data
, char *buffer
, int count
)
56 while ((n
= read (*((int *) data
), buffer
, count
)) == -1){
58 if (errno
== EAGAIN
) continue;
61 if (errno
== EINTR
) continue;
69 local_close (void *data
)
82 local_errno (struct vfs_class
*me
)
89 local_opendir (struct vfs_class
*me
, const char *dirname
)
96 dir
= opendir (dirname
);
100 local_info
= (DIR **) g_new (DIR *, 1);
107 local_readdir (void *data
)
109 return readdir (*(DIR **) data
);
113 local_closedir (void *data
)
117 i
= closedir (* (DIR **) data
);
123 local_stat (struct vfs_class
*me
, const char *path
, struct stat
*buf
)
127 return stat (path
, buf
);
131 local_lstat (struct vfs_class
*me
, const char *path
, struct stat
*buf
)
135 #ifndef HAVE_STATLSTAT
136 return lstat (path
,buf
);
138 return statlstat (path
, buf
);
143 local_fstat (void *data
, struct stat
*buf
)
145 /* FIXME: avoid type cast */
146 return fstat (*((int *) data
), buf
);
150 local_chmod (struct vfs_class
*me
, const char *path
, int mode
)
154 return chmod (path
, mode
);
158 local_chown (struct vfs_class
*me
, const char *path
, int owner
, int group
)
162 return chown (path
, owner
, group
);
166 local_utime (struct vfs_class
*me
, const char *path
, struct utimbuf
*times
)
170 return utime (path
, times
);
174 local_readlink (struct vfs_class
*me
, const char *path
, char *buf
, size_t size
)
178 return readlink (path
, buf
, size
);
182 local_unlink (struct vfs_class
*me
, const char *path
)
186 return unlink (path
);
190 local_symlink (struct vfs_class
*me
, const char *n1
, const char *n2
)
194 return symlink (n1
, n2
);
198 local_write (void *data
, const char *buf
, int nbyte
)
207 while ((n
= write (fd
, buf
, nbyte
)) == -1){
209 if (errno
== EAGAIN
) continue;
212 if (errno
== EINTR
) continue;
220 local_rename (struct vfs_class
*me
, const char *a
, const char *b
)
224 return rename (a
, b
);
228 local_chdir (struct vfs_class
*me
, const char *path
)
236 local_lseek (void *data
, off_t offset
, int whence
)
238 int fd
= * (int *) data
;
240 return lseek (fd
, offset
, whence
);
244 local_mknod (struct vfs_class
*me
, const char *path
, int mode
, int dev
)
248 return mknod (path
, mode
, dev
);
252 local_link (struct vfs_class
*me
, const char *p1
, const char *p2
)
256 return link (p1
, p2
);
260 local_mkdir (struct vfs_class
*me
, const char *path
, mode_t mode
)
264 return mkdir (path
, mode
);
268 local_rmdir (struct vfs_class
*me
, const char *path
)
276 local_getlocalcopy (struct vfs_class
*me
, const char *path
)
280 return g_strdup (path
);
284 local_ungetlocalcopy (struct vfs_class
*me
, const char *path
,
285 const char *local
, int has_changed
)
296 local_which (struct vfs_class
*me
, const char *path
)
301 return 0; /* Every path which other systems do not like is expected to be ours */
307 vfs_local_ops
.name
= "localfs";
308 vfs_local_ops
.flags
= VFSF_LOCAL
;
309 vfs_local_ops
.which
= local_which
;
310 vfs_local_ops
.open
= local_open
;
311 vfs_local_ops
.close
= local_close
;
312 vfs_local_ops
.read
= local_read
;
313 vfs_local_ops
.write
= local_write
;
314 vfs_local_ops
.opendir
= local_opendir
;
315 vfs_local_ops
.readdir
= local_readdir
;
316 vfs_local_ops
.closedir
= local_closedir
;
317 vfs_local_ops
.stat
= local_stat
;
318 vfs_local_ops
.lstat
= local_lstat
;
319 vfs_local_ops
.fstat
= local_fstat
;
320 vfs_local_ops
.chmod
= local_chmod
;
321 vfs_local_ops
.chown
= local_chown
;
322 vfs_local_ops
.utime
= local_utime
;
323 vfs_local_ops
.readlink
= local_readlink
;
324 vfs_local_ops
.symlink
= local_symlink
;
325 vfs_local_ops
.link
= local_link
;
326 vfs_local_ops
.unlink
= local_unlink
;
327 vfs_local_ops
.rename
= local_rename
;
328 vfs_local_ops
.chdir
= local_chdir
;
329 vfs_local_ops
.ferrno
= local_errno
;
330 vfs_local_ops
.lseek
= local_lseek
;
331 vfs_local_ops
.mknod
= local_mknod
;
332 vfs_local_ops
.getlocalcopy
= local_getlocalcopy
;
333 vfs_local_ops
.ungetlocalcopy
= local_ungetlocalcopy
;
334 vfs_local_ops
.mkdir
= local_mkdir
;
335 vfs_local_ops
.rmdir
= local_rmdir
;
336 vfs_register_class (&vfs_local_ops
);