mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-09 14:44:05 +09:00
cd into relative path
This commit is contained in:
@@ -140,20 +140,20 @@ shell.coreutils = {
|
|||||||
|
|
||||||
// replace slashes into revslashes
|
// replace slashes into revslashes
|
||||||
let pathstr = args[1].replaceAll('/','\\\\');
|
let pathstr = args[1].replaceAll('/','\\\\');
|
||||||
|
|
||||||
|
let startsWithSlash = args[1].startsWith('\\');
|
||||||
|
|
||||||
// split them into an array while filtering empty elements except for the root 'head'
|
// split them into an array while filtering empty elements except for the root 'head'
|
||||||
let newPwd = [""].concat(pathstr.split("\\").filter(function(it) { return (it.length > 0); }));
|
let newPwd = (startsWithSlash ? [""] : shell_pwd).concat(pathstr.split("\\").filter(function(it) { return (it.length > 0); }));
|
||||||
// construct new pathstr from pwd arr so it will be sanitised
|
// construct new pathstr from pwd arr so it will be sanitised
|
||||||
pathstr = newPwd.join('\\').substring(1);
|
pathstr = newPwd.join('\\').substring(1);
|
||||||
|
|
||||||
if (DEBUG_PRINT) serial.println("command.js > pathstr = "+pathstr);
|
if (DEBUG_PRINT) serial.println("command.js > pathstr = "+pathstr);
|
||||||
|
|
||||||
// check if path is valid
|
// check if path is valid
|
||||||
let dirOpened = filesystem.open(CURRENT_DRIVE, pathstr, 'R');
|
filesystem.open(CURRENT_DRIVE, pathstr, 'R');
|
||||||
if (!dirOpened) { printerrln("CHDIR failed for '"+pathstr+"'"); return; }
|
let dirOpened = filesystem.isDirectory(CURRENT_DRIVE); // open a dir; if path is nonexistent, file won't actually be opened
|
||||||
|
if (!dirOpened) { printerrln("CHDIR failed for '"+pathstr+"'"); return; } // if file is not opened, FALSE will be returned
|
||||||
// check if path is directory
|
|
||||||
let isDir = filesystem.isDirectory(CURRENT_DRIVE);
|
|
||||||
if (!isDir) { printerrln("CHDIR failed for '"+pathstr+"'"); return; }
|
|
||||||
|
|
||||||
shell_pwd = newPwd;
|
shell_pwd = newPwd;
|
||||||
},
|
},
|
||||||
@@ -208,8 +208,15 @@ shell.coreutils = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
dir: function(args) {
|
dir: function(args) {
|
||||||
let path = (args[1] !== undefined) ? args[1] : "\\"+shell_pwd.join("\\");
|
let pathstr = (args[1] !== undefined) ? args[1] : "\\"+shell_pwd.join("\\");
|
||||||
throw Error("TODO");
|
|
||||||
|
// check if path is valid
|
||||||
|
let pathOpened = filesystem.open(CURRENT_DRIVE, pathstr, 'R');
|
||||||
|
if (!pathOpened) { printerrln("CHDIR failed for '"+pathstr+"'"); return; }
|
||||||
|
|
||||||
|
let port = filesystem._toPorts(CURRENT_DRIVE)[0]
|
||||||
|
com.sendMessage(port, "LIST");
|
||||||
|
println(com.pullMessage(port));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Object.freeze(shell.coreutils);
|
Object.freeze(shell.coreutils);
|
||||||
|
|||||||
@@ -355,10 +355,9 @@ class TestDiskDrive(private val driveNum: Int, theRootPath: File? = null) : Bloc
|
|||||||
|
|
||||||
sb.append('\n')
|
sb.append('\n')
|
||||||
}
|
}
|
||||||
sb.append('\n')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb.toString()
|
return if (sb.last() == '\n') sb.substring(0, sb.lastIndex) else sb.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sanitisePath(s: String) = s.replace('\\','/').replace(Regex("""\?<>:\*\|"""),"-")
|
private fun sanitisePath(s: String) = s.replace('\\','/').replace(Regex("""\?<>:\*\|"""),"-")
|
||||||
@@ -371,9 +370,10 @@ class TestDiskDrive(private val driveNum: Int, theRootPath: File? = null) : Bloc
|
|||||||
val paths = path.split('/')
|
val paths = path.split('/')
|
||||||
val newPaths = ArrayList<String>()
|
val newPaths = ArrayList<String>()
|
||||||
paths.forEach {
|
paths.forEach {
|
||||||
if (it.isBlank() || it.isEmpty()) throw IllegalArgumentException("Path cannot contain whitespaces: $paths")
|
if (it.isBlank() || it.isEmpty()) {
|
||||||
|
/*do nothing*/
|
||||||
if (it == "..") {
|
}
|
||||||
|
else if (it == "..") {
|
||||||
parentCount -= -1
|
parentCount -= -1
|
||||||
}
|
}
|
||||||
else if (it != ".") {
|
else if (it != ".") {
|
||||||
|
|||||||
Reference in New Issue
Block a user