/****************************************************************************
- * RRDtool 1.2.9 Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.2.12 Copyright by Tobi Oetiker, 1997-2005
****************************************************************************
* rrd_gfx.c graphics wrapper for rrdtool
**************************************************************************/
/* #define DEBUG */
#ifdef DEBUG
-# define DPRINTF(x,...) fprintf(stderr, x, ## __VA_ARGS__);
+# define DPRINTF(...) fprintf(stderr, __VA_ARGS__);
#else
-# define DPRINTF(x,...)
+# define DPRINTF(...)
#endif
#include "rrd_tool.h"
#include <png.h>
FT_Init_FreeType( &library );
error = FT_New_Face( library, font, 0, &face );
- if ( error ) return -1;
+ if ( error ) {
+ FT_Done_FreeType(library);
+ return -1;
+ }
error = FT_Set_Char_Size(face, size*64,size*64, 100,100);
- if ( error ) return -1;
-
+ if ( error ) {
+ FT_Done_FreeType(library);
+ return -1;
+ }
string = gfx_string_create( canvas, face, text, rotation, tabwidth, size );
text_width = string->width;
gfx_string_destroy(string);
cstr = malloc(sizeof(wchar_t) * clen); /* yes we are allocating probably too much here, I know */
string->count=mbstowcs(cstr,text,clen);
if ( string->count == -1){
- string->count=mbstowcs(cstr,"Enc-Err",6);
+ /* conversion did not work, so lets fall back to just use what we got */
+ string->count=clen-1;
+ for(n=0;text[n] != '\0';n++){
+ cstr[n]=(unsigned char)text[n];
+ }
}
#else
char *cstr = strdup(text);
&face );
if ( error ) {
rrd_set_error("failed to load %s",node->filename);
+
break;
}
error = FT_Set_Char_Size(face, /* handle to face object */
text_count = mbstowcs(cstr, "Enc-Err", 6);
p = cstr;
#else
- const unsigned char *p = text, ch;
+ unsigned char *p = text, ch;
if (!p)
return;
#endif
ch = afm_fix_osx_charset(ch); /* unsafe macro */
switch (ch) {
case 0:
-#ifdef HAVE_MBSTOWCS
+#ifdef HAVE_MBSTOWCS
free(cstr);
#endif
return;
case '"': fputs(""", fp); break;
default:
if (ch == 32) {
+#ifdef HAVE_MBSTOWCS
if (p <= cstr + 1 || !*p || *p == 32)
fputs(" ", fp); /* non-breaking space in unicode */
else
+#endif
fputc(32, fp);
} else if (ch < 32 || ch >= 127)
fprintf(fp, "&#%d;", (int)ch);
"-->\n", fp);
svg_start_tag(fp, "svg");
fputs(" width=\"", fp);
- svg_write_number(fp, width * canvas->zoom);
+ svg_write_number(fp, width * canvas->zoom);
fputs("\" height=\"", fp);
- svg_write_number(fp, height * canvas->zoom);
+ svg_write_number(fp, height * canvas->zoom);
fputs("\" x=\"0\" y=\"0\" viewBox=\"", fp);
svg_write_number(fp, -LINEOFFSET);
fputs(" ", fp);
fputs(" ", fp);
svg_write_number(fp, height - LINEOFFSET);
fputs("\" preserveAspectRatio=\"xMidYMid\"", fp);
- fprintf(fp, " font-family=\"%s\"", svg_default_font); /* default font */
- fputs(" stroke-linecap=\"round\" stroke-linejoin=\"round\"", fp);
+ fprintf(fp, " font-family=\"%s\"", svg_default_font); /* default font */
+ fputs(" stroke-linecap=\"round\" stroke-linejoin=\"round\"", fp);
+ fputs(" xmlns=\"http://www.w3.org/2000/svg\"", fp);
+ fputs(" xmlns:xlink=\"http://www.w3.org/1999/xlink\"", fp);
svg_close_tag(fp);
svg_start_tag(fp, "rect");
fprintf(fp, " x=\"0\" y=\"0\" width=\"%d\" height=\"%d\"", width, height);
text_count = mbstowcs(cstr, "Enc-Err", 6);
p = cstr;
#else
- const unsigned char *p = node->text, ch;
+ unsigned char *p = node->text, ch;
if (!p)
return;
#endif
default:
if (ch > 255) {
pdf_put_char(buf, '?');
- } else if (ch >= 126 || ch < 32) {
+ } else if (ch > 125 || ch < 32) {
pdf_put_char(buf, ch);
- } else if (ch >= 0 && ch <= 255) {
+ } else {
char tmp[10];
snprintf(tmp, sizeof(tmp), "\\%03o", (int)ch);
pdf_puts(buf, tmp);