Version 2.3.7 - replace deprecated gdk function / gkrellmd error flush

Use gdk_pixbuf_new_from_data() instead of deprecated
gdk_pixbuf_new_from_inline().  Inline alert_inline[] needed to be --raw.

When gkrellmd refused connections, the socket was not flushed and the error
message might not be sent back to the client.  Also, add a dialog to display
the error message.
This commit is contained in:
Bill Wilson 2016-06-03 15:18:07 -05:00
parent 83d18ccdf9
commit ff929058a5
9 changed files with 123 additions and 51 deletions

View File

@ -90,7 +90,7 @@ BINMODE = 755
#GTOP_LIBS_D = -L$(GTOP_PREFIX)/lib -lgtop -lgtop_common -lgtop_sysdeps
#export GTOP_INCLUDE GTOP_LIBS GTOP_LIBS_D
VERSION = 2.3.6-RC1
VERSION = 2.3.7
INSTALLROOT ?= $(DESTDIR)$(PREFIX)

View File

@ -108,8 +108,8 @@
*/
#define GKRELLMD_VERSION_MAJOR 2
#define GKRELLMD_VERSION_MINOR 3
#define GKRELLMD_VERSION_REV 6
#define GKRELLMD_EXTRAVERSION "-RC2"
#define GKRELLMD_VERSION_REV 7
#define GKRELLMD_EXTRAVERSION ""
#define GKRELLMD_CHECK_VERSION(major,minor,rev) \
(GKRELLMD_VERSION_MAJOR > (major) || \

View File

@ -1321,6 +1321,7 @@ gkrellmd_run(gint argc, gchar **argv)
#if defined(WIN32)
closesocket(client_fd);
#else
shutdown(client_fd, SHUT_WR);
close(client_fd);
#endif
continue;

View File

@ -1527,18 +1527,31 @@ gkrellm_load_alertconfig(GkrellmAlert **ap, gchar *config_line)
/* ------------------------------------------------------------------- */
/* gdk-pixbuf-csource --static alert_inline.png */
/* gdk-pixbuf-csource --static --raw alert_inline.png */
/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
/*
| pixdata = new GdkPixbuf.Pixdata({
| magic
| length
| pixdata_type
| rowstride
| width
| height
| pixel_data
*/
/* GdkPixbuf RGBA C-Source image dump */
static const guint8 alert_inline[] =
{ ""
/* Pixbuf magic (0x47646b50) */
"GdkP"
/* length: header (24) + pixel_data (925) */
"\0\0\3\265"
/* pixdata_type (0x2010002) */
"\2\1\0\2"
/* length: header (24) + pixel_data (1296) */
"\0\0\5("
/* pixdata_type (0x1010002) */
"\1\1\0\2"
/* rowstride (72) */
"\0\0\0H"
/* width (18) */
@ -1546,49 +1559,76 @@ static const guint8 alert_inline[] =
/* height (18) */
"\0\0\0\22"
/* pixel_data: */
"\227\0\0\0\0\10\204}{\377B89\377\20\24\20\377\10\2\10\377\0\2\0\377\30"
"\24\20\3779<9\377\214\212\204\377\211\0\0\0\0\12e`T\37732*\377\202]@"
"\377\251eF\377\267g?\377\265cF\377\243eG\377\202VG\37773$\377io`\377"
"\207\0\0\0\0\14PVG\377a<*\377\257^?\377\310\211q\377\333\262\241\377"
"\222\202t\377\311\254\234\377\333\262\233\377\310\211q\377\257^?\377"
"Z=+\377\\bM\377\205\0\0\0\0\16cfS\377Z=+\377\257^?\377\320\234\203\377"
"\333\270\241\377\252\217}\377\31\25\23\3772*%\377\342\274\251\377\333"
"\270\241\377\320\234\203\377\257^?\377Z=+\377|~k\377\203\0\0\0\0\17\204"
"\206{\37773$\377\251_?\377\301\202b\377\325\253\222\377\341\255\233\377"
"aNE\377\222tb\377\0\0\0\377\310\232\211\377\333\257\233\377\325\253\222"
"\377\302{h\377\251Z?\37773$\377\203\0\0\0\0\12JAB\377xQ1\377\257[?\377"
"\320\234\203\377\325\234\203\377\333\236\205\3770#\35\377\333\236\205"
"\377\30\21\17\377aF;\377\202\325\234\203\377\4\310\222u\377\257[?\377"
"tJ1\377kik\377\202\0\0\0\0\5\20\24\20\377\235[G\377\257[?\377\317\212"
"p\377\325\215u\377\202vOA\377\11\325\215u\377vM>\377\0\0\0\377\325\213"
"q\377\317\212p\377\317\213v\377\260T8\377\235[G\377)$)\377\202\0\0\0"
"\0\20\0\2\0\377\251Z?\377\267X?\377\310q\\\377\310{c\377.\32\25\377\270"
"lW\377\316z\\\377sA6\377\0\0\0\377sA6\377\317vb\377\301mV\377\257Q?\377"
"\245R8\377\10\2\10\377\202\0\0\0\0\6\0\2\0\377\251S?\377\260T8\377\277"
"N9\377\226M9\377,\25\21\377\202\205@4\377\10\200B4\377,\25\21\377+\26"
"\20\377\277N9\377\270K9\377\252M8\377\237N8\377\10\2\10\377\202\0\0\0"
"\0\20\30\24\30\377\230Y@\377\252S8\377\267R?\377T)\34\377\200>.\377\300"
"]F\377\307[F\377\300]F\377\200<.\377\0\0\0\377\221J<\377\260L8\377\245"
"J8\377\230VG\377!(!\377\202\0\0\0\0\7""9<1\377xO@\377\245J8\377\227D"
"1\377\0\0\0\377\266S8\377\302Q?\377\203\274S?\377\6\0\0\0\377N\37\31"
"\377\252F8\377\236F2\377~N@\377cic\377\202\0\0\0\0\12\234\216\224\377"
"73$\377\237G8\377\22\10\6\377\0\0\0\377N\40\26\377\242?1\377\257I2\377"
"\266G8\377N\40\26\377\202\0\0\0\377\3F\37\26\377\231D9\37773$\377\204"
"\0\0\0\0\5ii`\377T3#\377\231E2\377\237G8\377\252F8\377\203\251B2\377"
"\6\252F8\377\236@2\377\231@2\377\231E2\377N6#\377{\204q\377\205\0\0\0"
"\0\4baY\377T3#\377\223D2\377\231E2\377\202\236@2\377\6\237<6\377\231"
"E2\377\231@2\377\223@2\377T3#\377ii`\377\207\0\0\0\0\4t}j\377-4#\377"
"~N@\377\216K9\377\202\223@2\377\4\222K@\377xO@\37773$\377{\204q\377\212"
"\0\0\0\0\6kik\377!(!\377\10\2\10\377\0\2\0\377)$)\377kik\377\230\0\0"
"\0\0"};
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\204}{\377B89\377\20"
"\24\20\377\10\2\10\377\0\2\0\377\30\24\20\3779<9\377\214\212\204\377"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0e`T\37732*\377\202]@\377\251eF\377\267g\77\377\265cF\377\243eG\377"
"\202VG\37773$\377io`\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0PVG\377a<*\377\257^\77\377\310\211q\377\333\262\241\377\222"
"\202t\377\311\254\234\377\333\262\233\377\310\211q\377\257^\77\377Z="
"+\377\\bM\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0cfS\377Z=+\377\257"
"^\77\377\320\234\203\377\333\270\241\377\252\217}\377\31\25\23\3772*"
"%\377\342\274\251\377\333\270\241\377\320\234\203\377\257^\77\377Z=+"
"\377|~k\377\0\0\0\0\0\0\0\0\0\0\0\0\204\206{\37773$\377\251_\77\377\301"
"\202b\377\325\253\222\377\341\255\233\377aNE\377\222tb\377\0\0\0\377"
"\310\232\211\377\333\257\233\377\325\253\222\377\302{h\377\251Z\77\377"
"73$\377\0\0\0\0\0\0\0\0\0\0\0\0JAB\377xQ1\377\257[\77\377\320\234\203"
"\377\325\234\203\377\333\236\205\3770#\35\377\333\236\205\377\30\21\17"
"\377aF;\377\325\234\203\377\325\234\203\377\310\222u\377\257[\77\377"
"tJ1\377kik\377\0\0\0\0\0\0\0\0\20\24\20\377\235[G\377\257[\77\377\317"
"\212p\377\325\215u\377vOA\377vOA\377\325\215u\377vM>\377\0\0\0\377\325"
"\213q\377\317\212p\377\317\213v\377\260T8\377\235[G\377)$)\377\0\0\0"
"\0\0\0\0\0\0\2\0\377\251Z\77\377\267X\77\377\310q\\\377\310{c\377.\32"
"\25\377\270lW\377\316z\\\377sA6\377\0\0\0\377sA6\377\317vb\377\301mV"
"\377\257Q\77\377\245R8\377\10\2\10\377\0\0\0\0\0\0\0\0\0\2\0\377\251"
"S\77\377\260T8\377\277N9\377\226M9\377,\25\21\377\205@4\377\205@4\377"
"\200B4\377,\25\21\377+\26\20\377\277N9\377\270K9\377\252M8\377\237N8"
"\377\10\2\10\377\0\0\0\0\0\0\0\0\30\24\30\377\230Y@\377\252S8\377\267"
"R\77\377T)\34\377\200>.\377\300]F\377\307[F\377\300]F\377\200<.\377\0"
"\0\0\377\221J<\377\260L8\377\245J8\377\230VG\377!(!\377\0\0\0\0\0\0\0"
"\0""9<1\377xO@\377\245J8\377\227D1\377\0\0\0\377\266S8\377\302Q\77\377"
"\274S\77\377\274S\77\377\274S\77\377\0\0\0\377N\37\31\377\252F8\377\236"
"F2\377~N@\377cic\377\0\0\0\0\0\0\0\0\234\216\224\37773$\377\237G8\377"
"\22\10\6\377\0\0\0\377N\40\26\377\242\77""1\377\257I2\377\266G8\377N"
"\40\26\377\0\0\0\377\0\0\0\377F\37\26\377\231D9\37773$\377\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0ii`\377T3#\377\231E2\377\237G8\377\252F8\377\251"
"B2\377\251B2\377\251B2\377\252F8\377\236@2\377\231@2\377\231E2\377N6"
"#\377{\204q\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0baY\377T3#\377"
"\223D2\377\231E2\377\236@2\377\236@2\377\237<6\377\231E2\377\231@2\377"
"\223@2\377T3#\377ii`\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0t}j\377-4#\377~N@\377\216K9\377\223@2\377\223@2\377\222K"
"@\377xO@\37773$\377{\204q\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0kik\377!(!\377\10\2\10\377\0"
"\2\0\377)$)\377kik\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
"\0\0\0\0\0"};
static GdkPixbuf *alert_pixbuf;
GdkPixbuf *
gkrellm_alert_pixbuf(void)
{
guint8 *data = (guint8 *) alert_inline;
guint width, height, stride;
gpointer pixels;
if (!alert_pixbuf)
alert_pixbuf = gdk_pixbuf_new_from_inline(-1, alert_inline,
FALSE, NULL);
{
// alert_pixbuf = gdk_pixbuf_new_from_inline(-1, alert_inline,
// FALSE, NULL);
stride = big_endian_uint(data + 12);
width = big_endian_uint(data + 16);
height = big_endian_uint(data + 20);
pixels = g_memdup((gconstpointer)(data + 24), height * stride);
alert_pixbuf = gdk_pixbuf_new_from_data(pixels,
GDK_COLORSPACE_RGB, TRUE, 8, width, height, stride,
(GdkPixbufDestroyNotify) g_free, pixels);
}
return alert_pixbuf;
}

View File

@ -1418,6 +1418,18 @@ client_monitor_setup(gchar *line)
static void
client_server_error(gchar *line)
{
GtkWidget *dlg;
dlg = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
"GKrellM - connection refused from gkrellmd at %s:%d\n"
"\t%s\n\n"
"Edit gkrellmd.conf on %s to set:\n"
"\tmax-clents, allow-host, etc\n",
_GK.server, _GK.server_port, line, _GK.server);
gtk_dialog_run(GTK_DIALOG(dlg));
gtk_widget_destroy(dlg);
fprintf(stderr, "gkrellmd error: %s\n", line);
exit(0);
}

View File

@ -513,5 +513,4 @@ enum GkrellmConnectState
gkrellm_client_server_connect_state(void);
void gkrellm_client_mode_connect_thread(void);
gint gkrellm_client_server_get_net_timer(void);
guint big_endian_uint(guint8 *b);

View File

@ -108,8 +108,8 @@
*/
#define GKRELLM_VERSION_MAJOR 2
#define GKRELLM_VERSION_MINOR 3
#define GKRELLM_VERSION_REV 6
#define GKRELLM_EXTRAVERSION "-RC2"
#define GKRELLM_VERSION_REV 7
#define GKRELLM_EXTRAVERSION ""
#define GKRELLM_CHECK_VERSION(major,minor,rev) \
(GKRELLM_VERSION_MAJOR > (major) || \

View File

@ -672,8 +672,23 @@ gkrellm_piximage_new_from_inline(const guint8 *data, gboolean copy_pixels)
{
GkrellmPiximage *piximage;
GdkPixbuf *pixbuf;
guint width, height, stride;
guint8 *d = (guint8 *) data;
gpointer pixels;
// pixbuf = gdk_pixbuf_new_from_inline(-1, data, copy_pixels, NULL);
stride = big_endian_uint(d + 12);
width = big_endian_uint(d + 16);
height = big_endian_uint(d + 20);
pixels = g_memdup((gconstpointer)(d + 24), height * stride);
pixbuf = gdk_pixbuf_new_from_data(pixels,
GDK_COLORSPACE_RGB, TRUE, 8, width, height, stride,
(GdkPixbufDestroyNotify) g_free, pixels);
pixbuf = gdk_pixbuf_new_from_inline(-1, data, copy_pixels, NULL);
if (!pixbuf)
return NULL;
piximage = g_new0(GkrellmPiximage, 1);

View File

@ -527,3 +527,8 @@ gkrellm_locale_dup_string(gchar **dst_utf8, gchar *src, gchar **dst_locale)
return TRUE;
}
guint
big_endian_uint(guint8 *b)
{
return ((b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]);
}