Changeset 963
- Timestamp:
- Aug 19, 2016, 1:40:37 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/client/src/ndpsmb.c
r960 r963 196 196 return rc; 197 197 } 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 */ 203 static 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 198 213 199 214 int APIENTRY NdpPluginLoad (PLUGINHELPERTABLE2L *pPHT) … … 922 937 int rc = 0; 923 938 int rcCon = 0; 924 unsigned long action;925 939 char path[CCHMAXPATH+1] = {0}; 940 NDPATHELEMENT *pel = NULL; 926 941 927 942 ENTER(); … … 1025 1040 } 1026 1041 } 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 1027 1059 debuglocal(pRes, 9, "NdpQueryPathInfo <%s> (%s) %d\n", szPath, path, rc); 1028 1060 … … 1258 1290 Resource *pRes = pConn->pRes; 1259 1291 int rc = 0; 1260 unsigned long action;1261 char * path = NULL;1262 1292 FEALIST * pFEASrc; 1263 1293 NDDATABUF fdata = {0}; 1264 smbwrp_fileinfo *finfo;1265 1294 const int cbBuffer = 64*1024; 1295 NDDATABUF rsrcData = {0}; 1296 char szFullPath[CCHMAXPATH+1]; 1266 1297 1267 1298 if (!pfi || !pfi->pszName || !pFEAList) … … 1271 1302 return ERROR_EAS_NOT_SUPPORTED; 1272 1303 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); 1277 1309 return ERROR_EAS_NOT_SUPPORTED; 1278 1310 } … … 1280 1312 ENTER(); 1281 1313 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 1284 1319 debuglocal(pRes, 9, "NdpEAQuery in [%p] <%s> %08x %d\n", pConn, path, pGEAList, pGEAList ? pGEAList->cbList : 0); 1285 1320 … … 1292 1327 1293 1328 do { 1294 rc = smbwrp_listea(pRes, pConn->cli, path, pchBuffer, cbBuffer);1329 rc = smbwrp_listea(pRes, pConn->cli, szFullPath, pchBuffer, cbBuffer); 1295 1330 pFEASrc = (FEALIST*) pchBuffer; 1296 1331 if (rc) … … 1326 1361 Resource *pRes = pConn->pRes; 1327 1362 int rc = 0; 1328 char * path;1329 unsigned long action;1330 1363 NDDATABUF fdata = {0}; 1331 smbwrp_fileinfo *finfo; 1364 NDDATABUF rsrcData = {0}; 1365 char szFullPath[CCHMAXPATH+1]; 1332 1366 1333 1367 debuglocal(pRes, 9, "NdpEASet in [%p]\n", pConn); … … 1339 1373 return ERROR_EAS_NOT_SUPPORTED; 1340 1374 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); 1345 1380 return ERROR_EAS_NOT_SUPPORTED; 1346 1381 } 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); 1352 1388 debuglocal(pRes, 9, "NdpEASet %d\n", rc); 1353 1389 return rc; … … 1359 1395 Resource *pRes = pConn->pRes; 1360 1396 int rc = 0; 1361 unsigned long action;1362 char * path = NULL;1363 1397 FEALIST * pfealist; 1364 1398 NDDATABUF fdata = {0}; 1365 smbwrp_fileinfo *finfo;1366 1399 const int cbBuffer = 64*1024; 1367 int easize; 1400 NDDATABUF rsrcData = {0}; 1401 char szFullPath[CCHMAXPATH+1]; 1368 1402 1369 1403 if (!pfi || !pulEASize) … … 1373 1407 return ERROR_EAS_NOT_SUPPORTED; 1374 1408 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); 1379 1414 return ERROR_EAS_NOT_SUPPORTED; 1380 1415 } … … 1382 1417 ENTER(); 1383 1418 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); 1397 1427 1398 1428 char *pchBuffer = (char *)malloc(cbBuffer); … … 1404 1434 1405 1435 do { 1406 rc = smbwrp_listea(pRes, pConn->cli, path, pchBuffer, cbBuffer);1436 rc = smbwrp_listea(pRes, pConn->cli, szFullPath, pchBuffer, cbBuffer); 1407 1437 pfealist = (FEALIST*)pchBuffer; 1408 1438 if (rc)
Note:
See TracChangeset
for help on using the changeset viewer.