mirror of
https://codeberg.org/TicklishHoneyBee/CLIte.git
synced 2026-03-11 09:04:37 +00:00
make reading from and writing to devices work consistantly
This commit is contained in:
parent
f90a77c42a
commit
45b03465c3
2 changed files with 98 additions and 22 deletions
|
|
@ -149,8 +149,8 @@ Options:
|
|||
pending = files.length;
|
||||
|
||||
function fcb(fd) {
|
||||
if (fd.node.data.isdir || fd.node.data.islink || fd.node.data.isdev) {
|
||||
io.error('not a normal file: '+file);
|
||||
if (fd.node.data.isdir || fd.node.data.islink) {
|
||||
io.error('not a normal file: '+fd.node.name);
|
||||
}else{
|
||||
var d = stdio.readAll(fd);
|
||||
if (d != null) {
|
||||
|
|
@ -180,7 +180,7 @@ Options:
|
|||
pending--;
|
||||
return;
|
||||
}
|
||||
if (fd.node.data.isdir || fd.node.data.islink || fd.node.data.isdev) {
|
||||
if (fd.node.data.isdir || fd.node.data.islink) {
|
||||
io.error('not a normal file: '+file);
|
||||
pending--;
|
||||
return;
|
||||
|
|
|
|||
114
clite/core.js
114
clite/core.js
|
|
@ -105,6 +105,64 @@ var clite = {
|
|||
clite.term.clear(false);
|
||||
var vfsapi = null;
|
||||
|
||||
function defaultDevices() {
|
||||
// writing to /dev/local downloads data {name:'filename to save',data:'file content'}
|
||||
vfsapi.mkFile('/dev/local');
|
||||
var n = vfsapi.getNode('/dev/local');
|
||||
if (!n) {
|
||||
clite.log.write('local device failure');
|
||||
return false;
|
||||
}
|
||||
n.data.content = {
|
||||
read:null,
|
||||
write:function(obj) {
|
||||
if (typeof obj === 'string') {
|
||||
clite.core.download('data.txt',obj);
|
||||
}else if (typeof obj.name === 'string' && typeof obj.data === 'string') {
|
||||
clite.core.download(obj.name,obj.data);
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
n.perms = 'crw-rw-rw-';
|
||||
n.data.isdev = true;
|
||||
// /dev/null - writing to it goes nowhere, reading from it is always null
|
||||
vfsapi.mkFile('/dev/null');
|
||||
n = vfsapi.getNode('/dev/null');
|
||||
if (!n) {
|
||||
clite.log.write('null device failure');
|
||||
return false;
|
||||
}
|
||||
n.data.content = {
|
||||
read:function() {
|
||||
return null;
|
||||
},
|
||||
write:function(v) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
n.perms = 'crw-rw-rw-';
|
||||
n.data.isdev = true;
|
||||
// /dev/random - writing to it goes nowhere, reading from it returns a stringified random number (integer)
|
||||
vfsapi.mkFile('/dev/random');
|
||||
n = vfsapi.getNode('/dev/random');
|
||||
if (!n) {
|
||||
clite.log.write('random device failure');
|
||||
return false;
|
||||
}
|
||||
n.data.content = {
|
||||
read:function() {
|
||||
return Math.floor(Math.random() * (Number.MAX_SAFE_INTEGER - Number.MIN_SAFE_INTEGER + 1) + Number.MIN_SAFE_INTEGER).toString();
|
||||
},
|
||||
write:null
|
||||
};
|
||||
n.perms = 'crw-rw-rw-';
|
||||
n.data.isdev = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
function init1() {
|
||||
// setup vfs
|
||||
clite.log.write('Setting up VFS');
|
||||
|
|
@ -176,22 +234,7 @@ data/about.txt:/usr/share/site/about:0:0:-rw-rw-r--`;
|
|||
clite.io.close(fd);
|
||||
// populate /dev (data/filesys.txt is /dev/wfs already)
|
||||
clite.log.write('Populating /dev');
|
||||
// writing to /dev/local downloads data {name:'filename to save',data:'file content'}
|
||||
vfsapi.mkFile('/dev/local');
|
||||
var n = vfsapi.getNode('/dev/local');
|
||||
if (!n) {
|
||||
clite.log.write('local device failure');
|
||||
return;
|
||||
}
|
||||
n.data.content = {
|
||||
read:null,
|
||||
write:function(obj) {
|
||||
clite.core.download(obj.name,obj.data);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
n.perms = 'crw-rw-rw-';
|
||||
n.data.isdev = true;
|
||||
defaultDevices();
|
||||
// populate /bin
|
||||
clite.log.write('Populating /bin');
|
||||
// create a temporary function to load in commands
|
||||
|
|
@ -488,6 +531,15 @@ clite.io = {
|
|||
clite.io.read = function(fd) {
|
||||
if (fd.node.data.content == null)
|
||||
return null;
|
||||
if (fd.node.data.isdev) {
|
||||
if (typeof fd.node.data.content !== 'string') {
|
||||
try{
|
||||
return fd.node.data.content.read();
|
||||
} catch(err) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fd.pos >= fd.node.data.content.length)
|
||||
return null;
|
||||
return fd.node.data.content[fd.pos++];
|
||||
|
|
@ -495,6 +547,15 @@ clite.io = {
|
|||
clite.io.readLine = function(fd) {
|
||||
if (fd.node.data.content == null)
|
||||
return null;
|
||||
if (fd.node.data.isdev) {
|
||||
if (typeof fd.node.data.content !== 'string') {
|
||||
try{
|
||||
return fd.node.data.content.read();
|
||||
} catch(err) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fd.pos >= fd.node.data.content.length)
|
||||
return null;
|
||||
if (typeof fd.node.data.content != 'string')
|
||||
|
|
@ -511,13 +572,28 @@ clite.io = {
|
|||
return l;
|
||||
}
|
||||
clite.io.readAll = function(fd) {
|
||||
if (fd.node.data.isdev) {
|
||||
if (typeof fd.node.data.content !== 'string') {
|
||||
try{
|
||||
return fd.node.data.content.read();
|
||||
} catch(err) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return fd.node.data.content;
|
||||
}
|
||||
clite.io.write = function(fd,data) {
|
||||
if (!fd.canwrite)
|
||||
return false;
|
||||
if (fd.node.data.isdev && typeof data.name === 'string' && typeof data.data === 'string') {
|
||||
return fd.node.data.content.write(data);
|
||||
if (fd.node.data.isdev) {
|
||||
if (typeof fd.node.data.content != 'string') {
|
||||
try{
|
||||
return fd.node.data.content.write(data);
|
||||
} catch(err) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (typeof fd.node.data.content != 'string')
|
||||
return false;
|
||||
|
|
@ -565,7 +641,7 @@ clite.io = {
|
|||
}
|
||||
clite.io.remove = function(path) {
|
||||
var fd = getFileDes(path,true,null);
|
||||
if (!fd || !fd.canwrite)
|
||||
if (!fd || !fd.canwrite || fd.node.data.isdev)
|
||||
return false;
|
||||
return vfsapi.remove(path);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue