Changeset 963


Ignore:
Timestamp:
Aug 19, 2016, 1:40:37 PM (9 years ago)
Author:
Yuri Dario
Message:

Store full path of connection in the resource data structure.
ticket#274.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/client/src/ndpsmb.c

    r960 r963  
    196196        return rc;
    197197}
     198
     199/* from ndpl2.c sample:
     200 * Helper to concatenate parent path, stored as resource data in
     201 * NdpQueryPathInfo and a file object name returned by NdpQueryPathInfo.
     202 */
     203static void buildfullpath2 (char *szFullPath, NDDATABUF *rsrcData, NDFILEINFO *pfi)
     204{
     205    *szFullPath = '\0';
     206    if (rsrcData->ulSize > 0)
     207    {
     208        memcpy (szFullPath, rsrcData->pData, rsrcData->ulSize);
     209    }
     210    strcat( szFullPath, pfi->pszName);
     211}
     212
    198213
    199214int APIENTRY NdpPluginLoad (PLUGINHELPERTABLE2L *pPHT)
     
    922937        int rc = 0;
    923938        int rcCon = 0;
    924         unsigned long action;
    925939        char path[CCHMAXPATH+1] = {0};
     940        NDPATHELEMENT *pel = NULL;
    926941
    927942        ENTER();
     
    10251040           }
    10261041        } while (0);
     1042
     1043        // if file/path exists, store parent path in resourcedata
     1044        // for NdpEA* calls
     1045        if ((rc == NO_ERROR || rc == ERROR_FILE_NOT_FOUND)
     1046                && (pel = ph->fsphNameElem (0)))
     1047        {
     1048            char szFullPath[CCHMAXPATH+1] = {0};
     1049            // save parent full path for future use in NdpEA* calls
     1050            strcpy(szFullPath, szPath);
     1051            // strip pel name, leaving ending slash in place
     1052            int len = strlen(szFullPath) - pel->length;
     1053            szFullPath[len] = '\0';
     1054            int rc2 = ph->fsphSetResourceData( plist, szFullPath, strlen(szFullPath) + 1);
     1055            debuglocal(pRes, 9, "NdpQueryPathInfo <%s> plist %x, szFullPath (%s), rc2=%d\n",
     1056                       szPath, plist, szFullPath, rc2);
     1057        }
     1058
    10271059        debuglocal(pRes, 9, "NdpQueryPathInfo <%s> (%s) %d\n", szPath, path, rc);
    10281060
     
    12581290        Resource *pRes = pConn->pRes;
    12591291        int rc = 0;
    1260         unsigned long action;
    1261         char * path = NULL;
    12621292        FEALIST * pFEASrc;
    12631293        NDDATABUF fdata = {0};
    1264         smbwrp_fileinfo *finfo;
    12651294        const int cbBuffer = 64*1024;
     1295        NDDATABUF rsrcData = {0};
     1296        char szFullPath[CCHMAXPATH+1];
    12661297
    12671298        if (!pfi || !pfi->pszName || !pFEAList)
     
    12711302           return ERROR_EAS_NOT_SUPPORTED;
    12721303
    1273         rc = ph->fsphGetFileInfoData(pfi, &fdata, 0);
    1274         if (rc || !fdata.ulSize || !fdata.pData)
    1275         {
    1276            debuglocal(pRes, 9, "NdpEAQuery: ph->fsphGetFileInfoData = %d/%d %08x\n", rc, fdata.ulSize, fdata.pData);
     1304        // get full path stored in resource data
     1305        rc = ph->fsphGetResourceData(pfi, &rsrcData, 0);
     1306        if (rc != NO_ERROR || rsrcData.ulSize == 0 || rsrcData.pData == NULL)
     1307        {
     1308           debuglocal(pRes, 9, "NdpEAQuery: ph->fsphGetResourceData = %d/%d %08x\n", rc, fdata.ulSize, fdata.pData);
    12771309           return ERROR_EAS_NOT_SUPPORTED;
    12781310        }
     
    12801312        ENTER();
    12811313
    1282         finfo = (smbwrp_fileinfo *)fdata.pData;
    1283         path = finfo->fname;
     1314        // build full path for file
     1315        buildfullpath2(szFullPath, &rsrcData, pfi);
     1316        debuglocal(pRes, 1, "NdpEAQuery szFullPath '%s', pfi->name '%s'\n",
     1317                   szFullPath, pfi->pszName);
     1318
    12841319        debuglocal(pRes, 9, "NdpEAQuery in [%p] <%s> %08x %d\n", pConn, path, pGEAList, pGEAList ? pGEAList->cbList : 0);
    12851320
     
    12921327
    12931328        do {
    1294            rc = smbwrp_listea(pRes, pConn->cli, path, pchBuffer, cbBuffer);
     1329           rc = smbwrp_listea(pRes, pConn->cli, szFullPath, pchBuffer, cbBuffer);
    12951330           pFEASrc = (FEALIST*) pchBuffer;
    12961331           if (rc)
     
    13261361        Resource *pRes = pConn->pRes;
    13271362        int rc = 0;
    1328         char * path;
    1329         unsigned long action;
    13301363        NDDATABUF fdata = {0};
    1331         smbwrp_fileinfo *finfo;
     1364        NDDATABUF rsrcData = {0};
     1365        char szFullPath[CCHMAXPATH+1];
    13321366
    13331367        debuglocal(pRes, 9, "NdpEASet in [%p]\n", pConn);
     
    13391373           return ERROR_EAS_NOT_SUPPORTED;
    13401374
    1341         rc = ph->fsphGetFileInfoData(pfi, &fdata, 0);
    1342         if (rc || !fdata.ulSize || !fdata.pData)
    1343         {
    1344            debuglocal(pRes, 9, "NdpEASet: ph->fsphGetFileInfoData = %d/%d/%08x\n", rc, fdata.ulSize, fdata.pData);
     1375        // get full path stored in resource data
     1376        rc = ph->fsphGetResourceData(pfi, &rsrcData, 0);
     1377        if (rc != NO_ERROR || rsrcData.ulSize == 0 || rsrcData.pData == NULL)
     1378        {
     1379           debuglocal(pRes, 9, "NdpEASet: ph->fsphGetResourceData = %d/%d %08x\n", rc, fdata.ulSize, fdata.pData);
    13451380           return ERROR_EAS_NOT_SUPPORTED;
    13461381        }
    1347 
    1348         finfo = (smbwrp_fileinfo *)fdata.pData;
    1349         path = finfo->fname;
    1350 
    1351         rc = helperEASet(pRes, pConn->cli, pFEAList, path);
     1382        // build full path for file
     1383        buildfullpath2(szFullPath, &rsrcData, pfi);
     1384        debuglocal(pRes, 9, "NdpEASet szFullPath '%s', pfi->name '%s'\n",
     1385                   szFullPath, pfi->pszName);
     1386
     1387        rc = helperEASet(pRes, pConn->cli, pFEAList, szFullPath);
    13521388        debuglocal(pRes, 9, "NdpEASet %d\n", rc);
    13531389        return rc;
     
    13591395        Resource *pRes = pConn->pRes;
    13601396        int rc = 0;
    1361         unsigned long action;
    1362         char * path = NULL;
    13631397        FEALIST * pfealist;
    13641398        NDDATABUF fdata = {0};
    1365         smbwrp_fileinfo *finfo;
    13661399        const int cbBuffer = 64*1024;
    1367         int easize;
     1400        NDDATABUF rsrcData = {0};
     1401        char szFullPath[CCHMAXPATH+1];
    13681402
    13691403        if (!pfi || !pulEASize)
     
    13731407           return ERROR_EAS_NOT_SUPPORTED;
    13741408
    1375         rc = ph->fsphGetFileInfoData(pfi, &fdata, 0);
    1376         if (rc || !fdata.ulSize || !fdata.pData)
    1377         {
    1378            debuglocal(pRes, 9, "NdpEASize: ph->fsphGetFileInfoData = %d/%d/%08x\n", rc, fdata.ulSize, fdata.pData);
     1409        // get full path stored in resource data
     1410        rc = ph->fsphGetResourceData(pfi, &rsrcData, 0);
     1411        if (rc != NO_ERROR || rsrcData.ulSize == 0 || rsrcData.pData == NULL)
     1412        {
     1413           debuglocal(pRes, 9, "NdpEASize: ph->fsphGetResourceData = %d/%d %08x\n", rc, fdata.ulSize, fdata.pData);
    13791414           return ERROR_EAS_NOT_SUPPORTED;
    13801415        }
     
    13821417        ENTER();
    13831418
    1384         finfo = (smbwrp_fileinfo *)fdata.pData;
    1385         easize = finfo->easize;
    1386         finfo->easize = -1;
    1387         path = finfo->fname;
    1388         if (easize >= 0)
    1389         {
    1390            *pulEASize = easize;
    1391            debuglocal(pRes, 9, "NdpEASize <%s> cached %d\n", path, easize);
    1392            LEAVE();
    1393            return NO_ERROR;
    1394         }
    1395 
    1396         debuglocal(pRes, 9, "NdpEASize in [%p] <%s> \n", pConn, path);
     1419        // build full path for file
     1420        buildfullpath2(szFullPath, &rsrcData, pfi);
     1421        debuglocal(pRes, 1, "NdpEASize szFullPath '%s', pfi->name '%s'\n",
     1422                   szFullPath, pfi->pszName);
     1423
     1424        // @todo restore use of easize from cache
     1425
     1426        debuglocal(pRes, 9, "NdpEASize in [%p] <%s> \n", pConn, szFullPath);
    13971427
    13981428        char *pchBuffer = (char *)malloc(cbBuffer);
     
    14041434
    14051435        do {
    1406            rc = smbwrp_listea(pRes, pConn->cli, path, pchBuffer, cbBuffer);
     1436           rc = smbwrp_listea(pRes, pConn->cli, szFullPath, pchBuffer, cbBuffer);
    14071437           pfealist = (FEALIST*)pchBuffer;
    14081438           if (rc)
Note: See TracChangeset for help on using the changeset viewer.