mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Fix for bug #105440; handle multiple file extensions in fe_NewFileType
This commit is contained in:
parent
1e0a8727b8
commit
3e28c9fee8
@ -41,7 +41,7 @@ CPtrList CHelperApp::m_cplHelpers;
|
|||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
void fe_ParseExtList(const char * ext_string, int *num_exts, char **list)
|
void fe_ParseExtList(const char * ext_string, int *num_exts, char **list, int maxExts)
|
||||||
{
|
{
|
||||||
char * start, *cur, *newext;
|
char * start, *cur, *newext;
|
||||||
int iLen, idx;
|
int iLen, idx;
|
||||||
@ -53,7 +53,7 @@ void fe_ParseExtList(const char * ext_string, int *num_exts, char **list)
|
|||||||
iLen = strlen(copy);
|
iLen = strlen(copy);
|
||||||
|
|
||||||
// traverse string
|
// traverse string
|
||||||
for (idx =0; idx < iLen; idx++) {
|
for (idx =0; idx < iLen && iExtCnt < maxExts; idx++) {
|
||||||
if (bInExt) {
|
if (bInExt) {
|
||||||
// We are currently reading an extension
|
// We are currently reading an extension
|
||||||
// If we have a character add it to the current extension
|
// If we have a character add it to the current extension
|
||||||
@ -101,12 +101,12 @@ void fe_ParseExtList(const char * ext_string, int *num_exts, char **list)
|
|||||||
static BOOL
|
static BOOL
|
||||||
ExtensionIsInList(LPCSTR lpszExtList, LPCSTR lpszExt)
|
ExtensionIsInList(LPCSTR lpszExtList, LPCSTR lpszExt)
|
||||||
{
|
{
|
||||||
LPSTR extlist[50]; // XXX - fe_ParseExtList needs another parameter...
|
LPSTR extlist[50];
|
||||||
int nExtensions = 0;
|
int nExtensions = 0;
|
||||||
BOOL bResult = FALSE;
|
BOOL bResult = FALSE;
|
||||||
|
|
||||||
ASSERT(lpszExt && (*lpszExt != '.'));
|
ASSERT(lpszExt && (*lpszExt != '.'));
|
||||||
fe_ParseExtList(lpszExtList, &nExtensions, extlist);
|
fe_ParseExtList(lpszExtList, &nExtensions, extlist, 50);
|
||||||
|
|
||||||
// Look for our extension
|
// Look for our extension
|
||||||
for (int i = 0; i < nExtensions; i++) {
|
for (int i = 0; i < nExtensions; i++) {
|
||||||
@ -234,14 +234,14 @@ void fe_SetExtensionList(NET_cdataStruct *cd_item)
|
|||||||
if (!cd_item)
|
if (!cd_item)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
char * extlist[50]; // BUG shouldn't limit it to 50 extensions-- big deal...blah easier to debug
|
char * extlist[50];
|
||||||
int iNumExt =0; // number from ini file
|
int iNumExt =0; // number from ini file
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
CString csExtListFromINI = theApp.GetProfileString("Suffixes",cd_item->ci.type);
|
CString csExtListFromINI = theApp.GetProfileString("Suffixes",cd_item->ci.type);
|
||||||
if (!csExtListFromINI.IsEmpty()) {
|
if (!csExtListFromINI.IsEmpty()) {
|
||||||
// add extension out of ini file
|
// add extension out of ini file
|
||||||
fe_ParseExtList((const char *) csExtListFromINI, &iNumExt, extlist);
|
fe_ParseExtList((const char *) csExtListFromINI, &iNumExt, extlist, 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iNumExt > 0) {
|
if (iNumExt > 0) {
|
||||||
@ -1093,9 +1093,17 @@ fe_NewFileType(LPCSTR lpszDescription,
|
|||||||
BOOL bAlreadyHasMimeType;
|
BOOL bAlreadyHasMimeType;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Parse out list of extensions.
|
||||||
|
LPSTR exts[50];
|
||||||
|
int i, numExts;
|
||||||
|
fe_ParseExtList( lpszExtension, &numExts, exts, 50 );
|
||||||
|
|
||||||
|
// Process each extension...
|
||||||
|
for( i = 0; i < numExts; i++ ) {
|
||||||
|
|
||||||
// Create a key for the file type extension. There may already be a key for
|
// Create a key for the file type extension. There may already be a key for
|
||||||
// this extension; that's okay this will open it
|
// this extension; that's okay this will open it
|
||||||
wsprintf(szExtKey, ".%s", lpszExtension);
|
wsprintf(szExtKey, ".%s", exts[i]);
|
||||||
if (RegCreateKey(HKEY_CLASSES_ROOT, szExtKey, &hKey) != ERROR_SUCCESS)
|
if (RegCreateKey(HKEY_CLASSES_ROOT, szExtKey, &hKey) != ERROR_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -1104,7 +1112,7 @@ fe_NewFileType(LPCSTR lpszDescription,
|
|||||||
// we assume that we're just adding another MIME type for this file type
|
// we assume that we're just adding another MIME type for this file type
|
||||||
if (!GetClassName(lpszExtension, strFileClass)) {
|
if (!GetClassName(lpszExtension, strFileClass)) {
|
||||||
// Create a file type class
|
// Create a file type class
|
||||||
strFileClass = lpszExtension;
|
strFileClass = exts[i];
|
||||||
strFileClass += "file";
|
strFileClass += "file";
|
||||||
|
|
||||||
// Set the file type class
|
// Set the file type class
|
||||||
@ -1151,6 +1159,7 @@ fe_NewFileType(LPCSTR lpszDescription,
|
|||||||
#else
|
#else
|
||||||
AddNetscapeMimeType(lpszMimeType, szExtKey);
|
AddNetscapeMimeType(lpszMimeType, szExtKey);
|
||||||
#endif
|
#endif
|
||||||
|
} // end for loop for each extension
|
||||||
|
|
||||||
// Create the NET_cdataStruct structure and associated CHelperApp object
|
// Create the NET_cdataStruct structure and associated CHelperApp object
|
||||||
NET_cdataStruct *pcdata = NET_cdataCreate();
|
NET_cdataStruct *pcdata = NET_cdataCreate();
|
||||||
@ -1158,17 +1167,11 @@ fe_NewFileType(LPCSTR lpszDescription,
|
|||||||
if (pcdata) {
|
if (pcdata) {
|
||||||
pcdata->ci.desc = XP_STRDUP(lpszDescription);
|
pcdata->ci.desc = XP_STRDUP(lpszDescription);
|
||||||
pcdata->ci.type = XP_STRDUP(lpszMimeType);
|
pcdata->ci.type = XP_STRDUP(lpszMimeType);
|
||||||
pcdata->num_exts = 0;
|
pcdata->num_exts = numExts;
|
||||||
pcdata->exts = (char **)XP_ALLOC(sizeof(char *));
|
pcdata->exts = (char **)XP_ALLOC(numExts*sizeof(char *));
|
||||||
if (pcdata->exts) {
|
if (pcdata->exts) {
|
||||||
pcdata->exts[0] = XP_STRDUP(lpszExtension);
|
for( i = 0; i < numExts; i++ ) {
|
||||||
|
pcdata->exts[i] = XP_STRDUP(exts[i]);
|
||||||
if (pcdata->exts[0]) {
|
|
||||||
pcdata->num_exts = 1;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
XP_FREE(pcdata->exts);
|
|
||||||
pcdata->exts = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1322,9 +1322,9 @@ CNewTypeDialog::DoTransfer(BOOL bSaveAndValidate)
|
|||||||
if (bSaveAndValidate) {
|
if (bSaveAndValidate) {
|
||||||
char szFileClass[80];
|
char szFileClass[80];
|
||||||
|
|
||||||
// See if the extension begins with a leading '.' If it does strip
|
// See if the extension begins with leading punctuation or white space.
|
||||||
// it off
|
// If it does, strip it off
|
||||||
while (m_strExtension[0] == '.') {
|
while (!isalnum(m_strExtension[0])) {
|
||||||
m_strExtension = m_strExtension.Mid(1);
|
m_strExtension = m_strExtension.Mid(1);
|
||||||
|
|
||||||
// Update what's displayed so the user sees we changed the extension
|
// Update what's displayed so the user sees we changed the extension
|
||||||
|
Loading…
Reference in New Issue
Block a user