WITH_UNICODE_STRING(env, pathname, path) { /*we estimate the max length of memory needed as "currentDir. length + pathname.length" */ int len = wcslen(path); len += currentDirLength(path, len); if (len > MAX_PATH_LENGTH - 1) { WCHAR *cp = (WCHAR*)malloc(len * sizeof(WCHAR)); if (cp != NULL) { if (wcanonicalize(path, cp, len) >= 0) { rv = (*env)->NewString(env, cp, wcslen(cp)); } free(cp); } } else if (wcanonicalize(path, canonicalPath, MAX_PATH_LENGTH) >= 0) { rv = (*env)->NewString(env, canonicalPath, wcslen(canonicalPath)); } } END_UNICODE_STRING(env, path);
WITH_UNICODE_STRING(env, pathname, path) { if (wcanonicalize(path, canonicalPath, MAX_PATH_LENGTH) >= 0) { rv = (*env)->NewString(env, canonicalPath, wcslen(canonicalPath)); } } END_UNICODE_STRING(env, path);