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 #GTOP_LIBS_D = -L$(GTOP_PREFIX)/lib -lgtop -lgtop_common -lgtop_sysdeps
#export GTOP_INCLUDE GTOP_LIBS GTOP_LIBS_D #export GTOP_INCLUDE GTOP_LIBS GTOP_LIBS_D
VERSION = 2.3.6-RC1 VERSION = 2.3.7
INSTALLROOT ?= $(DESTDIR)$(PREFIX) INSTALLROOT ?= $(DESTDIR)$(PREFIX)

View File

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

View File

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

View File

@ -1418,6 +1418,18 @@ client_monitor_setup(gchar *line)
static void static void
client_server_error(gchar *line) 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); fprintf(stderr, "gkrellmd error: %s\n", line);
exit(0); exit(0);
} }

View File

@ -513,5 +513,4 @@ enum GkrellmConnectState
gkrellm_client_server_connect_state(void); gkrellm_client_server_connect_state(void);
void gkrellm_client_mode_connect_thread(void); void gkrellm_client_mode_connect_thread(void);
gint gkrellm_client_server_get_net_timer(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_MAJOR 2
#define GKRELLM_VERSION_MINOR 3 #define GKRELLM_VERSION_MINOR 3
#define GKRELLM_VERSION_REV 6 #define GKRELLM_VERSION_REV 7
#define GKRELLM_EXTRAVERSION "-RC2" #define GKRELLM_EXTRAVERSION ""
#define GKRELLM_CHECK_VERSION(major,minor,rev) \ #define GKRELLM_CHECK_VERSION(major,minor,rev) \
(GKRELLM_VERSION_MAJOR > (major) || \ (GKRELLM_VERSION_MAJOR > (major) || \

View File

@ -672,8 +672,23 @@ gkrellm_piximage_new_from_inline(const guint8 *data, gboolean copy_pixels)
{ {
GkrellmPiximage *piximage; GkrellmPiximage *piximage;
GdkPixbuf *pixbuf; 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) if (!pixbuf)
return NULL; return NULL;
piximage = g_new0(GkrellmPiximage, 1); 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; return TRUE;
} }
guint
big_endian_uint(guint8 *b)
{
return ((b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]);
}