Ticket #3803: filezilla-03-dirent-to-stat.diff

File filezilla-03-dirent-to-stat.diff, 1.6 KB (added by Alfred Peng, 16 years ago)

The patch to fix the second error--updated

  • filezilla-3.1.3/src/engine/local_filesys.cpp

    old new  
    363363
    364364    const wxCharBuffer p = path.fn_str();
    365365    const int len = strlen(p);
    366     m_raw_path = new char[len + NAME_MAX + 2];
     366    m_raw_path = new char[len + _POSIX_NAME_MAX + 2];
    367367    strcpy(m_raw_path, p);
    368368    if (len > 1)
    369369    {
     
    427427        return false;
    428428
    429429    struct dirent* entry;
     430    struct stat statbuf;
    430431    while ((entry = readdir(m_dir)))
    431432    {
    432433        if (!entry->d_name[0] ||
     
    436437
    437438        if (m_dirs_only)
    438439        {
    439             if (entry->d_type == DT_LNK)
     440            if (stat(entry->d_name, &statbuf) == -1)
     441                continue;
     442            if (S_ISLNK(statbuf.st_mode))
    440443            {
    441444                bool wasLink;
    442445                strcpy(m_file_part, entry->d_name);
    443446                if (GetFileInfo(m_raw_path, wasLink, 0, 0, 0) != dir)
    444447                    continue;
    445448            }
    446             else if (entry->d_type != DT_DIR)
     449            else if (!S_ISDIR(statbuf.st_mode))
    447450                continue;
    448451        }
    449452
     
    505508        return false;
    506509
    507510    struct dirent* entry;
     511    struct stat statbuf;
    508512    while ((entry = readdir(m_dir)))
    509513    {
    510514        if (!entry->d_name[0] ||
     
    514518
    515519        if (m_dirs_only)
    516520        {
    517             if (entry->d_type == DT_LNK)
     521            if (stat(entry->d_name, &statbuf) == -1)
     522                continue;
     523            if (S_ISLNK(statbuf.st_mode))
    518524            {
    519525                strcpy(m_file_part, entry->d_name);
    520526                enum local_fileType type = GetFileInfo(m_raw_path, isLink, size, modificationTime, mode);
     
    525531                is_dir = type == dir;
    526532                return true;
    527533            }
    528             else if (entry->d_type != DT_DIR)
     534            else if (!S_ISDIR(statbuf.st_mode))
    529535                continue;
    530536        }
    531537