@@ -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
+ # if _LIBCPP_AVAILABILITY_HAS_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;
@@ -264,6 +267,7 @@ class directory_entry {
264
267
}();
265
268
return __data;
266
269
}
270
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
267
271
268
272
_LIBCPP_HIDE_FROM_ABI void __assign_iter_entry (_Path&& __p, __cached_data __dt) {
269
273
__p_ = std::move (__p);
@@ -306,34 +310,42 @@ class directory_entry {
306
310
case _Empty:
307
311
return __symlink_status (__p_, __ec).type ();
308
312
case _IterSymlink:
313
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
309
314
case _IterCachedSymlink:
315
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
310
316
case _RefreshSymlink:
311
317
case _RefreshSymlinkUnresolved:
312
318
if (__ec)
313
319
__ec->clear ();
314
320
return file_type::symlink;
315
- case _IterNonSymlink:
321
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
316
322
case _IterCachedNonSymlink:
317
- case _RefreshNonSymlink:
323
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
324
+ case _IterNonSymlink:
325
+ case _RefreshNonSymlink: {
318
326
file_status __st (__data_.__type_ );
319
327
if (__ec && !filesystem::exists (__st))
320
328
*__ec = make_error_code (errc::no_such_file_or_directory);
321
329
else if (__ec)
322
330
__ec->clear ();
323
331
return __data_.__type_ ;
324
332
}
333
+ }
325
334
__libcpp_unreachable ();
326
335
}
327
336
328
337
_LIBCPP_HIDE_FROM_ABI file_type __get_ft (error_code* __ec = nullptr ) const {
329
338
switch (__data_.__cache_type_ ) {
330
339
case _Empty:
331
340
case _IterSymlink:
332
- case _IterCachedSymlink:
333
341
case _RefreshSymlinkUnresolved:
334
342
return __status (__p_, __ec).type ();
335
- case _IterNonSymlink:
343
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
344
+ case _IterCachedSymlink:
345
+ return __status (__p_, __ec).type ();
336
346
case _IterCachedNonSymlink:
347
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
348
+ case _IterNonSymlink:
337
349
case _RefreshNonSymlink:
338
350
case _RefreshSymlink: {
339
351
file_status __st (__data_.__type_ );
@@ -352,13 +364,17 @@ class directory_entry {
352
364
case _Empty:
353
365
case _IterNonSymlink:
354
366
case _IterSymlink:
355
- case _IterCachedSymlink:
356
367
case _RefreshSymlinkUnresolved:
357
368
return __status (__p_, __ec);
358
- case _IterCachedNonSymlink:
359
369
case _RefreshNonSymlink:
360
370
case _RefreshSymlink:
361
371
return file_status (__get_ft (__ec), __data_.__non_sym_perms_ );
372
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
373
+ case _IterCachedSymlink:
374
+ return __status (__p_, __ec);
375
+ case _IterCachedNonSymlink:
376
+ return file_status (__get_ft (__ec), __data_.__non_sym_perms_ );
377
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
362
378
}
363
379
__libcpp_unreachable ();
364
380
}
@@ -369,13 +385,17 @@ class directory_entry {
369
385
case _IterNonSymlink:
370
386
case _IterSymlink:
371
387
return __symlink_status (__p_, __ec);
372
- case _IterCachedNonSymlink:
373
388
case _RefreshNonSymlink:
374
389
return file_status (__get_sym_ft (__ec), __data_.__non_sym_perms_ );
375
- case _IterCachedSymlink:
376
390
case _RefreshSymlink:
377
391
case _RefreshSymlinkUnresolved:
378
392
return file_status (__get_sym_ft (__ec), __data_.__sym_perms_ );
393
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
394
+ case _IterCachedNonSymlink:
395
+ return file_status (__get_sym_ft (__ec), __data_.__non_sym_perms_ );
396
+ case _IterCachedSymlink:
397
+ return file_status (__get_sym_ft (__ec), __data_.__sym_perms_ );
398
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
379
399
}
380
400
__libcpp_unreachable ();
381
401
}
@@ -385,10 +405,13 @@ class directory_entry {
385
405
case _Empty:
386
406
case _IterNonSymlink:
387
407
case _IterSymlink:
388
- case _IterCachedSymlink:
389
408
case _RefreshSymlinkUnresolved:
390
409
return filesystem::__file_size (__p_, __ec);
410
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
411
+ case _IterCachedSymlink:
412
+ return filesystem::__file_size (__p_, __ec);
391
413
case _IterCachedNonSymlink:
414
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
392
415
case _RefreshSymlink:
393
416
case _RefreshNonSymlink: {
394
417
error_code __m_ec;
@@ -409,8 +432,10 @@ class directory_entry {
409
432
case _Empty:
410
433
case _IterNonSymlink:
411
434
case _IterSymlink:
435
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
412
436
case _IterCachedNonSymlink:
413
437
case _IterCachedSymlink:
438
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
414
439
case _RefreshSymlinkUnresolved:
415
440
return filesystem::__hard_link_count (__p_, __ec);
416
441
case _RefreshSymlink:
@@ -429,10 +454,13 @@ class directory_entry {
429
454
case _Empty:
430
455
case _IterNonSymlink:
431
456
case _IterSymlink:
432
- case _IterCachedSymlink:
433
457
case _RefreshSymlinkUnresolved:
434
458
return filesystem::__last_write_time (__p_, __ec);
459
+ # if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
460
+ case _IterCachedSymlink:
461
+ return filesystem::__last_write_time (__p_, __ec);
435
462
case _IterCachedNonSymlink:
463
+ # endif // _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_FULLY_POPULATED_CACHED_ENTRY
436
464
case _RefreshSymlink:
437
465
case _RefreshNonSymlink: {
438
466
error_code __m_ec;
0 commit comments