@@ -812,56 +812,22 @@ void Close(const FunctionCallbackInfo<Value>& args) {
812812static void InternalModuleReadJSON (const FunctionCallbackInfo<Value>& args) {
813813 Environment* env = Environment::GetCurrent (args);
814814 Isolate* isolate = env->isolate ();
815- uv_loop_t * loop = env->event_loop ();
816815
817816 CHECK (args[0 ]->IsString ());
818817 node::Utf8Value path (isolate, args[0 ]);
819818
820- if (strlen (*path) != path.length ())
821- return ; // Contains a nul byte.
822-
823- uv_fs_t open_req;
824- const int fd = uv_fs_open (loop, &open_req, *path, O_RDONLY, 0 , nullptr );
825- uv_fs_req_cleanup (&open_req);
826-
827- if (fd < 0 ) {
819+ std::string chars;
820+ const ssize_t nread = ReadFileSyncRaw (*path, path.length (), &chars);
821+ if (nread < 0 ) {
828822 return ;
829823 }
830824
831- std::shared_ptr<void > defer_close (nullptr , [fd, loop] (...) {
832- uv_fs_t close_req;
833- CHECK_EQ (0 , uv_fs_close (loop, &close_req, fd, nullptr ));
834- uv_fs_req_cleanup (&close_req);
835- });
836-
837- const size_t kBlockSize = 32 << 10 ;
838- std::vector<char > chars;
839- int64_t offset = 0 ;
840- ssize_t numchars;
841- do {
842- const size_t start = chars.size ();
843- chars.resize (start + kBlockSize );
844-
845- uv_buf_t buf;
846- buf.base = &chars[start];
847- buf.len = kBlockSize ;
848-
849- uv_fs_t read_req;
850- numchars = uv_fs_read (loop, &read_req, fd, &buf, 1 , offset, nullptr );
851- uv_fs_req_cleanup (&read_req);
852-
853- if (numchars < 0 )
854- return ;
855-
856- offset += numchars;
857- } while (static_cast <size_t >(numchars) == kBlockSize );
858-
859825 size_t start = 0 ;
860- if (offset >= 3 && 0 == memcmp (&chars[0 ], " \xEF\xBB\xBF " , 3 )) {
826+ if (nread >= 3 && 0 == memcmp (&chars[0 ], " \xEF\xBB\xBF " , 3 )) {
861827 start = 3 ; // Skip UTF-8 BOM.
862828 }
863829
864- const size_t size = offset - start;
830+ const size_t size = nread - start;
865831 char * p = &chars[start];
866832 char * pe = &chars[size];
867833 char * pos[2 ];
0 commit comments