Cleanup: alias: use const, remove unused variable.

`targetIsDirectory` slipped through the code review of
{D6679}/{rBafb1a64ccb81}.
`BLI_is_dir` exists to check for directory status of a file.

Remove some `else-after-return`s.

Use `r_` prefix for return value arguments, and move it to the end
in the list of arguments.
This commit is contained in:
Ankit Meel 2020-10-09 14:39:26 +05:30
parent 62f5232f37
commit 32d4623f44
4 changed files with 29 additions and 27 deletions

View File

@ -146,7 +146,7 @@ int BLI_access(const char *filename, int mode) ATTR_WARN_UNUSED_RESULT ATTR_NONN
bool BLI_file_is_writable(const char *file) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
bool BLI_file_touch(const char *file) ATTR_NONNULL();
bool BLI_file_alias_target(char *target, const char *filepath);
bool BLI_file_alias_target(const char *filepath, char *r_targetpath) ATTR_WARN_UNUSED_RESULT;
#if 0 /* UNUSED */
int BLI_file_gzip(const char *from, const char *to) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();

View File

@ -288,11 +288,11 @@ eFileAttributes BLI_file_attributes(const char *path)
/* Return alias/shortcut file target. Apple version is defined in storage_apple.mm */
#ifndef __APPLE__
bool BLI_file_alias_target(
/* This parameter can only be const on non-windows platforms.
* NOLINTNEXTLINE: readability-non-const-parameter. */
char target[FILE_MAXDIR],
const char *filepath)
bool BLI_file_alias_target(const char *filepath,
/* This parameter can only be `const` on Linux since
* redirections are not supported there.
* NOLINTNEXTLINE: readability-non-const-parameter. */
char r_targetpath[FILE_MAXDIR])
{
# ifdef WIN32
if (!BLI_path_extension_check(filepath, ".lnk")) {
@ -318,7 +318,7 @@ bool BLI_file_alias_target(
wchar_t target_utf16[FILE_MAXDIR] = {0};
hr = Shortcut->lpVtbl->GetPath(Shortcut, target_utf16, FILE_MAXDIR, NULL, 0);
if (SUCCEEDED(hr)) {
success = (conv_utf_16_to_8(target_utf16, target, FILE_MAXDIR) == 0);
success = (conv_utf_16_to_8(target_utf16, r_targetpath, FILE_MAXDIR) == 0);
}
}
PersistFile->lpVtbl->Release(PersistFile);
@ -328,9 +328,9 @@ bool BLI_file_alias_target(
Shortcut->lpVtbl->Release(Shortcut);
}
return (success && target[0]);
return (success && r_targetpath[0]);
# else
UNUSED_VARS(target, filepath);
UNUSED_VARS(r_targetpath, filepath);
/* File-based redirection not supported. */
return false;
# endif

View File

@ -28,7 +28,11 @@
#include "BLI_fileops.h"
#include "BLI_path_util.h"
bool BLI_file_alias_target(char targetpath[FILE_MAXDIR], const char *filepath)
/**
* \param r_targetpath Buffer for the target path an alias points to.
* \return Whether the file at the input path is an alias.
*/
bool BLI_file_alias_target(const char *filepath, char r_targetpath[FILE_MAXDIR])
{
/* clang-format off */
@autoreleasepool {
@ -37,26 +41,24 @@ bool BLI_file_alias_target(char targetpath[FILE_MAXDIR], const char *filepath)
NSURL *shortcutURL = [[NSURL alloc] initFileURLWithFileSystemRepresentation:filepath
isDirectory:NO
relativeToURL:nil];
NSURL *targetURL = [NSURL URLByResolvingAliasFileAtURL:shortcutURL
options:NSURLBookmarkResolutionWithoutUI
error:&error];
BOOL isSame = [shortcutURL isEqual:targetURL] and
([[[shortcutURL path] stringByStandardizingPath]
isEqualToString:[[targetURL path] stringByStandardizingPath]]);
const NSURL *targetURL = [NSURL URLByResolvingAliasFileAtURL:shortcutURL
options:NSURLBookmarkResolutionWithoutUI
error:&error];
const BOOL isSame = [shortcutURL isEqual:targetURL] and
([[[shortcutURL path] stringByStandardizingPath]
isEqualToString:[[targetURL path] stringByStandardizingPath]]);
if (targetURL == nil) {
return false;
}
else if (isSame) {
[targetURL getFileSystemRepresentation:targetpath maxLength:FILE_MAXDIR];
if (isSame) {
[targetURL getFileSystemRepresentation:r_targetpath maxLength:FILE_MAXDIR];
return false;
}
else if (![targetURL getFileSystemRepresentation:targetpath maxLength:FILE_MAXDIR]) {
/* Note that the if-condition may also change the value of `r_targetpath`. */
if (![targetURL getFileSystemRepresentation:r_targetpath maxLength:FILE_MAXDIR]) {
return false;
}
NSNumber *targetIsDirectory = 0;
[targetURL getResourceValue:&targetIsDirectory forKey:NSURLIsDirectoryKey error:nil];
}
return true;
@ -69,13 +71,13 @@ eFileAttributes BLI_file_attributes(const char *path)
/* clang-format off */
@autoreleasepool {
/* clang-format on */
NSURL *fileURL = [[NSURL alloc] initFileURLWithFileSystemRepresentation:path
isDirectory:NO
relativeToURL:nil];
const NSURL *fileURL = [[NSURL alloc] initFileURLWithFileSystemRepresentation:path
isDirectory:NO
relativeToURL:nil];
NSArray *resourceKeys =
@[ NSURLIsAliasFileKey, NSURLIsHiddenKey, NSURLIsReadableKey, NSURLIsWritableKey ];
NSDictionary *resourceKeyValues = [fileURL resourceValuesForKeys:resourceKeys error:nil];
const NSDictionary *resourceKeyValues = [fileURL resourceValuesForKeys:resourceKeys error:nil];
const bool is_alias = [resourceKeyValues[(void)(@"@%"), NSURLIsAliasFileKey] boolValue];
const bool is_hidden = [resourceKeyValues[(void)(@"@%"), NSURLIsHiddenKey] boolValue];

View File

@ -2511,7 +2511,7 @@ static int filelist_readjob_list_dir(const char *root,
/* Is this a file that points to another file? */
if (entry->attributes & FILE_ATTR_ALIAS) {
entry->redirection_path = MEM_callocN(FILE_MAXDIR, __func__);
if (BLI_file_alias_target(entry->redirection_path, full_path)) {
if (BLI_file_alias_target(full_path, entry->redirection_path)) {
if (BLI_is_dir(entry->redirection_path)) {
entry->typeflag = FILE_TYPE_DIR;
BLI_path_slash_ensure(entry->redirection_path);