--- old/src/java.desktop/share/native/libsplashscreen/splashscreen_impl.c 2016-08-09 19:37:55.717496000 +0530 +++ new/src/java.desktop/share/native/libsplashscreen/splashscreen_impl.c 2016-08-09 19:37:55.445496000 +0530 @@ -25,6 +25,12 @@ #include "splashscreen_impl.h" #include "splashscreen_gfx_impl.h" +#define BUFF_SIZE 1024 +#ifdef _MSC_VER +# ifndef snprintf +# define snprintf _snprintf +# endif +#endif int splashIsVisible = 0; @@ -392,5 +398,64 @@ SPLASHEXPORT int SplashGetScaledImgNameMaxPstfixLen(const char *fileName){ - return strlen(fileName) + strlen(".java-scale-200") + 1; + return strlen(fileName) + strlen("@100pct") + 1; } + +jboolean GetScaledImageName(const char *fileName,char *scaleImageName, + float *scaleFactor, const size_t scaledImageLength) { + FILE *fp = NULL; + if (*scaleFactor > 1.0) { + char strDpi[BUFF_SIZE]; + char *dupFileName = strdup(fileName); + char *fileExtension = strrchr(dupFileName, '.'); + size_t length = 0; + int retVal = 0; + if(*scaleFactor - (int)*scaleFactor < 0.000001) { + snprintf(strDpi, BUFF_SIZE, "%s%d%s", "@", (int)(*scaleFactor), "x"); + } else { + snprintf(strDpi, BUFF_SIZE, "%s%d%s", "@", (int)(*scaleFactor * 100), "pct"); + } + /*File is missing extension */ + if (fileExtension == NULL) { + length = strlen(dupFileName) + + strlen(strDpi) + 1; + if (length > scaledImageLength) { + *scaleFactor = 1; + free(dupFileName); + return JNI_FALSE; + } + retVal = snprintf(scaleImageName, length, "%s%s", dupFileName, + strDpi); + if (retVal < 0 || (retVal != length - 1)) { + *scaleFactor = 1; + free(dupFileName); + return JNI_FALSE; + } + } else { + int length_Without_Ext = fileExtension - dupFileName; + length = length_Without_Ext + strlen(strDpi) + + strlen(fileExtension) + 1; + if (length > scaledImageLength) { + *scaleFactor = 1; + free(dupFileName); + return JNI_FALSE; + } + retVal = snprintf(scaleImageName, length, "%.*s%s%s", + length_Without_Ext, dupFileName, strDpi, fileExtension); + if (retVal < 0 || (retVal != length - 1)) { + *scaleFactor = 1; + free(dupFileName); + return JNI_FALSE; + } + } + free(dupFileName); + if (!(fp = fopen(scaleImageName, "r"))) { + *scaleFactor = 1; + return JNI_FALSE; + } + fclose(fp); + return JNI_TRUE; + } + return JNI_FALSE; +} +