mirror of
https://github.com/osnr/TabFS.git
synced 2024-05-19 14:06:34 +02:00
fix truncate & write (incl resizing). fix extensions/*/enabled ?
This commit is contained in:
parent
35214c9698
commit
760de1ac77
|
@ -135,13 +135,16 @@ const defineFile = (getData, setData) => ({
|
||||||
return { buf: String.fromCharCode(...Cache.getObjectForHandle(fh).slice(offset, offset + size)) }
|
return { buf: String.fromCharCode(...Cache.getObjectForHandle(fh).slice(offset, offset + size)) }
|
||||||
},
|
},
|
||||||
async write({path, fh, offset, buf}) {
|
async write({path, fh, offset, buf}) {
|
||||||
// FIXME: patch
|
let arr = Cache.getObjectForHandle(fh);
|
||||||
|
const bufarr = stringToUtf8Array(buf);
|
||||||
|
if (offset + bufarr.length > arr.length) {
|
||||||
|
const newArr = new Uint8Array(offset + bufarr.length);
|
||||||
|
newArr.set(arr); arr = newArr;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < bufarr.length; i++) { arr[offset + i] = bufarr[i]; }
|
||||||
// I guess caller should override write() if they want to actually
|
// I guess caller should override write() if they want to actually
|
||||||
// patch and not just re-set the whole string (for example,
|
// patch and not just re-set the whole string (for example,
|
||||||
// if they want to hot-reload just one function the user modified)
|
// if they want to hot-reload just one function the user modified)
|
||||||
const arr = Cache.getObjectForHandle(fh);
|
|
||||||
const bufarr = stringToUtf8Array(buf);
|
|
||||||
arr.splice(offset, bufarr.length, ...bufarr);
|
|
||||||
await setData(path, utf8ArrayToString(arr)); return { size: bufarr.length };
|
await setData(path, utf8ArrayToString(arr)); return { size: bufarr.length };
|
||||||
},
|
},
|
||||||
async release({fh}) { Cache.removeObjectForHandle(fh); return {}; },
|
async release({fh}) { Cache.removeObjectForHandle(fh); return {}; },
|
||||||
|
@ -150,9 +153,12 @@ const defineFile = (getData, setData) => ({
|
||||||
// TODO: weird case if they truncate while the file is open
|
// TODO: weird case if they truncate while the file is open
|
||||||
// (but `echo hi > foo.txt`, the main thing I care about, uses
|
// (but `echo hi > foo.txt`, the main thing I care about, uses
|
||||||
// O_TRUNC which thankfully doesn't do that)
|
// O_TRUNC which thankfully doesn't do that)
|
||||||
const arr = toUtf8Array(await getData(path));
|
let arr = toUtf8Array(await getData(path));
|
||||||
arr.splice(size);
|
if (size > arr.length) {
|
||||||
await setData(path, arr); return {};
|
const newArr = new Uint8Array(size);
|
||||||
|
newArr.set(arr); arr = newArr;
|
||||||
|
}
|
||||||
|
await setData(path, utf8ArrayToString(arr.slice(0, size))); return {};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -329,10 +335,12 @@ router["/extensions"] = {
|
||||||
router["/extensions/*/enabled"] = defineFile(async path => {
|
router["/extensions/*/enabled"] = defineFile(async path => {
|
||||||
const parts = pathComponent(path, -2).split('_'); const extensionId = parts[parts.length - 1];
|
const parts = pathComponent(path, -2).split('_'); const extensionId = parts[parts.length - 1];
|
||||||
const info = await browser.management.get(extensionId);
|
const info = await browser.management.get(extensionId);
|
||||||
return String(info.enabled);
|
return String(info.enabled) + '\n';
|
||||||
|
|
||||||
}, async (path, buf) => {
|
}, async (path, buf) => {
|
||||||
await browser.management.setEnabled();
|
console.log(buf);
|
||||||
|
const parts = pathComponent(path, -2).split('_'); const extensionId = parts[parts.length - 1];
|
||||||
|
await browser.management.setEnabled(extensionId, buf.trim() === "true");
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ensure that there are routes for all ancestors. This algorithm is
|
// Ensure that there are routes for all ancestors. This algorithm is
|
||||||
|
|
Loading…
Reference in a new issue