Ticket #52: ndpsmb.2.diff

File ndpsmb.2.diff, 12.7 kB (added by komh, 10 months ago)

Apply 'retry' fix to all other functions

  • ndpsmb.c

     
    11771177        char fullname[CCHMAXPATH+1] = {0}; 
    11781178        smbwrp_fileinfo * data; 
    11791179        NDPATHELEMENT *pel = ph->fsphNameElem(0); 
     1180    int retry = 0; 
    11801181 
    1181         log("NdpFindStart in\n"); 
    11821182        do 
    11831183        { 
     1184    log("NdpFindStart in, retry = %d\n", retry); 
     1185    do 
     1186    { 
    11841187                rc = checkconnection(pConn); 
    11851188                if (rc) 
    11861189                { 
     
    12641267        } while (0); 
    12651268 
    12661269        log("NdpFindStart <%s> (%s) cnt %d %d %d\n", szPath, path, count, rc, pConn->rc); 
     1270 
     1271    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1272} while( retry ); 
     1273 
    12671274        return rc; 
    12681275} 
    12691276 
     
    13721379                        } 
    13731380                } while (0); 
    13741381                log("NdpQueryInfo <%s> (%s) %d %d\n", szPath, path, rc, pConn->rc); 
    1375                 retry = rc && !retry; 
     1382        retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
    13761383        } while (retry); 
    13771384         
    13781385        return rc; 
     
    14121419        smb_response resp = {0}; 
    14131420        smbwrp_fileinfo * finfo = (smbwrp_fileinfo *)pConn->mem; 
    14141421        char path[CCHMAXPATH+1] = {0}; 
     1422    int retry = 0; 
    14151423 
    1416         log("NdpSetPathInfo in\n"); 
     1424do 
     1425{ 
     1426    log("NdpSetPathInfo in, retry = %d\n", retry); 
    14171427        do { 
    14181428                rc = checkconnection(pConn); 
    14191429                if (rc) 
     
    14511461                } 
    14521462        } while (0); 
    14531463        log("NdpSetPathInfo <%s> (%s) %d %d\n", szPathName, path, rc, pConn->rc); 
     1464 
     1465    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1466} while( retry ); 
     1467 
    14541468        return rc; 
    14551469} 
    14561470 
     
    15251539        FEALIST * pFEASrc; 
    15261540        NDDATABUF fdata = {0}; 
    15271541        smbwrp_fileinfo *finfo; 
     1542    int retry = 0; 
    15281543 
    15291544        if (!pfi || !pfi->pszName || !pFEAList) 
    15301545        { 
     
    15441559        finfo = (smbwrp_fileinfo *)fdata.pData; 
    15451560        path = finfo->fname; 
    15461561 
    1547         log("NdpEAQuery in <%s> %08x %d\n", path, pGEAList, pGEAList ? pGEAList->cbList : 0); 
     1562do 
     1563{ 
     1564    log("NdpEAQuery in <%s> %08x %d, retry = %d\n", path, pGEAList, pGEAList ? pGEAList->cbList : 0, retry); 
    15481565        do { 
    15491566                rc = checkconnection(pConn); 
    15501567                if (rc) 
     
    15761593                                } break; 
    15771594                                default : 
    15781595                                { 
     1596                    if( rc != ERROR_INVALID_PARAMETER || retry ) 
    15791597                                        rc = ERROR_EAS_NOT_SUPPORTED; 
    15801598                                } 
    15811599                        } 
     
    15861604                } 
    15871605        } while (0); 
    15881606        log("NdpEAQuery <%s> %d %d %d %d %d\n", pfi->pszName, rc, pFEASrc->cbList, pFEAList->cbList, pConn->rc, resp.rc); 
     1607 
     1608    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1609} while( retry ); 
     1610 
    15891611        return rc; 
    15901612} 
    15911613 
     
    16001622        unsigned long action; 
    16011623        NDDATABUF fdata = {0}; 
    16021624        smbwrp_fileinfo *finfo; 
     1625    int retry = 0; 
    16031626 
    1604         log("NdpEASet in\n"); 
    1605  
    16061627        if (!pfi || !pfi->pszName || !pFEAList || pFEAList->cbList <= sizeof(long)) 
    16071628        { 
    16081629                return ERROR_EAS_NOT_SUPPORTED; 
     
    16261647        finfo = (smbwrp_fileinfo *)fdata.pData; 
    16271648        path = finfo->fname; 
    16281649 
     1650do 
     1651{ 
     1652    log("NdpEASet in, retry = %d\n", retry); 
     1653 
    16291654        do { 
    16301655                rc = checkconnection(pConn); 
    16311656                if (rc) 
     
    16451670                        rc = pConn->rc ? pConn->rc : (resp.rc ? resp.rc : ERROR_INVALID_PARAMETER); 
    16461671                } 
    16471672        } while (0); 
     1673 
     1674    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1675} while( retry ); 
     1676 
    16481677        log("NdpEASet %d\n", rc); 
    16491678        return rc; 
    16501679} 
     
    16621691        NDDATABUF fdata = {0}; 
    16631692        smbwrp_fileinfo *finfo; 
    16641693        int easize; 
     1694    int retry = 0; 
    16651695 
    16661696        if (!pfi || !pulEASize) 
    16671697        { 
     
    16891719                return NO_ERROR; 
    16901720        } 
    16911721 
    1692         log("NdpEASize in <%s> \n", path); 
     1722do 
     1723{ 
     1724    log("NdpEASize in <%s>, retry = %d \n", path, retry); 
    16931725        do { 
    16941726                rc = checkconnection(pConn); 
    16951727                if (rc) 
     
    17201752                                } break; 
    17211753                                default : 
    17221754                                { 
     1755                    if( rc != ERROR_INVALID_PARAMETER || retry ) 
    17231756                                        rc = ERROR_EAS_NOT_SUPPORTED; 
    17241757                                } 
    17251758                        } 
     
    17271760                *pulEASize = pfealist->cbList; 
    17281761        } while (0); 
    17291762        log("NdpEASize <%s> %d %d %d %d\n", pfi->pszName, *pulEASize, rc, pConn->rc, resp.rc); 
     1763 
     1764    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1765} while( retry ); 
     1766 
    17301767        return rc; 
    17311768} 
    17321769 
     
    17391776        int rc = 0; 
    17401777        unsigned long action; 
    17411778        char path[CCHMAXPATH+1] = {0}; 
     1779    int retry = 0; 
    17421780         
    1743         log("NdpSetCurrentDir in\n"); 
     1781do 
     1782{ 
     1783    log("NdpSetCurrentDir in, retry = %d\n", retry); 
    17441784        do { 
    17451785                rc = checkconnection(pConn); 
    17461786                if (rc) 
     
    17661806                } 
    17671807        } while (0); 
    17681808        log("NdpSetCurrentDir <%s> (%s) %d %d\n", szPath, path, rc, pConn->rc); 
     1809 
     1810    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1811} while( retry ); 
     1812 
    17691813        return rc; 
    17701814} 
    17711815 
     
    17901834        int rc = 0; 
    17911835        unsigned long action; 
    17921836        char path[CCHMAXPATH+1] = {0}; 
     1837    int retry = 0; 
    17931838 
    1794         log("NdpForceDelete in\n"); 
     1839do 
     1840{ 
     1841    log("NdpForceDelete in, retry = %d\n", retry); 
    17951842        do { 
    17961843                rc = checkconnection(pConn); 
    17971844                if (rc) 
     
    18171864                } 
    18181865        } while (0); 
    18191866        log("NdpForceDelete <%s> (%s) %d %d\n", szFile, path, rc, pConn->rc); 
     1867 
     1868    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1869} while( retry ); 
     1870 
    18201871        return rc; 
    18211872} 
    18221873 
     
    18291880        int rc = 0; 
    18301881        unsigned long action; 
    18311882        char path[CCHMAXPATH+1] = {0}; 
     1883    int retry = 0; 
    18321884 
    1833         log("NdpCreateDir in\n"); 
     1885do 
     1886{ 
     1887    log("NdpCreateDir in, retry = %d\n", retry); 
    18341888        do { 
    18351889                rc = checkconnection(pConn); 
    18361890                if (rc) 
     
    18561910                } 
    18571911        } while (0); 
    18581912        log("NdpCreateDir <%s> (%s) %d %d\n", szDirName, path, rc, pConn->rc); 
     1913 
     1914    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1915} while( retry ); 
     1916 
    18591917        return rc; 
    18601918} 
    18611919 
     
    18681926        int rc = 0; 
    18691927        unsigned long action; 
    18701928        char path[CCHMAXPATH+1] = {0}; 
     1929    int retry = 0; 
    18711930 
    1872         log("NdpDeleteDir in\n"); 
     1931do 
     1932{ 
     1933    log("NdpDeleteDir in, retry = %d\n", retry); 
    18731934        do { 
    18741935                rc = checkconnection(pConn); 
    18751936                if (rc) 
     
    18951956                } 
    18961957        } while (0); 
    18971958        log("NdpDeleteDir <%s> (%s) %d %d\n", szDir, path, rc, pConn->rc); 
     1959 
     1960    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     1961} while( retry ); 
     1962 
    18981963        return rc; 
    18991964} 
    19001965 
     
    19091974        char src[CCHMAXPATH+1] = {0}; 
    19101975        int l1, l2; 
    19111976        char * p = szDst; 
     1977    int retry = 0; 
    19121978 
    1913         log("NdpMove in\n"); 
    19141979        do 
    19151980        { 
     1981    log("NdpMove in, retry = %d\n", retry); 
     1982    do 
     1983    { 
    19161984                rc = checkconnection(pConn); 
    19171985                if (rc) 
    19181986                { 
     
    19512019        } while (0); 
    19522020        log("NdpMove <%s> -> <%s> (%s) %d %d\n", szSrc, szDst, src, rc, pConn->rc); 
    19532021 
     2022    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2023} while( retry ); 
     2024 
    19542025        return rc; 
    19552026} 
    19562027 
     
    19792050        unsigned long action; 
    19802051        int rc = 0; 
    19812052        char path[CCHMAXPATH+1] = {0}; 
     2053    int retry = 0; 
    19822054 
    1983         log("smbopen in %d\n", pConn->file.fd); 
     2055do 
     2056{ 
     2057    log("smbopen in %d, retry = %d\n", pConn->file.fd, retry); 
    19842058        do { 
    19852059                if (pConn->file.fd > 0) 
    19862060                { 
     
    20352109                log("smbopen NdpFileEASet %d. pFEAList->cbList %d\n", rc1, pFEAList->cbList); 
    20362110        } 
    20372111 
     2112    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2113} while( retry ); 
     2114 
    20382115        return rc; 
    20392116} 
    20402117 
     
    20752152        smb_response resp = {0}; 
    20762153        smbwrp_fileinfo * finfo = (smbwrp_fileinfo *)pConn->mem; 
    20772154        char path[CCHMAXPATH+1] = {0}; 
     2155    int retry = 0; 
    20782156 
    2079         log("NdpSetFileAttribute in\n"); 
     2157do 
     2158{ 
     2159    log("NdpSetFileAttribute in, retry = %d\n", retry); 
    20802160        do { 
    20812161                rc = checkconnection(pConn); 
    20822162                if (rc) 
     
    21052185                } 
    21062186        } while (0); 
    21072187        log("NdpSetFileAttribute <%s> (%s) %04x %d %d\n", szFileName, path, usAttr, rc, pConn->rc); 
     2188 
     2189    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2190} while( retry ); 
     2191 
    21082192        return rc; 
    21092193} 
    21102194 
     
    21382222        smb_response resp = {0}; 
    21392223        FILEFINDBUF3 buf; 
    21402224        smbwrp_fileinfo * finfo = (smbwrp_fileinfo *)(pConn->mem + sizeof(pConn->file)); 
     2225    int retry = 0; 
    21412226 
    2142         log("NdpFileQueryInfo in\n"); 
     2227do 
     2228{ 
     2229    log("NdpFileQueryInfo in, retry = %d\n", retry); 
    21432230        do { 
    21442231                if (pConn->file.fd < 0 || !*pConn->file.fname) 
    21452232                { 
     
    21792266        } while (0); 
    21802267        log("NdpFileQueryInfo <%s> %d %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, rc, pConn->rc); 
    21812268 
     2269    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2270} while( retry ); 
     2271 
    21822272        return rc; 
    21832273} 
    21842274 
     
    21912281        smb_request req = {0}; 
    21922282        smb_response resp = {0}; 
    21932283        FEALIST * pFEASrc; 
     2284    int retry = 0; 
    21942285 
    21952286        if (!pFEAList) 
    21962287        { 
     
    22012292                return ERROR_EAS_NOT_SUPPORTED; 
    22022293        } 
    22032294 
    2204         log("NdpFileEAQuery in <%s>/%d pGEAList=%08x\n", pConn->file.fname, pConn->file.fd, pGEAList); 
     2295do 
     2296{ 
     2297    log("NdpFileEAQuery in <%s>/%d pGEAList=%08x, retry = %d\n", pConn->file.fname, pConn->file.fd, pGEAList, retry); 
    22052298        do { 
    22062299                if (pConn->file.fd < 0) 
    22072300                { 
     
    22382331                                } break; 
    22392332                                default : 
    22402333                                { 
     2334                    if( rc != ERROR_INVALID_PARAMETER || retry ) 
    22412335                                        rc = ERROR_EAS_NOT_SUPPORTED; 
    22422336                                } 
    22432337                        } 
     
    22482342                } 
    22492343        } while (0); 
    22502344        log("NdpFileEAQuery out <%s>/%d pFEASrc->cbList=%d pFEAList->cbList=%d rc=%d %d %d\n", pConn->file.fname, pConn->file.fd, pFEASrc->cbList, pFEAList->cbList, rc, pConn->rc, resp.rc); 
     2345 
     2346    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2347} while( retry ); 
     2348 
    22512349        return rc; 
    22522350} 
    22532351 
     
    22592357        smb_request req = {0}; 
    22602358        smb_response resp = {0}; 
    22612359        unsigned long action; 
     2360    int retry = 0; 
    22622361 
    2263         log("NdpFileEASet in\n"); 
    2264  
    22652362        if (!pFEAList || pFEAList->cbList <= sizeof(long)) 
    22662363        { 
    22672364                return ERROR_EAS_NOT_SUPPORTED; 
     
    22752372                return ERROR_NOT_ENOUGH_MEMORY; 
    22762373        } 
    22772374 
     2375do 
     2376{ 
     2377    log("NdpFileEASet in, retry = %d\n", retry); 
     2378 
    22782379        do { 
    22792380                if (pConn->file.fd < 0) 
    22802381                { 
     
    23012402                } 
    23022403        } while (0); 
    23032404        log("NdpFileEASet %d\n", rc); 
     2405 
     2406    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2407} while( retry ); 
     2408 
    23042409        return rc; 
    23052410} 
    23062411 
     
    23142419        smb_response resp = {0}; 
    23152420        char path[CCHMAXPATH+1] = {0}; 
    23162421        FEALIST * pfealist; 
     2422    int retry = 0; 
    23172423 
    23182424        if (!pulEASize) 
    23192425        { 
     
    23242430                return ERROR_EAS_NOT_SUPPORTED; 
    23252431        } 
    23262432 
    2327         log("NdpFileEASize in <%s>/%d \n", pConn->file.fname, pConn->file.fd); 
     2433do 
     2434{ 
     2435    log("NdpFileEASize in <%s>/%d, retry = %d\n", pConn->file.fname, pConn->file.fd, retry); 
    23282436        do { 
    23292437                if (pConn->file.fd < 0) 
    23302438                { 
     
    23602468                                } break; 
    23612469                                default : 
    23622470                                { 
     2471                    if( rc != ERROR_INVALID_PARAMETER || retry ) 
    23632472                                        rc = ERROR_EAS_NOT_SUPPORTED; 
    23642473                                } 
    23652474                        } 
     
    23672476                *pulEASize = pfealist->cbList; 
    23682477        } while (0); 
    23692478        log("NdpFileEASize %d %d %d %d\n", *pulEASize, rc, pConn->rc, resp.rc); 
     2479 
     2480    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2481} while( retry ); 
     2482 
    23702483        return rc; 
    23712484} 
    23722485 
     
    24172530        unsigned long action; 
    24182531        smb_request req = {0}; 
    24192532        smb_response resp = {0}; 
     2533    int retry = 0; 
    24202534 
    2421         log("NdpFileSetFilePtrl in\n"); 
     2535do 
     2536{ 
     2537    log("NdpFileSetFilePtrl in, retry = %d\n", retry); 
    24222538        do { 
    24232539                if (pConn->file.fd < 0) 
    24242540                { 
     
    24512567        } while (0); 
    24522568        log("NdpFileSetFilePtrL <%s> %lld %lu %lld %d %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, llOffset, ulMethod, *pllActual, rc, pConn->rc); 
    24532569 
     2570    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2571} while( retry ); 
     2572 
    24542573        return rc; 
    24552574} 
    24562575 
     
    24712590        unsigned long action; 
    24722591        smb_request req = {0}; 
    24732592        smb_response resp = {0}; 
     2593    int retry = 0; 
    24742594 
    2475         log("NdpFileClose in %d <%s>\n", pConn->file.fd, pConn->file.fd < 0 ? "!null!" : pConn->file.fname); 
     2595do 
     2596{ 
     2597    log("NdpFileClose in %d <%s>, retry = %d\n", pConn->file.fd, pConn->file.fd < 0 ? "!null!" : pConn->file.fname, retry); 
    24762598 
    24772599        do { 
    24782600                if (pConn->file.fd < 0) 
     
    25032625                } 
    25042626        } while (0); 
    25052627        log("NdpFileClose %d %d %d\n", pConn->file.fd, rc, pConn->rc); 
     2628 
     2629    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2630} while( retry ); 
     2631 
    25062632        pConn->file.fd = -1; 
    25072633        return rc; 
    25082634} 
     
    25292655        unsigned long action; 
    25302656        smb_request req = {0}; 
    25312657        smb_response resp = {0}; 
     2658    int retry = 0; 
    25322659 
    2533         log("NdpFileNewSizeL in\n"); 
     2660do 
     2661{ 
     2662    log("NdpFileNewSizeL in, retry = %d\n", retry); 
    25342663        do { 
    25352664                if (pConn->file.fd < 0) 
    25362665                { 
     
    25622691                } 
    25632692        } while (0); 
    25642693        log("NdpFileNewSizeL <%s> %lld %d %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, llLen, rc, pConn->rc); 
     2694 
     2695    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2696} while( retry ); 
     2697 
    25652698        return rc; 
    25662699} 
    25672700 
     
    25752708        unsigned long action; 
    25762709        smb_request req = {0}; 
    25772710        smb_response resp = {0}; 
     2711    int retry = 0; 
    25782712 
    2579         log("NdpFileRead in\n"); 
     2713do 
     2714{ 
     2715    log("NdpFileRead in, retry = %d\n", retry); 
    25802716//      log("NdpFileRead <%s> %lu\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, ulRead); 
    25812717 
    25822718        do { 
     
    26192755        } while (0); 
    26202756        log("NdpFileRead <%s> %lu %lu %d %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, ulRead, *pulActual, rc, pConn->rc); 
    26212757 
     2758    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2759} while( retry ); 
     2760 
    26222761        return rc; 
    26232762} 
    26242763 
     
    26322771        unsigned long action; 
    26332772        smb_request req = {0}; 
    26342773        smb_response resp = {0}; 
     2774    int retry = 0; 
    26352775 
    2636         log("NdpFileWrite in\n"); 
     2776do 
     2777{ 
     2778    log("NdpFileWrite in, retry = %d\n", retry); 
    26372779        do { 
    26382780                if (pConn->file.fd < 0) 
    26392781                { 
     
    26742816        } while (0); 
    26752817        log("NdpFileWrite <%s> %lu %lu %d %d\n", pConn->file.fd < 0 ? "!null!" : pConn->file.fname, ulWrite, *pulActual, rc, pConn->rc); 
    26762818 
     2819    retry = ( rc == ERROR_INVALID_PARAMETER ) && !retry; 
     2820} while( retry ); 
     2821 
    26772822        return rc; 
    26782823}