8160664: JVM crashed with font manager on Solaris 12
Reviewed-by: prr, aivanov
This commit is contained in:
parent
eae21ed09c
commit
3ed86431ba
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -805,30 +805,36 @@ static char **getFontConfigLocations() {
|
||||
pattern = (*FcPatternBuild)(NULL, FC_OUTLINE, FcTypeBool, FcTrue, NULL);
|
||||
objset = (*FcObjectSetBuild)(FC_FILE, NULL);
|
||||
fontSet = (*FcFontList)(NULL, pattern, objset);
|
||||
fontdirs = (char**)calloc(fontSet->nfont+1, sizeof(char*));
|
||||
for (f=0; f < fontSet->nfont; f++) {
|
||||
FcChar8 *file;
|
||||
FcChar8 *dir;
|
||||
if ((*FcPatternGetString)(fontSet->fonts[f], FC_FILE, 0, &file) ==
|
||||
FcResultMatch) {
|
||||
dir = (*FcStrDirname)(file);
|
||||
found = 0;
|
||||
for (i=0;i<numdirs; i++) {
|
||||
if (strcmp(fontdirs[i], (char*)dir) == 0) {
|
||||
found = 1;
|
||||
break;
|
||||
if (fontSet == NULL) {
|
||||
/* FcFontList() may return NULL if fonts are not installed. */
|
||||
fontdirs = NULL;
|
||||
} else {
|
||||
fontdirs = (char**)calloc(fontSet->nfont+1, sizeof(char*));
|
||||
for (f=0; f < fontSet->nfont; f++) {
|
||||
FcChar8 *file;
|
||||
FcChar8 *dir;
|
||||
if ((*FcPatternGetString)(fontSet->fonts[f], FC_FILE, 0, &file) ==
|
||||
FcResultMatch) {
|
||||
dir = (*FcStrDirname)(file);
|
||||
found = 0;
|
||||
for (i=0;i<numdirs; i++) {
|
||||
if (strcmp(fontdirs[i], (char*)dir) == 0) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
fontdirs[numdirs++] = (char*)dir;
|
||||
} else {
|
||||
free((char*)dir);
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
fontdirs[numdirs++] = (char*)dir;
|
||||
} else {
|
||||
free((char*)dir);
|
||||
}
|
||||
}
|
||||
/* Free fontset if one was returned */
|
||||
(*FcFontSetDestroy)(fontSet);
|
||||
}
|
||||
|
||||
/* Free memory and close the ".so" */
|
||||
(*FcFontSetDestroy)(fontSet);
|
||||
(*FcPatternDestroy)(pattern);
|
||||
closeFontConfig(libfontconfig, JNI_TRUE);
|
||||
return fontdirs;
|
||||
|
Loading…
x
Reference in New Issue
Block a user