Use an enumeration for file states.

This commit is contained in:
Mike McCormack 2005-11-02 10:56:42 +00:00 committed by Alexandre Julliard
parent 4413adf9a9
commit dded8fb7a8
3 changed files with 30 additions and 28 deletions

View File

@ -1305,7 +1305,7 @@ static UINT load_file(MSIRECORD *row, LPVOID param)
file->Attributes = MSI_RecordGetInteger( row, 7 ); file->Attributes = MSI_RecordGetInteger( row, 7 );
file->Sequence = MSI_RecordGetInteger( row, 8 ); file->Sequence = MSI_RecordGetInteger( row, 8 );
file->State = 0; file->state = msifs_invalid;
TRACE("File Loaded (%s)\n",debugstr_w(file->File)); 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) if (GetFileAttributesW(file->TargetPath) == INVALID_FILE_ATTRIBUTES)
{ {
file->State = 1; file->state = msifs_missing;
comp->Cost += file->FileSize; comp->Cost += file->FileSize;
continue; continue;
} }
@ -1896,16 +1896,16 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
debugstr_w(filever)); debugstr_w(filever));
if (strcmpiW(filever,file->Version)<0) if (strcmpiW(filever,file->Version)<0)
{ {
file->State = 2; file->state = msifs_overwrite;
FIXME("cost should be diff in size\n"); /* FIXME: cost should be diff in size */
comp->Cost += file->FileSize; comp->Cost += file->FileSize;
} }
else else
file->State = 3; file->state = msifs_present;
msi_free(version); msi_free(version);
} }
else else
file->State = 3; file->state = msifs_present;
} }
TRACE("Evaluating Condition Table\n"); TRACE("Evaluating Condition Table\n");

View File

@ -93,6 +93,15 @@ typedef struct tagMSIFOLDER
INT Space; INT Space;
} MSIFOLDER; } MSIFOLDER;
typedef enum _msi_file_state {
msifs_invalid,
msifs_missing,
msifs_overwrite,
msifs_present,
msifs_installed,
msifs_skipped,
} msi_file_state;
typedef struct tagMSIFILE typedef struct tagMSIFILE
{ {
struct list entry; struct list entry;
@ -105,14 +114,7 @@ typedef struct tagMSIFILE
LPWSTR Language; LPWSTR Language;
INT Attributes; INT Attributes;
INT Sequence; INT Sequence;
msi_file_state state;
INT State;
/* 0 = uninitialize */
/* 1 = not present */
/* 2 = present but replace */
/* 3 = present do not replace */
/* 4 = Installed */
/* 5 = Skipped */
LPWSTR SourcePath; LPWSTR SourcePath;
LPWSTR TargetPath; LPWSTR TargetPath;
} MSIFILE; } MSIFILE;

View File

@ -221,7 +221,7 @@ static INT_PTR cabinet_notify(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin)
return 0; 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)); TRACE("Skipping extraction of %s\n",debugstr_a(pfdin->psz1));
return 0; return 0;
@ -240,7 +240,7 @@ static INT_PTR cabinet_notify(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin)
return 0; return 0;
} }
f->State = 4; f->state = msifs_installed;
return (INT_PTR) handle; return (INT_PTR) handle;
} }
case fdintCLOSE_FILE_INFO: 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 (lstrcmpW( file_key, file->File )==0)
{ {
if (file->State >= 2) if (file->state >= msifs_overwrite)
{ {
*file_source = strdupW( file->TargetPath ); *file_source = strdupW( file->TargetPath );
return ERROR_SUCCESS; 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 * ACTION_InstallFiles()
* passes. *
* Pass 1) Correct all the TargetPaths and determin what files are to be * For efficiency, this is done in two passes:
* installed. * 1) Correct all the TargetPaths and determine what files are to be installed.
* Pass 2) Extract Cabinents and copy files. * 2) Extract Cabinets and copy files.
*/ */
UINT ACTION_InstallFiles(MSIPACKAGE *package) UINT ACTION_InstallFiles(MSIPACKAGE *package)
{ {
@ -648,7 +648,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
/* increment progress bar each time action data is sent */ /* increment progress bar each time action data is sent */
ui_progress(package,1,1,0,0); ui_progress(package,1,1,0,0);
/* handle the keys for the SouceList */ /* handle the keys for the SourceList */
ptr = strrchrW(package->PackagePath,'\\'); ptr = strrchrW(package->PackagePath,'\\');
if (ptr) if (ptr)
{ {
@ -669,7 +669,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
TRACE("File %s is not scheduled for install\n", TRACE("File %s is not scheduled for install\n",
debugstr_w(file->File)); debugstr_w(file->File));
file->State = 5; file->state = msifs_skipped;
} }
} }
@ -686,7 +686,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
/* Pass 2 */ /* Pass 2 */
LIST_FOR_EACH_ENTRY( file, &package->files, MSIFILE, entry ) 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; continue;
TRACE("Pass 2: %s\n",debugstr_w(file->File)); 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), TRACE("file paths %s to %s\n",debugstr_w(file->SourcePath),
debugstr_w(file->TargetPath)); debugstr_w(file->TargetPath));
if (file->State != 1 && file->State != 2) if (file->state != msifs_missing && file->state != msifs_overwrite)
continue; continue;
/* compressed files are extracted in ready_media_for_file */ /* compressed files are extracted in ready_media_for_file */
@ -720,7 +720,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
rc = GetLastError(); rc = GetLastError();
ERR("Unable to copy file (%s -> %s) (error %d)\n", ERR("Unable to copy file (%s -> %s) (error %d)\n",
debugstr_w(file->SourcePath), debugstr_w(file->TargetPath), rc); 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; rc = 0;
} }
@ -737,7 +737,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
} }
else else
{ {
file->State = 4; file->state = msifs_installed;
rc = ERROR_SUCCESS; rc = ERROR_SUCCESS;
} }
} }