Changeset 38 for trunk/dll/draglist.c


Ignore:
Timestamp:
Oct 17, 2002, 8:59:51 PM (22 years ago)
Author:
root
Message:

DoFileDrag: don't free stack

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/dll/draglist.c

    r2 r38  
     1
     2/***********************************************************************
     3
     4  $Id$
     5
     6  Drag drop support
     7
     8  Copyright (c) 1993-98 M. Kimes
     9  Copyright (c) 2001, 2002 Steven H.Levine
     10
     11  Revisions     16 Oct 02 SHL - DoFileDrag: don't free stack
     12
     13***********************************************************************/
     14
    115#define INCL_DOS
    216#define INCL_WIN
     
    4862      memset(&DItem,0,sizeof(DRAGITEM));
    4963      DItem.hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */
    50 //      DItem.hwndItem = hwndCnr;
     64      // DItem.hwndItem = hwndCnr;
    5165      DItem.ulItemID = 1;
    5266      DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN);
     
    8599          pDInfo->usOperation = DO_LINK;
    86100        pDInfo->hwndSource = (hwndObj) ? hwndObj : hwndCnr;
    87 //        pDInfo->hwndSource = hwndCnr;
     101        // pDInfo->hwndSource = hwndCnr;
    88102        DrgSetDragitem(pDInfo,            /* Set item in DRAGINFO  */
    89103                       &DItem,            /* Pointer to DRAGITEM   */
     
    108122
    109123HWND DoFileDrag (HWND hwndCnr,HWND hwndObj,PCNRDRAGINIT pcd,CHAR *arcfile,
    110                  CHAR *directory,BOOL moveok) {
    111 
     124                 CHAR *directory,BOOL moveok)
     125{
    112126  /* drag files from a container */
    113127
    114128  BOOL           isdir,rooting = FALSE;
    115129  PCNRITEM       pci;
    116   register CHAR *p;
     130  register CHAR  *p;
    117131  INT            attribute = CRA_CURSORED;
    118132  PDRAGINFO      pDInfo = NULL;
    119   DRAGITEM     **DItem = NULL,**test;
    120   PCNRITEM       pcs = (PCNRITEM)pcd->pRecord;
     133  DRAGITEM       **ppDItem = NULL,**ppTest;
     134  PCNRITEM       pciRec = (PCNRITEM)pcd->pRecord;
    121135  HWND           hDrop = 0;
    122136  register ULONG ulNumfiles = 0L,numdragalloc = 0L,Select,ulNumIcon = 0;
    123137  CHAR           szFile[CCHMAXPATH],szBuffer[CCHMAXPATH];
    124   DRAGIMAGE     *icon = NULL,*itest,fakeicon;
    125 
    126   if(!pcs && directory && *directory)
     138  DRAGIMAGE      *padiIcon = NULL,*padiTest,diFakeIcon;
     139
     140  if(!pciRec && directory && *directory)
    127141    return DragOne(hwndCnr,hwndObj,directory,moveok);
    128142
    129   if(!pcs) {
     143  if(!pciRec) {
    130144    pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,
    131145                               MPFROMLONG(CMA_FIRST),
     
    140154  }
    141155  else {
    142     pci = pcs;
     156    pci = pciRec;
    143157    attribute = (pci->rc.flRecordAttr & CRA_SELECTED) ? CRA_SELECTED : 0;
    144158    if(attribute) {
     
    168182    }
    169183    if(!arcfile) {
     184      // Filesystem object
    170185      isdir = ((pci->attrFile & FILE_DIRECTORY) != 0);
    171186      if(ulNumfiles + 2L > numdragalloc) {
    172         if(!icon) {
    173           itest = realloc(icon,sizeof(DRAGIMAGE) * (numdragalloc + 4L));
    174           if(itest)
    175             icon = itest;
     187        if(!padiIcon) {
     188          padiTest = realloc(padiIcon,sizeof(DRAGIMAGE) * (numdragalloc + 4L));
     189          if(padiTest)
     190            padiIcon = padiTest;
    176191          else
    177192            break;
    178193        }
    179194        else if(!ulNumIcon) {
    180           icon[ulNumfiles].cb = sizeof(DRAGIMAGE);
    181           icon[ulNumfiles].cptl = 0;
    182           icon[ulNumfiles].hImage = hptrLast;
    183           icon[ulNumfiles].fl = DRG_ICON;
    184           icon[ulNumfiles].sizlStretch.cx = 32;
    185           icon[ulNumfiles].sizlStretch.cy = 32;
    186           icon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 4);
    187           icon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 7);
     195          padiIcon[ulNumfiles].cb = sizeof(DRAGIMAGE);
     196          padiIcon[ulNumfiles].cptl = 0;
     197          padiIcon[ulNumfiles].hImage = hptrLast;
     198          padiIcon[ulNumfiles].fl = DRG_ICON;
     199          padiIcon[ulNumfiles].sizlStretch.cx = 32;
     200          padiIcon[ulNumfiles].sizlStretch.cy = 32;
     201          padiIcon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 4);
     202          padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 7);
    188203          ulNumIcon = ulNumfiles + 1;
    189204        }
    190         test = realloc(DItem,sizeof(DRAGITEM *) * (numdragalloc + 4L));
    191         if(test) {
    192           DItem = test;
     205        ppTest = realloc(ppDItem,sizeof(DRAGITEM *) * (numdragalloc + 4L));
     206        if(ppTest) {
     207          ppDItem = ppTest;
    193208          numdragalloc += 4L;
    194209        }
     
    196211          break;
    197212      }
    198       DItem[ulNumfiles] = malloc(sizeof(DRAGITEM));
    199       if(DItem[ulNumfiles]) {
     213      ppDItem[ulNumfiles] = malloc(sizeof(DRAGITEM));
     214      if(ppDItem[ulNumfiles]) {
    200215        if(!ulNumIcon) {
    201           icon[ulNumfiles].cb = sizeof(DRAGIMAGE);
    202           icon[ulNumfiles].cptl = 0;
    203           icon[ulNumfiles].hImage = pci->rc.hptrIcon;
    204           if(!icon[ulNumfiles].hImage)
    205             icon[ulNumfiles].hImage = (isdir) ? hptrDir : hptrFile;
    206           icon[ulNumfiles].fl = DRG_ICON;
    207           icon[ulNumfiles].sizlStretch.cx = 32;
    208           icon[ulNumfiles].sizlStretch.cy = 32;
    209           icon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 3);
    210           icon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6);
    211         }
    212         memset(DItem[ulNumfiles],0,sizeof(DRAGITEM));
    213         DItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM   */
    214           DItem[ulNumfiles]->hwndItem = hwndCnr;
    215         DItem[ulNumfiles]->ulItemID = (ULONG)pci;
    216         DItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN);
    217         DItem[ulNumfiles]->hstrRMF =
    218            DrgAddStrHandle(DRMDRFLIST);
    219         DItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer);
    220         DItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
    221         DItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
    222         DItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0;
     216          padiIcon[ulNumfiles].cb = sizeof(DRAGIMAGE);
     217          padiIcon[ulNumfiles].cptl = 0;
     218          padiIcon[ulNumfiles].hImage = pci->rc.hptrIcon;
     219          if(!padiIcon[ulNumfiles].hImage)
     220            padiIcon[ulNumfiles].hImage = (isdir) ? hptrDir : hptrFile;
     221          padiIcon[ulNumfiles].fl = DRG_ICON;
     222          padiIcon[ulNumfiles].sizlStretch.cx = 32;
     223          padiIcon[ulNumfiles].sizlStretch.cy = 32;
     224          padiIcon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 3);
     225          padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6);
     226        }
     227        memset(ppDItem[ulNumfiles],0,sizeof(DRAGITEM));
     228        ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM   */
     229        ppDItem[ulNumfiles]->hwndItem = hwndCnr;
     230        ppDItem[ulNumfiles]->ulItemID = (ULONG)pci;
     231        ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN);
     232        ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFLIST);
     233        ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer);
     234        ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
     235        ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
     236        ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0;
    223237        if(IsFullName(pci->szFileName) &&
    224238           (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE))
    225           DItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
    226         DItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE | DO_LINKABLE;
     239        ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
     240        ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE | DO_LINKABLE;
    227241        if(moveok && IsFullName(pci->szFileName) &&
    228242           !(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE))
    229           DItem[ulNumfiles]->fsSupportedOps |= DO_MOVEABLE;
     243        ppDItem[ulNumfiles]->fsSupportedOps |= DO_MOVEABLE;
    230244        if(IsRoot(pci->szFileName)) {
    231           DItem[ulNumfiles]->fsSupportedOps = DO_LINKABLE;
     245          ppDItem[ulNumfiles]->fsSupportedOps = DO_LINKABLE;
    232246          rooting = TRUE;
    233247        }
    234248        ulNumfiles++;
    235         DItem[ulNumfiles] = NULL;
     249        ppDItem[ulNumfiles] = NULL;
    236250      }
    237251      else
     
    239253    }
    240254    else {
     255      // Archive object
    241256      if(ulNumfiles + 3L > numdragalloc) {
    242         test = realloc(DItem,sizeof(DRAGITEM *) * (numdragalloc + 5L));
    243         if(test) {
    244           DItem = test;
     257        ppTest = realloc(ppDItem,sizeof(DRAGITEM *) * (numdragalloc + 5L));
     258        if(ppTest) {
     259          ppDItem = ppTest;
    245260          numdragalloc += 5L;
    246261        }
     
    248263          break;
    249264      }
    250       DItem[ulNumfiles] = malloc(sizeof(DRAGITEM));
    251       if(DItem[ulNumfiles]) {
    252         fakeicon.hImage = hptrFile;
    253         memset(DItem[ulNumfiles],0,sizeof(DRAGITEM));
    254         DItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM   */
    255           DItem[ulNumfiles]->hwndItem = hwndCnr;
    256         DItem[ulNumfiles]->ulItemID = (ULONG)pci;
    257         DItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN);
    258         DItem[ulNumfiles]->hstrRMF =
    259            DrgAddStrHandle(DRMDRFOS2FILE);
    260         DItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile);
    261         DItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
    262         DItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
    263         DItem[ulNumfiles]->fsControl = DC_PREPARE;
     265      ppDItem[ulNumfiles] = malloc(sizeof(DRAGITEM));
     266      if(ppDItem[ulNumfiles]) {
     267        diFakeIcon.hImage = hptrFile;
     268        memset(ppDItem[ulNumfiles],0,sizeof(DRAGITEM));
     269        ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM   */
     270        ppDItem[ulNumfiles]->hwndItem = hwndCnr;
     271        ppDItem[ulNumfiles]->ulItemID = (ULONG)pci;
     272        ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN);
     273        ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFOS2FILE);
     274        ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile);
     275        ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
     276        ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
     277        ppDItem[ulNumfiles]->fsControl = DC_PREPARE;
    264278        if(IsFullName(arcfile) &&
    265279           (driveflags[toupper(*arcfile) - 'A'] & DRIVE_REMOVABLE))
    266           DItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
    267         DItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE;
     280          ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
     281        ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE;
    268282        ulNumfiles++;
    269         DItem[ulNumfiles] = malloc(sizeof(DRAGITEM));
    270         if(DItem[ulNumfiles]) {
    271           fakeicon.hImage = hptrFile;
    272           memset(DItem[ulNumfiles],0,sizeof(DRAGITEM));
    273           DItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM   */
    274             DItem[ulNumfiles]->hwndItem = hwndCnr;
    275           DItem[ulNumfiles]->ulItemID = Select++;
    276           DItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN);
    277           DItem[ulNumfiles]->hstrRMF =
    278              DrgAddStrHandle(DRMDRFFM2ARC);
    279           DItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile);
    280           DItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
    281           DItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
    282           DItem[ulNumfiles]->fsControl = 0;
     283        ppDItem[ulNumfiles] = malloc(sizeof(DRAGITEM));
     284        if(ppDItem[ulNumfiles]) {
     285          diFakeIcon.hImage = hptrFile;
     286          memset(ppDItem[ulNumfiles],0,sizeof(DRAGITEM));
     287          ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM   */
     288          ppDItem[ulNumfiles]->hwndItem = hwndCnr;
     289          ppDItem[ulNumfiles]->ulItemID = Select++;
     290          ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN);
     291          ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFFM2ARC);
     292          ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile);
     293          ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
     294          ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
     295          ppDItem[ulNumfiles]->fsControl = 0;
    283296          if(IsFullName(arcfile) &&
    284297             (driveflags[toupper(*arcfile) - 'A'] & DRIVE_REMOVABLE))
    285             DItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
    286           DItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE;
     298            ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
     299          ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE;
    287300          ulNumfiles++;
    288301        }
    289         DItem[ulNumfiles] = NULL;
     302        ppDItem[ulNumfiles] = NULL;
    290303      }
    291304      else
     
    293306    }
    294307    WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci),
    295                    MPFROM2SHORT(TRUE,CRA_SOURCE));
     308               MPFROM2SHORT(TRUE,CRA_SOURCE));
    296309
    297310Continuing:
     
    301314    pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMP(pci),
    302315                     MPFROMSHORT(attribute));
    303   }
     316  } // while
    304317
    305318  if(ulNumfiles) {
     
    314327        pDInfo->usOperation = DO_LINK;
    315328      pDInfo->hwndSource = (hwndObj) ? hwndObj : hwndCnr;
    316 //      pDInfo->hwndSource = hwndCnr;
     329      // pDInfo->hwndSource = hwndCnr;
    317330      for(Select = 0L;Select < ulNumfiles;Select++) {
    318         DrgSetDragitem(pDInfo,            /* Set item in DRAGINFO  */
    319                        DItem[Select],     /* Pointer to DRAGITEM   */
    320                        sizeof(DRAGITEM),  /* Size of DRAGITEM      */
    321                        Select);           /* Index of DRAGITEM     */
    322         free(DItem[Select]);
     331        DrgSetDragitem(pDInfo,                  /* Set item in DRAGINFO  */
     332                       ppDItem[Select],         /* Pointer to DRAGITEM   */
     333                       sizeof(DRAGITEM),        /* Size of DRAGITEM      */
     334                       Select);                 /* Index of DRAGITEM     */
     335        free(ppDItem[Select]);
    323336      }
    324337#ifdef __DEBUG_ALLOC__
    325338      _heap_check();
    326339#endif
    327       free(DItem);
    328       DItem = NULL;
     340      free(ppDItem);
     341      ppDItem = NULL;
    329342      DosPostEventSem(CompactSem);
    330343
    331344      if(arcfile) {
    332         fakeicon.cb = sizeof(DRAGIMAGE);
    333         fakeicon.cptl = 0;
     345        diFakeIcon.cb = sizeof(DRAGIMAGE);
     346        diFakeIcon.cptl = 0;
    334347        if(ulNumfiles > 1)
    335           fakeicon.hImage = hptrFile;
    336         fakeicon.fl = DRG_ICON;
    337         fakeicon.sizlStretch.cx = 32;
    338         fakeicon.sizlStretch.cy = 32;
    339         fakeicon.cxOffset = -16;
    340         fakeicon.cyOffset = 0;
    341         icon = &fakeicon;
     348          diFakeIcon.hImage = hptrFile;
     349        diFakeIcon.fl = DRG_ICON;
     350        diFakeIcon.sizlStretch.cx = 32;
     351        diFakeIcon.sizlStretch.cy = 32;
     352        diFakeIcon.cxOffset = -16;
     353        diFakeIcon.cyOffset = 0;
     354        padiIcon = &diFakeIcon;
    342355      }
    343356      if(!arcfile) {
     
    351364      hDrop = DrgDrag(hwndCnr,              /* Initiate drag         */
    352365                      pDInfo,               /* DRAGINFO structure    */
    353                       icon,
     366                      padiIcon,
    354367                      ulNumIcon,
    355368                      VK_ENDDRAG,           /* End of drag indicator */
     
    357370
    358371      DrgFreeDraginfo(pDInfo);              /* Free DRAGINFO struct  */
    359       free(icon);
    360       icon = NULL;
     372      if(padiIcon && padiIcon != &diFakeIcon)
     373        free(padiIcon);
     374      padiIcon = NULL;
    361375      WinSetWindowPos(hwndCnr,HWND_TOP,0,0,0,0,SWP_ACTIVATE);
    362376      DosPostEventSem(CompactSem);
    363377    }
    364378  }
    365   if(DItem)
    366     free(DItem);
    367   if(icon)
    368     free(icon);
     379  if(ppDItem)
     380    free(ppDItem);
     381  if(padiIcon && padiIcon != &diFakeIcon)
     382    free(padiIcon);
    369383  MarkAll(hwndCnr,TRUE,FALSE,TRUE);
    370384  return hDrop;
     
    377391
    378392  BOOL           isdir;
    379   register CHAR *p;
     393  register CHAR  *p;
    380394  PDRAGINFO      pDInfo = NULL;
    381   DRAGITEM     **DItem = NULL,**test;
     395  DRAGITEM       **ppDItem = NULL,**ppTest;
    382396  HWND           hDrop = (HWND)0;
    383397  register ULONG ulNumfiles = 0L,numdragalloc = 0L,Select,ulNumIcon = 0;
    384398  CHAR           szFile[CCHMAXPATH],szBuffer[CCHMAXPATH];
    385   DRAGIMAGE     *icon = NULL,*itest;
     399  DRAGIMAGE      *padiIcon = NULL,*padiTest;
    386400  FILESTATUS3    fs3;
    387401
     
    405419               ((fs3.attrFile & FILE_DIRECTORY) != 0);
    406420      if(ulNumfiles + 2L > numdragalloc) {
    407         if(!icon) {
    408           itest = realloc(icon,sizeof(DRAGIMAGE) * (numdragalloc + 4L));
    409           if(itest)
    410             icon = itest;
     421        if(!padiIcon) {
     422          padiTest = realloc(padiIcon,sizeof(DRAGIMAGE) * (numdragalloc + 4L));
     423          if(padiTest)
     424            padiIcon = padiTest;
    411425          else
    412426            break;
    413427        }
    414428        else if(!ulNumIcon) {
    415           icon[ulNumfiles].cb = sizeof(DRAGIMAGE);
    416           icon[ulNumfiles].cptl = 0;
    417           icon[ulNumfiles].hImage = hptrLast;
    418           icon[ulNumfiles].fl = DRG_ICON;
    419           icon[ulNumfiles].sizlStretch.cx = 32;
    420           icon[ulNumfiles].sizlStretch.cy = 32;
    421           icon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 4);
    422           icon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 7);
     429          padiIcon[ulNumfiles].cb = sizeof(DRAGIMAGE);
     430          padiIcon[ulNumfiles].cptl = 0;
     431          padiIcon[ulNumfiles].hImage = hptrLast;
     432          padiIcon[ulNumfiles].fl = DRG_ICON;
     433          padiIcon[ulNumfiles].sizlStretch.cx = 32;
     434          padiIcon[ulNumfiles].sizlStretch.cy = 32;
     435          padiIcon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 4);
     436          padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 7);
    423437          ulNumIcon = ulNumfiles + 1;
    424438        }
    425         test = realloc(DItem,sizeof(DRAGITEM *) * (numdragalloc + 4L));
    426         if(test) {
    427           DItem = test;
     439        ppTest = realloc(ppDItem,sizeof(DRAGITEM *) * (numdragalloc + 4L));
     440        if(ppTest) {
     441          ppDItem = ppTest;
    428442          numdragalloc += 4L;
    429443        }
     
    431445          break;
    432446      }
    433       DItem[ulNumfiles] = malloc(sizeof(DRAGITEM));
    434       if(DItem[ulNumfiles]) {
     447      ppDItem[ulNumfiles] = malloc(sizeof(DRAGITEM));
     448      if(ppDItem[ulNumfiles]) {
    435449        if(!ulNumIcon) {
    436           icon[ulNumfiles].cb = sizeof(DRAGIMAGE);
    437           icon[ulNumfiles].cptl = 0;
    438           icon[ulNumfiles].hImage = (isdir) ? hptrDir : hptrFile;
    439           icon[ulNumfiles].fl = DRG_ICON;
    440           icon[ulNumfiles].sizlStretch.cx = 32;
    441           icon[ulNumfiles].sizlStretch.cy = 32;
    442           icon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 3);
    443           icon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6);
    444         }
    445         memset(DItem[ulNumfiles],0,sizeof(DRAGITEM));
    446         DItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwnd; /* Initialize DRAGITEM */
    447 //        DItem[ulNumfiles]->hwndItem = hwnd;
    448         DItem[ulNumfiles]->ulItemID = (ULONG)Select;
    449         DItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN);
    450         DItem[ulNumfiles]->hstrRMF =
    451            DrgAddStrHandle(DRMDRFLIST);
    452         DItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer);
    453         DItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
    454         DItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
    455         DItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0;
     450          padiIcon[ulNumfiles].cb = sizeof(DRAGIMAGE);
     451          padiIcon[ulNumfiles].cptl = 0;
     452          padiIcon[ulNumfiles].hImage = (isdir) ? hptrDir : hptrFile;
     453          padiIcon[ulNumfiles].fl = DRG_ICON;
     454          padiIcon[ulNumfiles].sizlStretch.cx = 32;
     455          padiIcon[ulNumfiles].sizlStretch.cy = 32;
     456          padiIcon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 3);
     457          padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6);
     458        }
     459        memset(ppDItem[ulNumfiles],0,sizeof(DRAGITEM));
     460        ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwnd; /* Initialize DRAGITEM */
     461        // ppDItem[ulNumfiles]->hwndItem = hwnd;
     462        ppDItem[ulNumfiles]->ulItemID = (ULONG)Select;
     463        ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN);
     464        ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFLIST);
     465        ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer);
     466        ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
     467        ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
     468        ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0;
    456469        if(IsFullName(list[Select]) &&
    457470           (driveflags[toupper(*list[Select]) - 'A'] & DRIVE_REMOVABLE))
    458           DItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
    459         DItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE | DO_LINKABLE;
     471          ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
     472        ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE | DO_LINKABLE;
    460473        if(moveok && IsFullName(list[Select]) &&
    461474           !(driveflags[toupper(*list[Select]) - 'A'] & DRIVE_NOTWRITEABLE))
    462           DItem[ulNumfiles]->fsSupportedOps |= DO_MOVEABLE;
     475          ppDItem[ulNumfiles]->fsSupportedOps |= DO_MOVEABLE;
    463476        if(IsRoot(list[Select]))
    464           DItem[ulNumfiles]->fsControl = DO_LINKABLE;
     477          ppDItem[ulNumfiles]->fsControl = DO_LINKABLE;
    465478        ulNumfiles++;
    466         DItem[ulNumfiles] = NULL;
     479        ppDItem[ulNumfiles] = NULL;
    467480      }
    468481      else
     
    482495        pDInfo->usOperation = DO_LINK;
    483496      pDInfo->hwndSource = (hwndObj) ? hwndObj : hwnd;
    484 //      pDInfo->hwndSource = hwnd;
     497      // pDInfo->hwndSource = hwnd;
    485498      for(Select = 0L;Select < ulNumfiles;Select++) {
    486499        DrgSetDragitem(pDInfo,            /* Set item in DRAGINFO  */
    487                        DItem[Select],     /* Pointer to DRAGITEM   */
     500                       ppDItem[Select],     /* Pointer to DRAGITEM   */
    488501                       sizeof(DRAGITEM),  /* Size of DRAGITEM      */
    489502                       Select);           /* Index of DRAGITEM     */
    490         free(DItem[Select]);
     503        free(ppDItem[Select]);
    491504      }
    492505#ifdef __DEBUG_ALLOC__
    493506      _heap_check();
    494507#endif
    495       free(DItem);
    496       DItem = NULL;
     508      free(ppDItem);
     509      ppDItem = NULL;
    497510      DosPostEventSem(CompactSem);
    498511
     
    503516      hDrop = DrgDrag(hwnd,                 /* Initiate drag         */
    504517                      pDInfo,               /* DRAGINFO structure    */
    505                       icon,
     518                      padiIcon,
    506519                      ulNumIcon,
    507520                      VK_ENDDRAG,           /* End of drag indicator */
     
    509522
    510523      DrgFreeDraginfo(pDInfo);              /* Free DRAGINFO struct  */
    511       free(icon);
    512       icon = NULL;
     524      free(padiIcon);
     525      padiIcon = NULL;
    513526      WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_ACTIVATE);
    514527      DosPostEventSem(CompactSem);
    515528    }
    516529  }
    517   if(DItem)
    518     free(DItem);
    519   if(icon)
    520     free(icon);
     530  if(ppDItem)
     531    free(ppDItem);
     532  if(padiIcon)
     533    free(padiIcon);
    521534  return hDrop;
    522535}
     
    532545  ULONG     cditem = 0;
    533546  DRAGITEM  ditem;
    534   DRAGIMAGE fakeicon;
     547  DRAGIMAGE diFakeIcon;
    535548  CHAR      szDir[CCHMAXPATH],szFile[CCHMAXPATH],*p;
    536549
     
    593606        if(IsRoot(pci->szFileName))
    594607          ditem.fsSupportedOps = DO_LINKABLE;
    595         memset(&fakeicon,0,sizeof(DRAGIMAGE));
    596         fakeicon.hImage = pci->rc.hptrIcon;
    597         fakeicon.cb = sizeof(DRAGIMAGE);
    598         fakeicon.cptl = 0;
    599         fakeicon.fl = DRG_ICON;
    600         fakeicon.sizlStretch.cx = 32;
    601         fakeicon.sizlStretch.cy = 32;
    602         fakeicon.cxOffset = -16;
    603         fakeicon.cyOffset = 0;
     608        memset(&diFakeIcon,0,sizeof(DRAGIMAGE));
     609        diFakeIcon.hImage = pci->rc.hptrIcon;
     610        diFakeIcon.cb = sizeof(DRAGIMAGE);
     611        diFakeIcon.cptl = 0;
     612        diFakeIcon.fl = DRG_ICON;
     613        diFakeIcon.sizlStretch.cx = 32;
     614        diFakeIcon.sizlStretch.cy = 32;
     615        diFakeIcon.cxOffset = -16;
     616        diFakeIcon.cyOffset = 0;
    604617        if(IsFullName(pci->szFileName) &&
    605618           (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE))
     
    621634    }
    622635    if(pdinfoCurrent)
    623       return DrgLazyDrag(hwndCnr,pdinfoCurrent,&fakeicon,1,NULL);
     636      return DrgLazyDrag(hwndCnr,pdinfoCurrent,&diFakeIcon,1,NULL);
    624637  }
    625638  return FALSE;
    626639}
    627640
    628 #endif
     641#endif // NEVER
Note: See TracChangeset for help on using the changeset viewer.