@@ -199,11 +199,13 @@ class directory_entry {
199199 _Empty,
200200 _IterSymlink,
201201 _IterNonSymlink,
202- _IterCachedSymlink,
203- _IterCachedNonSymlink,
204202 _RefreshSymlink,
205203 _RefreshSymlinkUnresolved,
206- _RefreshNonSymlink
204+ _RefreshNonSymlink,
205+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
206+ _IterCachedSymlink,
207+ _IterCachedNonSymlink
208+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
207209 };
208210
209211 struct __cached_data {
@@ -242,6 +244,7 @@ class directory_entry {
242244 return __data;
243245 }
244246
247+ _LIBCPP_AVAILABILITY_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
245248 _LIBCPP_HIDE_FROM_ABI static __cached_data
246249 __create_iter_cached_result (file_type __ft, uintmax_t __size, perms __perm, file_time_type __write_time) {
247250 __cached_data __data;
@@ -306,34 +309,42 @@ class directory_entry {
306309 case _Empty:
307310 return __symlink_status (__p_, __ec).type ();
308311 case _IterSymlink:
312+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
309313 case _IterCachedSymlink:
314+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
310315 case _RefreshSymlink:
311316 case _RefreshSymlinkUnresolved:
312317 if (__ec)
313318 __ec->clear ();
314319 return file_type::symlink;
315- case _IterNonSymlink:
320+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
316321 case _IterCachedNonSymlink:
317- case _RefreshNonSymlink:
322+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
323+ case _IterNonSymlink:
324+ case _RefreshNonSymlink: {
318325 file_status __st (__data_.__type_ );
319326 if (__ec && !filesystem::exists (__st))
320327 *__ec = make_error_code (errc::no_such_file_or_directory);
321328 else if (__ec)
322329 __ec->clear ();
323330 return __data_.__type_ ;
324331 }
332+ }
325333 __libcpp_unreachable ();
326334 }
327335
328336 _LIBCPP_HIDE_FROM_ABI file_type __get_ft (error_code* __ec = nullptr ) const {
329337 switch (__data_.__cache_type_ ) {
330338 case _Empty:
331339 case _IterSymlink:
332- case _IterCachedSymlink:
333340 case _RefreshSymlinkUnresolved:
334341 return __status (__p_, __ec).type ();
335- case _IterNonSymlink:
342+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
343+ case _IterCachedSymlink:
344+ return __status (__p_, __ec).type ();
336345 case _IterCachedNonSymlink:
346+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
347+ case _IterNonSymlink:
337348 case _RefreshNonSymlink:
338349 case _RefreshSymlink: {
339350 file_status __st (__data_.__type_ );
@@ -352,13 +363,17 @@ class directory_entry {
352363 case _Empty:
353364 case _IterNonSymlink:
354365 case _IterSymlink:
355- case _IterCachedSymlink:
356366 case _RefreshSymlinkUnresolved:
357367 return __status (__p_, __ec);
358- case _IterCachedNonSymlink:
359368 case _RefreshNonSymlink:
360369 case _RefreshSymlink:
361370 return file_status (__get_ft (__ec), __data_.__non_sym_perms_ );
371+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
372+ case _IterCachedSymlink:
373+ return __status (__p_, __ec);
374+ case _IterCachedNonSymlink:
375+ return file_status (__get_ft (__ec), __data_.__non_sym_perms_ );
376+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
362377 }
363378 __libcpp_unreachable ();
364379 }
@@ -369,13 +384,17 @@ class directory_entry {
369384 case _IterNonSymlink:
370385 case _IterSymlink:
371386 return __symlink_status (__p_, __ec);
372- case _IterCachedNonSymlink:
373387 case _RefreshNonSymlink:
374388 return file_status (__get_sym_ft (__ec), __data_.__non_sym_perms_ );
375- case _IterCachedSymlink:
376389 case _RefreshSymlink:
377390 case _RefreshSymlinkUnresolved:
378391 return file_status (__get_sym_ft (__ec), __data_.__sym_perms_ );
392+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
393+ case _IterCachedNonSymlink:
394+ return file_status (__get_sym_ft (__ec), __data_.__non_sym_perms_ );
395+ case _IterCachedSymlink:
396+ return file_status (__get_sym_ft (__ec), __data_.__sym_perms_ );
397+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
379398 }
380399 __libcpp_unreachable ();
381400 }
@@ -385,10 +404,13 @@ class directory_entry {
385404 case _Empty:
386405 case _IterNonSymlink:
387406 case _IterSymlink:
388- case _IterCachedSymlink:
389407 case _RefreshSymlinkUnresolved:
390408 return filesystem::__file_size (__p_, __ec);
409+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
410+ case _IterCachedSymlink:
411+ return filesystem::__file_size (__p_, __ec);
391412 case _IterCachedNonSymlink:
413+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
392414 case _RefreshSymlink:
393415 case _RefreshNonSymlink: {
394416 error_code __m_ec;
@@ -409,8 +431,10 @@ class directory_entry {
409431 case _Empty:
410432 case _IterNonSymlink:
411433 case _IterSymlink:
434+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
412435 case _IterCachedNonSymlink:
413436 case _IterCachedSymlink:
437+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
414438 case _RefreshSymlinkUnresolved:
415439 return filesystem::__hard_link_count (__p_, __ec);
416440 case _RefreshSymlink:
@@ -429,10 +453,13 @@ class directory_entry {
429453 case _Empty:
430454 case _IterNonSymlink:
431455 case _IterSymlink:
432- case _IterCachedSymlink:
433456 case _RefreshSymlinkUnresolved:
434457 return filesystem::__last_write_time (__p_, __ec);
458+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
459+ case _IterCachedSymlink:
460+ return filesystem::__last_write_time (__p_, __ec);
435461 case _IterCachedNonSymlink:
462+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
436463 case _RefreshSymlink:
437464 case _RefreshNonSymlink: {
438465 error_code __m_ec;
0 commit comments