@@ -49,10 +49,9 @@ namespace {
4949enum class Format { NORMAL_FILE , GZIP_FILE , BZIP2_FILE };
5050
5151static Format GetFormatFromName (absl::string_view name) {
52- const int size = name.size ();
53- if (size > 4 && name.substr (size - 3 ) == " .gz" ) {
52+ if (name.ends_with (" .gz" )) {
5453 return Format::GZIP_FILE ;
55- } else if (size > 5 && name.substr (size - 4 ) == " .bz2" ) {
54+ } else if (name.ends_with ( " .bz2" ) ) {
5655 return Format::BZIP2_FILE ;
5756 } else {
5857 return Format::NORMAL_FILE ;
@@ -258,33 +257,29 @@ File* File::OpenOrDie(absl::string_view file_name, absl::string_view mode) {
258257}
259258
260259File* File::Open (absl::string_view file_name, absl::string_view mode) {
261- std::string null_terminated_name = std::string (file_name);
262- std::string null_terminated_mode = std::string (mode);
260+ const std::string filename = std::string (file_name);
261+ std::string mode_str (mode);
263262#if defined(_MSC_VER)
264- if (null_terminated_mode == " r" ) {
265- null_terminated_mode = " rb" ;
266- } else if (null_terminated_mode == " w" ) {
267- null_terminated_mode = " wb" ;
263+ if (mode_str == " r" ) {
264+ mode_str = " rb" ;
265+ } else if (mode_str == " w" ) {
266+ mode_str = " wb" ;
268267 }
269268#endif
270- const Format format = GetFormatFromName (file_name);
271- switch (format) {
269+ switch (GetFormatFromName (file_name)) {
272270 case Format::NORMAL_FILE : {
273- FILE * c_file =
274- fopen (null_terminated_name.c_str (), null_terminated_mode.c_str ());
271+ FILE * c_file = fopen (filename.c_str (), mode_str.c_str ());
275272 if (c_file == nullptr ) return nullptr ;
276273 return new CFile (c_file, file_name);
277274 }
278275 case Format::GZIP_FILE : {
279- gzFile gz_file =
280- gzopen (null_terminated_name.c_str (), null_terminated_mode.c_str ());
281- if (!gz_file) return nullptr ;
276+ gzFile gz_file = gzopen (filename.c_str (), mode_str.c_str ());
277+ if (gz_file == nullptr ) return nullptr ;
282278 return new GzFile (gz_file, file_name);
283279 }
284280 case Format::BZIP2_FILE : {
285- BZFILE * bz_file = BZ2_bzopen (null_terminated_name.c_str (),
286- null_terminated_mode.c_str ());
287- if (!bz_file) return nullptr ;
281+ BZFILE * bz_file = BZ2_bzopen (filename.c_str (), mode_str.c_str ());
282+ if (bz_file == nullptr ) return nullptr ;
288283 return new Bz2File (bz_file, file_name);
289284 }
290285 }
@@ -325,6 +320,7 @@ absl::string_view File::filename() const { return name_; }
325320void File::Init () {}
326321
327322namespace file {
323+
328324absl::Status Open (absl::string_view file_name, absl::string_view mode, File** f,
329325 Options options) {
330326 if (options == Defaults ()) {
@@ -333,7 +329,7 @@ absl::Status Open(absl::string_view file_name, absl::string_view mode, File** f,
333329 return absl::OkStatus ();
334330 }
335331 }
336- return absl::Status (absl::StatusCode::kInvalidArgument ,
332+ return absl::Status (absl::StatusCode::kNotFound ,
337333 absl::StrCat (" Could not open '" , file_name, " '" ));
338334}
339335
@@ -371,7 +367,7 @@ absl::Status GetContents(absl::string_view file_name, std::string* output,
371367
372368 file->Close (options).IgnoreError (); // Even if ReadToString() fails!
373369
374- return absl::Status (absl::StatusCode::kInvalidArgument ,
370+ return absl::Status (absl::StatusCode::kNotFound ,
375371 absl::StrCat (" Could not read from '" , file_name, " '." ));
376372}
377373
@@ -490,7 +486,7 @@ absl::Status SetBinaryProto(absl::string_view file_name,
490486
491487absl::Status Delete (absl::string_view path, Options options) {
492488 if (options == Defaults ()) {
493- std::string null_terminated_path = std::string (path);
489+ const std::string null_terminated_path = std::string (path);
494490 if (remove (null_terminated_path.c_str ()) == 0 ) return absl::OkStatus ();
495491 }
496492 return absl::Status (absl::StatusCode::kInvalidArgument ,
@@ -499,7 +495,7 @@ absl::Status Delete(absl::string_view path, Options options) {
499495
500496absl::Status Exists (absl::string_view path, Options options) {
501497 if (options == Defaults ()) {
502- std::string null_terminated_path = std::string (path);
498+ const std::string null_terminated_path = std::string (path);
503499 if (access (null_terminated_path.c_str (), F_OK ) == 0 ) {
504500 return absl::OkStatus ();
505501 }
0 commit comments