You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/08/17 18:31:47 UTC
svn commit: r805031 -
/commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c
Author: mturk
Date: Mon Aug 17 16:31:46 2009
New Revision: 805031
URL: http://svn.apache.org/viewvc?rev=805031&view=rev
Log:
We'll use inode for readdir as well
Modified:
commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c?rev=805031&r1=805030&r2=805031&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c Mon Aug 17 16:31:46 2009
@@ -53,10 +53,10 @@
static __inline void FS2BS(wchar_t *path)
{
- size_t i;
- for (i = 0; i < wcslen(path); i++) {
- if (path[i] == L'/')
- path[i] = L'\\';
+ while (*path) {
+ if (*path == L'/')
+ *path = L'\\';
+ path++;
}
}
@@ -121,6 +121,41 @@
return -1;
}
+ACR_DECLARE(acr_uint64_t) ACR_FileInodeGet(JNIEnv *_E, const wchar_t *fname)
+{
+ HANDLE fh;
+ acr_uint64_t rv = 0;
+ int ex = 0;
+
+ fh = CreateFileW(fname,
+ 0, /* Query attributes without accessing the file */
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+ NULL,
+ OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS,
+ NULL);
+ if (fh != INVALID_HANDLE_VALUE) {
+ BY_HANDLE_FILE_INFORMATION fi;
+ if (GetFileInformationByHandle(fh, &fi)) {
+ rv = (((acr_uint64_t)fi.nFileIndexHigh + (acr_uint64_t)fi.dwVolumeSerialNumber) << 30) + fi.nFileIndexLow;
+ ex = 0;
+ }
+ else
+ ex = ACR_GET_OS_ERROR();
+ CloseHandle(fh);
+ }
+ else
+ ex = ACR_GET_OS_ERROR();
+ if (ex) {
+ rv = 0;
+ ACR_SET_OS_ERROR(ex);
+ if (!IS_INVALID_HANDLE(_E))
+ ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ex);
+ }
+ return rv;
+}
+
+
ACR_IO_EXPORT_DECLARE(int, File, ftype0)(ACR_JNISTDARGS, jstring pathname)
{
int type = ACR_FT_UNKFILE;
@@ -660,7 +695,7 @@
ACR_IO_EXPORT_DECLARE(jboolean, File, fprot2)(ACR_JNISTDARGS, jstring pathname,
jobject usr, jobject grp)
{
- int rc = EINVAL;
+ int rc = ACR_EINVAL;
UNREFERENCED_O;
@@ -711,7 +746,7 @@
ACR_IO_EXPORT_DECLARE(jboolean, File, attrs0)(ACR_JNISTDARGS, jstring pathname,
jint attr, jint mask)
{
- int rc = EINVAL;
+ int rc = ACR_EINVAL;
DWORD flags;
UNREFERENCED_O;
@@ -784,31 +819,14 @@
ACR_IO_EXPORT_DECLARE(jlong, File, inode0)(ACR_JNISTDARGS, jstring pathname)
{
jlong rv = 0;
- int ex = EINVAL;
+ int ex = ACR_EINVAL;
UNREFERENCED_O;
WITH_WSTR(pathname) {
- HANDLE fh;
FS2BS(J2W(pathname));
- fh = CreateFileW(J2W(pathname),
- 0, /* Query attributes without accessing the file */
- FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
- NULL,
- OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS,
- NULL);
- if (fh != INVALID_HANDLE_VALUE) {
- BY_HANDLE_FILE_INFORMATION fi;
- if (GetFileInformationByHandle(fh, &fi)) {
- rv = (((jlong)fi.nFileIndexHigh + (jlong)fi.dwVolumeSerialNumber) << 30) + fi.nFileIndexLow;
- ex = 0;
- }
- else
- ex = ACR_GET_OS_ERROR();
- CloseHandle(fh);
- }
- else
+ rv = (jlong)ACR_FileInodeGet(NULL, J2W(pathname));
+ if (rv == 0)
ex = ACR_GET_OS_ERROR();
} END_WITH_WSTR(pathname);