… | |
… | |
548 | The flags are a combination of the following constants, ORed together (the |
548 | The flags are a combination of the following constants, ORed together (the |
549 | flags will also be passed to the callback, possibly modified): |
549 | flags will also be passed to the callback, possibly modified): |
550 | |
550 | |
551 | =over 4 |
551 | =over 4 |
552 | |
552 | |
553 | =item AIO::READDIR_DENTS |
553 | =item IO::AIO::READDIR_DENTS |
554 | |
554 | |
555 | When this flag is off, then the callback gets an arrayref with of names |
555 | When this flag is off, then the callback gets an arrayref with of names |
556 | only (as with C<aio_readdir>), otherwise it gets an arrayref with |
556 | only (as with C<aio_readdir>), otherwise it gets an arrayref with |
557 | C<[$name, $inode, $type]> arrayrefs, each describing a single directory |
557 | C<[$name, $type, $inode]> arrayrefs, each describing a single directory |
558 | entry in more detail. |
558 | entry in more detail. |
559 | |
559 | |
560 | C<$name> is the name of the entry. |
560 | C<$name> is the name of the entry. |
|
|
561 | |
|
|
562 | C<$type> is one of the C<IO::AIO::DT_xxx> constants: |
|
|
563 | |
|
|
564 | C<IO::AIO::DT_UNKNOWN>, C<IO::AIO::DT_FIFO>, C<IO::AIO::DT_CHR>, C<IO::AIO::DT_DIR>, |
|
|
565 | C<IO::AIO::DT_BLK>, C<IO::AIO::DT_REG>, C<IO::AIO::DT_LNK>, C<IO::AIO::DT_SOCK>, |
|
|
566 | C<IO::AIO::DT_WHT>. |
|
|
567 | |
|
|
568 | C<IO::AIO::DT_UNKNOWN> means just that: readdir does not know. If you need to |
|
|
569 | know, you have to run stat yourself. Also, for speed reasons, the C<$type> |
|
|
570 | scalars are read-only: you can not modify them. |
561 | |
571 | |
562 | C<$inode> is the inode number (which might not be exact on systems with 64 |
572 | C<$inode> is the inode number (which might not be exact on systems with 64 |
563 | bit inode numbers and 32 bit perls). On systems that do not deliver the |
573 | bit inode numbers and 32 bit perls). On systems that do not deliver the |
564 | inode information, this will always be zero. |
574 | inode information, this will always be zero. |
565 | |
575 | |
566 | C<$type> is one of the C<AIO::DT_xxx> constants: |
|
|
567 | |
|
|
568 | C<AIO::DT_UNKNOWN>, C<AIO::DT_FIFO>, C<AIO::DT_CHR>, C<AIO::DT_DIR>, |
|
|
569 | C<AIO::DT_BLK>, C<AIO::DT_REG>, C<AIO::DT_LNK>, C<AIO::DT_SOCK>, |
|
|
570 | C<AIO::DT_WHT>. |
|
|
571 | |
|
|
572 | C<AIO::DT_UNKNOWN> means just that: readdir does not know. If you need to |
|
|
573 | know, you have to run stat yourself. Also, for speed reasons, the C<$type> |
|
|
574 | scalars are read-only: you can not modify them. |
|
|
575 | |
|
|
576 | =item AIO::READDIR_DIRS_FIRST |
576 | =item IO::AIO::READDIR_DIRS_FIRST |
577 | |
577 | |
578 | When this flag is set, then the names will be returned in an order where |
578 | When this flag is set, then the names will be returned in an order where |
579 | likely directories come first. This is useful when you need to quickly |
579 | likely directories come first. This is useful when you need to quickly |
580 | find directories, or you want to find all directories while avoiding to |
580 | find directories, or you want to find all directories while avoiding to |
581 | stat() each entry. |
581 | stat() each entry. |
… | |
… | |
583 | If the system returns type information in readdir, then this is used |
583 | If the system returns type information in readdir, then this is used |
584 | to find directories directly. Otherwise, likely directories are files |
584 | to find directories directly. Otherwise, likely directories are files |
585 | beginning with ".", or otherwise files with no dots, of which files with |
585 | beginning with ".", or otherwise files with no dots, of which files with |
586 | short names are tried first. |
586 | short names are tried first. |
587 | |
587 | |
588 | =item AIO::READDIR_STAT_ORDER |
588 | =item IO::AIO::READDIR_STAT_ORDER |
589 | |
589 | |
590 | When this flag is set, then the names will be returned in an order |
590 | When this flag is set, then the names will be returned in an order |
591 | suitable for stat()'ing each one. That is, when you plan to stat() |
591 | suitable for stat()'ing each one. That is, when you plan to stat() |
592 | all files in the given directory, then the returned order will likely |
592 | all files in the given directory, then the returned order will likely |
593 | be fastest. |
593 | be fastest. |
594 | |
594 | |
595 | If both this flag and IO::READDIR_DIRS_FIRST are specified, then the |
595 | If both this flag and C<IO::AIO::READDIR_DIRS_FIRST> are specified, then |
596 | likely dirs come first, resulting in a less optimal stat order. |
596 | the likely dirs come first, resulting in a less optimal stat order. |
597 | |
597 | |
598 | =item AIO::READDIR_FOUND_UNKNOWN |
598 | =item IO::AIO::READDIR_FOUND_UNKNOWN |
599 | |
599 | |
600 | This flag should not be set when calling C<aio_readdirx>. Instead, it |
600 | This flag should not be set when calling C<aio_readdirx>. Instead, it |
601 | is being set by C<aio_readdirx>, when any of the C<$type>'s found were |
601 | is being set by C<aio_readdirx>, when any of the C<$type>'s found were |
602 | C<AIO::DT_UNKNOWN>. The absense of this flag therefore indicates that all |
602 | C<IO::AIO::DT_UNKNOWN>. The absense of this flag therefore indicates that all |
603 | C<$type>'s are known, which can be used to speed up some algorithms. |
603 | C<$type>'s are known, which can be used to speed up some algorithms. |
604 | |
604 | |
605 | =back |
605 | =back |
606 | |
606 | |
607 | |
607 | |
… | |
… | |
840 | # take the slow route if anything looks fishy |
840 | # take the slow route if anything looks fishy |
841 | if ($hash1 ne $hash2 or (stat _)[9] == $now) { |
841 | if ($hash1 ne $hash2 or (stat _)[9] == $now) { |
842 | $ndirs = -1; |
842 | $ndirs = -1; |
843 | } else { |
843 | } else { |
844 | # if nlink == 2, we are finished |
844 | # if nlink == 2, we are finished |
845 | # on non-posix-fs's, we rely on nlink < 2 |
845 | # for non-posix-fs's, we rely on nlink < 2 |
846 | $ndirs = (stat _)[3] - 2 |
846 | $ndirs = (stat _)[3] - 2 |
847 | or return $grp->result ([], $entries); |
847 | or return $grp->result ([], $entries); |
848 | } |
848 | } |
849 | |
849 | |
850 | my (@dirs, @nondirs); |
850 | my (@dirs, @nondirs); |
… | |
… | |
854 | }; |
854 | }; |
855 | |
855 | |
856 | limit $statgrp $maxreq; |
856 | limit $statgrp $maxreq; |
857 | feed $statgrp sub { |
857 | feed $statgrp sub { |
858 | return unless @$entries; |
858 | return unless @$entries; |
859 | my $entry = pop @$entries; |
859 | my $entry = shift @$entries; |
860 | |
860 | |
861 | aioreq_pri $pri; |
861 | aioreq_pri $pri; |
862 | add $statgrp aio_stat "$path/$entry/.", sub { |
862 | add $statgrp aio_stat "$path/$entry/.", sub { |
863 | if ($_[0] < 0) { |
863 | if ($_[0] < 0) { |
864 | push @nondirs, $entry; |
864 | push @nondirs, $entry; |