@@ -199,11 +199,13 @@ class directory_entry {
199
199
_Empty,
200
200
_IterSymlink,
201
201
_IterNonSymlink,
202
- _IterCachedSymlink,
203
- _IterCachedNonSymlink,
204
202
_RefreshSymlink,
205
203
_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
207
209
};
208
210
209
211
struct __cached_data {
@@ -242,6 +244,7 @@ class directory_entry {
242
244
return __data;
243
245
}
244
246
247
+ _LIBCPP_AVAILABILITY_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
245
248
_LIBCPP_HIDE_FROM_ABI static __cached_data
246
249
__create_iter_cached_result (file_type __ft, uintmax_t __size, perms __perm, file_time_type __write_time) {
247
250
__cached_data __data;
@@ -306,34 +309,42 @@ class directory_entry {
306
309
case _Empty:
307
310
return __symlink_status (__p_, __ec).type ();
308
311
case _IterSymlink:
312
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
309
313
case _IterCachedSymlink:
314
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
310
315
case _RefreshSymlink:
311
316
case _RefreshSymlinkUnresolved:
312
317
if (__ec)
313
318
__ec->clear ();
314
319
return file_type::symlink;
315
- case _IterNonSymlink:
320
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
316
321
case _IterCachedNonSymlink:
317
- case _RefreshNonSymlink:
322
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
323
+ case _IterNonSymlink:
324
+ case _RefreshNonSymlink: {
318
325
file_status __st (__data_.__type_ );
319
326
if (__ec && !filesystem::exists (__st))
320
327
*__ec = make_error_code (errc::no_such_file_or_directory);
321
328
else if (__ec)
322
329
__ec->clear ();
323
330
return __data_.__type_ ;
324
331
}
332
+ }
325
333
__libcpp_unreachable ();
326
334
}
327
335
328
336
_LIBCPP_HIDE_FROM_ABI file_type __get_ft (error_code* __ec = nullptr ) const {
329
337
switch (__data_.__cache_type_ ) {
330
338
case _Empty:
331
339
case _IterSymlink:
332
- case _IterCachedSymlink:
333
340
case _RefreshSymlinkUnresolved:
334
341
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 ();
336
345
case _IterCachedNonSymlink:
346
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
347
+ case _IterNonSymlink:
337
348
case _RefreshNonSymlink:
338
349
case _RefreshSymlink: {
339
350
file_status __st (__data_.__type_ );
@@ -352,13 +363,17 @@ class directory_entry {
352
363
case _Empty:
353
364
case _IterNonSymlink:
354
365
case _IterSymlink:
355
- case _IterCachedSymlink:
356
366
case _RefreshSymlinkUnresolved:
357
367
return __status (__p_, __ec);
358
- case _IterCachedNonSymlink:
359
368
case _RefreshNonSymlink:
360
369
case _RefreshSymlink:
361
370
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
362
377
}
363
378
__libcpp_unreachable ();
364
379
}
@@ -369,13 +384,17 @@ class directory_entry {
369
384
case _IterNonSymlink:
370
385
case _IterSymlink:
371
386
return __symlink_status (__p_, __ec);
372
- case _IterCachedNonSymlink:
373
387
case _RefreshNonSymlink:
374
388
return file_status (__get_sym_ft (__ec), __data_.__non_sym_perms_ );
375
- case _IterCachedSymlink:
376
389
case _RefreshSymlink:
377
390
case _RefreshSymlinkUnresolved:
378
391
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
379
398
}
380
399
__libcpp_unreachable ();
381
400
}
@@ -385,10 +404,13 @@ class directory_entry {
385
404
case _Empty:
386
405
case _IterNonSymlink:
387
406
case _IterSymlink:
388
- case _IterCachedSymlink:
389
407
case _RefreshSymlinkUnresolved:
390
408
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);
391
412
case _IterCachedNonSymlink:
413
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
392
414
case _RefreshSymlink:
393
415
case _RefreshNonSymlink: {
394
416
error_code __m_ec;
@@ -409,8 +431,10 @@ class directory_entry {
409
431
case _Empty:
410
432
case _IterNonSymlink:
411
433
case _IterSymlink:
434
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
412
435
case _IterCachedNonSymlink:
413
436
case _IterCachedSymlink:
437
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
414
438
case _RefreshSymlinkUnresolved:
415
439
return filesystem::__hard_link_count (__p_, __ec);
416
440
case _RefreshSymlink:
@@ -429,10 +453,13 @@ class directory_entry {
429
453
case _Empty:
430
454
case _IterNonSymlink:
431
455
case _IterSymlink:
432
- case _IterCachedSymlink:
433
456
case _RefreshSymlinkUnresolved:
434
457
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);
435
461
case _IterCachedNonSymlink:
462
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
436
463
case _RefreshSymlink:
437
464
case _RefreshNonSymlink: {
438
465
error_code __m_ec;
0 commit comments