Hex Artifact Content

Not logged in

Artifact f2120072ecb51fca5030df67ba55212e29a69ab8:


0000: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61  ..#include "stda
0010: 66 78 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20  fx.h"..#include 
0020: 22 43 61 62 54 6f 6f 6c 2e 68 22 0d 0a 23 69 6e  "CabTool.h"..#in
0030: 63 6c 75 64 65 20 22 6b 69 75 74 69 6c 2e 68 22  clude "kiutil.h"
0040: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 66 64 69 2f  ..#include "fdi/
0050: 66 64 69 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65  fdi.h"..#include
0060: 20 22 6b 69 6c 69 62 2f 6b 69 6c 69 62 2e 68 22   "kilib/kilib.h"
0070: 0d 0a 0d 0a 2f 2f 20 96 b3 97 9d 96 ee 97 9d 53  ....// ........S
0080: 46 58 82 e0 89 f0 93 80 0d 0a 73 74 61 74 69 63  FX........static
0090: 20 69 6e 74 20 73 65 65 6b 65 72 3d 30 3b 0d 0a   int seeker=0;..
00a0: 73 74 61 74 69 63 20 69 6e 74 20 6f 66 66 68 61  static int offha
00b0: 6e 3d 2d 31 3b 0d 0a 73 74 61 74 69 63 20 69 6e  n=-1;..static in
00c0: 74 20 6f 66 66 68 61 6e 32 3d 2d 31 3b 0d 0a 73  t offhan2=-1;..s
00d0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
00e0: 2a 20 73 64 6c 6c 3b 0d 0a 73 74 61 74 69 63 20  * sdll;..static 
00f0: 6b 69 50 61 74 68 2a 20 73 64 6c 6c 72 3b 0d 0a  kiPath* sdllr;..
0100: 0d 0a 2f 2f 20 43 61 6c 6c 42 61 63 6b 20 92 e8  ..// CallBack ..
0110: 8b 60 0d 0a 73 74 61 74 69 63 20 46 4e 41 4c 4c  .`..static FNALL
0120: 4f 43 28 6d 79 6d 61 6c 6c 6f 63 29 0d 0a 7b 0d  OC(mymalloc)..{.
0130: 0a 09 72 65 74 75 72 6e 20 28 76 6f 69 64 2a 29  ..return (void*)
0140: 6e 65 77 20 42 59 54 45 5b 63 62 5d 3b 0d 0a 7d  new BYTE[cb];..}
0150: 0d 0a 73 74 61 74 69 63 20 46 4e 46 52 45 45 28  ..static FNFREE(
0160: 6d 79 6d 66 72 65 65 29 0d 0a 7b 0d 0a 09 64 65  mymfree)..{...de
0170: 6c 65 74 65 20 5b 5d 20 28 42 59 54 45 2a 29 70  lete [] (BYTE*)p
0180: 76 3b 0d 0a 7d 0d 0a 73 74 61 74 69 63 20 46 4e  v;..}..static FN
0190: 4f 50 45 4e 28 6d 79 66 6f 70 65 6e 29 0d 0a 7b  OPEN(myfopen)..{
01a0: 0d 0a 09 69 6e 74 20 68 61 6e 3d 5f 6f 70 65 6e  ...int han=_open
01b0: 28 20 70 73 7a 46 69 6c 65 2c 20 6f 66 6c 61 67  ( pszFile, oflag
01c0: 2c 20 70 6d 6f 64 65 20 29 3b 0d 0a 09 69 66 28  , pmode );...if(
01d0: 20 68 61 6e 21 3d 2d 31 20 26 26 20 73 65 65 6b   han!=-1 && seek
01e0: 65 72 21 3d 30 20 26 26 20 21 28 6f 66 6c 61 67  er!=0 && !(oflag
01f0: 26 5f 4f 5f 57 52 4f 4e 4c 59 29 20 29 0d 0a 09  &_O_WRONLY) )...
0200: 7b 0d 0a 09 09 5f 6c 73 65 65 6b 28 20 68 61 6e  {...._lseek( han
0210: 2c 73 65 65 6b 65 72 2c 53 45 45 4b 5f 53 45 54  ,seeker,SEEK_SET
0220: 20 29 3b 0d 0a 09 09 69 66 28 20 6f 66 66 68 61   );....if( offha
0230: 6e 3d 3d 2d 31 20 29 6f 66 66 68 61 6e 3d 68 61  n==-1 )offhan=ha
0240: 6e 3b 0d 0a 09 09 65 6c 73 65 20 69 66 28 20 6f  n;....else if( o
0250: 66 66 68 61 6e 32 3d 3d 2d 31 20 29 6f 66 66 68  ffhan2==-1 )offh
0260: 61 6e 32 3d 68 61 6e 3b 0d 0a 09 7d 0d 0a 09 72  an2=han;...}...r
0270: 65 74 75 72 6e 20 68 61 6e 3b 0d 0a 7d 0d 0a 73  eturn han;..}..s
0280: 74 61 74 69 63 20 46 4e 52 45 41 44 28 6d 79 66  tatic FNREAD(myf
0290: 72 65 61 64 29 0d 0a 7b 0d 0a 09 72 65 74 75 72  read)..{...retur
02a0: 6e 20 5f 72 65 61 64 28 20 68 66 2c 20 70 76 2c  n _read( hf, pv,
02b0: 20 63 62 20 29 3b 0d 0a 7d 0d 0a 73 74 61 74 69   cb );..}..stati
02c0: 63 20 46 4e 57 52 49 54 45 28 6d 79 66 77 72 69  c FNWRITE(myfwri
02d0: 74 65 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20  te)..{...return 
02e0: 5f 77 72 69 74 65 28 20 68 66 2c 20 70 76 2c 20  _write( hf, pv, 
02f0: 63 62 20 29 3b 0d 0a 7d 0d 0a 73 74 61 74 69 63  cb );..}..static
0300: 20 46 4e 43 4c 4f 53 45 28 6d 79 66 63 6c 6f 73   FNCLOSE(myfclos
0310: 65 29 0d 0a 7b 0d 0a 09 69 66 28 20 68 66 3d 3d  e)..{...if( hf==
0320: 6f 66 66 68 61 6e 20 29 6f 66 66 68 61 6e 3d 2d  offhan )offhan=-
0330: 31 3b 0d 0a 09 65 6c 73 65 20 69 66 28 20 68 66  1;...else if( hf
0340: 3d 3d 6f 66 66 68 61 6e 32 20 29 6f 66 66 68 61  ==offhan2 )offha
0350: 6e 32 3d 2d 31 3b 0d 0a 09 72 65 74 75 72 6e 20  n2=-1;...return 
0360: 5f 63 6c 6f 73 65 28 68 66 29 3b 0d 0a 7d 0d 0a  _close(hf);..}..
0370: 73 74 61 74 69 63 20 46 4e 53 45 45 4b 28 6d 79  static FNSEEK(my
0380: 66 73 65 65 6b 29 0d 0a 7b 0d 0a 09 69 66 28 20  fseek)..{...if( 
0390: 68 66 3d 3d 6f 66 66 68 61 6e 20 7c 7c 20 68 66  hf==offhan || hf
03a0: 3d 3d 6f 66 66 68 61 6e 32 20 29 0d 0a 09 7b 0d  ==offhan2 )...{.
03b0: 0a 09 09 69 66 28 20 73 65 65 6b 74 79 70 65 3d  ...if( seektype=
03c0: 3d 53 45 45 4b 5f 53 45 54 20 29 0d 0a 09 09 09  =SEEK_SET ).....
03d0: 72 65 74 75 72 6e 20 5f 6c 73 65 65 6b 28 20 68  return _lseek( h
03e0: 66 2c 20 64 69 73 74 2b 73 65 65 6b 65 72 2c 20  f, dist+seeker, 
03f0: 53 45 45 4b 5f 53 45 54 20 29 20 2d 20 73 65 65  SEEK_SET ) - see
0400: 6b 65 72 3b 0d 0a 09 09 72 65 74 75 72 6e 20 5f  ker;....return _
0410: 6c 73 65 65 6b 28 20 68 66 2c 20 64 69 73 74 2c  lseek( hf, dist,
0420: 20 73 65 65 6b 74 79 70 65 20 29 20 2d 20 73 65   seektype ) - se
0430: 65 6b 65 72 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75  eker;...}...retu
0440: 72 6e 20 5f 6c 73 65 65 6b 28 20 68 66 2c 20 64  rn _lseek( hf, d
0450: 69 73 74 2c 20 73 65 65 6b 74 79 70 65 20 29 3b  ist, seektype );
0460: 0d 0a 7d 0d 0a 73 74 61 74 69 63 20 46 4e 46 44  ..}..static FNFD
0470: 49 4e 4f 54 49 46 59 28 6d 79 6e 6f 74 69 66 29  INOTIFY(mynotif)
0480: 0d 0a 7b 0d 0a 09 73 77 69 74 63 68 28 20 66 64  ..{...switch( fd
0490: 69 6e 74 20 29 0d 0a 09 7b 0d 0a 09 63 61 73 65  int )...{...case
04a0: 20 66 64 69 6e 74 43 4f 50 59 5f 46 49 4c 45 3a   fdintCOPY_FILE:
04b0: 0d 0a 09 09 7b 0d 0a 09 09 09 63 68 61 72 2a 20  ....{.....char* 
04c0: 6e 61 6d 65 20 3d 20 6b 69 75 74 69 6c 3a 3a 70  name = kiutil::p
04d0: 61 74 68 4d 61 6b 65 28 70 66 64 69 6e 2d 3e 70  athMake(pfdin->p
04e0: 73 7a 31 29 3b 0d 0a 09 09 09 69 66 28 20 30 3d  sz1);.....if( 0=
04f0: 3d 73 74 72 63 6d 70 69 28 20 6b 69 50 61 74 68  =strcmpi( kiPath
0500: 3a 3a 6e 61 6d 65 28 6e 61 6d 65 29 2c 20 73 64  ::name(name), sd
0510: 6c 6c 20 29 20 29 20 2f 2f 20 44 4c 4c 82 cc 88  ll ) ) // DLL...
0520: ca 92 75 82 f0 8b 4c 89 af 0d 0a 09 09 09 09 2a  ..u...L........*
0530: 73 64 6c 6c 72 20 3d 20 6e 61 6d 65 3b 0d 0a 0d  sdllr = name;...
0540: 0a 09 09 09 72 65 74 75 72 6e 20 6d 79 66 6f 70  ....return myfop
0550: 65 6e 28 20 6e 61 6d 65 2c 0d 0a 09 09 09 09 5f  en( name,......_
0560: 4f 5f 42 49 4e 41 52 59 7c 5f 4f 5f 43 52 45 41  O_BINARY|_O_CREA
0570: 54 7c 5f 4f 5f 54 52 55 4e 43 7c 5f 4f 5f 57 52  T|_O_TRUNC|_O_WR
0580: 4f 4e 4c 59 7c 5f 4f 5f 53 45 51 55 45 4e 54 49  ONLY|_O_SEQUENTI
0590: 41 4c 2c 0d 0a 09 09 09 09 5f 53 5f 49 52 45 41  AL,......_S_IREA
05a0: 44 7c 5f 53 5f 49 57 52 49 54 45 20 29 3b 0d 0a  D|_S_IWRITE );..
05b0: 09 09 7d 0d 0a 0d 0a 09 63 61 73 65 20 66 64 69  ..}.....case fdi
05c0: 6e 74 43 4c 4f 53 45 5f 46 49 4c 45 5f 49 4e 46  ntCLOSE_FILE_INF
05d0: 4f 3a 0d 0a 09 09 6d 79 66 63 6c 6f 73 65 28 20  O:....myfclose( 
05e0: 70 66 64 69 6e 2d 3e 68 66 20 29 3b 0d 0a 09 09  pfdin->hf );....
05f0: 6b 69 75 74 69 6c 3a 3a 74 69 6d 65 53 65 74 28  kiutil::timeSet(
0600: 20 70 66 64 69 6e 2d 3e 70 73 7a 31 2c 20 70 66   pfdin->psz1, pf
0610: 64 69 6e 2d 3e 64 61 74 65 2c 20 70 66 64 69 6e  din->date, pfdin
0620: 2d 3e 74 69 6d 65 20 29 3b 0d 0a 09 09 53 65 74  ->time );....Set
0630: 46 69 6c 65 41 74 74 72 69 62 75 74 65 73 28 20  FileAttributes( 
0640: 70 66 64 69 6e 2d 3e 70 73 7a 31 2c 0d 0a 09 09  pfdin->psz1,....
0650: 09 70 66 64 69 6e 2d 3e 61 74 74 72 69 62 73 26  .pfdin->attribs&
0660: 28 5f 41 5f 52 44 4f 4e 4c 59 7c 20 5f 41 5f 48  (_A_RDONLY| _A_H
0670: 49 44 44 45 4e 7c 5f 41 5f 53 59 53 54 45 4d 7c  IDDEN|_A_SYSTEM|
0680: 5f 41 5f 41 52 43 48 29 20 29 3b 0d 0a 09 09 72  _A_ARCH) );....r
0690: 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 7d 0d  eturn TRUE;...}.
06a0: 0a 09 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d 0a  ..return 0;..}..
06b0: 0d 0a 69 6e 74 20 43 43 61 62 54 6f 6f 6c 3a 3a  ..int CCabTool::
06c0: 46 69 6e 64 48 65 61 64 65 72 28 20 63 6f 6e 73  FindHeader( cons
06d0: 74 20 63 68 61 72 2a 20 66 6e 61 6d 65 2c 20 63  t char* fname, c
06e0: 6f 6e 73 74 20 42 59 54 45 2a 20 68 64 72 2c 20  onst BYTE* hdr, 
06f0: 44 57 4f 52 44 20 73 69 7a 20 29 0d 0a 7b 0d 0a  DWORD siz )..{..
0700: 09 2f 2f 20 46 44 49 8f 89 8a fa 89 bb 0d 0a 09  .// FDI.........
0710: 46 44 49 43 41 42 49 4e 45 54 49 4e 46 4f 20 69  FDICABINETINFO i
0720: 6e 66 6f 3b 0d 0a 09 45 52 46 20 65 72 66 3b 0d  nfo;...ERF erf;.
0730: 0a 09 48 46 44 49 20 66 64 69 3d 46 44 49 43 72  ..HFDI fdi=FDICr
0740: 65 61 74 65 28 20 6d 79 6d 61 6c 6c 6f 63 2c 6d  eate( mymalloc,m
0750: 79 6d 66 72 65 65 2c 6d 79 66 6f 70 65 6e 2c 6d  ymfree,myfopen,m
0760: 79 66 72 65 61 64 2c 0d 0a 09 09 09 09 09 6d 79  yfread,.......my
0770: 66 77 72 69 74 65 2c 6d 79 66 63 6c 6f 73 65 2c  fwrite,myfclose,
0780: 6d 79 66 73 65 65 6b 2c 63 70 75 55 4e 4b 4e 4f  myfseek,cpuUNKNO
0790: 57 4e 2c 26 65 72 66 20 29 3b 0d 0a 09 69 66 28  WN,&erf );...if(
07a0: 20 66 64 69 3d 3d 4e 55 4c 4c 20 29 0d 0a 09 09   fdi==NULL )....
07b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
07c0: 0a 09 2f 2f 20 8a 4a 82 ad 0d 0a 09 69 6e 74 20  ..// .J.....int 
07d0: 61 6e 73 3d 2d 31 2c 20 68 61 6e 3d 6d 79 66 6f  ans=-1, han=myfo
07e0: 70 65 6e 28 20 63 6f 6e 73 74 5f 63 61 73 74 3c  pen( const_cast<
07f0: 63 68 61 72 2a 3e 28 66 6e 61 6d 65 29 2c 0d 0a  char*>(fname),..
0800: 09 09 09 09 09 5f 4f 5f 42 49 4e 41 52 59 7c 5f  ....._O_BINARY|_
0810: 4f 5f 52 44 4f 4e 4c 59 7c 5f 4f 5f 53 45 51 55  O_RDONLY|_O_SEQU
0820: 45 4e 54 49 41 4c 2c 30 20 29 3b 0d 0a 0d 0a 09  ENTIAL,0 );.....
0830: 2f 2f 20 83 77 83 62 83 5f 8c 9f 8d f5 0d 0a 09  // .w.b._.......
0840: 69 66 28 20 2d 31 21 3d 68 61 6e 20 29 0d 0a 09  if( -1!=han )...
0850: 7b 0d 0a 09 09 69 66 28 20 73 69 7a 3e 31 30 20  {....if( siz>10 
0860: 26 26 20 68 64 72 5b 30 5d 3d 3d 27 4d 27 20 26  && hdr[0]=='M' &
0870: 26 20 68 64 72 5b 31 5d 3d 3d 27 5a 27 20 29 0d  & hdr[1]=='Z' ).
0880: 0a 09 09 7b 0d 0a 09 09 09 66 6f 72 28 20 44 57  ...{.....for( DW
0890: 4f 52 44 20 69 3d 32 3b 20 69 3c 73 69 7a 3b 20  ORD i=2; i<siz; 
08a0: 69 2b 2b 20 29 0d 0a 09 09 09 09 69 66 28 20 68  i++ )......if( h
08b0: 64 72 5b 69 2b 30 5d 3d 3d 27 4d 27 20 26 26 20  dr[i+0]=='M' && 
08c0: 68 64 72 5b 69 2b 31 5d 3d 3d 27 53 27 20 26 26  hdr[i+1]=='S' &&
08d0: 20 68 64 72 5b 69 2b 32 5d 3d 3d 27 43 27 20 26   hdr[i+2]=='C' &
08e0: 26 0d 0a 09 09 09 09 09 68 64 72 5b 69 2b 33 5d  &.......hdr[i+3]
08f0: 3d 3d 27 46 27 20 26 26 20 68 64 72 5b 69 2b 34  =='F' && hdr[i+4
0900: 5d 3d 3d 20 30 20 20 26 26 20 68 64 72 5b 69 2b  ]== 0  && hdr[i+
0910: 35 5d 3d 3d 20 30 20 20 26 26 0d 0a 09 09 09 09  5]== 0  &&......
0920: 09 68 64 72 5b 69 2b 36 5d 3d 3d 20 30 20 20 26  .hdr[i+6]== 0  &
0930: 26 20 68 64 72 5b 69 2b 37 5d 3d 3d 30 20 29 0d  & hdr[i+7]==0 ).
0940: 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 6d 79 66  .....{.......myf
0950: 73 65 65 6b 28 20 68 61 6e 2c 69 2c 53 45 45 4b  seek( han,i,SEEK
0960: 5f 53 45 54 20 29 3b 0d 0a 09 09 09 09 09 69 66  _SET );.......if
0970: 28 20 46 44 49 49 73 43 61 62 69 6e 65 74 28 66  ( FDIIsCabinet(f
0980: 64 69 2c 68 61 6e 2c 26 69 6e 66 6f 29 20 29 0d  di,han,&info) ).
0990: 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 61  ......{........a
09a0: 6e 73 3d 69 3b 0d 0a 09 09 09 09 09 09 62 72 65  ns=i;........bre
09b0: 61 6b 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09  ak;.......}.....
09c0: 09 7d 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d  .}....}....else.
09d0: 0a 09 09 7b 0d 0a 09 09 09 69 66 28 20 46 44 49  ...{.....if( FDI
09e0: 49 73 43 61 62 69 6e 65 74 28 20 66 64 69 2c 68  IsCabinet( fdi,h
09f0: 61 6e 2c 26 69 6e 66 6f 20 29 20 29 0d 0a 09 09  an,&info ) )....
0a00: 09 09 61 6e 73 20 3d 20 30 3b 0d 0a 09 09 7d 0d  ..ans = 0;....}.
0a10: 0a 09 09 6d 79 66 63 6c 6f 73 65 28 68 61 6e 29  ...myfclose(han)
0a20: 3b 0d 0a 09 7d 0d 0a 0d 0a 09 46 44 49 44 65 73  ;...}.....FDIDes
0a30: 74 72 6f 79 28 20 66 64 69 20 29 3b 0d 0a 09 72  troy( fdi );...r
0a40: 65 74 75 72 6e 20 61 6e 73 3b 0d 0a 7d 0d 0a 0d  eturn ans;..}...
0a50: 0a 62 6f 6f 6c 20 43 43 61 62 54 6f 6f 6c 3a 3a  .bool CCabTool::
0a60: 45 78 74 72 61 63 74 28 20 63 6f 6e 73 74 20 63  Extract( const c
0a70: 68 61 72 2a 20 61 6e 61 6d 65 2c 20 63 6f 6e 73  har* aname, cons
0a80: 74 20 63 68 61 72 2a 20 64 6c 6c 2c 20 6b 69 50  t char* dll, kiP
0a90: 61 74 68 26 20 64 6c 6c 5f 72 65 6c 5f 70 61 74  ath& dll_rel_pat
0aa0: 68 20 29 0d 0a 7b 0d 0a 09 73 64 6c 6c 20 3d 20  h )..{...sdll = 
0ab0: 64 6c 6c 2c 20 73 64 6c 6c 72 20 3d 20 26 64 6c  dll, sdllr = &dl
0ac0: 6c 5f 72 65 6c 5f 70 61 74 68 3b 0d 0a 0d 0a 09  l_rel_path;.....
0ad0: 2f 2f 20 83 77 83 62 83 5f 82 f0 92 54 82 b7 0d  // .w.b._...T...
0ae0: 0a 09 46 49 4c 45 2a 20 66 70 20 3d 20 66 6f 70  ..FILE* fp = fop
0af0: 65 6e 28 20 61 6e 61 6d 65 2c 22 72 62 22 20 29  en( aname,"rb" )
0b00: 3b 0d 0a 09 69 66 28 20 21 66 70 20 29 0d 0a 09  ;...if( !fp )...
0b10: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a  .return false;..
0b20: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 20  .unsigned char* 
0b30: 62 75 66 66 20 3d 20 6e 65 77 20 75 6e 73 69 67  buff = new unsig
0b40: 6e 65 64 20 63 68 61 72 5b 31 32 38 3c 3c 31 30  ned char[128<<10
0b50: 5d 3b 0d 0a 09 44 57 4f 52 44 20 73 69 7a 20 3d  ];...DWORD siz =
0b60: 20 66 72 65 61 64 28 20 62 75 66 66 2c 20 31 2c   fread( buff, 1,
0b70: 20 31 32 38 3c 3c 31 30 2c 20 66 70 20 29 3b 0d   128<<10, fp );.
0b80: 0a 09 66 63 6c 6f 73 65 28 20 66 70 20 29 3b 0d  ..fclose( fp );.
0b90: 0a 0d 0a 09 73 65 65 6b 65 72 20 3d 20 30 3b 0d  ....seeker = 0;.
0ba0: 0a 09 73 65 65 6b 65 72 20 3d 20 46 69 6e 64 48  ..seeker = FindH
0bb0: 65 61 64 65 72 28 20 61 6e 61 6d 65 2c 62 75 66  eader( aname,buf
0bc0: 66 2c 73 69 7a 20 29 3b 0d 0a 09 64 65 6c 65 74  f,siz );...delet
0bd0: 65 20 5b 5d 20 62 75 66 66 3b 0d 0a 09 69 66 28  e [] buff;...if(
0be0: 20 73 65 65 6b 65 72 3d 3d 2d 31 20 29 0d 0a 09   seeker==-1 )...
0bf0: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a  .return false;..
0c00: 0d 0a 09 2f 2f 20 46 44 49 8f 89 8a fa 89 bb 0d  ...// FDI.......
0c10: 0a 09 45 52 46 20 65 72 66 3b 0d 0a 09 48 46 44  ..ERF erf;...HFD
0c20: 49 20 66 64 69 3d 46 44 49 43 72 65 61 74 65 28  I fdi=FDICreate(
0c30: 20 6d 79 6d 61 6c 6c 6f 63 2c 6d 79 6d 66 72 65   mymalloc,mymfre
0c40: 65 2c 6d 79 66 6f 70 65 6e 2c 6d 79 66 72 65 61  e,myfopen,myfrea
0c50: 64 2c 0d 0a 09 09 09 09 09 6d 79 66 77 72 69 74  d,.......myfwrit
0c60: 65 2c 6d 79 66 63 6c 6f 73 65 2c 6d 79 66 73 65  e,myfclose,myfse
0c70: 65 6b 2c 63 70 75 55 4e 4b 4e 4f 57 4e 2c 26 65  ek,cpuUNKNOWN,&e
0c80: 72 66 20 29 3b 0d 0a 09 69 66 28 20 66 64 69 3d  rf );...if( fdi=
0c90: 3d 4e 55 4c 4c 20 29 0d 0a 09 09 72 65 74 75 72  =NULL )....retur
0ca0: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 2f 2f 20  n false;.....// 
0cb0: 46 44 49 82 c9 93 6e 82 b7 82 bd 82 df 82 c9 83  FDI...n.........
0cc0: 74 83 40 83 43 83 8b 96 bc 95 aa 8a 84 0d 0a 09  t.@.C...........
0cd0: 69 6e 74 20 79 2c 64 3b 0d 0a 09 6b 69 75 74 69  int y,d;...kiuti
0ce0: 6c 3a 3a 70 61 74 68 53 70 6c 69 74 28 20 61 6e  l::pathSplit( an
0cf0: 61 6d 65 2c 26 79 2c 26 64 20 29 3b 0d 0a 0d 0a  ame,&y,&d );....
0d00: 09 63 68 61 72 20 66 62 6f 64 79 5b 4d 41 58 5f  .char fbody[MAX_
0d10: 50 41 54 48 5d 2c 20 66 64 69 72 5b 4d 41 58 5f  PATH], fdir[MAX_
0d20: 50 41 54 48 5d 3d 7b 30 7d 3b 0d 0a 09 73 74 72  PATH]={0};...str
0d30: 63 70 79 28 20 66 62 6f 64 79 2c 26 61 6e 61 6d  cpy( fbody,&anam
0d40: 65 5b 79 2b 31 5d 20 29 3b 0d 0a 09 69 66 28 20  e[y+1] );...if( 
0d50: 79 21 3d 2d 31 20 29 0d 0a 09 09 73 74 72 6e 63  y!=-1 )....strnc
0d60: 70 79 28 20 66 64 69 72 2c 61 6e 61 6d 65 2c 79  py( fdir,aname,y
0d70: 2b 31 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 93 57 8a  +1 );.....// .W.
0d80: 4a 0d 0a 09 42 4f 4f 4c 20 61 6e 73 3d 46 44 49  J...BOOL ans=FDI
0d90: 43 6f 70 79 28 20 66 64 69 2c 66 62 6f 64 79 2c  Copy( fdi,fbody,
0da0: 66 64 69 72 2c 30 2c 6d 79 6e 6f 74 69 66 2c 4e  fdir,0,mynotif,N
0db0: 55 4c 4c 2c 4e 55 4c 4c 20 29 3b 0d 0a 0d 0a 09  ULL,NULL );.....
0dc0: 2f 2f 20 8f 49 97 b9 0d 0a 09 46 44 49 44 65 73  // .I.....FDIDes
0dd0: 74 72 6f 79 28 66 64 69 29 3b 0d 0a 09 72 65 74  troy(fdi);...ret
0de0: 75 72 6e 20 61 6e 73 21 3d 46 41 4c 53 45 3b 0d  urn ans!=FALSE;.
0df0: 0a 7d 0d 0a                                      .}..