77// ===----------------------------------------------------------------------===//
88
99#include " src/time/time_utils.h"
10- #include " src/__support/CPP/limits.h" // INT_MIN, INT_MAX
11- #include " src/__support/CPP/string_view.h"
12- #include " src/__support/common.h"
13- #include " src/__support/macros/config.h"
14- #include " src/time/timezone.h"
10+ #include " src/__support/File/file.h"
11+ #include " src/stdio/fseek.h"
1512
1613namespace LIBC_NAMESPACE_DECL {
1714namespace time_utils {
@@ -27,24 +24,21 @@ static int64_t computeRemainingYears(int64_t daysPerYears,
2724}
2825
2926volatile int file_usage = 0 ;
30- volatile int fd = -1 ;
3127
32- void release_file (int fd ) {
28+ void release_file (ErrorOr<File *> error_or_file ) {
3329 file_usage = 0 ;
34- close (fd );
30+ error_or_file. value ()-> close ();
3531}
3632
37- void acquire_file (char *filename) {
33+ ErrorOr<File *> acquire_file (char *filename) {
3834 while (1 ) {
3935 if (file_usage == 0 ) {
4036 file_usage = 1 ;
4137 break ;
4238 }
4339 }
4440
45- if ((fd = open (filename, O_RDONLY)) < 0 ) {
46- release_file (fd);
47- }
41+ return LIBC_NAMESPACE::openfile (filename, " rb" );
4842}
4943
5044char *get_env_var (const char *input) {
@@ -231,18 +225,12 @@ timezone::tzset *get_localtime(struct tm *tm) {
231225 }
232226 }
233227
234- acquire_file (tz_filename);
235-
236- size_t filesize;
237- filesize = static_cast <size_t >(lseek (fd, 0 , SEEK_END));
238- if (filesize < 0 ) {
239- close (fd);
240- return nullptr ;
241- }
242- lseek (fd, 0 , 0 );
228+ ErrorOr<File *> error_or_file = acquire_file (tz_filename);
229+ File *file = error_or_file.value ();
243230
244- timezone::tzset *ptr_tzset = timezone::get_tzset (fd, filesize );
231+ timezone::tzset *ptr_tzset = timezone::get_tzset (file );
245232 if (ptr_tzset == nullptr ) {
233+ release_file (file);
246234 return nullptr ;
247235 }
248236
@@ -256,7 +244,7 @@ timezone::tzset *get_localtime(struct tm *tm) {
256244 }
257245
258246 if (file_usage == 1 ) {
259- release_file (fd );
247+ release_file (file );
260248 }
261249
262250 return ptr_tzset;
0 commit comments