void FTP::FTP_FixPaths(LPCSTR base, PluginPanelItem *p, int cn, BOOL FromPlugin) { String str; if(!base || !base[0]) return; for(; cn--; p++) { char *CurName = FTP_FILENAME(p); if(StrCmp(CurName,"..") == 0 || StrCmp(CurName,".") == 0) continue; str.printf("%s%c%s", base, FromPlugin ? '/' : '\\', CurName); StrCpy(p->FindData.cFileName, str.c_str(), ARRAYSIZE(p->FindData.cFileName)); if(str.Length() >= (int)ARRAYSIZE(p->FindData.cFileName)) FPIL_ADDSET(p, str.Length()+1, strdup(str.c_str())); else FPIL_ADDSET(p, 0, NULL); } }
void FP_ItemList::Copy(PluginPanelItem *dest,const PluginPanelItem *src,int cn) { if(!cn) return; memmove(dest, src, sizeof(*dest)*cn); for(; cn; cn--,src++,dest++) { //User data if(IS_FLAG(src->Flags,PPIF_USERDATA)) { DWORD sz = (src->UserData && !IsBadReadPtr((void*)src->UserData,sizeof(DWORD))) ? (*((DWORD*)src->UserData)) : 0; if(sz && !IsBadReadPtr((void*)src->UserData,sz)) { dest->UserData = (DWORD_PTR)malloc(sz+1); memmove((char*)dest->UserData,(char*)src->UserData,sz); } else { dest->UserData = 0; CLR_FLAG(dest->Flags,PPIF_USERDATA); } } //CustomColumn if(src->CustomColumnNumber) { dest->CustomColumnData = (LPSTR*)malloc(sizeof(LPSTR*)*src->CustomColumnNumber); for(int n = 0; n < src->CustomColumnNumber; n++) { dest->CustomColumnData[n] = strdup(src->CustomColumnData[n]); } } //Description if(src->Description) dest->Description = strdup(src->Description); //Owner if(src->Owner) dest->Owner = strdup(src->Owner); //Additionals if(FPIL_ADDEXIST(src)) { DWORD sz = FPIL_ADDSIZE(src); LPVOID ptr = malloc(sz); if(ptr) { memmove(ptr, FPIL_ADDDATA(src), sz); FPIL_ADDSET(dest, sz, ptr); } else FPIL_ADDSET(dest, 0, NULL); } } }