Π·Π΅ΡΠΊΠ°Π»ΠΎ ΠΈΠ· https://github.com/mozilla/gecko-dev.git
Bug 1312402: Simplify js:π:FileAsString; r=arai
MozReview-Commit-ID: Gs6Ep3SWbYA --HG-- extra : rebase_source : ffc81e723ed31757a63c335b722a65b5d8b3d59a
This commit is contained in:
Π ΠΎΠ΄ΠΈΡΠ΅Π»Ρ
ce65eb5f90
ΠΠΎΠΌΠΌΠΈΡ
c507889e80
|
@ -1803,15 +1803,13 @@ js::shell::FileAsString(JSContext* cx, JS::HandleString pathnameStr)
|
|||
return nullptr;
|
||||
|
||||
FILE* file;
|
||||
RootedString str(cx);
|
||||
size_t len, cc;
|
||||
char* buf;
|
||||
|
||||
file = fopen(pathname.ptr(), "rb");
|
||||
if (!file) {
|
||||
ReportCantOpenErrorUnknownEncoding(cx, pathname.ptr());
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AutoCloseFile autoClose(file);
|
||||
|
||||
if (fseek(file, 0, SEEK_END) != 0) {
|
||||
|
@ -1819,17 +1817,23 @@ js::shell::FileAsString(JSContext* cx, JS::HandleString pathnameStr)
|
|||
if (!pathname.encodeUtf8(cx, pathnameStr))
|
||||
return nullptr;
|
||||
JS_ReportErrorUTF8(cx, "can't seek end of %s", pathname.ptr());
|
||||
} else {
|
||||
len = ftell(file);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
size_t len = ftell(file);
|
||||
if (fseek(file, 0, SEEK_SET) != 0) {
|
||||
pathname.clear();
|
||||
if (!pathname.encodeUtf8(cx, pathnameStr))
|
||||
return nullptr;
|
||||
JS_ReportErrorUTF8(cx, "can't seek start of %s", pathname.ptr());
|
||||
} else {
|
||||
buf = (char*) JS_malloc(cx, len + 1);
|
||||
if (buf) {
|
||||
cc = fread(buf, 1, len, file);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
UniqueChars buf(static_cast<char*>(js_malloc(len + 1)));
|
||||
if (!buf)
|
||||
return nullptr;
|
||||
|
||||
size_t cc = fread(buf.get(), 1, len, file);
|
||||
if (cc != len) {
|
||||
if (ptrdiff_t(cc) < 0) {
|
||||
ReportCantOpenErrorUnknownEncoding(cx, pathname.ptr());
|
||||
|
@ -1839,9 +1843,12 @@ js::shell::FileAsString(JSContext* cx, JS::HandleString pathnameStr)
|
|||
return nullptr;
|
||||
JS_ReportErrorUTF8(cx, "can't read %s: short read", pathname.ptr());
|
||||
}
|
||||
} else {
|
||||
char16_t* ucbuf =
|
||||
JS::UTF8CharsToNewTwoByteCharsZ(cx, JS::UTF8Chars(buf, len), &len).get();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
UniqueTwoByteChars ucbuf(
|
||||
JS::UTF8CharsToNewTwoByteCharsZ(cx, JS::UTF8Chars(buf.get(), len), &len).get()
|
||||
);
|
||||
if (!ucbuf) {
|
||||
pathname.clear();
|
||||
if (!pathname.encodeUtf8(cx, pathnameStr))
|
||||
|
@ -1849,15 +1856,8 @@ js::shell::FileAsString(JSContext* cx, JS::HandleString pathnameStr)
|
|||
JS_ReportErrorUTF8(cx, "Invalid UTF-8 in file '%s'", pathname.ptr());
|
||||
return nullptr;
|
||||
}
|
||||
str = JS_NewUCStringCopyN(cx, ucbuf, len);
|
||||
free(ucbuf);
|
||||
}
|
||||
JS_free(cx, buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
return JS_NewUCStringCopyN(cx, ucbuf.get(), len);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
ΠΠ°Π³ΡΡΠ·ΠΊΠ°β¦
Π‘ΡΡΠ»ΠΊΠ° Π² Π½ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅