mirror of
https://git.openafs.org/openafs.git
synced 2025-01-19 15:30:14 +00:00
ihandle: Add FDH_ISUNLINKED
Add the FDH_ISUNLINKED functionality to ihandle. This lets the caller know if the file for the underlying file descriptor has been deleted out from under us. This is useful for sanity checks in some callers. Change-Id: I59d4fffba853cfa1b900a08b7b43134c29bbf844 Reviewed-on: http://gerrit.openafs.org/8838 Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil> Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
This commit is contained in:
parent
a04071e794
commit
9cf9a0e978
@ -1095,3 +1095,18 @@ ih_pwrite(int fd, const void * buf, size_t count, afs_foff_t offset)
|
||||
return OS_WRITE(fd, buf, count);
|
||||
}
|
||||
#endif /* !HAVE_PIO */
|
||||
|
||||
#ifndef AFS_NT40_ENV
|
||||
int
|
||||
ih_isunlinked(int fd)
|
||||
{
|
||||
struct afs_stat_st status;
|
||||
if (afs_fstat(fd, &status) < 0) {
|
||||
return -1;
|
||||
}
|
||||
if (status.st_nlink < 1) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* !AFS_NT40_ENV */
|
||||
|
@ -61,6 +61,7 @@
|
||||
* status information:
|
||||
* FDH_SIZE - returns the size of the file.
|
||||
* FDH_NLINK - returns the link count of the file.
|
||||
* FDH_ISUNLINKED - returns if the file has been unlinked out from under us
|
||||
*
|
||||
* Miscellaneous:
|
||||
* FDH_FDOPEN - create a descriptor for buffered I/O
|
||||
@ -386,6 +387,8 @@ extern ssize_t ih_pwrite(FD_t fd, const void * buf, size_t count, afs_foff_t off
|
||||
# define OS_UNLOCKFILE(FD, O) (!UnlockFile(FD, (DWORD)((O) & 0xFFFFFFFF), (DWORD)((O) >> 32), 2, 0))
|
||||
# define OS_ERROR(X) nterr_nt2unix(GetLastError(), X)
|
||||
# define OS_UNLINK(X) nt_unlink(X)
|
||||
/* we can't have a file unlinked out from under us on NT */
|
||||
# define OS_ISUNLINKED(X) (0)
|
||||
# define OS_DIRSEP "\\"
|
||||
# define OS_DIRSEPC '\\'
|
||||
#else
|
||||
@ -393,6 +396,8 @@ extern ssize_t ih_pwrite(FD_t fd, const void * buf, size_t count, afs_foff_t off
|
||||
# define OS_UNLOCKFILE(FD, O) flock(FD, LOCK_UN)
|
||||
# define OS_ERROR(X) X
|
||||
# define OS_UNLINK(X) unlink(X)
|
||||
# define OS_ISUNLINKED(X) ih_isunlinked(X)
|
||||
extern int ih_isunlinked(FD_t fd);
|
||||
# define OS_DIRSEP "/"
|
||||
# define OS_DIRSEPC '/'
|
||||
#endif
|
||||
@ -550,6 +555,7 @@ extern afs_sfsize_t ih_size(FD_t);
|
||||
#define FDH_SIZE(H) OS_SIZE((H)->fd_fd)
|
||||
#define FDH_LOCKFILE(H, O) OS_LOCKFILE((H)->fd_fd, O)
|
||||
#define FDH_UNLOCKFILE(H, O) OS_UNLOCKFILE((H)->fd_fd, O)
|
||||
#define FDH_ISUNLINKED(H) OS_ISUNLINKED((H)->fd_fd)
|
||||
|
||||
#ifdef AFS_NT40_ENV
|
||||
# define afs_stat_st __stat64
|
||||
|
Loading…
Reference in New Issue
Block a user