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/10/24 13:22:15 UTC
svn commit: r829344 - in /commons/sandbox/runtime/trunk/src:
main/native/include/ main/native/include/arch/windows/ main/native/os/unix/
main/native/os/win32/ main/native/port/ test/org/apache/commons/runtime/
Author: mturk
Date: Sat Oct 24 11:22:15 2009
New Revision: 829344
URL: http://svn.apache.org/viewvc?rev=829344&view=rev
Log:
Fix windows Path implementation
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/acr.h
commons/sandbox/runtime/trunk/src/main/native/include/acr_port.h
commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h
commons/sandbox/runtime/trunk/src/main/native/os/unix/path.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/path.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c
commons/sandbox/runtime/trunk/src/main/native/port/basename.c
commons/sandbox/runtime/trunk/src/main/native/port/dirname.c
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFileSys.java
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr.h?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr.h Sat Oct 24 11:22:15 2009
@@ -253,7 +253,7 @@
typedef HANDLE acr_osd_t;
#define ACR_INT64_C(val) (val##I64)
#define ACR_UINT64_C(val) (val##UI64)
-#define ACR_PPATH_MAX 1024
+#define ACR_PPATH_MAX 8192
#else /* !_MSC_VER */
typedef ssize_t acr_ssize_t;
#ifdef _LP64 /* 64-bit Solaris */
@@ -283,7 +283,7 @@
#define ACR_INT64_C(val) (val##LL)
#define ACR_UINT64_C(val) (val##ULL)
#endif
-#define ACR_PPATH_MAX PATH_MAX
+#define ACR_PPATH_MAX (PATH_MAX * 2)
#endif /* _MSC_VER */
#if CC_SIZEOF_VOIDP == 8
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_port.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_port.h?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_port.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_port.h Sat Oct 24 11:22:15 2009
@@ -47,12 +47,14 @@
* Reentrant version of dirname.
* If buffer is NULL it uses static buffer.
*/
-char *dirname_r(const char *, char *, size_t);
+char *dirname_r(const char *, char *, size_t);
+wchar_t *dirname_w(const wchar_t *, wchar_t *, size_t);
/**
* Reentrant version of basename
* If buffer is NULL it uses static buffer.
*/
-char *basename_r(const char *, char *, size_t);
+char *basename_r(const char *, char *, size_t);
+wchar_t *basename_w(const wchar_t *, wchar_t *, size_t);
#if defined(ACR_WANT_STRSIGNAL)
char *strsignal(int);
Modified: commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/arch/windows/acr_arch.h Sat Oct 24 11:22:15 2009
@@ -583,10 +583,12 @@
SYSDLL_SHELL32 = 6, /* shell32 From ShellAPI.h */
SYSDLL_ADVAPI32 = 7, /* advapi32 From WinBase.h */
SYSDLL_MSVCRT = 8, /* msvcrt */
- SYSDLL_JVM = 9, /* jvm From our own jvm.dll */
- SYSDLL_KTMW32 = 10, /* ktmw32 From Ktmw32.h */
+ SYSDLL_RICHED32 = 9, /* riched32 */
+ SYSDLL_MSHTML = 10, /* mshtml */
+ SYSDLL_JVM = 11, /* jvm From our own jvm.dll */
+ SYSDLL_KTMW32 = 12, /* ktmw32 From Ktmw32.h */
- SYSDLL_defined = 11 /* must define as last idx_ + 1 */
+ SYSDLL_defined = 13 /* must define as last idx_ + 1 */
} acr_dlltoken_e;
extern LPSYSTEM_INFO acr_osinf;
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/path.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/path.c?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/path.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/path.c Sat Oct 24 11:22:15 2009
@@ -29,7 +29,6 @@
* Posix file path functions
*
*/
-#define UCPATH_MAX (PATH_MAX * 2)
#define IS_PATH_SEP(C) ((C) == '/' || (C) == '\0')
static char *_rel_path(char *pcopy, size_t size, const char *path)
@@ -155,10 +154,10 @@
*/
char *acr_GetAbsolutePath(JNIEnv *_E, const char *path)
{
- char pcopy[UCPATH_MAX];
+ char pcopy[ACR_PPATH_MAX];
char *cp;
- cp = _abs_path(pcopy, UCPATH_MAX, path);
+ cp = _abs_path(pcopy, ACR_PPATH_MAX, path);
if (!cp) {
ACR_THROW_IO_ERRNO();
return NULL;
@@ -229,9 +228,9 @@
UNREFERENCED_O;
WITH_CSTR(path) {
- char pcopy[UCPATH_MAX];
+ char pcopy[ACR_PPATH_MAX];
char *abs;
- if ((abs = _abs_path(pcopy, UCPATH_MAX, J2S(path))))
+ if ((abs = _abs_path(pcopy, ACR_PPATH_MAX, J2S(path))))
rv = ACR_NewJavaStringA(_E, abs);
else
rc = ACR_GET_OS_ERROR();
@@ -251,14 +250,14 @@
UNREFERENCED_O;
WITH_CSTR(root) {
WITH_CSTR(path) {
- char pcopy[UCPATH_MAX];
- char merge[UCPATH_MAX];
- char *abs;
- strlcpy(merge, J2S(root), UCPATH_MAX);
- strlcat(merge, "/", UCPATH_MAX);
- strlcpy(merge, J2S(path), UCPATH_MAX);
- if ((abs = _abs_path(pcopy, UCPATH_MAX, merge)))
- rv = ACR_NewJavaStringA(_E, abs);
+ char pcopy[ACR_PPATH_MAX];
+ char merge[ACR_PPATH_MAX];
+ char *rel;
+ strlcpy(merge, J2S(root), ACR_PPATH_MAX);
+ strlcat(merge, "/", ACR_PPATH_MAX);
+ strlcpy(merge, J2S(path), ACR_PPATH_MAX);
+ if ((rel = _rel_path(pcopy, ACR_PPATH_MAX, merge)))
+ rv = ACR_NewJavaStringA(_E, rel);
else
rc = ACR_GET_OS_ERROR();
} END_WITH_CSTR(path);
@@ -278,15 +277,15 @@
UNREFERENCED_O;
WITH_CSTR(root) {
WITH_CSTR(path) {
- char pcopy[UCPATH_MAX];
- char merge[UCPATH_MAX];
- char *abs;
+ char pcopy[ACR_PPATH_MAX];
+ char merge[ACR_PPATH_MAX];
+ char *rel;
/* Normalize path */
- if ((abs = _abs_path(pcopy, UCPATH_MAX, J2S(path)))) {
+ if ((rel = _rel_path(pcopy, ACR_PPATH_MAX, J2S(path)))) {
/* Prepend root */
- strlcpy(merge, J2S(root), UCPATH_MAX);
- strlcat(merge, "/", UCPATH_MAX);
- strlcat(merge, abs, UCPATH_MAX);
+ strlcpy(merge, J2S(root), ACR_PPATH_MAX);
+ strlcat(merge, "/", ACR_PPATH_MAX);
+ strlcat(merge, rel, ACR_PPATH_MAX);
rv = ACR_NewJavaStringA(_E, merge);
}
else
@@ -305,9 +304,9 @@
UNREFERENCED_O;
WITH_CSTR(path) {
- char pcopy[UCPATH_MAX];
+ char pcopy[ACR_PPATH_MAX];
char *rel;
- if ((rel = _rel_path(pcopy, UCPATH_MAX, J2S(path))))
+ if ((rel = _rel_path(pcopy, ACR_PPATH_MAX, J2S(path))))
rv = ACR_NewJavaStringA(_E, rel);
else
rc = ACR_GET_OS_ERROR();
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysio.c Sat Oct 24 11:22:15 2009
@@ -269,6 +269,9 @@
x_free(fp->name);
x_free(fp);
}
+ if (fo > 0)
+ acr_ioh_free(fo);
+
}
return rc;
@@ -378,6 +381,7 @@
if (!fdo) {
rc = ACR_GET_OS_ERROR();
x_free(fp);
+ acr_ioh_free(fo);
ACR_THROW_IO_IF_ERR(rc);
return NULL;
}
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/gui.c Sat Oct 24 11:22:15 2009
@@ -44,11 +44,9 @@
HICON gui_h16Icon = NULL;
HICON gui_h32Icon = NULL;
HICON gui_h48Icon = NULL;
-HMODULE gui_hMSHTML = NULL;
HWND gui_DialogWnd = NULL;
static HINSTANCE gui_hInstance = NULL;
static HWND gui_hMainWnd = NULL;
-static HMODULE gui_hRichedit = NULL;
static UINT gui_ucNumLines = 3;
static CHAR gui_szWndClass[MAX_PATH];
@@ -88,8 +86,6 @@
ICC_BAR_CLASSES;
InitCommonControlsEx(&stCmn);
- gui_hRichedit = LoadLibraryA("RICHED32.DLL");
- gui_hMSHTML = LoadLibraryA("MSHTML.DLL");
gui_h16Icon = LoadImage(gui_hInstance, MAKEINTRESOURCE(IDI_MAINICON),
IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
@@ -112,9 +108,6 @@
gui_Windows[i] = NULL;
}
}
- FreeLibrary(gui_hRichedit);
- FreeLibrary(gui_hMSHTML);
-
return TRUE;
}
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c Sat Oct 24 11:22:15 2009
@@ -183,13 +183,16 @@
"shell32.dll",
"advapi32.dll",
"msvcrt.dll",
+ "riched32.dll",
+ "mshtml.dll",
"jvm.dll",
"ktmw32.dll"
};
static HMODULE late_dll_handles[SYSDLL_defined] = {
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL
};
FARPROC acr_load_dll_func(acr_dlltoken_e fnLib, const char* fnName, int undec)
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/path.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/path.c?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/path.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/path.c Sat Oct 24 11:22:15 2009
@@ -77,8 +77,10 @@
}
}
-#define UCPATH_MAX 8192
-#define IS_PATH_SEP(C) ((C) == L'/' || (C) == L'\0')
+static int case_sensitive = 0;
+#define IS_PATH_SEP(C) ((C) == L'/' || (C) == L'\0')
+#define IS_DRIVE_CHAR(C) (((C) >= L'A' && (C) <= L'Z') || \
+ ((C) >= L'a' && (C) <= L'z'))
static wchar_t *_rel_path(wchar_t *pcopy, size_t size, const wchar_t *path)
{
@@ -88,7 +90,7 @@
size_t l;
wcslcpy(pcopy, path, size);
- /* Convert everything to back slashes
+ /* Convert everything to foward slashes
*/
BS2FS(pcopy);
/* Remove \\?\ and replace \\?\UNC\ with \\
@@ -102,8 +104,7 @@
pcopy[l - 1] = L'\0';
rv = pcopy;
- if (((pcopy[0] >= L'A' && pcopy[0] <= 'Z') ||
- (pcopy[0] >= L'a' && pcopy[0] <= 'z')) && pcopy[1] == L':') {
+ if (IS_DRIVE_CHAR(pcopy[0]) && pcopy[1] == L':') {
/* Never go above C: */
pcopy += 2;
}
@@ -130,7 +131,7 @@
while (path[nd] == L'.')
nd++;
if (nd > 2) {
- errno = ACR_EINVAL;
+ ACR_SET_OS_ERROR(ACR_EINVAL);
return NULL;
}
if (IS_PATH_SEP(path[nd])) {
@@ -186,7 +187,7 @@
else {
rv = ACR_MALLOC(wchar_t, srclen + 9);
if (!rv) {
- /* Exception has already neen throw from ACR_Malloc
+ /* Exception has already been throw from ACR_Malloc
*/
return NULL;
}
@@ -199,52 +200,58 @@
}
else {
retstr = rv;
- if (srclen > NON_UNC_PATH_LENGTH) {
- if (srcstr[1] == L':' && (srcstr[2] == L'/' || srcstr[2] == L'\\')) {
+ if (IS_DRIVE_CHAR(srcstr[0]) && srcstr[1] == L':' &&
+ (srcstr[2] == L'/' || srcstr[2] == L'\\')) {
+ if (srclen > NON_UNC_PATH_LENGTH) {
wcscpy(retstr, L"\\\\?\\");
retstr += 4;
retlen += 4;
}
- else if ((srcstr[0] == L'/' || srcstr[0] == L'\\')
- && (srcstr[1] == L'/' || srcstr[1] == L'\\')
- && (srcstr[2] != L'?')) {
- if (srcstr[2] == L'.' && (srcstr[3] == L'/' || srcstr[3] == L'\\')) {
- /* We have \\.\ sequence that can apear only
- * if we have something like \\.\pipe\
- */
- wcscpy(retstr, L"\\\\.\\");
- retstr += 4;
- srcstr += 4;
- srclen -= 4;
- }
- else {
- /* Skip the slashes and ? */
- srcstr += 2;
- srclen -= 2;
- wcscpy (retstr, L"\\\\?\\UNC\\");
- retlen += 8;
- retstr += 8;
- }
- }
- else if (srcstr[0] == '/' || srcstr[0] == '\\') {
- int cd;
- /* Addition to APR. Allow \FilePath
- * and construct \\?\CurrenttDrive:\FilePath
- * We use _getdrive CRT function
+ }
+ else if ((srcstr[0] == L'/' || srcstr[0] == L'\\')
+ && (srcstr[1] == L'/' || srcstr[1] == L'\\')
+ && (srcstr[2] != L'?')) {
+ if (srcstr[2] == L'.' && (srcstr[3] == L'/' ||
+ srcstr[3] == L'\\')) {
+ /* We have \\.\ sequence that can apear only
+ * if we have something like \\.\pipe\
*/
+ wcscpy(retstr, L"\\\\.\\");
+ retstr += 4;
+ srcstr += 4;
+ srclen -= 4;
+ }
+ else {
+ /* Skip the slashes and ? */
+ srcstr += 2;
+ srclen -= 2;
+ wcscpy (retstr, L"\\\\?\\UNC\\");
+ retlen += 6;
+ retstr += 8;
+ }
+ }
+ else if (srcstr[0] == '/' || srcstr[0] == '\\') {
+ int cd;
+ int ps = 0;
+ /* Addition to APR. Allow \FilePath
+ * and construct \\?\CurrenttDrive:\FilePath
+ * We use _getdrive CRT function
+ */
+ if (srclen > NON_UNC_PATH_LENGTH) {
wcscpy(retstr, L"\\\\?\\");
- if ((cd = _getdrive()))
- retstr[4] = L'A' + cd - 1;
- else {
- /* C:\ should always be there
- * If not later open will fail anyhow
- */
- retstr[4] = L'C';
- }
- retstr[5] = L':';
- retlen += 6;
- retstr += 6;
+ ps = 4;
+ }
+ if ((cd = _getdrive()))
+ retstr[ps] = L'A' + cd - 1;
+ else {
+ /* C:\ should always be there
+ * If not later open will fail anyhow
+ */
+ retstr[ps] = L'C';
}
+ retstr[ps + 1] = L':';
+ retlen += (ps + 2);
+ retstr += (ps + 2);
}
memcpy(retstr, srcstr, srclen * sizeof(wchar_t));
@@ -261,10 +268,10 @@
if (s) {
wchar_t *retstr;
wchar_t *srcstr;
- wchar_t buff[ACR_MBUFF_SIZ];
+ wchar_t buff[ACR_PPATH_MAX];
size_t retlen = wcslen(s);
- if (retlen > ACR_MBUFF_LEN) {
+ if (retlen >= ACR_PPATH_MAX) {
srcstr = ACR_StrdupW(_E, THROW_FMARK, s);
if (!srcstr)
return NULL;
@@ -298,11 +305,11 @@
* On Win32 for utf8 paths we always use the forwrd slashes.
* They are converted to backward on translatio from utf8
*/
- for (; *retstr; retstr++) {
- if (*retstr == '\\')
- *retstr = '/';
- }
- r = (*_E)->NewString(_E, (const jchar *)s, (jsize)retlen);
+ BS2FS(retstr);
+
+ r = (*_E)->NewString(_E, (const jchar *)retstr, (jsize)retlen);
+ if (srcstr != buff)
+ x_free(srcstr);
}
return r;
}
@@ -335,7 +342,8 @@
ACR_UnloadClass(_E, &_clazzn);
}
-ACR_DECLARE(jobject) ACR_NewPathObject(JNIEnv *_E, int type, const wchar_t *fpath)
+ACR_DECLARE(jobject) ACR_NewPathObject(JNIEnv *_E, int type,
+ const wchar_t *fpath)
{
jstring path;
if ((path = acr_NewJavaNativePathW(_E, fpath)))
@@ -347,15 +355,29 @@
ACR_IO_EXPORT_DECLARE(void, Path, init0)(ACR_JNISTDARGS,
jintArray p)
{
- jint ia[8];
-
+ jint ia[8];
+ DWORD dw;
UNREFERENCED_O;
ia[0] = '\\';
ia[1] = ';';
- ia[2] = UCPATH_MAX; /* Use our path limit */
- ia[3] = NON_UNC_PATH_LENGTH;
- ia[4] = 1;
+ ia[2] = ACR_PPATH_MAX - 1; /* Use our path limit */
+ ia[3] = MAX_PATH - 2;
+ if (GetVolumeInformationW(L"C:\\",
+ NULL,
+ 0,
+ NULL,
+ NULL,
+ &dw,
+ NULL,
+ 0)) {
+ if ((dw & (FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES)) ==
+ (FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES))
+ case_sensitive = 1;
+ }
+ ia[4] = case_sensitive;
+ ia[5] = '%';
+ ia[6] = '%';
(*_E)->SetIntArrayRegion(_E, p, 0, 8, &ia[0]);
}
@@ -366,9 +388,9 @@
UNREFERENCED_O;
WITH_WSTR(path) {
- wchar_t pcopy[UCPATH_MAX];
+ wchar_t pcopy[ACR_PPATH_MAX];
wchar_t *rel;
- if ((rel = _rel_path(pcopy, UCPATH_MAX, J2W(path))))
+ if ((rel = _rel_path(pcopy, ACR_PPATH_MAX, J2W(path))))
rv = ACR_NewJavaStringW(_E, rel);
else
rc = ACR_GET_OS_ERROR();
@@ -392,16 +414,118 @@
jstring path,
jstring other)
{
- int rc = 1;
+ int rc = 1;
+ int uc = case_sensitive;
+ DWORD dw;
UNREFERENCED_O;
WITH_WSTR(path) {
WITH_WSTR(other) {
- /* Presume case insensitive file system
+ /* XXX: We could catch instead doing volume check each time.
*/
- rc = _wcsicmp(J2W(path), J2W(other));
+ if (GetVolumeInformationW(J2W(path),
+ NULL,
+ 0,
+ NULL,
+ NULL,
+ &dw,
+ NULL,
+ 0)) {
+ if ((dw & (FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES)) ==
+ (FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES))
+ uc = 1;
+ else
+ uc = 0;
+ }
+ if (uc)
+ rc = wcscmp(J2W(path), J2W(other));
+ else
+ rc = _wcsicmp(J2W(path), J2W(other));
} END_WITH_WSTR(other);
} END_WITH_WSTR(path);
return rc;
}
+
+ACR_IO_EXPORT_DECLARE(jstring, Path, merge0)(ACR_JNISTDARGS,
+ jstring root,
+ jstring path)
+{
+ int rc = 0;
+ jstring rv = NULL;
+
+ UNREFERENCED_O;
+ WITH_WSTR(root) {
+ WITH_WSTR(path) {
+ wchar_t pcopy[ACR_PPATH_MAX];
+ wchar_t merge[ACR_PPATH_MAX];
+ wchar_t *rel;
+ wcslcpy(merge, J2W(root), ACR_PPATH_MAX);
+ wcslcat(merge, L"/", ACR_PPATH_MAX);
+ wcslcpy(merge, J2W(path), ACR_PPATH_MAX);
+ if ((rel = _rel_path(pcopy, ACR_PPATH_MAX, merge)))
+ rv = ACR_NewJavaStringW(_E, rel);
+ else
+ rc = ACR_GET_OS_ERROR();
+ } END_WITH_WSTR(path);
+ } END_WITH_WSTR(root);
+
+ ACR_THROW_IO_IF_ERR(rc);
+ return rv;
+}
+
+ACR_IO_EXPORT_DECLARE(jstring, Path, merge1)(ACR_JNISTDARGS,
+ jstring root,
+ jstring path)
+{
+ int rc = 0;
+ jstring rv = NULL;
+
+ UNREFERENCED_O;
+ WITH_WSTR(root) {
+ WITH_WSTR(path) {
+ wchar_t pcopy[ACR_PPATH_MAX];
+ wchar_t merge[ACR_PPATH_MAX];
+ wchar_t *rel;
+ /* Normalize path */
+ if ((rel = _rel_path(pcopy, ACR_PPATH_MAX, J2W(path)))) {
+ /* Prepend root (should be already normalized) */
+ wcslcpy(merge, J2W(root), ACR_PPATH_MAX);
+ wcslcat(merge, L"/", ACR_PPATH_MAX);
+ wcslcat(merge, rel, ACR_PPATH_MAX);
+ rv = ACR_NewJavaStringW(_E, merge);
+ }
+ else
+ rc = ACR_GET_OS_ERROR();
+ } END_WITH_WSTR(path);
+ } END_WITH_WSTR(root);
+
+ ACR_THROW_IO_IF_ERR(rc);
+ return rv;
+}
+
+ACR_IO_EXPORT_DECLARE(jstring, Path, canon0)(ACR_JNISTDARGS, jstring path)
+{
+ int rc = 0;
+ jstring rv = NULL;
+
+ UNREFERENCED_O;
+ WITH_WPATH(path) {
+ wchar_t pcopy[ACR_PPATH_MAX];
+ DWORD len;
+
+ len = GetFullPathNameW(J2W(path),
+ ACR_PPATH_MAX,
+ pcopy,
+ NULL);
+ if (len == 0)
+ rc = ACR_GET_OS_ERROR();
+ else if (len >= ACR_PPATH_MAX)
+ rc = ACR_EOVERFLOW;
+ else
+ rv = acr_NewJavaNativePathW(_E, pcopy);
+ } END_WITH_WPATH(path);
+
+ ACR_THROW_IO_IF_ERR(rc);
+ return rv;
+}
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/wutil.c Sat Oct 24 11:22:15 2009
@@ -109,11 +109,11 @@
* Note that the \\?\ form only works for local drive paths, and
* \\?\UNC\ is needed UNC paths.
*/
- size_t srclen = strlen(srcstr) + 1;
- wchar_t *t = retstr;
+ size_t srclen = strlen(srcstr) + 1;
+ wchar_t *retptr = retstr;
/* leave an extra space for double zero */
- t[--retlen] = L'\0';
+ --retlen;
/* This is correct, we don't twist the filename if it is will
* definately be shorter than MAX_PATH. It merits some
* performance testing to see if this has any effect, but there
@@ -125,61 +125,67 @@
* Note that a utf-8 name can never result in more wide chars
* than the original number of utf-8 narrow chars.
*/
- if (srclen > NON_UNC_PATH_LENGTH) {
- if (srcstr[1] == ':' && (srcstr[2] == '/' || srcstr[2] == '\\')) {
- wcscpy (retstr, L"\\\\?\\");
+ if (srcstr[1] == ':' && (srcstr[2] == '/' || srcstr[2] == '\\')) {
+ if (srclen > NON_UNC_PATH_LENGTH) {
+ wcscpy(retstr, L"\\\\?\\");
retlen -= 4;
- t += 4;
+ retptr += 4;
}
- else if ((srcstr[0] == '/' || srcstr[0] == '\\')
- && (srcstr[1] == '/' || srcstr[1] == '\\')
- && (srcstr[2] != '?')) {
- if (srcstr[2] == '.' && (srcstr[3] == '/' || srcstr[3] == '\\')) {
- /* We have \\.\ sequence that can apear only
- * if we have something like \\.\pipe\
- */
- wcscpy (retstr, L"\\\\.\\");
- srcstr += 4;
- retlen -= 4;
- t += 4;
- }
- else {
- /* Skip the slashes and ? */
- srcstr += 2;
- srclen -= 2;
- wcscpy (retstr, L"\\\\?\\UNC\\");
- retlen -= 8;
- t += 8;
- }
- }
- else if (srcstr[0] == '/' || srcstr[0] == '\\') {
- int cd;
- /* Addition to APR. Allow \FilePath
- * and construct \\?\CurrenttDrive:\FilePath
- * We use _getdrive CRT function
+ }
+ else if ((srcstr[0] == '/' || srcstr[0] == '\\')
+ && (srcstr[1] == '/' || srcstr[1] == '\\')
+ && (srcstr[2] != '?')) {
+ if (srcstr[2] == '.' && (srcstr[3] == '/' || srcstr[3] == '\\')) {
+ /* We have \\.\ sequence that can apear only
+ * if we have something like \\.\pipe\
+ */
+ wcscpy(retstr, L"\\\\.\\");
+ srcstr += 4;
+ retlen -= 4;
+ retptr += 4;
+ }
+ else {
+ /* Skip the slashes and ? */
+ srcstr += 2;
+ srclen -= 2;
+ wcscpy(retstr, L"\\\\?\\UNC\\");
+ retlen -= 8;
+ retptr += 8;
+ }
+ }
+ else if (srcstr[0] == '/' || srcstr[0] == '\\') {
+ int cd;
+ int ps = 0;
+ /* Addition to APR. Allow \FilePath
+ * and construct \\?\CurrenttDrive:\FilePath
+ * We use _getdrive CRT function
+ */
+ if (srclen > NON_UNC_PATH_LENGTH) {
+ wcscpy(retstr, L"\\\\?\\");
+ ps = 4;
+ }
+ if ((cd = _getdrive()))
+ retstr[ps] = L'A' + cd - 1;
+ else {
+ /* C:\ should always be there
+ * If not later open will fail anyhow
*/
- wcscpy (retstr, L"\\\\?\\");
- if ((cd = _getdrive()))
- retstr[4] = L'A' + cd - 1;
- else {
- /* C:\ should always be there
- * If not later open will fail anyhow
- */
- retstr[4] = L'C';
- }
- retstr[5] = L':';
- retlen -= 6;
- t += 6;
+ retstr[ps] = L'C';
}
+ retstr[ps = 1] = L':';
+ retlen -= (ps + 2);
+ retptr += (ps + 2);
}
if (!MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS,
- srcstr, (int)srclen, t, (int)retlen))
+ srcstr, (int)srclen, retptr, (int)retlen)) {
+ *retstr = L'\0';
return ACR_GET_OS_ERROR();
- for (; *t; t++) {
- if (*t == L'/')
- *t = L'\\';
}
- *t = L'\0';
+ for (; *retptr; retptr++) {
+ if (*retptr == L'/')
+ *retptr = L'\\';
+ }
+ *retptr = L'\0';
return 0;
}
@@ -207,8 +213,11 @@
}
}
- if (!WideCharToMultiByte(CP_UTF8, 0, srcstr, -1, retstr, (int)retlen, NULL, 0))
+ if (!WideCharToMultiByte(CP_UTF8, 0, srcstr, -1,
+ retstr, (int)retlen, NULL, 0)) {
+ *retstr = '\0';
return ACR_GET_OS_ERROR();
+ }
/* Translate all back to forward slashes.
* On Win32 for utf8 paths we always use the forwrd slashes.
* They are converted to backward on translatio from utf8
@@ -244,10 +253,10 @@
srcstr += 4;
}
}
- len = wcslen(srcstr);
+ len = wcslen(srcstr) + 1;
if (len > retlen)
return ACR_EOVERFLOW;
- memcpy(retstr, srcstr, (len + 1) * sizeof(wchar_t));
+ memcpy(retstr, srcstr, len * sizeof(wchar_t));
/* Translate all back to forward slashes.
* On Win32 for utf8 paths we always use the forward slashes.
* They are converted to backward on translation from acr.
@@ -274,11 +283,11 @@
* Note that the \\?\ form only works for local drive paths, and
* \\?\UNC\ is needed UNC paths.
*/
- size_t srclen = wcslen(srcstr) + 1;
- wchar_t *t = retstr;
+ size_t srclen = wcslen(srcstr) + 1;
+ wchar_t *retptr = retstr;
/* leave an extra space for double zero */
- t[--retlen] = L'\0';
+ --retlen;
/* This is correct, we don't twist the filename if it is will
* definately be shorter than MAX_PATH. It merits some
* performance testing to see if this has any effect, but there
@@ -290,60 +299,67 @@
* Note that a utf-8 name can never result in more wide chars
* than the original number of utf-8 narrow chars.
*/
- if (srclen > NON_UNC_PATH_LENGTH) {
- if (srcstr[1] == L':' && (srcstr[2] == L'/' || srcstr[2] == L'\\')) {
- wcscpy (retstr, L"\\\\?\\");
+ if (srcstr[1] == L':' && (srcstr[2] == L'/' || srcstr[2] == L'\\')) {
+ if (srclen > NON_UNC_PATH_LENGTH) {
+ wcscpy(retstr, L"\\\\?\\");
retlen -= 4;
- t += 4;
+ retptr += 4;
}
- else if ((srcstr[0] == L'/' || srcstr[0] == L'\\')
- && (srcstr[1] == L'/' || srcstr[1] == L'\\')
- && (srcstr[2] != L'?')) {
- if (srcstr[2] == L'.' && (srcstr[3] == L'/' || srcstr[3] == L'\\')) {
- /* We have \\.\ sequence that can apear only
- * if we have something like \\.\pipe\
- */
- wcscpy (retstr, L"\\\\.\\");
- srcstr += 4;
- retlen -= 4;
- t += 4;
- }
- else {
- /* Skip the slashes and ? */
- srcstr += 2;
- srclen -= 2;
- wcscpy (retstr, L"\\\\?\\UNC\\");
- retlen -= 8;
- t += 8;
- }
- }
- else if (srcstr[0] == L'/' || srcstr[0] == L'\\') {
- int cd;
- /* Addition to APR. Allow \FilePath
- * and construct \\?\CurrenttDrive:\FilePath
- * We use _getdrive CRT function
+ }
+ else if ((srcstr[0] == L'/' || srcstr[0] == L'\\')
+ && (srcstr[1] == L'/' || srcstr[1] == L'\\')
+ && (srcstr[2] != L'?')) {
+ if (srcstr[2] == L'.' && (srcstr[3] == L'/' || srcstr[3] == L'\\')) {
+ /* We have \\.\ sequence that can apear only
+ * if we have something like \\.\pipe\
*/
- wcscpy (retstr, L"\\\\?\\");
- if ((cd = _getdrive()))
- retstr[4] = L'A' + cd - 1;
- else {
- /* C:\ should always be there
- * If not later open will fail anyhow
- */
- retstr[4] = L'C';
- }
- retstr[5] = L':';
- retlen -= 6;
- t += 6;
+ wcscpy(retstr, L"\\\\.\\");
+ srcstr += 4;
+ retlen -= 4;
+ retptr += 4;
+ }
+ else {
+ /* Skip the slashes and ? */
+ srcstr += 2;
+ srclen -= 2;
+ wcscpy (retstr, L"\\\\?\\UNC\\");
+ retlen -= 8;
+ retptr += 8;
}
}
- if (srclen > retlen)
+ else if (srcstr[0] == L'/' || srcstr[0] == L'\\') {
+ int cd;
+ int ps = 0;
+ /* Addition to APR. Allow \FilePath
+ * and construct \\?\CurrenttDrive:\FilePath
+ * We use _getdrive CRT function
+ */
+ if (srclen > NON_UNC_PATH_LENGTH) {
+ wcscpy(retstr, L"\\\\?\\");
+ ps = 4;
+ }
+ if ((cd = _getdrive()))
+ retstr[ps] = L'A' + cd - 1;
+ else {
+ /* C:\ should always be there
+ * If not later open will fail anyhow
+ */
+ retstr[ps] = L'C';
+ }
+ retstr[ps + 1] = L':';
+ retlen -= (ps + 2);
+ retptr += (ps + 2);
+ }
+ if (srclen > retlen) {
+ *retstr = L'\0';
return ACR_EOVERFLOW;
- memcpy(t, srcstr, (srclen + 1) * sizeof(wchar_t));
- for (; *t; t++) {
- if (*t == L'/')
- *t = L'\\';
}
+ memcpy(retptr, srcstr, srclen * sizeof(wchar_t));
+ for (; *retptr; retptr++) {
+ if (*retptr == L'/')
+ *retptr = L'\\';
+ }
+ *retptr = L'\0';
return 0;
}
@@ -521,37 +537,35 @@
wchar_t *acr_GetAbsolutePath(JNIEnv *_E, HANDLE fh, const wchar_t *path)
{
- wchar_t buff[ACR_HBUFF_SIZ];
- wchar_t name[ACR_HBUFF_SIZ] = L"";
+ wchar_t buff[ACR_PPATH_MAX];
+ wchar_t name[ACR_PPATH_MAX] = L"";
DWORD nl;
int rc = 0;
if (ACR_HAVE_LATE_DLL_FUNC(GetFinalPathNameByHandleW)) {
- nl = GetFinalPathNameByHandleW(fh, buff, ACR_HBUFF_LEN, FILE_NAME_NORMALIZED);
+ nl = GetFinalPathNameByHandleW(fh, buff, ACR_PPATH_MAX,
+ FILE_NAME_NORMALIZED);
if (nl == 0) {
rc = ACR_GET_OS_ERROR();
goto finally;
}
- if (nl >= ACR_HBUFF_SIZ) {
+ if (nl >= ACR_PPATH_MAX) {
rc = ACR_EOVERFLOW;
goto finally;
}
- if ((rc = unicode_to_acr_path(name, ACR_HBUFF_LEN, buff)))
- goto finally;
}
else {
- nl = GetFullPathNameW(path, ACR_HBUFF_LEN, buff, NULL);
+ nl = GetFullPathNameW(path, ACR_PPATH_MAX, buff, NULL);
if (nl == 0) {
rc = ACR_GET_OS_ERROR();
goto finally;
}
- if (nl >= ACR_HBUFF_SIZ) {
+ if (nl >= ACR_PPATH_MAX) {
rc = ACR_EOVERFLOW;
goto finally;
}
- if ((rc = unicode_to_acr_path(name, ACR_HBUFF_LEN, buff)))
- goto finally;
}
+ rc = unicode_to_acr_path(name, ACR_PPATH_MAX, buff);
finally:
if (rc) {
Modified: commons/sandbox/runtime/trunk/src/main/native/port/basename.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/port/basename.c?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/port/basename.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/port/basename.c Sat Oct 24 11:22:15 2009
@@ -36,11 +36,15 @@
#include "acr_port.h"
#if defined(WIN32)
-#define IS_PS(c) ((c) == '/' || (c) == '\\')
-#define NO_PS(c) ((c) != '/' && (c) != '\\')
+#define IS_PSA(c) ((c) == '/' || (c) == '\\')
+#define NO_PSA(c) ((c) != '/' && (c) != '\\')
+#define IS_PSW(c) ((c) == L'/' || (c) == L'\\')
+#define NO_PSW(c) ((c) != L'/' && (c) != L'\\')
#else
-#define IS_PS(c) ((c) == '/')
-#define NO_PS(c) ((c) != '/')
+#define IS_PSA(c) ((c) == '/')
+#define NO_PSA(c) ((c) != '/')
+#define IS_PSW(c) ((c) == L'/')
+#define NO_PSW(c) ((c) != L'/')
#endif
char *basename_r(const char *path, char *bname, size_t blen)
@@ -63,11 +67,11 @@
/* Strip any trailing slashes */
endp = path + strlen(path) - 1;
- while (endp > path && IS_PS(*endp))
+ while (endp > path && IS_PSA(*endp))
endp--;
/* All slashes becomes "/" */
- if (endp == path && IS_PS(*endp)) {
+ if (endp == path && IS_PSA(*endp)) {
bname[0] = '/';
bname[1] = '\0';
return bname;
@@ -75,7 +79,7 @@
/* Find the start of the base */
startp = endp;
- while (startp > path && NO_PS(*(startp - 1)))
+ while (startp > path && NO_PSA(*(startp - 1)))
startp--;
len = endp - startp + 1;
@@ -85,5 +89,54 @@
}
memcpy(bname, startp, len);
bname[len] = '\0';
+
+ return bname;
+}
+
+/* Unicode version of basename_r
+ */
+wchar_t *basename_w(const wchar_t *path, wchar_t *bname, size_t blen)
+{
+ size_t len;
+ const wchar_t *endp, *startp;
+ static wchar_t sbuf[ACR_PPATH_MAX];
+
+ if (!bname) {
+ bname = sbuf;
+ blen = sizeof(sbuf);
+ }
+
+ /* Empty or NULL string gets treated as "." */
+ if (path == NULL || *path == L'\0') {
+ bname[0] = L'.';
+ bname[1] = L'\0';
+ return bname;
+ }
+
+ /* Strip any trailing slashes */
+ endp = path + wcslen(path) - 1;
+ while (endp > path && IS_PSW(*endp))
+ endp--;
+
+ /* All slashes becomes "/" */
+ if (endp == path && IS_PSW(*endp)) {
+ bname[0] = L'/';
+ bname[1] = L'\0';
+ return bname;
+ }
+
+ /* Find the start of the base */
+ startp = endp;
+ while (startp > path && NO_PSW(*(startp - 1)))
+ startp--;
+
+ len = endp - startp + 1;
+ if (len >= blen) {
+ errno = ENOMEM;
+ return NULL;
+ }
+ memcpy(bname, startp, len * sizeof(wchar_t));
+ bname[len] = L'\0';
+
return bname;
}
Modified: commons/sandbox/runtime/trunk/src/main/native/port/dirname.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/port/dirname.c?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/port/dirname.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/port/dirname.c Sat Oct 24 11:22:15 2009
@@ -36,18 +36,22 @@
#include "acr_port.h"
#if defined(WIN32)
-#define IS_PS(c) ((c) == '/' || (c) == '\\')
-#define NO_PS(c) ((c) != '/' && (c) != '\\')
+#define IS_PSA(c) ((c) == '/' || (c) == '\\')
+#define NO_PSA(c) ((c) != '/' && (c) != '\\')
+#define IS_PSW(c) ((c) == L'/' || (c) == L'\\')
+#define NO_PSW(c) ((c) != L'/' && (c) != L'\\')
#else
-#define IS_PS(c) ((c) == '/')
-#define NO_PS(c) ((c) != '/')
+#define IS_PSA(c) ((c) == '/')
+#define NO_PSA(c) ((c) != '/')
+#define IS_PSW(c) ((c) == L'/')
+#define NO_PSW(c) ((c) != L'/')
#endif
char *dirname_r(const char *path, char *dname, size_t dlen)
{
size_t len;
static char sbuf[ACR_PPATH_MAX];
- const char *endp;
+ const char *endp;
if (!dname) {
dname = sbuf;
@@ -62,23 +66,23 @@
/* Strip any trailing slashes */
endp = path + strlen(path) - 1;
- while (endp > path && IS_PS(*endp))
+ while (endp > path && IS_PSA(*endp))
endp--;
/* Find the start of the dir */
- while (endp > path && NO_PS(*endp))
+ while (endp > path && NO_PSA(*endp))
endp--;
/* Either the dir is "/" or there are no slashes */
if (endp == path) {
- dname[0] = IS_PS(*endp) ? '/' : '.';
+ dname[0] = IS_PSA(*endp) ? '/' : '.';
dname[1] = '\0';
return dname;
} else {
/* Move forward past the separating slashes */
do {
endp--;
- } while (endp > path && IS_PS(*endp));
+ } while (endp > path && IS_PSA(*endp));
}
len = endp - path + 1;
@@ -88,5 +92,55 @@
}
memcpy(dname, path, len);
dname[len] = '\0';
+
+ return dname;
+}
+
+wchar_t *dirname_w(const wchar_t *path, wchar_t *dname, size_t dlen)
+{
+ size_t len;
+ static wchar_t sbuf[ACR_PPATH_MAX];
+ const wchar_t *endp;
+
+ if (!dname) {
+ dname = sbuf;
+ dlen = sizeof(sbuf);
+ }
+ /* Empty or NULL string gets treated as "." */
+ if (path == NULL || *path == L'\0') {
+ dname[0] = L'.';
+ dname[1] = L'\0';
+ return dname;
+ }
+
+ /* Strip any trailing slashes */
+ endp = path + wcslen(path) - 1;
+ while (endp > path && IS_PSW(*endp))
+ endp--;
+
+ /* Find the start of the dir */
+ while (endp > path && NO_PSW(*endp))
+ endp--;
+
+ /* Either the dir is "/" or there are no slashes */
+ if (endp == path) {
+ dname[0] = IS_PSW(*endp) ? L'/' : L'.';
+ dname[1] = '\0';
+ return dname;
+ } else {
+ /* Move forward past the separating slashes */
+ do {
+ endp--;
+ } while (endp > path && IS_PSW(*endp));
+ }
+
+ len = endp - path + 1;
+ if (len >= dlen) {
+ errno = ENOMEM;
+ return NULL;
+ }
+ memcpy(dname, path, len * sizeof(wchar_t));
+ dname[len] = L'\0';
+
return dname;
}
Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java Sat Oct 24 11:22:15 2009
@@ -42,7 +42,7 @@
suite.addTest(TestMemory.suite());
suite.addTest(TestNioByteBuffer.suite());
suite.addTest(TestPrivate.suite());
-// suite.addTest(TestFile.suite());
+ suite.addTest(TestFile.suite());
suite.addTest(TestStrings.suite());
suite.addTest(TestSemaphore.suite());
suite.addTest(TestSharedMemory.suite());
@@ -61,7 +61,7 @@
// suite.addTest(TestSystem.suite());
//
suite.addTest(TestSignal.suite());
-// suite.addTest(TestFileSys.suite());
+ suite.addTest(TestFileSys.suite());
// Keep this as last test
suite.addTest(TestCleanup.suite());
Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java Sat Oct 24 11:22:15 2009
@@ -28,7 +28,7 @@
{
private static native int ftest00(int d);
- private static native File ftest01(String fname, int t);
+ private static native Path ftest01(String fname, int t);
public static Test suite() {
TestSuite suite = new TestSuite(TestFile.class);
@@ -51,27 +51,27 @@
public void testFileType()
throws Exception
{
- File f;
+ Path p;
if (Os.TYPE.contains(OsType.UNIX))
- f = new File("/etc/hosts");
+ p = new Path("/etc/hosts");
else
- f = new File("C:/Windows/win.ini");
+ p = new Path("C:/Windows/win.ini");
- FileType t = f.getFileType();
+ FileType t = File.getFileType(p);
if (Os.TYPE.contains(OsType.SOLARIS))
assertEquals("Type", FileType.LNK, t);
else
assertEquals("Type", FileType.REG, t);
}
- public void testFileTypeCreated()
+ public void testPathCreated()
throws Exception
{
- File f = ftest01("foo", 4);
- FileType t = f.getFileType();
- assertEquals("Type", FileType.BLK, t);
+ Path p = ftest01("foo", 0);
+ System.out.println("Path is " + p);
}
+/*
public void testMakeSymlink()
throws Exception
{
@@ -148,7 +148,6 @@
}
}
-/*
public void testMakeHardlink()
throws Exception
{
@@ -336,15 +335,17 @@
"foo/",
"/foo/",
"/foo/bar",
- "c:/foo/../../bar",
"foo/../bar",
"foo/../../../bar",
"/foo/../bar",
- "/foo/../../../bar"
+ "/foo/../../../bar",
+ "c:/foo/../../../bar",
+ "//share/foo/../../../bar",
+ "//./pipe/foo/../../../bar",
};
for (int i = 0; i < paths.length; i++) {
Path p = new Path(paths[i]);
- System.out.println("Path (" + paths[i] + ") is : " + p.getPath());
+ System.out.println("Path (" + paths[i] + ") is : " + p.toString() + " -- " + p.toNativePath());
}
}
}
Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFileSys.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFileSys.java?rev=829344&r1=829343&r2=829344&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFileSys.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFileSys.java Sat Oct 24 11:22:15 2009
@@ -43,6 +43,7 @@
Loader.load();
}
+/*
public void testFileSysOpenDef()
throws Exception
{
@@ -119,18 +120,19 @@
System.out.println("Readed " + rd + " bytes from " + file.toString());
f.close();
}
-
+ */
public void testFileStdout()
throws Exception
{
byte [] buf = { (byte)'H', (byte)'i', (byte)'\n' };
assertEquals("FileType", FileType.PIPE,
- FileInstance.STDOUT.getFileType());
- int wr = FileInstance.STDOUT.write(buf);
+ File.STDOUT.getFileType());
+ int wr = File.STDOUT.write(buf);
assertEquals("Written", 3, wr);
}
+/*
public void testFileSysMktemp()
throws Exception
{
@@ -154,7 +156,7 @@
System.out.println(" Inode : " + info.InodeId);
f.close();
}
-
+*/
}