Initial commit
This commit is contained in:
63
build/fs/api_file.js
Normal file
63
build/fs/api_file.js
Normal file
@@ -0,0 +1,63 @@
|
||||
let File = {
|
||||
// **`File.read(name)`**
|
||||
// Read the whole file into a string variable.
|
||||
//
|
||||
// Return value: a string contents of the file.
|
||||
// If file does not exist, an empty string is returned.
|
||||
//
|
||||
// Example: read a .json configuration file into a config object:
|
||||
// ```javascript
|
||||
// let obj = JSON.parse(File.read('settings.json'));
|
||||
// ```
|
||||
read: function(path) {
|
||||
let n = 0; let res = ''; let buf = 'xxxxxxxxxx'; // Should be > 5
|
||||
let fp = File.fopen(path, 'r');
|
||||
if (fp === null) return null;
|
||||
while ((n = File.fread(buf, 1, buf.length, fp)) > 0) {
|
||||
res += buf.slice(0, n);
|
||||
}
|
||||
File.fclose(fp);
|
||||
return res;
|
||||
},
|
||||
|
||||
// **`File.remove(name)`**
|
||||
// Delete file with a given name. Return value: 0
|
||||
// on success, non-0 on failure.
|
||||
remove: ffi('int remove(char *)'),
|
||||
|
||||
// **`File.rename(old, new)`**
|
||||
// Rename file `old` to `new`. Return 0 on success, non-0 on failure.
|
||||
rename: ffi('int rename(char *, char *)'),
|
||||
|
||||
// **`File.write(str, name, mode)`**
|
||||
// Write string `str` into file `name`.
|
||||
//
|
||||
// If file does not exist, it is created. `mode` is an optional file open
|
||||
// mode argument, `'w'` by default, which means that previous content is
|
||||
// deleted. Set `mode` to `'a'` in order to append to the existing content.
|
||||
// Return value: number of bytes written.
|
||||
//
|
||||
// Example - write a configuration object into a file:
|
||||
// ```javascript
|
||||
// File.write(JSON.stringify(obj, 'settings.json'));
|
||||
// ```
|
||||
write: function(str, path, oMode) {
|
||||
let fp = File.fopen(path, oMode || 'w');
|
||||
if (fp === null) return 0;
|
||||
let off = 0; let tot = str.length;
|
||||
while (off < tot) {
|
||||
let len = 5; // Use light 5-byte strings for writing
|
||||
if (off + len > tot) len = tot - off;
|
||||
let n = File.fwrite(str.slice(off, off + len), 1, len, fp);
|
||||
// if (n <= 0) break;
|
||||
off += n;
|
||||
}
|
||||
File.fclose(fp);
|
||||
return off;
|
||||
},
|
||||
|
||||
fopen: ffi('void *fopen(char *, char *)'),
|
||||
fclose: ffi('void fclose(void *)'),
|
||||
fread: ffi('int fread(char *, int, int, void *)'),
|
||||
fwrite: ffi('int fwrite(char *, int, int, void *)'),
|
||||
};
|
||||
Reference in New Issue
Block a user