From dded8fb7a8cb7e1a5a778c329304f29f3990ebd8 Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Wed, 2 Nov 2005 10:56:42 +0000 Subject: [PATCH] Use an enumeration for file states. --- dlls/msi/action.c | 12 ++++++------ dlls/msi/action.h | 18 ++++++++++-------- dlls/msi/files.c | 28 ++++++++++++++-------------- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 5f19211c74c..f5d44c2a5e2 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -1305,7 +1305,7 @@ static UINT load_file(MSIRECORD *row, LPVOID param) file->Attributes = MSI_RecordGetInteger( row, 7 ); file->Sequence = MSI_RecordGetInteger( row, 8 ); - file->State = 0; + file->state = msifs_invalid; TRACE("File Loaded (%s)\n",debugstr_w(file->File)); @@ -1861,7 +1861,7 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package) if (GetFileAttributesW(file->TargetPath) == INVALID_FILE_ATTRIBUTES) { - file->State = 1; + file->state = msifs_missing; comp->Cost += file->FileSize; continue; } @@ -1896,16 +1896,16 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package) debugstr_w(filever)); if (strcmpiW(filever,file->Version)<0) { - file->State = 2; - FIXME("cost should be diff in size\n"); + file->state = msifs_overwrite; + /* FIXME: cost should be diff in size */ comp->Cost += file->FileSize; } else - file->State = 3; + file->state = msifs_present; msi_free(version); } else - file->State = 3; + file->state = msifs_present; } TRACE("Evaluating Condition Table\n"); diff --git a/dlls/msi/action.h b/dlls/msi/action.h index 4cbe334806f..cc5c7a36dd0 100644 --- a/dlls/msi/action.h +++ b/dlls/msi/action.h @@ -93,6 +93,15 @@ typedef struct tagMSIFOLDER INT Space; } MSIFOLDER; +typedef enum _msi_file_state { + msifs_invalid, + msifs_missing, + msifs_overwrite, + msifs_present, + msifs_installed, + msifs_skipped, +} msi_file_state; + typedef struct tagMSIFILE { struct list entry; @@ -105,14 +114,7 @@ typedef struct tagMSIFILE LPWSTR Language; INT Attributes; INT Sequence; - - INT State; - /* 0 = uninitialize */ - /* 1 = not present */ - /* 2 = present but replace */ - /* 3 = present do not replace */ - /* 4 = Installed */ - /* 5 = Skipped */ + msi_file_state state; LPWSTR SourcePath; LPWSTR TargetPath; } MSIFILE; diff --git a/dlls/msi/files.c b/dlls/msi/files.c index 62ece6166e5..0a36add6019 100644 --- a/dlls/msi/files.c +++ b/dlls/msi/files.c @@ -221,7 +221,7 @@ static INT_PTR cabinet_notify(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin) return 0; } - if (f->State != 1 && f->State != 2) + if (f->state != msifs_missing && f->state != msifs_overwrite) { TRACE("Skipping extraction of %s\n",debugstr_a(pfdin->psz1)); return 0; @@ -240,7 +240,7 @@ static INT_PTR cabinet_notify(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin) return 0; } - f->State = 4; + f->state = msifs_installed; return (INT_PTR) handle; } case fdintCLOSE_FILE_INFO: @@ -615,7 +615,7 @@ static UINT get_file_target(MSIPACKAGE *package, LPCWSTR file_key, { if (lstrcmpW( file_key, file->File )==0) { - if (file->State >= 2) + if (file->state >= msifs_overwrite) { *file_source = strdupW( file->TargetPath ); return ERROR_SUCCESS; @@ -629,11 +629,11 @@ static UINT get_file_target(MSIPACKAGE *package, LPCWSTR file_key, } /* - * In order to make this work more effeciencly I am going to do this in 2 - * passes. - * Pass 1) Correct all the TargetPaths and determin what files are to be - * installed. - * Pass 2) Extract Cabinents and copy files. + * ACTION_InstallFiles() + * + * For efficiency, this is done in two passes: + * 1) Correct all the TargetPaths and determine what files are to be installed. + * 2) Extract Cabinets and copy files. */ UINT ACTION_InstallFiles(MSIPACKAGE *package) { @@ -648,7 +648,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package) /* increment progress bar each time action data is sent */ ui_progress(package,1,1,0,0); - /* handle the keys for the SouceList */ + /* handle the keys for the SourceList */ ptr = strrchrW(package->PackagePath,'\\'); if (ptr) { @@ -669,7 +669,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package) TRACE("File %s is not scheduled for install\n", debugstr_w(file->File)); - file->State = 5; + file->state = msifs_skipped; } } @@ -686,7 +686,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package) /* Pass 2 */ LIST_FOR_EACH_ENTRY( file, &package->files, MSIFILE, entry ) { - if (file->State != 1 && file->State != 2) + if (file->state != msifs_missing && file->state != msifs_overwrite) continue; TRACE("Pass 2: %s\n",debugstr_w(file->File)); @@ -702,7 +702,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package) TRACE("file paths %s to %s\n",debugstr_w(file->SourcePath), debugstr_w(file->TargetPath)); - if (file->State != 1 && file->State != 2) + if (file->state != msifs_missing && file->state != msifs_overwrite) continue; /* compressed files are extracted in ready_media_for_file */ @@ -720,7 +720,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package) rc = GetLastError(); ERR("Unable to copy file (%s -> %s) (error %d)\n", debugstr_w(file->SourcePath), debugstr_w(file->TargetPath), rc); - if (rc == ERROR_ALREADY_EXISTS && file->State == 2) + if (rc == ERROR_ALREADY_EXISTS && file->state == msifs_overwrite) { rc = 0; } @@ -737,7 +737,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package) } else { - file->State = 4; + file->state = msifs_installed; rc = ERROR_SUCCESS; } }