Changeset 1159
- Timestamp:
- 09/05/08 23:41:13 (3 months ago)
- Location:
- trunk/dll
- Files:
-
- 10 modified
-
autoview.c (modified) (2 diffs)
-
codepage.c (modified) (1 diff)
-
collect.c (modified) (2 diffs)
-
common.c (modified) (1 diff)
-
dirs.c (modified) (5 diffs)
-
droplist.c (modified) (2 diffs)
-
filldir.c (modified) (1 diff)
-
misc.c (modified) (76 diffs)
-
misc.h (modified) (1 diff)
-
viewinf.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/autoview.c
r1078 r1159 43 43 #include "errutil.h" // Dos_Error... 44 44 #include "strutil.h" // GetPString 45 #include "autoview.h" 46 #include "defview.h" // DefaultView 47 #include "valid.h" // IsBinary 45 48 #include "fm3dll.h" 46 49 … … 54 57 static CHAR stopflag; 55 58 static CHAR currfile[CCHMAXPATH]; 59 60 static BOOL PutComments(HWND hwnd, CHAR * filename, CHAR * comments); 61 static BOOL WriteEA(HWND hwnd, CHAR * filename, CHAR * eaname, USHORT type, 62 CHAR * data); 56 63 57 64 BOOL WriteEA(HWND hwnd, CHAR * filename, CHAR * eaname, USHORT type, -
trunk/dll/codepage.c
r907 r1159 25 25 #include "strutil.h" // GetPString 26 26 #include "errutil.h" // Runtime_Error 27 #include "codepage.h" 27 28 #include "fm3dll.h" 28 29 -
trunk/dll/collect.c
r1120 r1159 1 2 1 /*********************************************************************** 3 2 … … 83 82 #include "notebook.h" // CfgDlgProc 84 83 #include "command.h" // RunCommand 84 #include "worker.h" // Action, MassAction 85 #include "notify.h" // AddNote 86 #include "misc.h" // AdjustCnrColsForPref, AdjustDetailsSwitches, CnrDirectEdit, 87 // LoadDetailsSwitches, OpenEdit, QuickPopup, SayFilter 88 // SaySort, SayView, SetCnrCols, SetDetailsSwitches 89 // SetSortChecks, SetViewMenu, disable_menuitem 90 #include "chklist.h" // CenterOverWindow, DropListProc 91 #include "collect.h" 92 #include "common.h" // CommonCnrProc, CommonCreateTextChildren, CommonFrameWndProc 93 // CommonTextPaint 94 #include "select.h" // DeselectAll, HideAll, RemoveAll, SelectAll, SelectList 95 #include "dirsize.h" // DirSizeProc 96 #include "grep2.h" // GrepDlgProc 97 #include "mainwnd.h" // MakeBubble 98 #include "objwin.h" // MakeObjWin 99 #include "saveclip.h" // SaveListDlgProc 100 #include "findrec.h" // ShowCnrRecord 101 #include "sortcnr.h" // SortCollectorCnr 102 #include "seeall.h" // StartSeeAll 103 #include "update.h" // UpdateCnrList, UpdateCnrRecord 85 104 #include "fm3dll.h" 105 #include "select.h" // InvertAll 86 106 87 107 #include "fortify.h" -
trunk/dll/common.c
r1041 r1159 41 41 #include "errutil.h" // Dos_Error... 42 42 #include "strutil.h" // GetPString 43 #include "autoview.h" // AutoViewProc 44 #include "mainwnd.h" // BuildDriveBarButtons, TopWindow 45 #include "common.h" 46 #include "dirsize.h" // DirSizeProc 47 #include "info.h" // DrvInfoProc, SetDrvProc 48 #include "seeall.h" // StartSeeAll 43 49 #include "fm3dll.h" 44 50 #include "fortify.h" -
trunk/dll/dirs.c
r907 r1159 17 17 #include <ctype.h> 18 18 19 #define INCL_LONGLONG // dircnrs.h19 #define INCL_LONGLONG // dircnrs.h 20 20 21 21 #include "fm3dll.h" 22 #include "dirs.h" 23 #include "valid.h" // IsValidDir 22 24 23 25 APIRET save_dir2(CHAR * curdir) … … 33 35 env = strrchr(curdir, '\\'); 34 36 if (env) { 35 *env = 0;36 if (IsValidDir(curdir))37 return 0;37 *env = 0; 38 if (IsValidDir(curdir)) 39 return 0; 38 40 } 39 41 } … … 50 52 *curdir = 0; 51 53 ret = DosQCurDisk(&curdrive, &drivemap); 52 curdirlen = CCHMAXPATH - 4; /* NOTE!!!!!!!!! */54 curdirlen = CCHMAXPATH - 4; /* NOTE!!!!!!!!! */ 53 55 ret += DosQCurDir(curdrive, &curdir[3], &curdirlen); 54 56 *curdir = (CHAR) ('@' + (INT) curdrive); … … 71 73 p = strrchr(path, '\\'); 72 74 if (p) 73 *p = 0;75 *p = 0; 74 76 else { 75 strcpy(path, s);76 break;77 strcpy(path, s); 78 break; 77 79 } 78 80 } … … 86 88 if (!DosQCurDisk(&curdrive, &drivemap)) { 87 89 if ((CHAR) ((CHAR) curdrive + '@') != (CHAR) toupper(*HomePath) && 88 (CHAR) ((CHAR) curdrive + '@') != (CHAR) toupper(*path))89 DosChDir("\\");90 (CHAR) ((CHAR) curdrive + '@') != (CHAR) toupper(*path)) 91 DosChDir("\\"); 90 92 } 91 93 ret = DosSelectDisk(toupper(*path) - '@'); -
trunk/dll/droplist.c
r1063 r1159 33 33 #include "errutil.h" // Dos_Error... 34 34 #include "strutil.h" // GetPString 35 #include "droplist.h" 35 36 #include "fm3dll.h" 36 37 … … 40 41 41 42 static ULONG GetDropCount(HWND hwnd, MPARAM mp1); 43 static BOOL TwoDrgNames(PDRAGITEM pDItem, CHAR * buffer1, ULONG buflen1, 44 char *buffer2, ULONG buflen2); 42 45 43 46 BOOL CheckPmDrgLimit(PDRAGINFO pDInfo) -
trunk/dll/filldir.c
r1154 r1159 69 69 #include "fortify.h" // 06 May 08 SHL 70 70 #include "notebook.h" // INI file fields 71 #include "flesh.h" // FleshEnv, Stubby 72 #include "update.h" // SelectDriveIcon 71 73 #include "fm3dll.h" 72 74 -
trunk/dll/misc.c
r1120 r1159 1 2 1 /*********************************************************************** 3 2 … … 42 41 29 Feb 08 GKY Use xfree where appropriate 43 42 08 Mar 08 JBS Ticket 230: Replace prefixless INI keys for default directory containers with 44 keys using a "DirCnr." prefix43 keys using a "DirCnr." prefix 45 44 19 Jun 08 JBS Ticket 239: Fix LoadDetailsSwitches so INI file is read correctly and details 46 switches are set correctly.45 switches are set correctly. 47 46 11 Jul 08 JBS Ticket 230: Simplified code and eliminated some local variables by incorporating 48 all the details view settings (both the global variables and those in the49 DIRCNRDATA struct) into a new struct: DETAILS_SETTINGS.47 all the details view settings (both the global variables and those in the 48 DIRCNRDATA struct) into a new struct: DETAILS_SETTINGS. 50 49 17 Jul 08 SHL Add GetTidForWindow for Fortify support 51 50 20 Jul 08 GKY Add save/append filename to clipboard. … … 59 58 #include <ctype.h> 60 59 #include <share.h> 61 #include <malloc.h> // _heapmin60 #include <malloc.h> // _heapmin 62 61 63 62 #define INCL_DOS … … 68 67 #include "fm3dlg.h" 69 68 #include "fm3str.h" 70 #include "pathutil.h" // BldQuotedFileName 71 #include "errutil.h" // Dos_Error... 72 #include "strutil.h" // GetPString 73 #include "command.h" // LINKCMDS 69 #include "pathutil.h" // BldQuotedFileName 70 #include "errutil.h" // Dos_Error... 71 #include "strutil.h" // GetPString 72 #include "command.h" // LINKCMDS 73 #include "cmdline.h" // CmdLineDlgProc 74 #include "defview.h" // QuickView 75 #include "copyf.h" // WriteLongName 76 #include "strips.h" // chop_at_crnl 74 77 #include "fm3dll.h" 78 #include "fortify.h" 75 79 #include "misc.h" 76 #include "fortify.h"77 80 78 81 #pragma data_seg(DATA1) … … 81 84 82 85 #ifndef BEGIN_LIBPATH 83 #define BEGIN_LIBPATH 186 #define BEGIN_LIBPATH 1 84 87 #endif 85 88 86 89 #ifndef END_LIBPATH 87 #define END_LIBPATH 290 #define END_LIBPATH 2 88 91 #endif 89 92 … … 101 104 if (rc) { 102 105 Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 103 "DosGetInfoBlocks");106 "DosGetInfoBlocks"); 104 107 yes = FALSE; 105 108 } … … 112 115 // OK for window to be dead - just return FALSE 113 116 yes = WinQueryWindowProcess(hwnd, &pid, &tid) && 114 pid == ppib->pib_ulpid &&115 (!chkTid || tid == ptib->tib_ptib2->tib2_ultid);117 pid == ppib->pib_ulpid && 118 (!chkTid || tid == ptib->tib_ptib2->tib2_ultid); 116 119 } 117 120 return yes; … … 136 139 if (rc) { 137 140 Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 138 "DosGetInfoBlocks");141 "DosGetInfoBlocks"); 139 142 } 140 143 else { … … 142 145 TID tid; 143 146 if (!WinQueryWindowProcess(hwnd, &pid, &tid)) 144 Win_Error(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__, "WinQueryWindowProcess failed for %X", hwnd);147 Win_Error(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__, "WinQueryWindowProcess failed for %X", hwnd); 145 148 else if (pid != ppib->pib_ulpid) 146 Runtime_Error(pszSrcFile, __LINE__, "hwnd %X not created by fm/2", hwnd);149 Runtime_Error(pszSrcFile, __LINE__, "hwnd %X not created by fm/2", hwnd); 147 150 else 148 ordinal = ptib->tib_ptib2->tib2_ultid;151 ordinal = ptib->tib_ptib2->tib2_ultid; 149 152 } 150 153 return ordinal; … … 165 168 if (rc) { 166 169 Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 167 "DosGetInfoBlocks");170 "DosGetInfoBlocks"); 168 171 } 169 172 else … … 272 275 WinQueryWindowText(hwnd, CCHMAXPATH, s); 273 276 if (*s) { 274 rcl.xRight -= 3;275 p = s;276 GpiQueryTextBox(hps, 3, "...", TXTBOX_COUNT, aptl);277 len = aptl[TXTBOX_TOPRIGHT].x;278 do {279 GpiQueryTextBox(hps, strlen(p), p, TXTBOX_COUNT, aptl);280 if (aptl[TXTBOX_TOPRIGHT].x > (rcl.xRight - (p != s ? len : 0)))281 p++;282 else283 break;284 }285 while (*p);286 if (*p) {287 GpiSetMix(hps, FM_OVERPAINT);288 GpiSetColor(hps, CLR_BLACK);289 ptl.x = 3;290 ptl.y = ((rcl.yTop / 2) -291 ((aptl[TXTBOX_TOPRIGHT].y +292 aptl[TXTBOX_BOTTOMLEFT].y) / 2));293 GpiMove(hps, &ptl);294 if (p != s)295 GpiCharString(hps, 3, "...");296 GpiCharString(hps, strlen(p), p);297 }277 rcl.xRight -= 3; 278 p = s; 279 GpiQueryTextBox(hps, 3, "...", TXTBOX_COUNT, aptl); 280 len = aptl[TXTBOX_TOPRIGHT].x; 281 do { 282 GpiQueryTextBox(hps, strlen(p), p, TXTBOX_COUNT, aptl); 283 if (aptl[TXTBOX_TOPRIGHT].x > (rcl.xRight - (p != s ? len : 0))) 284 p++; 285 else 286 break; 287 } 288 while (*p); 289 if (*p) { 290 GpiSetMix(hps, FM_OVERPAINT); 291 GpiSetColor(hps, CLR_BLACK); 292 ptl.x = 3; 293 ptl.y = ((rcl.yTop / 2) - 294 ((aptl[TXTBOX_TOPRIGHT].y + 295 aptl[TXTBOX_BOTTOMLEFT].y) / 2)); 296 GpiMove(hps, &ptl); 297 if (p != s) 298 GpiCharString(hps, 3, "..."); 299 GpiCharString(hps, strlen(p), p); 300 } 298 301 } 299 302 free(s); … … 379 382 { 380 383 PFIELDINFO pfi = (PFIELDINFO) WinSendMsg(hwndCnr, 381 CM_QUERYDETAILFIELDINFO,382 MPVOID, MPFROMSHORT(CMA_FIRST));384 CM_QUERYDETAILFIELDINFO, 385 MPVOID, MPFROMSHORT(CMA_FIRST)); 383 386 384 387 while (pfi) { 385 388 if (!strcmp(pfi->pTitleData, title)) { 386 389 if (toggle) { 387 if (pfi->flData & CFA_INVISIBLE)388 pfi->flData &= (~CFA_INVISIBLE);389 else390 pfi->flData |= CFA_INVISIBLE;391 return !(pfi->flData & CFA_INVISIBLE);390 if (pfi->flData & CFA_INVISIBLE) 391 pfi->flData &= (~CFA_INVISIBLE); 392 else 393 pfi->flData |= CFA_INVISIBLE; 394 return !(pfi->flData & CFA_INVISIBLE); 392 395 } 393 396 else { 394 if (visible)395 pfi->flData &= (~CFA_INVISIBLE);396 else397 pfi->flData |= CFA_INVISIBLE;397 if (visible) 398 pfi->flData &= (~CFA_INVISIBLE); 399 else 400 pfi->flData |= CFA_INVISIBLE; 398 401 } 399 402 return TRUE; … … 407 410 { 408 411 PFIELDINFO pfi = (PFIELDINFO) WinSendMsg(hwndCnr, 409 CM_QUERYDETAILFIELDINFO,410 MPVOID, MPFROMSHORT(CMA_FIRST));412 CM_QUERYDETAILFIELDINFO, 413 MPVOID, MPFROMSHORT(CMA_FIRST)); 411 414 412 415 while (pfi) { 413 416 if (!strcmp(pfi->pTitleData, title)) { 414 417 if (toggle) { 415 if (pfi->flData & CFA_FIREADONLY)416 pfi->flData &= (~CFA_FIREADONLY);417 else418 pfi->flData |= CFA_FIREADONLY;419 return (pfi->flData & CFA_FIREADONLY);418 if (pfi->flData & CFA_FIREADONLY) 419 pfi->flData &= (~CFA_FIREADONLY); 420 else 421 pfi->flData |= CFA_FIREADONLY; 422 return (pfi->flData & CFA_FIREADONLY); 420 423 } 421 424 else { 422 if (!readonly)423 pfi->flData &= (~CFA_FIREADONLY);424 else425 pfi->flData |= CFA_FIREADONLY;425 if (!readonly) 426 pfi->flData &= (~CFA_FIREADONLY); 427 else 428 pfi->flData |= CFA_FIREADONLY; 426 429 } 427 430 return TRUE; … … 445 448 if (x != -1) { 446 449 if (!stricmp(FileSystem, HPFS) || 447 !stricmp(FileSystem, JFS) ||448 !stricmp(FileSystem, FAT32) ||449 !stricmp(FileSystem, RAMFS) ||450 !stricmp(FileSystem, NDFS32) ||451 !stricmp(FileSystem, NTFS) ||452 !stricmp(FileSystem, HPFS386)) {450 !stricmp(FileSystem, JFS) || 451 !stricmp(FileSystem, FAT32) || 452 !stricmp(FileSystem, RAMFS) || 453 !stricmp(FileSystem, NDFS32) || 454 !stricmp(FileSystem, NTFS) || 455 !stricmp(FileSystem, HPFS386)) { 453 456 hasCreateDT = TRUE; 454 457 hasAccessDT = TRUE; … … 474 477 } 475 478 AdjustCnrColVis(hwndCnr, 476 GetPString(IDS_LADATE),477 pds->detailsladate ? hasAccessDT : FALSE,478 FALSE);479 GetPString(IDS_LADATE), 480 pds->detailsladate ? hasAccessDT : FALSE, 481 FALSE); 479 482 AdjustCnrColVis(hwndCnr, 480 GetPString(IDS_LATIME),481 pds->detailslatime ? hasAccessDT : FALSE,482 FALSE);483 GetPString(IDS_LATIME), 484 pds->detailslatime ? hasAccessDT : FALSE, 485 FALSE); 483 486 AdjustCnrColVis(hwndCnr, 484 GetPString(IDS_CRDATE),485 pds->detailscrdate ? hasCreateDT : FALSE,486 FALSE);487 GetPString(IDS_CRDATE), 488 pds->detailscrdate ? hasCreateDT : FALSE, 489 FALSE); 487 490 AdjustCnrColVis(hwndCnr, 488 GetPString(IDS_CRTIME),489 pds->detailscrtime ? hasCreateDT : FALSE,490 FALSE);491 GetPString(IDS_CRTIME), 492 pds->detailscrtime ? hasCreateDT : FALSE, 493 FALSE); 491 494 AdjustCnrColVis(hwndCnr, 492 GetPString(IDS_LNAME),493 pds->detailslongname ? hasLongNames : FALSE,494 FALSE);495 GetPString(IDS_LNAME), 496 pds->detailslongname ? hasLongNames : FALSE, 497 FALSE); 495 498 WinSendMsg(hwndCnr, CM_INVALIDATEDETAILFIELDINFO, MPVOID, MPVOID); 496 499 } 497 500 498 501 VOID AdjustCnrColsForPref(HWND hwndCnr, CHAR * directory, DETAILS_SETTINGS * pds, 499 BOOL compare)502 BOOL compare) 500 503 { 501 504 502 505 AdjustCnrColVis(hwndCnr, 503 compare ? GetPString(IDS_STATUS) : GetPString(IDS_SUBJ),504 pds->detailssubject,505 FALSE);506 compare ? GetPString(IDS_STATUS) : GetPString(IDS_SUBJ), 507 pds->detailssubject, 508 FALSE); 506 509 507 510 AdjustCnrColVis(hwndCnr, GetPString(IDS_ATTR), pds->detailsattr, FALSE); … … 532 535 533 536 pfi = WinSendMsg(hwndCnr, CM_ALLOCDETAILFIELDINFO, 534 MPFROMLONG(CONTAINER_COLUMNS), NULL);537 MPFROMLONG(CONTAINER_COLUMNS), NULL); 535 538 536 539 if (!pfi) { … … 582 585 pfi->flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR; 583 586 if (isCompCnr) 584 pfi->flData |= CFA_FIREADONLY;587 pfi->flData |= CFA_FIREADONLY; 585 588 pfi->flTitle = CFA_LEFT | CFA_FITITLEREADONLY; 586 589 pfi->pTitleData = isCompCnr ? GetPString(IDS_STATUS) : 587 GetPString(IDS_SUBJ);590 GetPString(IDS_SUBJ); 588 591 pfi->offStruct = FIELDOFFSET(CNRITEM, pszSubject); 589 592 pfi->cxWidth = dsDirCnrDefault.SubjectDisplayWidth; … … 602 605 pfi->flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR; 603 606 if (isCompCnr) 604 pfi->flData |= CFA_FIREADONLY;607 pfi->flData |= CFA_FIREADONLY; 605 608 pfi->flTitle = CFA_LEFT | CFA_FITITLEREADONLY; 606 609 pfi->pTitleData = isCompCnr ? GetPString(IDS_STATUS) : 607 GetPString(IDS_SUBJ);610 GetPString(IDS_SUBJ); 608 611 pfi->offStruct = FIELDOFFSET(CNRITEM, pszSubject); 609 612 pfi->cxWidth = dsDirCnrDefault.SubjectDisplayWidth; … … 697 700 698 701 if (!WinSendMsg(hwndCnr, CM_INSERTDETAILFIELDINFO, MPFROMP(pfiFirst), 699 MPFROMP(&fii))) {702 MPFROMP(&fii))) { 700 703 Win_Error(hwndCnr, HWND_DESKTOP, pszSrcFile, __LINE__, "CM_INSERTDETAILFIELDINFO"); 701 704 fSuccess = FALSE; … … 716 719 size = sizeof(LONG); 717 720 PrfQueryProfileData(fmprof, 718 appname, "CnrSplitBar", &cnri.xVertSplitbar, &size);721 appname, "CnrSplitBar", &cnri.xVertSplitbar, &size); 719 722 if (cnri.xVertSplitbar <= 0) 720 723 cnri.xVertSplitbar = DIR_SPLITBAR_OFFSET - 32; 721 724 if (!WinSendMsg(hwndCnr, CM_SETCNRINFO, MPFROMP(&cnri), 722 MPFROMLONG(CMA_PFIELDINFOLAST | CMA_PFIELDINFOOBJECT |723 CMA_XVERTSPLITBAR))) {725 MPFROMLONG(CMA_PFIELDINFOLAST | CMA_PFIELDINFOOBJECT | 726 CMA_XVERTSPLITBAR))) { 724 727 Win_Error(hwndCnr, HWND_DESKTOP, pszSrcFile, __LINE__, "CM_SETCNRINFO"); 725 728 fSuccess = FALSE; … … 739 742 740 743 if (pci && 741 (INT) pci != -1 &&742 !IsRoot(pci->pszFileName) &&743 !(pci->flags & RECFLAGS_ENV) && !(pci->flags & RECFLAGS_UNDERENV)) {744 if (!pfi || pfi->offStruct == FIELDOFFSET(CNRITEM, pszDisplayName)) {745 PostMsg(hwnd, UM_FIXEDITNAME, MPFROMP(pci->pszFileName), MPVOID);746 }747 else if (pfi->offStruct == FIELDOFFSET(CNRITEM, pszSubject))748 PostMsg(hwnd, UM_FIXCNRMLE, MPFROMLONG(1048), MPVOID);749 else750 PostMsg(hwnd, UM_FIXCNRMLE, MPFROMLONG(CCHMAXPATH), MPVOID);744 (INT) pci != -1 && 745 !IsRoot(pci->pszFileName) && 746 !(pci->flags & RECFLAGS_ENV) && !(pci->flags & RECFLAGS_UNDERENV)) { 747 if (!pfi || pfi->offStruct == FIELDOFFSET(CNRITEM, pszDisplayName)) { 748 PostMsg(hwnd, UM_FIXEDITNAME, MPFROMP(pci->pszFileName), MPVOID); 749 } 750 else if (pfi->offStruct == FIELDOFFSET(CNRITEM, pszSubject)) 751 PostMsg(hwnd, UM_FIXCNRMLE, MPFROMLONG(1048), MPVOID); 752 else 753 PostMsg(hwnd, UM_FIXCNRMLE, MPFROMLONG(CCHMAXPATH), MPVOID); 751 754 } 752 755 else 753 PostMsg(hwnd, CM_CLOSEEDIT, MPVOID, MPVOID);756 PostMsg(hwnd, CM_CLOSEEDIT, MPVOID, MPVOID); 754 757 } 755 758 break; … … 763 766 764 767 if (pci && (INT) pci != -1 && !IsRoot(pci->pszFileName)) { 765 if (pfi && pfi->offStruct == FIELDOFFSET(CNRITEM, pszSubject)) {766 767 APIRET rc;768 EAOP2 eaop;769 PFEA2LIST pfealist = NULL;770 CHAR szSubject[1048];771 ULONG ealen;772 USHORT len;773 CHAR *eaval;774 LONG retlen;775 PSZ psz;776 777 retlen = WinQueryWindowText(hwndMLE, sizeof(szSubject), szSubject);778 szSubject[retlen + 1] = 0;779 bstrip(szSubject);780 if (pci->pszSubject != NullStr) {781 if (retlen == 0) {782 psz = pci->pszSubject;783 pci->pszSubject = NullStr;784 xfree(psz, pszSrcFile, __LINE__);785 }786 else787 pci->pszSubject = xrealloc(pci->pszSubject, retlen + 1, pszSrcFile, __LINE__);788 }789 else {790 pci->pszSubject = xmalloc(retlen + 1, pszSrcFile, __LINE__);791 if (!pci->pszSubject)792 return FALSE;793 }794 len = strlen(szSubject);795 if (len)796
