Author: mturk Date: Wed Sep 2 18:10:17 2009 New Revision: 810639 URL: http://svn.apache.org/viewvc?rev=810639&view=rev Log: Make sure paths doesn't end with '/' or '\'
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h?rev=810639&r1=810638&r2=810639&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h Wed Sep 2 18:10:17 2009 @@ -137,6 +137,21 @@ file lock */ /** @} */ +#define ACR_NO_END_SLASHA(P) \ + if (*(P)) { \ + size_t _s = strlen((P)) - 1; \ + if ((P)[_s] == '/' || (P)[_s] == '\\') \ + (P)[_s] = '\0'; \ + } else (void)0 + +#define ACR_NO_END_SLASHW(P) \ + if (*(P)) { \ + size_t _s = wcslen((P)) - 1; \ + if ((P)[_s] == L'/' || (P)[_s] == L'\\') \ + (P)[_s] = L'\0'; \ + } else (void)0 + + typedef struct acr_file_t acr_file_t; struct acr_file_t { Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c?rev=810639&r1=810638&r2=810639&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/os/unix/temps.c Wed Sep 2 18:10:17 2009 @@ -74,6 +74,7 @@ ACR_THROW_IO_IF_ERR(ACR_E2BIG); return -1; } + ACR_NO_END_SLASHA(name); strlcat(name, "/", PATH_MAX); } strlcat(name, prefix, PATH_MAX); @@ -132,6 +133,7 @@ ACR_THROW_IO_IF_ERR(ACR_E2BIG); return NULL; } + ACR_NO_END_SLASHA(name); strlcat(name, "/", PATH_MAX); } strlcat(name, prefix, PATH_MAX); @@ -169,6 +171,7 @@ char tp[PATH_MAX]; int f; strlcpy(tp, path, PATH_MAX); + ACR_NO_END_SLASHA(tp); strlcat(tp, "/.acrXXXXXX", PATH_MAX); f = mkstemp(tp); if (f > 0) { @@ -200,6 +203,7 @@ i++; } if (_temp_path[0]) { + ACR_NO_END_SLASHA(_temp_path); return _temp_path; } i = 0; @@ -213,6 +217,7 @@ i++; } if (_temp_path[0]) { + ACR_NO_END_SLASHA(_temp_path); return _temp_path; } else { @@ -226,6 +231,7 @@ } } if (_temp_path[0]) { + ACR_NO_END_SLASHA(_temp_path); return _temp_path; } else Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c?rev=810639&r1=810638&r2=810639&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/os/win32/temps.c Wed Sep 2 18:10:17 2009 @@ -235,6 +235,7 @@ HANDLE fh; wcslcpy(tp, path, TMP_PATH_MAX); + ACR_NO_END_SLASHW(tp); wcslcat(tp, L"\\.acrXXXXXX", TMP_PATH_MAX); fh = getftemp(tp, FILE_ATTRIBUTE_NORMAL); if (IS_VALID_HANDLE(fh)) { @@ -259,6 +260,7 @@ ACR_THROW_IO_IF_ERR(ACR_E2BIG); return -1; } + ACR_NO_END_SLASHW(name); wcslcat(name, L"\\", ACR_MBUFF_SIZ); } wcslcat(name, prefix, ACR_MBUFF_SIZ); @@ -303,6 +305,7 @@ ACR_THROW_IO_IF_ERR(ACR_E2BIG); return NULL; } + ACR_NO_END_SLASHW(name); wcslcat(name, L"\\", ACR_MBUFF_SIZ); } wcslcat(name, prefix, ACR_MBUFF_SIZ); @@ -341,6 +344,7 @@ i++; } if (_temp_path[0]) { + ACR_NO_END_SLASHW(_temp_path); return _temp_path; } i = 0; @@ -352,6 +356,7 @@ i++; } if (_temp_path[0]) { + ACR_NO_END_SLASHW(_temp_path); return _temp_path; } else { @@ -365,6 +370,7 @@ } } if (_temp_path[0]) { + ACR_NO_END_SLASHW(_temp_path); return _temp_path; } else