The following authored by Ben Hutchings from https://womble.decadent.org.uk/readdir_r-advisory.html */ Calculate the required buffer size (in bytes) for directory * * entries read from the given directory handle. Return -1 if this * * this cannot be done. * *
| 774 | * 255, since some systems (including at least HP-UX) incorrectly * |
| 775 | * define it to be a smaller value. */ |
| 776 | _TINYDIR_FUNC |
| 777 | size_t _tinydir_dirent_buf_size(_TINYDIR_DIR *dirp) |
| 778 | { |
| 779 | long name_max; |
| 780 | size_t name_end; |
| 781 | /* parameter may be unused */ |
| 782 | (void)dirp; |
| 783 | |
| 784 | #if defined _TINYDIR_USE_FPATHCONF |
| 785 | name_max = fpathconf(dirfd(dirp), _PC_NAME_MAX); |
| 786 | if (name_max == -1) |
| 787 | #if defined(NAME_MAX) |
| 788 | name_max = (NAME_MAX > 255) ? NAME_MAX : 255; |
| 789 | #else |
| 790 | return (size_t)(-1); |
| 791 | #endif |
| 792 | #elif defined(NAME_MAX) |
| 793 | name_max = (NAME_MAX > 255) ? NAME_MAX : 255; |
| 794 | #else |
| 795 | #error "buffer size for readdir_r cannot be determined" |
| 796 | #endif |
| 797 | name_end = (size_t)offsetof(struct _tinydir_dirent, d_name) + name_max + 1; |
| 798 | return (name_end > sizeof(struct _tinydir_dirent) ? |
| 799 | name_end : sizeof(struct _tinydir_dirent)); |
| 800 | } |
| 801 | #endif |
| 802 | #endif |
| 803 |