X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=driver%2Fremote.c;h=d56d5e9fd20ff2f5f205a2e29f20f22f841d8c42;hp=38bc4c8b4720fd0c7b2d2415d364e55da54abf0a;hb=ffd8c0873576a9e3065696a624dce6b766b77062;hpb=a94197e76a5dea5cb60542840809d6c20d0abbf3 diff --git a/driver/remote.c b/driver/remote.c index 38bc4c8b..d56d5e9f 100644 --- a/driver/remote.c +++ b/driver/remote.c @@ -89,7 +89,7 @@ find_screensaver_window (Display *dpy, char **version) Atom type; int format; unsigned long nitems, bytesafter; - char *v; + unsigned char *v; int status; /* We're walking the list of root-level windows and trying to find @@ -106,7 +106,7 @@ find_screensaver_window (Display *dpy, char **version) XA_SCREENSAVER_VERSION, 0, 200, False, XA_STRING, &type, &format, &nitems, &bytesafter, - (unsigned char **) &v); + &v); XSync (dpy, False); XSetErrorHandler (old_handler); old_handler = 0; @@ -119,11 +119,15 @@ find_screensaver_window (Display *dpy, char **version) if (status == Success && type != None) { + Window ret = kids[i]; if (version) - *version = v; - return kids[i]; + *version = (char *) v; + XFree (kids); + return ret; } } + + if (kids) XFree (kids); return 0; } @@ -132,6 +136,7 @@ static int send_xscreensaver_command (Display *dpy, Atom command, long arg, Window *window_ret, char **error_ret) { + int status = -1; char *v = 0; Window window = find_screensaver_window (dpy, &v); XWindowAttributes xgwa; @@ -148,15 +153,20 @@ send_xscreensaver_command (Display *dpy, Atom command, long arg, if (error_ret) { *error_ret = strdup (err); - return -1; + status = -1; + goto DONE; } if (command == XA_EXIT) - /* Don't print an error if xscreensaver is already dead. */ - return 1; + { + /* Don't print an error if xscreensaver is already dead. */ + status = 1; + goto DONE; + } fprintf (stderr, "%s: %s\n", progname, err); - return -1; + status = -1; + goto DONE; } /* Select for property change events, so that we can read the response. */ @@ -176,7 +186,9 @@ send_xscreensaver_command (Display *dpy, Atom command, long arg, *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); - return -1; + + status = -1; + goto DONE; } XGetClassHint(dpy, window, &hint); @@ -188,7 +200,10 @@ send_xscreensaver_command (Display *dpy, Atom command, long arg, *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); - return -1; + + if (v) free (v); + status = -1; + goto DONE; } fprintf (stdout, "%s %s", hint.res_class, v); @@ -202,21 +217,22 @@ send_xscreensaver_command (Display *dpy, Atom command, long arg, Atom type; int format; unsigned long nitems, bytesafter; - CARD32 *data = 0; + unsigned char *dataP = 0; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), XA_SCREENSAVER_STATUS, 0, 999, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, - (unsigned char **) &data) + &dataP) == Success && type - && data) + && dataP) { Atom blanked; time_t tt; char *s; + Atom *data = (Atom *) dataP; if (type != XA_INTEGER || nitems < 3) { @@ -225,7 +241,8 @@ send_xscreensaver_command (Display *dpy, Atom command, long arg, fprintf (stdout, "\n"); fflush (stdout); fprintf (stderr, "bad status format on root window.\n"); - return -1; + status = -1; + goto DONE; } blanked = (Atom) data[0]; @@ -262,13 +279,13 @@ send_xscreensaver_command (Display *dpy, Atom command, long arg, } if (any && nhacks == 1) - fprintf (stdout, " (hack #%d)\n", data[2]); + fprintf (stdout, " (hack #%d)\n", (int) data[2]); else if (any) { fprintf (stdout, " (hacks: "); for (i = 0; i < nhacks; i++) { - fprintf (stdout, "#%d", data[2 + i]); + fprintf (stdout, "#%d", (int) data[2 + i]); if (i != nhacks-1) fputs (", ", stdout); } @@ -282,16 +299,18 @@ send_xscreensaver_command (Display *dpy, Atom command, long arg, } else { - if (data) free (data); + if (dataP) XFree (dataP); fprintf (stdout, "\n"); fflush (stdout); fprintf (stderr, "no saver status on root window.\n"); - return -1; + status = -1; + goto DONE; } } /* No need to read a response for these commands. */ - return 1; + status = 1; + goto DONE; } else { @@ -326,11 +345,17 @@ send_xscreensaver_command (Display *dpy, Atom command, long arg, *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); - return -1; + status = -1; + goto DONE; } } + + status = 0; + + DONE: + if (v) free (v); XSync (dpy, 0); - return 0; + return status; } @@ -390,7 +415,7 @@ xscreensaver_command_response (Display *dpy, Window window, Atom type; int format; unsigned long nitems, bytesafter; - char *msg = 0; + unsigned char *msg = 0; XSync (dpy, False); if (old_handler) abort(); @@ -400,7 +425,7 @@ xscreensaver_command_response (Display *dpy, Window window, 0, 1024, True, AnyPropertyType, &type, &format, &nitems, &bytesafter, - (unsigned char **) &msg); + &msg); XSync (dpy, False); XSetErrorHandler (old_handler); old_handler = 0; @@ -449,7 +474,7 @@ xscreensaver_command_response (Display *dpy, Window window, else { int ret = (msg[0] == '+' ? 0 : -1); - sprintf (err, "%s: %s\n", progname, msg+1); + sprintf (err, "%s: %s\n", progname, (char *) msg+1); if (error_ret) *error_ret = strdup (err); @@ -507,30 +532,30 @@ server_xscreensaver_version (Display *dpy, if (version_ret) { - char *v = 0; + unsigned char *v = 0; XGetWindowProperty (dpy, window, XA_SCREENSAVER_VERSION, 0, 1, False, XA_STRING, &type, &format, &nitems, - &bytesafter, (unsigned char **) &v); + &bytesafter, &v); if (v) { - *version_ret = strdup (v); + *version_ret = strdup ((char *) v); XFree (v); } } if (user_ret || host_ret) { - char *id = 0; + unsigned char *id = 0; const char *user = 0; const char *host = 0; XGetWindowProperty (dpy, window, XA_SCREENSAVER_ID, 0, 512, False, XA_STRING, &type, &format, &nitems, - &bytesafter, (unsigned char **) &id); + &bytesafter, &id); if (id && *id) { const char *old_tag = " on host "; - const char *s = strstr (id, old_tag); + const char *s = strstr ((char *) id, old_tag); if (s) { /* found ID of the form "1234 on host xyz". */ @@ -540,7 +565,7 @@ server_xscreensaver_version (Display *dpy, else { char *o = 0, *p = 0, *c = 0; - o = strchr (id, '('); + o = strchr ((char *) id, '('); if (o) p = strchr (o, '@'); if (p) c = strchr (p, ')'); if (c)