1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

DtHelp: Apply graceful degradation for font loading to avoid a segmentation

fault.
This commit is contained in:
Liang Chang 2021-05-22 00:10:48 +08:00
parent 6f952545fb
commit a9ceb6db7a
4 changed files with 36 additions and 2 deletions

View file

@ -78,6 +78,7 @@ extern "C" {
* Semi Public Routines
****************************************************************************/
extern void _DtHelpCopyDefaultList(XrmName *xrm_list);
extern void _DtHelpCopyCasualList(XrmName *xrm_list);
extern long __DtHelpDefaultFontIndexGet (
DtHelpDispAreaStruct *pDAS);
extern void _DtHelpGetStringQuarks(XrmName *xrm_list);

View file

@ -266,6 +266,7 @@ static const char *FontResources[] =
static Boolean QuarksInited = FALSE;
static XrmQuark StringFontQuark = 0;
static XrmName DefaultFontQuarks[_DtHelpFontQuarkNumber];
static XrmName CasualFontQuarks[_DtHelpFontQuarkNumber];
static XrmBinding FontBindings[_DtHelpFontQuarkNumber] =
{ XrmBindLoosely, XrmBindLoosely, XrmBindLoosely, XrmBindLoosely,
XrmBindLoosely, XrmBindLoosely, XrmBindLoosely };
@ -673,6 +674,25 @@ _DtHelpCopyDefaultList (
xrm_list[n] = DefaultFontQuarks[n];
}
/******************************************************************************
* Function: void _DtHelpCopyCasualList (xrm_name)
*
* Parameters: xrm_name The quark list to fill out.
*
* Return Value: void
*
* Purpose:
*****************************************************************************/
void
_DtHelpCopyCasualList (
XrmName *xrm_list)
{
int n;
for (n = 0; n < _DT_HELP_FONT_END + 1; n++)
xrm_list[n] = CasualFontQuarks[n];
}
/******************************************************************************
* Function: void _DtHelpGetStringQuarks (xrm_name)
*
@ -744,6 +764,11 @@ __DtHelpFontDatabaseInit (
DefaultFontQuarks[_DT_HELP_FONT_CHAR_SET] =
XrmStringToQuark ("ISO-8859-1");
DefaultFontQuarks[_DT_HELP_FONT_END] = 0;
for (n = 0; n < _DT_HELP_FONT_END; ++n)
CasualFontQuarks[n] = XrmStringToQuark("*");
CasualFontQuarks[_DT_HELP_FONT_END] = 0;
QuarksInited = True;
}
_DtHelpProcessUnlock();

View file

@ -849,10 +849,17 @@ ResolveFont (
if (charset != NULL)
xrmList[_DT_HELP_FONT_CHAR_SET] = XrmStringToQuark(charset);
if (NULL == xlfdSpec ||
_DtHelpGetExactFontIndex(pDAS,lang,charset,xlfdSpec,ret_idx)!=0)
if (NULL != xlfdSpec)
result = _DtHelpGetExactFontIndex(pDAS,lang,charset,xlfdSpec,ret_idx);
if (result)
result = __DtHelpFontIndexGet (pDAS, xrmList, ret_idx);
if (result) {
_DtHelpCopyCasualList(xrmList);
result = __DtHelpFontIndexGet(pDAS, xrmList, ret_idx);
}
return result;
}

View file

@ -353,6 +353,7 @@ internal _DtHelpCloseVolume
internal _DtHelpCommonHelpClean
internal _DtHelpCommonHelpInit
internal _DtHelpCopyDefaultList
internal _DtHelpCopyCasualList
internal _DtHelpDABuildSelection
internal _DtHelpDADestroyGraphic
internal _DtHelpDADestroyRegion