77// ===----------------------------------------------------------------------===//
88
99#include " src/time/time_utils.h"
10+ #include " src/__support/File/file.h"
11+ #include " src/stdio/fseek.h"
1012#include < fcntl.h>
1113#include < unistd.h>
1214
@@ -26,24 +28,21 @@ static int64_t computeRemainingYears(int64_t daysPerYears,
2628}
2729
2830volatile int file_usage = 0 ;
29- volatile int fd = -1 ;
3031
31- void release_file (int fd ) {
32+ void release_file (ErrorOr<File *> error_or_file ) {
3233 file_usage = 0 ;
33- close (fd );
34+ error_or_file. value ()-> close ();
3435}
3536
36- void acquire_file (char *filename) {
37+ ErrorOr<File *> acquire_file (char *filename) {
3738 while (1 ) {
3839 if (file_usage == 0 ) {
3940 file_usage = 1 ;
4041 break ;
4142 }
4243 }
4344
44- if ((fd = open (filename, O_RDONLY)) < 0 ) {
45- release_file (fd);
46- }
45+ return LIBC_NAMESPACE::openfile (filename, " rb" );
4746}
4847
4948char *get_env_var (const char *input) {
@@ -214,18 +213,12 @@ timezone::tzset *get_localtime(struct tm *tm) {
214213 }
215214 }
216215
217- acquire_file (tz_filename);
218-
219- size_t filesize;
220- filesize = static_cast <size_t >(lseek (fd, 0 , SEEK_END));
221- if (filesize < 0 ) {
222- close (fd);
223- return nullptr ;
224- }
225- lseek (fd, 0 , 0 );
216+ ErrorOr<File *> error_or_file = acquire_file (tz_filename);
217+ File *file = error_or_file.value ();
226218
227- timezone::tzset *ptr_tzset = timezone::get_tzset (fd, filesize );
219+ timezone::tzset *ptr_tzset = timezone::get_tzset (file );
228220 if (ptr_tzset == nullptr ) {
221+ release_file (file);
229222 return nullptr ;
230223 }
231224
@@ -239,7 +232,7 @@ timezone::tzset *get_localtime(struct tm *tm) {
239232 }
240233
241234 if (file_usage == 1 ) {
242- release_file (fd );
235+ release_file (file );
243236 }
244237
245238 return ptr_tzset;
0 commit comments