diff options
author | Eilidh McAdam <eilidh@lanedo.com> | 2012-08-02 12:01:05 +0100 |
---|---|---|
committer | Eilidh McAdam <eilidh@lanedo.com> | 2012-08-02 12:07:10 +0100 |
commit | 013d1e01c33ad41d16427470ac151192ea52adec (patch) | |
tree | 96bc216bf70e54cf3c6a7465422386f47eaa934a /setup_native | |
parent | d607a9c31bbe0b352cfa7797af17899cd9b7650d (diff) |
Ensure correct import of msi tables using wildcard character
Change-Id: I3e1800d73250a8a630dd37329189b13cfae311e9
Diffstat (limited to 'setup_native')
-rw-r--r-- | setup_native/source/win32/wintools/msidb/msidb.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/setup_native/source/win32/wintools/msidb/msidb.c b/setup_native/source/win32/wintools/msidb/msidb.c index 6916423732a0..c492ba290618 100644 --- a/setup_native/source/win32/wintools/msidb/msidb.c +++ b/setup_native/source/win32/wintools/msidb/msidb.c @@ -279,15 +279,15 @@ static BOOL msidbExportStream(LPCWSTR dbfile, LPCWSTR wdir, LPCWSTR streamName) /*********************************************************************** * msidbImportTables * - * Takes a list of tables or '*' (for all) to export to text archive + * Takes a list of tables or '*' (for all) to import from text archive * files in specified folder * - * For each table, a file called <tablename>.idt is exported containing + * For each table, a file called <tablename>.idt is imported containing * tab separated ASCII. * * Examples (note wildcard escape for *nix/bash): - * msidb -d <pathtomsi>.msi -f <workdir> -e \* - * msidb -d <pathtomsi>.msi -f <workdir> -e File Directory Binary + * msidb -d <pathtomsi>.msi -f <workdir> -i \* + * msidb -d <pathtomsi>.msi -f <workdir> -i File Directory Binary **********************************************************************/ static BOOL msidbImportTables(LPCWSTR dbfile, LPCWSTR wdir, LPWSTR tables[], BOOL create) { @@ -323,13 +323,17 @@ static BOOL msidbImportTables(LPCWSTR dbfile, LPCWSTR wdir, LPWSTR tables[], BOO { while ((ent = readdir(dir)) != NULL) { + if (ent->d_type != DT_REG) continue; fileName = ent->d_name; + if (strcmp(fileName+strlen(fileName)-4*sizeof(fileName[0]), ".idt") != 0) continue; if (strcmp(fileName, ".") == 0 || strcmp(fileName, "..") == 0) continue; tableFile = strdupAtoW(CP_ACP, fileName); r = MsiDatabaseImportW(dbhandle, wdir, tableFile); free(tableFile); } } + else + return FALSE; closedir(dir); free(dirNameA); } @@ -343,7 +347,6 @@ static BOOL msidbImportTables(LPCWSTR dbfile, LPCWSTR wdir, LPWSTR tables[], BOO lstrcpyW(tableFile, tables[i]); lstrcatW(tableFile, ext); - r = MsiDatabaseImportW(dbhandle, wdir, tableFile); free(tableFile); @@ -353,6 +356,7 @@ static BOOL msidbImportTables(LPCWSTR dbfile, LPCWSTR wdir, LPWSTR tables[], BOO } } } + MsiDatabaseCommit(dbhandle); MsiCloseHandle(dbhandle); return TRUE; @@ -476,10 +480,9 @@ int wmain(int argc, WCHAR *argv[]) i = 0; while (argv[2] && argv[2][0] != '-' && i < 10) { - argv++; argc--; i++; iTables[i] = argv[2]; + argv++; argc--; i++; } - break; case 'e': /* Export tables */ i = 0; @@ -550,6 +553,9 @@ int wmain(int argc, WCHAR *argv[]) if (!msidbExportStorage(dbfile, wdir, storageName)) return 6; + if (!iTables[0] && !oTables[0] && !streamName && !streamFiles[0] && !storageNames[0] && !storageName) + return 7; + return 0; } |