@@ -298,9 +298,9 @@ HRESULT CFileWatcher::WatchFile(PCWSTR directoryName, DWORD directoryNameLength,
298
298
directory = this ->directories ;
299
299
while (NULL != directory)
300
300
{
301
- if (0 == wcsncmp (directory->directoryName , directoryName, directoryNameLength)
302
- && (startFileName == startSubdirectoryName
303
- || 0 == wcsncmp (directory->directoryName + directoryNameLength, startSubdirectoryName, startFileName - startSubdirectoryName) ))
301
+ if (wcslen (directory->directoryName ) == directoryNameLength + startFileName - startSubdirectoryName
302
+ && 0 == wcsncmp (directory-> directoryName , directoryName, directoryNameLength)
303
+ && 0 == wcsncmp (directory->directoryName + directoryNameLength, startSubdirectoryName, startFileName - startSubdirectoryName))
304
304
{
305
305
break ;
306
306
}
@@ -413,48 +413,60 @@ HRESULT CFileWatcher::RemoveWatch(CNodeApplication* application)
413
413
{
414
414
WatchedFile* file = directory->files ;
415
415
WatchedFile* previousFile = NULL ;
416
- while (file && file->application != application)
417
- {
418
- previousFile = file;
419
- file = file->next ;
420
- }
421
416
422
- if (file)
417
+ while (file)
423
418
{
424
- delete [] file->fileName ;
425
- if (previousFile)
426
- {
427
- previousFile->next = file->next ;
428
- }
429
- else
419
+ if (file->application == application)
430
420
{
431
- directory->files = file->next ;
432
- }
433
-
434
- delete file;
435
-
436
- if (!directory->files )
437
- {
438
- delete [] directory->directoryName ;
439
- CloseHandle (directory->watchHandle );
440
-
441
- if (previousDirectory)
421
+ WatchedFile* tmpFile = file;
422
+ delete [] file->fileName ;
423
+ if (previousFile)
442
424
{
443
- previousDirectory->next = directory->next ;
425
+ previousFile->next = file->next ;
426
+ file = file->next ;
427
+ if (!file)
428
+ {
429
+ previousDirectory = directory;
430
+ directory = directory->next ;
431
+ }
444
432
}
445
433
else
446
434
{
447
- this ->directories = directory->next ;
435
+ directory->files = file->next ;
436
+ file = file->next ;
437
+ if (!directory->files )
438
+ {
439
+ delete [] directory->directoryName ;
440
+ CloseHandle (directory->watchHandle );
441
+
442
+ if (previousDirectory)
443
+ {
444
+ previousDirectory->next = directory->next ;
445
+ }
446
+ else
447
+ {
448
+ this ->directories = directory->next ;
449
+ }
450
+
451
+ WatchedDirectory* tmpDirectory = directory;
452
+ directory = directory->next ;
453
+ delete tmpDirectory;
454
+ }
448
455
}
449
456
450
- delete directory;
457
+ delete tmpFile;
458
+ }
459
+ else
460
+ {
461
+ previousFile = file;
462
+ file = file->next ;
463
+ if (!file)
464
+ {
465
+ previousDirectory = directory;
466
+ directory = directory->next ;
467
+ }
451
468
}
452
-
453
- break ;
454
469
}
455
-
456
- previousDirectory = directory;
457
- directory = directory->next ;
458
470
}
459
471
460
472
LEAVE_CS (this ->syncRoot )
0 commit comments