From 60460bf80dbba313759b0c6f73f8c17831b17e11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jussi=20R=C3=A4s=C3=A4nen?= Date: Sat, 16 Sep 2017 00:08:11 +0300 Subject: [PATCH] fs: add O_DSYNC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/15451 Fixes: https://github.com/nodejs/node/issues/15425 Reviewed-By: Ben Noordhuis Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Colin Ihrig Reviewed-By: Tobias Nießen --- doc/api/fs.md | 5 +++++ src/node_constants.cc | 5 +++++ test/parallel/test-fs-open-flags.js | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/doc/api/fs.md b/doc/api/fs.md index a44bbd368eef44..ce29e3348538f2 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -2808,6 +2808,11 @@ The following constants are meant for use with `fs.open()`. O_SYNC Flag indicating that the file is opened for synchronous I/O. + + O_DSYNC + Flag indicating that the file is opened for synchronous I/O + with write operations waiting for data integrity. + O_SYMLINK Flag indicating to open the symbolic link itself rather than the diff --git a/src/node_constants.cc b/src/node_constants.cc index 7fd303dd32fed0..787f44a1f1643e 100644 --- a/src/node_constants.cc +++ b/src/node_constants.cc @@ -1089,6 +1089,11 @@ void DefineSystemConstants(Local target) { NODE_DEFINE_CONSTANT(target, O_SYNC); #endif +#ifdef O_DSYNC + NODE_DEFINE_CONSTANT(target, O_DSYNC); +#endif + + #ifdef O_SYMLINK NODE_DEFINE_CONSTANT(target, O_SYMLINK); #endif diff --git a/test/parallel/test-fs-open-flags.js b/test/parallel/test-fs-open-flags.js index 873bd7112828eb..f480ede4e368e6 100644 --- a/test/parallel/test-fs-open-flags.js +++ b/test/parallel/test-fs-open-flags.js @@ -22,6 +22,7 @@ // Flags: --expose_internals 'use strict'; const common = require('../common'); +const fixtures = require('../common/fixtures'); const assert = require('assert'); const fs = require('fs'); @@ -32,6 +33,7 @@ const O_EXCL = fs.constants.O_EXCL || 0; const O_RDONLY = fs.constants.O_RDONLY || 0; const O_RDWR = fs.constants.O_RDWR || 0; const O_SYNC = fs.constants.O_SYNC || 0; +const O_DSYNC = fs.constants.O_DSYNC || 0; const O_TRUNC = fs.constants.O_TRUNC || 0; const O_WRONLY = fs.constants.O_WRONLY || 0; @@ -78,3 +80,11 @@ common.expectsError( () => stringToFlags(null), { code: 'ERR_INVALID_OPT_VALUE', type: TypeError } ); + +if (common.isLinux === true) { + const file = fixtures.path('a.js'); + + fs.open(file, O_DSYNC, common.mustCall(function(err, fd) { + assert.ifError(err); + })); +}