From 6f82b9f482f50c68064e4a27a03e05068b517516 Mon Sep 17 00:00:00 2001 From: Igor Zinkovsky Date: Thu, 19 Apr 2012 11:58:35 -0700 Subject: [PATCH] 64bit offsets for fs calls --- src/node_file.cc | 54 ++++++++++++++---------------------------------- 1 file changed, 16 insertions(+), 38 deletions(-) diff --git a/src/node_file.cc b/src/node_file.cc index 805dc532f5c..73a97a11dc9 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -69,42 +69,20 @@ static Persistent buf_symbol; static Persistent oncomplete_sym; -#ifndef _LARGEFILE_SOURCE - typedef off_t node_off_t; -# define ASSERT_OFFSET(a) \ - STATIC_ASSERT(sizeof(node_off_t) * CHAR_BIT >= 32); \ - if (!(a)->IsUndefined() && !(a)->IsNull() && !(a)->IsInt32()) { \ - return ThrowException(Exception::TypeError(String::New("Not an integer"))); \ - } -# define ASSERT_TRUNCATE_LENGTH(a) \ - if (!(a)->IsUndefined() && !(a)->IsNull() && !(a)->IsUint32()) { \ - return ThrowException(Exception::TypeError(String::New("Not an integer"))); \ - } -# define GET_OFFSET(a) ((a)->IsNumber() ? (a)->Int32Value() : -1) -# define GET_TRUNCATE_LENGTH(a) ((a)->Uint32Value()) -#else -# ifdef _WIN32 -# define NODE_USE_64BIT_UV_FS_API - typedef int64_t node_off_t; -# else - typedef off_t node_off_t; -# endif -# define ASSERT_OFFSET(a) \ - STATIC_ASSERT(sizeof(node_off_t) * CHAR_BIT >= 64); \ - if (!(a)->IsUndefined() && !(a)->IsNull() && !IsInt64((a)->NumberValue())) { \ - return ThrowException(Exception::TypeError(String::New("Not an integer"))); \ - } -# define ASSERT_TRUNCATE_LENGTH(a) \ - if (!(a)->IsUndefined() && !(a)->IsNull() && !IsInt64((a)->NumberValue())) { \ - return ThrowException(Exception::TypeError(String::New("Not an integer"))); \ - } -# define GET_OFFSET(a) ((a)->IsNumber() ? (a)->IntegerValue() : -1) -# define GET_TRUNCATE_LENGTH(a) ((a)->IntegerValue()) - - static inline int IsInt64(double x) { - return x == static_cast(static_cast(x)); +#define ASSERT_OFFSET(a) \ + if (!(a)->IsUndefined() && !(a)->IsNull() && !IsInt64((a)->NumberValue())) { \ + return ThrowException(Exception::TypeError(String::New("Not an integer"))); \ } -#endif +#define ASSERT_TRUNCATE_LENGTH(a) \ + if (!(a)->IsUndefined() && !(a)->IsNull() && !IsInt64((a)->NumberValue())) { \ + return ThrowException(Exception::TypeError(String::New("Not an integer"))); \ + } +#define GET_OFFSET(a) ((a)->IsNumber() ? (a)->IntegerValue() : -1) +#define GET_TRUNCATE_LENGTH(a) ((a)->IntegerValue()) + +static inline int IsInt64(double x) { + return x == static_cast(static_cast(x)); +} static void After(uv_fs_t *req) { @@ -515,7 +493,7 @@ static Handle Truncate(const Arguments& args) { int fd = args[0]->Int32Value(); ASSERT_TRUNCATE_LENGTH(args[1]); - node_off_t len = GET_TRUNCATE_LENGTH(args[1]); + int64_t len = GET_TRUNCATE_LENGTH(args[1]); if (args[2]->IsFunction()) { #ifdef NODE_USE_64BIT_UV_FS_API @@ -738,7 +716,7 @@ static Handle Write(const Arguments& args) { } ASSERT_OFFSET(args[4]); - node_off_t pos = GET_OFFSET(args[4]); + int64_t pos = GET_OFFSET(args[4]); char * buf = (char*)buffer_data + off; Local cb = args[5]; @@ -783,7 +761,7 @@ static Handle Read(const Arguments& args) { Local cb; size_t len; - node_off_t pos; + int64_t pos; char * buf = NULL;