added QSE_FIO_NOFOLLOW
This commit is contained in:
@ -147,6 +147,9 @@ int qse_fio_init (
|
||||
if (flags & QSE_FIO_SYNC)
|
||||
flag_and_attr |= FILE_FLAG_WRITE_THROUGH;
|
||||
|
||||
if (flags & QSE_FIO_NOFOLLOW)
|
||||
flag_and_attr |= FILE_FLAG_OPEN_REPARSE_POINT;
|
||||
|
||||
/* these two are just hints to OS */
|
||||
if (flags & QSE_FIO_RANDOM)
|
||||
flag_and_attr |= FILE_FLAG_RANDOM_ACCESS;
|
||||
@ -350,6 +353,10 @@ int qse_fio_init (
|
||||
if (flags & QSE_FIO_EXCLUSIVE) desired_access |= O_EXCL;
|
||||
if (flags & QSE_FIO_SYNC) desired_access |= O_SYNC;
|
||||
|
||||
#if defined(O_NOFOLLOW)
|
||||
if (flags & QSE_FIO_NOFOLLOW) desired_access |= O_NOFOLLOW;
|
||||
#endif
|
||||
|
||||
#if defined(O_LARGEFILE)
|
||||
desired_access |= O_LARGEFILE;
|
||||
#endif
|
||||
|
@ -31,6 +31,7 @@
|
||||
# error NOT IMPLEMENTED
|
||||
#else
|
||||
# include <sys/types.h>
|
||||
# include <sys/stat.h>
|
||||
# include <dirent.h>
|
||||
#endif
|
||||
|
||||
@ -383,6 +384,25 @@ qse_dir_ent_t* qse_dir_read (qse_dir_t* dir)
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
#if defined(HAVE_STRUCT_DIRENT_D_TYPE)
|
||||
if (ent->d_type != DT_DIR)
|
||||
#endif
|
||||
{
|
||||
int x;
|
||||
#if defined(HAVE_LSTAT64)
|
||||
struct stat64 st;
|
||||
x = lstat64 (ent->d_name, &st);
|
||||
#else
|
||||
struct stat st;
|
||||
x = lstat (ent->d_name, &st);
|
||||
#endif
|
||||
if (x == -1)
|
||||
{
|
||||
/*TODO: dir->errnum = ... */
|
||||
return QSE_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (set_entry_name (dir, ent->d_name) <= -1) return QSE_NULL;
|
||||
|
||||
#if defined(HAVE_STRUCT_DIRENT_D_TYPE)
|
||||
@ -393,15 +413,17 @@ qse_dir_ent_t* qse_dir_read (qse_dir_t* dir)
|
||||
dir->ent.type = QSE_DIR_ENT_DIRECTORY;
|
||||
break;
|
||||
|
||||
case DT_REG:
|
||||
dir->ent.type = QSE_DIR_ENT_REGULAR;
|
||||
break;
|
||||
|
||||
default:
|
||||
dir->ent.size = 0;
|
||||
dir->ent.type = QSE_DIR_ENT_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
|
||||
#else
|
||||
/* call lstat??? */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
return &dir->ent;
|
||||
}
|
||||
|
Reference in New Issue
Block a user