Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,13 @@ public Tuple2<BigInteger, List<BFSInfo>> listBFSInfo(
*/
public BFSInfo isExist(String absolutePath) throws ContractException {
PrecompiledVersionCheck.LS_PAGE_VERSION.checkVersion(currentVersion);
if (absolutePath.endsWith("/")) {
absolutePath = absolutePath.substring(0, absolutePath.length() - 1);
Tuple2<String, String> parentPathAndBaseName =
BFSUtils.getParentPathAndBaseName(absolutePath);
String parent = parentPathAndBaseName.getValue1();
String child = parentPathAndBaseName.getValue2();
if (BFSUtils.BFS_SYSTEM_PATH.contains(absolutePath)) {
return new BFSInfo(child, BFSUtils.BFS_TYPE_DIR);
}
int index = absolutePath.lastIndexOf('/');
String parent = absolutePath.substring(0, index);
String child = absolutePath.substring(index + 1);
int offset = 0;
int limit = 500;
while (true) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.fisco.bcos.sdk.v3.contract.precompiled.bfs;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Stack;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2;

public class BFSUtils {
private BFSUtils() {}

public static final String BFS_TYPE_DIR = "directory";
public static final String BFS_TYPE_CON = "contract";
public static final String BFS_TYPE_LNK = "link";

public static final String BFS_ROOT = "/";
public static final String BFS_APPS = "/apps";
public static final String BFS_SYS = "/sys";
public static final String BFS_TABLES = "/tables";
public static final String BFS_USER = "/usr";

public static final Set<String> BFS_SYSTEM_PATH =
new HashSet<>(Arrays.asList(BFS_ROOT, BFS_APPS, BFS_SYS, BFS_TABLES, BFS_USER));

public static Tuple2<String, String> getParentPathAndBaseName(String path) {
if (path.equals("/")) return new Tuple2<>("/", "/");
List<String> path2Level = path2Level(path);
String baseName = path2Level.get(path2Level.size() - 1);
String parentPath = '/' + String.join("/", path2Level.subList(0, path2Level.size() - 1));
return new Tuple2<>(parentPath, baseName);
}

public static List<String> path2Level(String absolutePath) {
Stack<String> pathStack = new Stack<>();
for (String s : absolutePath.split("/")) {
if (s.isEmpty() || s.equals(".")) {
continue;
}
if (s.equals("..")) {
if (!pathStack.isEmpty()) {
pathStack.pop();
}
continue;
}
pathStack.push(s);
}
return new ArrayList<>(pathStack);
}
}