ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libeio/eio.c
(Generate patch)

Comparing libeio/eio.c (file contents):
Revision 1.91 by root, Sun Jul 17 04:20:04 2011 UTC vs.
Revision 1.92 by root, Sun Jul 17 18:27:17 2011 UTC

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;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines