From b1e52fe2ea99a52ace6399e9f629c965f66a2643 Mon Sep 17 00:00:00 2001 From: Sarat Addepalli Date: Thu, 15 Feb 2018 19:43:26 +0530 Subject: [PATCH] fs: support as and as+ flags in stringToFlags() PR-URL: https://github.com/nodejs/node/pull/18801 Reviewed-By: Joyee Cheung Reviewed-By: Matheus Marchini Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater --- doc/api/fs.md | 12 ++++++++++++ lib/internal/fs.js | 4 ++++ test/parallel/test-fs-open-flags.js | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/doc/api/fs.md b/doc/api/fs.md index ae559d0ecff744..b0cba330c514bc 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -2019,11 +2019,17 @@ The file is created if it does not exist. * `'ax'` - Like `'a'` but fails if `path` exists. +* `'as'` - Open file for appending in synchronous mode. +The file is created if it does not exist. + * `'a+'` - Open file for reading and appending. The file is created if it does not exist. * `'ax+'` - Like `'a+'` but fails if `path` exists. +* `'as+'` - Open file for reading and appending in synchronous mode. +The file is created if it does not exist. + `mode` sets the file mode (permission and sticky bits), but only if the file was created. It defaults to `0o666` (readable and writable). @@ -3920,11 +3926,17 @@ The file is created if it does not exist. * `'ax'` - Like `'a'` but fails if `path` exists. +* `'as'` - Open file for appending in synchronous mode. +The file is created if it does not exist. + * `'a+'` - Open file for reading and appending. The file is created if it does not exist. * `'ax+'` - Like `'a+'` but fails if `path` exists. +* `'as+'` - Open file for reading and appending in synchronous mode. +The file is created if it does not exist. + `mode` sets the file mode (permission and sticky bits), but only if the file was created. It defaults to `0o666` (readable and writable). diff --git a/lib/internal/fs.js b/lib/internal/fs.js index 9c5c4d8ad7936f..04844248b0b8e0 100644 --- a/lib/internal/fs.js +++ b/lib/internal/fs.js @@ -223,10 +223,14 @@ function stringToFlags(flags) { case 'a' : return O_APPEND | O_CREAT | O_WRONLY; case 'ax' : // Fall through. case 'xa' : return O_APPEND | O_CREAT | O_WRONLY | O_EXCL; + case 'as' : // Fall through. + case 'sa' : return O_APPEND | O_CREAT | O_WRONLY | O_SYNC; case 'a+' : return O_APPEND | O_CREAT | O_RDWR; case 'ax+': // Fall through. case 'xa+': return O_APPEND | O_CREAT | O_RDWR | O_EXCL; + case 'as+': // Fall through. + case 'sa+': return O_APPEND | O_CREAT | O_RDWR | O_SYNC; } throw new errors.TypeError('ERR_INVALID_OPT_VALUE', 'flags', flags); diff --git a/test/parallel/test-fs-open-flags.js b/test/parallel/test-fs-open-flags.js index acf5c739a930c3..7f70885861ffd1 100644 --- a/test/parallel/test-fs-open-flags.js +++ b/test/parallel/test-fs-open-flags.js @@ -56,8 +56,12 @@ assert.strictEqual(stringToFlags('wx+'), O_TRUNC | O_CREAT | O_RDWR | O_EXCL); assert.strictEqual(stringToFlags('xw+'), O_TRUNC | O_CREAT | O_RDWR | O_EXCL); assert.strictEqual(stringToFlags('ax'), O_APPEND | O_CREAT | O_WRONLY | O_EXCL); assert.strictEqual(stringToFlags('xa'), O_APPEND | O_CREAT | O_WRONLY | O_EXCL); +assert.strictEqual(stringToFlags('as'), O_APPEND | O_CREAT | O_WRONLY | O_SYNC); +assert.strictEqual(stringToFlags('sa'), O_APPEND | O_CREAT | O_WRONLY | O_SYNC); assert.strictEqual(stringToFlags('ax+'), O_APPEND | O_CREAT | O_RDWR | O_EXCL); assert.strictEqual(stringToFlags('xa+'), O_APPEND | O_CREAT | O_RDWR | O_EXCL); +assert.strictEqual(stringToFlags('as+'), O_APPEND | O_CREAT | O_RDWR | O_SYNC); +assert.strictEqual(stringToFlags('sa+'), O_APPEND | O_CREAT | O_RDWR | O_SYNC); ('+ +a +r +w rw wa war raw r++ a++ w++ x +x x+ rx rx+ wxx wax xwx xxx') .split(' ')