+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/******************************************************************************
- * Copyright (C) 2009-2011, International Business Machines
+ * Copyright (C) 2009-2013, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*/
+#include "unicode/platform.h"
+#if U_PLATFORM == U_PF_MINGW
+// *cough* - for struct stat
+#ifdef __STRICT_ANSI__
+#undef __STRICT_ANSI__
+#endif
+#endif
+
#include "filetools.h"
#include "filestrm.h"
+#include "charstr.h"
#include "cstring.h"
#include "unicode/putil.h"
#include "putilimp.h"
#include <dirent.h>
typedef struct dirent DIRENT;
-#define MAX_PATH_SIZE 4096 /* Set the limit for the size of the path. */
-
#define SKIP1 "."
#define SKIP2 ".."
#endif
while ((dirEntry = readdir(pDir)) != NULL) {
if (uprv_strcmp(dirEntry->d_name, SKIP1) != 0 && uprv_strcmp(dirEntry->d_name, SKIP2) != 0) {
- char newpath[MAX_PATH_SIZE] = "";
- uprv_strcpy(newpath, checkAgainst);
- uprv_strcat(newpath, U_FILE_SEP_STRING);
- uprv_strcat(newpath, dirEntry->d_name);
+ UErrorCode status = U_ZERO_ERROR;
+ icu::CharString newpath(checkAgainst, -1, status);
+ newpath.append(U_FILE_SEP_STRING, -1, status);
+ newpath.append(dirEntry->d_name, -1, status);
+ if (U_FAILURE(status)) {
+ fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, u_errorName(status));
+ return FALSE;
+ }
- if ((subDirp = opendir(newpath)) != NULL) {
+ if ((subDirp = opendir(newpath.data())) != NULL) {
/* If this new path is a directory, make a recursive call with the newpath. */
closedir(subDirp);
- isLatest = isFileModTimeLater(filePath, newpath, isDir);
+ isLatest = isFileModTimeLater(filePath, newpath.data(), isDir);
if (!isLatest) {
break;
}
} else {
- int32_t latest = whichFileModTimeIsLater(filePath, newpath);
+ int32_t latest = whichFileModTimeIsLater(filePath, newpath.data());
if (latest < 0 || latest == 2) {
isLatest = FALSE;
break;
/* Swap the file separater character given with the new one in the file path. */
U_CAPI void U_EXPORT2
swapFileSepChar(char *filePath, const char oldFileSepChar, const char newFileSepChar) {
- for (int32_t i = 0, length = uprv_strlen(filePath); i < length; i++) {
+ for (int32_t i = 0, length = static_cast<int32_t>(uprv_strlen(filePath)); i < length; i++) {
filePath[i] = (filePath[i] == oldFileSepChar ) ? newFileSepChar : filePath[i];
}
}