… | |
… | |
1651 | if (!(flags & EIO_READDIR_DENTS)) |
1651 | if (!(flags & EIO_READDIR_DENTS)) |
1652 | flags &= ~(EIO_READDIR_DIRS_FIRST | EIO_READDIR_STAT_ORDER); |
1652 | flags &= ~(EIO_READDIR_DIRS_FIRST | EIO_READDIR_STAT_ORDER); |
1653 | |
1653 | |
1654 | #ifdef _WIN32 |
1654 | #ifdef _WIN32 |
1655 | { |
1655 | { |
|
|
1656 | int len = strlen ((const char *)req->ptr1); |
1656 | char *path = malloc (MAX_PATH); |
1657 | char *path = malloc (MAX_PATH); |
|
|
1658 | const char *fmt; |
|
|
1659 | |
|
|
1660 | if (!len) |
|
|
1661 | fmt = "./*"; |
|
|
1662 | else if (((const char *)req->ptr1)[len - 1] == '/' || ((const char *)req->ptr1)[len - 1] == '\\') |
|
|
1663 | fmt = "%s*"; |
|
|
1664 | else |
|
|
1665 | fmt = "%s/*"; |
|
|
1666 | |
1657 | _snprintf (path, MAX_PATH, "%s/*", (const char *)req->ptr1); |
1667 | _snprintf (path, MAX_PATH, fmt, (const char *)req->ptr1); |
1658 | dirp = FindFirstFile (path, &entp); |
1668 | dirp = FindFirstFile (path, &entp); |
1659 | free (path); |
1669 | free (path); |
1660 | |
1670 | |
1661 | if (!dirp) |
1671 | if (dirp == INVALID_HANDLE_VALUE) |
1662 | { |
1672 | { |
|
|
1673 | dirp = 0; |
|
|
1674 | |
1663 | switch (GetLastError ()) |
1675 | switch (GetLastError ()) |
1664 | { |
1676 | { |
1665 | case ERROR_FILE_NOT_FOUND: |
1677 | case ERROR_FILE_NOT_FOUND: |
1666 | req->result = 0; |
1678 | req->result = 0; |
1667 | break; |
1679 | break; |
1668 | |
1680 | |
|
|
1681 | case ERROR_INVALID_NAME: |
1669 | case ERROR_PATH_NOT_FOUND: |
1682 | case ERROR_PATH_NOT_FOUND: |
1670 | case ERROR_NO_MORE_FILES: |
1683 | case ERROR_NO_MORE_FILES: |
1671 | errno = ENOENT; |
1684 | errno = ENOENT; |
1672 | break; |
1685 | break; |
1673 | |
1686 | |
… | |
… | |
1677 | |
1690 | |
1678 | default: |
1691 | default: |
1679 | errno = EINVAL; |
1692 | errno = EINVAL; |
1680 | break; |
1693 | break; |
1681 | } |
1694 | } |
1682 | |
|
|
1683 | } |
1695 | } |
1684 | } |
1696 | } |
1685 | #else |
1697 | #else |
1686 | dirp = opendir (req->ptr1); |
1698 | dirp = opendir (req->ptr1); |
1687 | #endif |
1699 | #endif |
1688 | |
1700 | |
… | |
… | |
1694 | req->ptr2 = names = malloc (namesalloc); |
1706 | req->ptr2 = names = malloc (namesalloc); |
1695 | |
1707 | |
1696 | if (dirp && names && (!flags || dents)) |
1708 | if (dirp && names && (!flags || dents)) |
1697 | for (;;) |
1709 | for (;;) |
1698 | { |
1710 | { |
1699 | int more; |
1711 | int done; |
1700 | |
1712 | |
1701 | #ifdef _WIN32 |
1713 | #ifdef _WIN32 |
1702 | more = dirp; |
1714 | done = !dirp; |
1703 | #else |
1715 | #else |
1704 | errno = 0; |
1716 | errno = 0; |
1705 | entp = readdir (dirp); |
1717 | entp = readdir (dirp); |
1706 | more = entp; |
1718 | done = !entp; |
1707 | #endif |
1719 | #endif |
1708 | |
1720 | |
1709 | if (!more) |
1721 | if (done) |
1710 | { |
1722 | { |
1711 | #ifndef _WIN32 |
1723 | #ifndef _WIN32 |
1712 | int old_errno = errno; |
1724 | int old_errno = errno; |
1713 | closedir (dirp); |
1725 | closedir (dirp); |
1714 | errno = old_errno; |
1726 | errno = old_errno; |