mirror of
https://codeberg.org/TicklishHoneyBee/CLIte.git
synced 2026-03-11 09:04:37 +00:00
persistant filesystem part 3
This commit is contained in:
parent
2d8214a6c8
commit
e478a13f61
2 changed files with 75 additions and 29 deletions
|
|
@ -511,6 +511,9 @@ license.txt:/etc/license:0:0:-rw-r--r--`;
|
|||
var b = clite.state.bios.io.read(2);
|
||||
if (b) {
|
||||
let list = b.getList();
|
||||
// if we're restoring data, assume cookies were accepted previously
|
||||
if (list.length > 0)
|
||||
clite.state.cookiesAccepted = true;
|
||||
list.forEach(function(fn) {
|
||||
clite.vfs.restoreFile(fn);
|
||||
});
|
||||
|
|
@ -1343,6 +1346,7 @@ clite.io = {
|
|||
canread:false,
|
||||
canwrite:false,
|
||||
canexec:false,
|
||||
path:path,
|
||||
remote:{
|
||||
ispending:p,
|
||||
callback:null
|
||||
|
|
@ -1633,6 +1637,7 @@ clite.io = {
|
|||
fd.pos += data.length;
|
||||
}
|
||||
fd.node.time.modify = clite.time.sec();
|
||||
clite.vfs.saveFile(fd.path);
|
||||
return true;
|
||||
}
|
||||
clite.io.ftruncate = function(pid,fd,len) {
|
||||
|
|
@ -1644,6 +1649,7 @@ clite.io = {
|
|||
if (fd.pos > len)
|
||||
fd.pos = len;
|
||||
fd.node.time.modify = clite.time.sec();
|
||||
clite.vfs.saveFile(fd.path);
|
||||
return true;
|
||||
}
|
||||
clite.io.truncate = function(pid,path,len) {
|
||||
|
|
@ -1671,7 +1677,11 @@ clite.io = {
|
|||
if (!fd || !fd.canwrite || fd.node.data.isdev)
|
||||
return false;
|
||||
var uid = clite.proc.getUID(pid);
|
||||
return vfsapi.remove(uid,path);
|
||||
clite.vfs.saveFile(fd.path);
|
||||
var r = vfsapi.remove(uid,path);
|
||||
if (r)
|
||||
clite.vfs.saveFile(path);
|
||||
return r;
|
||||
}
|
||||
clite.io.link = function(pid,path,target) {
|
||||
if (!getFileDes(pid,target,false,null))
|
||||
|
|
@ -1681,10 +1691,14 @@ clite.io = {
|
|||
if (!fd.canwrite)
|
||||
return false;
|
||||
fd.node.data.content = target;
|
||||
clite.vfs.saveFile(path);
|
||||
return true;
|
||||
}
|
||||
var uid = clite.proc.getUID(pid);
|
||||
return vfsapi.mkLink(uid,path,target);
|
||||
var r = vfsapi.mkLink(uid,path,target);
|
||||
if (r)
|
||||
clite.vfs.saveFile(path);
|
||||
return r;
|
||||
},
|
||||
clite.io.fstatat = function(pid,fd,flags) {
|
||||
if (!fd || !fd.node || !fd.canread)
|
||||
|
|
@ -1803,6 +1817,7 @@ clite.io = {
|
|||
if (!n)
|
||||
return false;
|
||||
n.mode = mode;
|
||||
clite.vfs.saveFile(path);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -2465,26 +2480,6 @@ clite.vfs = {
|
|||
return true;
|
||||
}
|
||||
clite.vfs.getSavedFile = function(path) {
|
||||
var fsnode = {
|
||||
name: '',
|
||||
uid: 0,
|
||||
gid: 0,
|
||||
mode:clite.io.modes.S_IRUSR|clite.io.modes.S_IWUSR|clite.io.modes.S_IRGRP|clite.io.modes.S_IROTH,
|
||||
time:{
|
||||
access:clite.time.sec(),
|
||||
modify:clite.time.sec(),
|
||||
change:clite.time.sec()
|
||||
},
|
||||
data:{
|
||||
remote:null,
|
||||
isdir:false,
|
||||
islink:false,
|
||||
isdev:false,
|
||||
istty:false,
|
||||
parent:null,
|
||||
content:null
|
||||
}
|
||||
};
|
||||
let n = vfsdata.api.getNode(0,path);
|
||||
if (!n)
|
||||
return null;
|
||||
|
|
@ -2552,7 +2547,25 @@ clite.vfs = {
|
|||
}
|
||||
let n = vfsdata.api.getNode(0,path);
|
||||
if (!n) {
|
||||
return false;
|
||||
var dir = clite.lib.dirname(path);
|
||||
vfsdata.api.mkPath(0,dir);
|
||||
switch (type) {
|
||||
case clite.io.types.FT_DIR:
|
||||
vfsdata.api.mkDir(0,path);
|
||||
break;
|
||||
case clite.io.types.FT_LINK:
|
||||
vfsdata.api.mkLink(0,path,content);
|
||||
break;
|
||||
case clite.io.types.FT_SCRIPT:
|
||||
case clite.io.types.FT_TEXT:
|
||||
vfsdata.api.mkFile(0,path);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
n = vfsdata.api.getNode(0,path);
|
||||
if (!n)
|
||||
return false;
|
||||
}
|
||||
if (clite.lib.getFileType({node:n}) != type)
|
||||
return false;
|
||||
|
|
@ -2571,12 +2584,14 @@ clite.vfs = {
|
|||
clite.vfs.saveFile = function(path) {
|
||||
if (!clite.state.cookiesAccepted)
|
||||
return true;
|
||||
var str = clite.vfs.getSavedFile(path);
|
||||
if (!str)
|
||||
return false;
|
||||
var b = clite.state.bios.io.read(2);
|
||||
if (!b)
|
||||
return false;
|
||||
var str = clite.vfs.getSavedFile(path);
|
||||
if (!str) {
|
||||
b.delFile(path);
|
||||
return true;
|
||||
}
|
||||
b.addFile(path,str);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -192,6 +192,7 @@ clite.commands.load('user',function(args,env,io) {
|
|||
|
||||
var shell = null;
|
||||
var group = null;
|
||||
let user = null;
|
||||
|
||||
function help() {
|
||||
stdio.printf(`
|
||||
|
|
@ -349,10 +350,36 @@ Options:
|
|||
return 0;
|
||||
}
|
||||
|
||||
function preLogin(str) {
|
||||
if (str == 'no') {
|
||||
clite.setcookiestate(false);
|
||||
io.exit(0);
|
||||
return;
|
||||
}
|
||||
if (str != 'yes') {
|
||||
cookies();
|
||||
return;
|
||||
}
|
||||
|
||||
clite.setcookiestate(true);
|
||||
|
||||
let r = addUser(user);
|
||||
io.exit(r);
|
||||
}
|
||||
|
||||
function cookies() {
|
||||
clite.cookienotice();
|
||||
|
||||
stdio.printf("Enter 'yes' to agree, or 'no' to cancel: ");
|
||||
if (!stdio.read(io.stdin,preLogin)) {
|
||||
stdio.write(io.stderr,'internal error\n');
|
||||
io.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
function main(args) {
|
||||
let add = false;
|
||||
let rem = false;
|
||||
let user = null;
|
||||
let shellnext = false;
|
||||
let groupnext = false;
|
||||
for (var i=1; i<args.length; i++) {
|
||||
|
|
@ -400,8 +427,12 @@ Options:
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (add)
|
||||
return addUser(user);
|
||||
if (add) {
|
||||
if (clite.getcookiestate() == true)
|
||||
return addUser(user);
|
||||
cookies();
|
||||
return null;
|
||||
}
|
||||
|
||||
if (rem)
|
||||
return delUser(user);
|
||||
|
|
|
|||
Loading…
Reference in a new issue