#include "captivefs-attr.h" /* self */
#include <glib/gmessages.h>
#include <time.h>
+#include "captivefs-vfs.h"
-gboolean captivefs_GnomeVFSFileInfo_to_lufs_fattr(struct lufs_fattr *fattr,const GnomeVFSFileInfo *file_info)
+gboolean captivefs_GnomeVFSFileInfo_to_lufs_fattr
+ (struct captivefs_vfs *captivefs_vfs,struct lufs_fattr *fattr,const GnomeVFSFileInfo *file_info)
{
+ g_return_val_if_fail(captivefs_vfs_validate(captivefs_vfs),FALSE);
g_return_val_if_fail(fattr!=NULL,FALSE);
g_return_val_if_fail(file_info!=NULL,FALSE);
if (file_info->valid_fields&GNOME_VFS_FILE_INFO_FIELDS_TYPE)
switch (file_info->type) {
- case GNOME_VFS_FILE_TYPE_REGULAR: fattr->f_mode|=S_IFREG; break;
- case GNOME_VFS_FILE_TYPE_DIRECTORY: fattr->f_mode|=S_IFDIR; break;
+ case GNOME_VFS_FILE_TYPE_REGULAR:
+ fattr->f_mode|=S_IFREG;
+ /* 'fmode' kernel LUFS option only |= to our reported 'f_mode': */
+ if (!captivefs_vfs->private)
+ fattr->f_mode|=0444;
+ break;
+ case GNOME_VFS_FILE_TYPE_DIRECTORY:
+ fattr->f_mode|=S_IFDIR;
+ /* 'dmode' kernel LUFS option only |= to our reported 'f_mode': */
+ if (!captivefs_vfs->private)
+ fattr->f_mode|=0555;
+ break;
default:
g_warning("Unknown GnomeVFSFileInfo.type=%d of: %s",(int)file_info->type,file_info->name);
return FALSE;