Browse Source

64bit offsets for fs calls

v0.9.1-release
Igor Zinkovsky 13 years ago
parent
commit
6f82b9f482
  1. 28
      src/node_file.cc

28
src/node_file.cc

@ -69,28 +69,7 @@ static Persistent<String> buf_symbol;
static Persistent<String> 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"))); \
}
@ -104,7 +83,6 @@ static Persistent<String> oncomplete_sym;
static inline int IsInt64(double x) {
return x == static_cast<double>(static_cast<int64_t>(x));
}
#endif
static void After(uv_fs_t *req) {
@ -515,7 +493,7 @@ static Handle<Value> 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<Value> 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<Value> cb = args[5];
@ -783,7 +761,7 @@ static Handle<Value> Read(const Arguments& args) {
Local<Value> cb;
size_t len;
node_off_t pos;
int64_t pos;
char * buf = NULL;

Loading…
Cancel
Save