4 * \brief Source: local FS
15 #include "../src/global.h"
17 #include "../src/wtools.h" /* message() */
18 #include "../src/main.h" /* print_vfs_message */
25 * Note: Some of this functions are not static. This has rather good
26 * reason: exactly same functions would have to appear in sfs.c. This
27 * saves both computer's memory and my work. <pavel@ucw.cz>
30 static struct vfs_class vfs_local_ops
;
33 local_open (struct vfs_class
*me
, const char *file
, int flags
, int mode
)
40 fd
= open (file
, NO_LINEAR (flags
), mode
);
44 local_info
= g_new (int, 1);
51 local_read (void *data
, char *buffer
, int count
)
58 while ((n
= read (*((int *) data
), buffer
, count
)) == -1){
60 if (errno
== EAGAIN
) continue;
63 if (errno
== EINTR
) continue;
71 local_close (void *data
)
84 local_errno (struct vfs_class
*me
)
91 local_opendir (struct vfs_class
*me
, const char *dirname
)
98 dir
= opendir (dirname
);
102 local_info
= (DIR **) g_new (DIR *, 1);
109 local_readdir (void *data
)
111 return readdir (*(DIR **) data
);
115 local_closedir (void *data
)
119 i
= closedir (* (DIR **) data
);
125 local_stat (struct vfs_class
*me
, const char *path
, struct stat
*buf
)
129 return stat (path
, buf
);
133 local_lstat (struct vfs_class
*me
, const char *path
, struct stat
*buf
)
137 #ifndef HAVE_STATLSTAT
138 return lstat (path
,buf
);
140 return statlstat (path
, buf
);
145 local_fstat (void *data
, struct stat
*buf
)
147 /* FIXME: avoid type cast */
148 return fstat (*((int *) data
), buf
);
152 local_chmod (struct vfs_class
*me
, const char *path
, int mode
)
156 return chmod (path
, mode
);
160 local_chown (struct vfs_class
*me
, const char *path
, int owner
, int group
)
164 return chown (path
, owner
, group
);
168 local_utime (struct vfs_class
*me
, const char *path
, struct utimbuf
*times
)
172 return utime (path
, times
);
176 local_readlink (struct vfs_class
*me
, const char *path
, char *buf
, size_t size
)
180 return readlink (path
, buf
, size
);
184 local_unlink (struct vfs_class
*me
, const char *path
)
188 return unlink (path
);
192 local_symlink (struct vfs_class
*me
, const char *n1
, const char *n2
)
196 return symlink (n1
, n2
);
200 local_write (void *data
, const char *buf
, int nbyte
)
209 while ((n
= write (fd
, buf
, nbyte
)) == -1){
211 if (errno
== EAGAIN
) continue;
214 if (errno
== EINTR
) continue;
222 local_rename (struct vfs_class
*me
, const char *a
, const char *b
)
226 return rename (a
, b
);
230 local_chdir (struct vfs_class
*me
, const char *path
)
238 local_lseek (void *data
, off_t offset
, int whence
)
240 int fd
= * (int *) data
;
242 return lseek (fd
, offset
, whence
);
246 local_mknod (struct vfs_class
*me
, const char *path
, int mode
, int dev
)
250 return mknod (path
, mode
, dev
);
254 local_link (struct vfs_class
*me
, const char *p1
, const char *p2
)
258 return link (p1
, p2
);
262 local_mkdir (struct vfs_class
*me
, const char *path
, mode_t mode
)
266 return mkdir (path
, mode
);
270 local_rmdir (struct vfs_class
*me
, const char *path
)
278 local_getlocalcopy (struct vfs_class
*me
, const char *path
)
282 return g_strdup (path
);
286 local_ungetlocalcopy (struct vfs_class
*me
, const char *path
,
287 const char *local
, int has_changed
)
298 local_which (struct vfs_class
*me
, const char *path
)
303 return 0; /* Every path which other systems do not like is expected to be ours */
309 vfs_local_ops
.name
= "localfs";
310 vfs_local_ops
.flags
= VFSF_LOCAL
;
311 vfs_local_ops
.which
= local_which
;
312 vfs_local_ops
.open
= local_open
;
313 vfs_local_ops
.close
= local_close
;
314 vfs_local_ops
.read
= local_read
;
315 vfs_local_ops
.write
= local_write
;
316 vfs_local_ops
.opendir
= local_opendir
;
317 vfs_local_ops
.readdir
= local_readdir
;
318 vfs_local_ops
.closedir
= local_closedir
;
319 vfs_local_ops
.stat
= local_stat
;
320 vfs_local_ops
.lstat
= local_lstat
;
321 vfs_local_ops
.fstat
= local_fstat
;
322 vfs_local_ops
.chmod
= local_chmod
;
323 vfs_local_ops
.chown
= local_chown
;
324 vfs_local_ops
.utime
= local_utime
;
325 vfs_local_ops
.readlink
= local_readlink
;
326 vfs_local_ops
.symlink
= local_symlink
;
327 vfs_local_ops
.link
= local_link
;
328 vfs_local_ops
.unlink
= local_unlink
;
329 vfs_local_ops
.rename
= local_rename
;
330 vfs_local_ops
.chdir
= local_chdir
;
331 vfs_local_ops
.ferrno
= local_errno
;
332 vfs_local_ops
.lseek
= local_lseek
;
333 vfs_local_ops
.mknod
= local_mknod
;
334 vfs_local_ops
.getlocalcopy
= local_getlocalcopy
;
335 vfs_local_ops
.ungetlocalcopy
= local_ungetlocalcopy
;
336 vfs_local_ops
.mkdir
= local_mkdir
;
337 vfs_local_ops
.rmdir
= local_rmdir
;
338 vfs_register_class (&vfs_local_ops
);