19
19
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
20
// USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
22
+ #include " aliased_buffer.h"
22
23
#include " node_buffer.h"
23
24
#include " node_internals.h"
24
25
#include " node_stat_watcher.h"
44
45
45
46
namespace node {
46
47
47
- void FillStatsArray (double * fields, const uv_stat_t * s) {
48
- fields[0 ] = s->st_dev ;
49
- fields[1 ] = s->st_mode ;
50
- fields[2 ] = s->st_nlink ;
51
- fields[3 ] = s->st_uid ;
52
- fields[4 ] = s->st_gid ;
53
- fields[5 ] = s->st_rdev ;
48
+ void FillStatsArray (AliasedBuffer<double , v8::Float64Array>* fields_ptr,
49
+ const uv_stat_t * s, int offset) {
50
+ AliasedBuffer<double , v8::Float64Array>& fields = *fields_ptr;
51
+ fields[offset + 0 ] = s->st_dev ;
52
+ fields[offset + 1 ] = s->st_mode ;
53
+ fields[offset + 2 ] = s->st_nlink ;
54
+ fields[offset + 3 ] = s->st_uid ;
55
+ fields[offset + 4 ] = s->st_gid ;
56
+ fields[offset + 5 ] = s->st_rdev ;
54
57
#if defined(__POSIX__)
55
- fields[6 ] = s->st_blksize ;
58
+ fields[offset + 6 ] = s->st_blksize ;
56
59
#else
57
- fields[6 ] = -1 ;
60
+ fields[offset + 6 ] = -1 ;
58
61
#endif
59
- fields[7 ] = s->st_ino ;
60
- fields[8 ] = s->st_size ;
62
+ fields[offset + 7 ] = s->st_ino ;
63
+ fields[offset + 8 ] = s->st_size ;
61
64
#if defined(__POSIX__)
62
- fields[9 ] = s->st_blocks ;
65
+ fields[offset + 9 ] = s->st_blocks ;
63
66
#else
64
- fields[9 ] = -1 ;
67
+ fields[offset + 9 ] = -1 ;
65
68
#endif
66
69
// Dates.
67
70
// NO-LINT because the fields are 'long' and we just want to cast to `unsigned`
68
- #define X (idx, name ) \
69
- /* NOLINTNEXTLINE(runtime/int) */ \
70
- fields[idx] = ((unsigned long )(s->st_ ##name.tv_sec ) * 1e3 ) + \
71
- /* NOLINTNEXTLINE(runtime/int) */ \
72
- ((unsigned long )(s->st_ ##name.tv_nsec ) / 1e6 ); \
71
+ #define X (idx, name ) \
72
+ /* NOLINTNEXTLINE(runtime/int) */ \
73
+ fields[offset + idx] = ((unsigned long )(s->st_ ##name.tv_sec ) * 1e3 ) + \
74
+ /* NOLINTNEXTLINE(runtime/int) */ \
75
+ ((unsigned long )(s->st_ ##name.tv_nsec ) / 1e6 ); \
73
76
74
77
X (10 , atim)
75
78
X (11 , mtim)
@@ -81,7 +84,6 @@ void FillStatsArray(double* fields, const uv_stat_t* s) {
81
84
namespace fs {
82
85
83
86
using v8::Array;
84
- using v8::ArrayBuffer;
85
87
using v8::Context;
86
88
using v8::Float64Array;
87
89
using v8::Function;
@@ -1295,22 +1297,6 @@ static void Mkdtemp(const FunctionCallbackInfo<Value>& args) {
1295
1297
}
1296
1298
}
1297
1299
1298
- void GetStatValues (const FunctionCallbackInfo<Value>& args) {
1299
- Environment* env = Environment::GetCurrent (args);
1300
- double * fields = env->fs_stats_field_array ();
1301
- if (fields == nullptr ) {
1302
- // stat fields contains twice the number of entries because `fs.StatWatcher`
1303
- // needs room to store data for *two* `fs.Stats` instances.
1304
- fields = new double [2 * 14 ];
1305
- env->set_fs_stats_field_array (fields);
1306
- }
1307
- Local<ArrayBuffer> ab = ArrayBuffer::New (env->isolate (),
1308
- fields,
1309
- sizeof (double ) * 2 * 14 );
1310
- Local<Float64Array> fields_array = Float64Array::New (ab, 0 , 2 * 14 );
1311
- args.GetReturnValue ().Set (fields_array);
1312
- }
1313
-
1314
1300
void InitFs (Local<Object> target,
1315
1301
Local<Value> unused,
1316
1302
Local<Context> context,
@@ -1356,7 +1342,9 @@ void InitFs(Local<Object> target,
1356
1342
1357
1343
env->SetMethod (target, " mkdtemp" , Mkdtemp);
1358
1344
1359
- env->SetMethod (target, " getStatValues" , GetStatValues);
1345
+ target->Set (context,
1346
+ FIXED_ONE_BYTE_STRING (env->isolate (), " statValues" ),
1347
+ env->fs_stats_field_array ()->GetJSArray ()).FromJust ();
1360
1348
1361
1349
StatWatcher::Initialize (env, target);
1362
1350
0 commit comments