Introduction
Introduction Statistics Contact Development Disclaimer Help
Send message size inside messages through pipes - surf - surf browser, a WebKit…
git clone git://git.suckless.org/surf
Log
Files
Refs
README
LICENSE
---
commit 02541c314678aa1ee6eb485ca9dce66a46693aac
parent 2b71a22755bae132a639fe10475a0d42e582d244
Author: Quentin Rameau <[email protected]>
Date: Tue, 9 Oct 2018 12:27:59 +0200
Send message size inside messages through pipes
Diffstat:
M common.h | 2 +-
M libsurf-webext.c | 37 ++++++++++++++++++-----------…
M surf.c | 26 +++++++++++++++++---------
3 files changed, 39 insertions(+), 26 deletions(-)
---
diff --git a/common.h b/common.h
@@ -1,3 +1,3 @@
-#define MSGBUFSZ 32
+#define MSGBUFSZ 8
void die(char *, ...);
diff --git a/libsurf-webext.c b/libsurf-webext.c
@@ -41,59 +41,64 @@ newpage(WebKitWebPage *page)
static void
msgsurf(Page *p, const char *s)
{
- char msg[MSGBUFSZ];
+ static char msg[MSGBUFSZ];
+ size_t sln = strlen(s);
int ret;
- msg[0] = p ? p->id : 0;
- ret = snprintf(&msg[1], sizeof(msg) - 1, "%s", s);
- if (ret >= sizeof(msg)) {
+ if ((ret = snprintf(msg, sizeof(msg), "%c%c%s",
+ 2 + sln, p ? p->id : 0, s))
+ >= sizeof(msg)) {
fprintf(stderr, "webext: message too long: %d\n", ret);
return;
}
- if (pipeout) {
- if (write(pipeout, msg, sizeof(msg)) < 0)
- fprintf(stderr, "webext: error sending: %s\n", msg);
- }
+ if (pipeout && write(pipeout, msg, sizeof(msg)) < 0)
+ fprintf(stderr, "webext: error sending: %.*s\n", ret-2, msg+2);
}
static gboolean
readpipe(GIOChannel *s, GIOCondition c, gpointer unused)
{
- char msg[MSGBUFSZ];
- gsize msgsz;
+ static char msg[MSGBUFSZ], msgsz;
WebKitDOMDOMWindow *view;
GError *gerr = NULL;
glong wh, ww;
Page *p;
- if (g_io_channel_read_chars(s, msg, LENGTH(msg), &msgsz, &gerr) !=
+ if (g_io_channel_read_chars(s, msg, LENGTH(msg), NULL, &gerr) !=
G_IO_STATUS_NORMAL) {
fprintf(stderr, "webext: error reading pipe: %s\n",
gerr->message);
g_error_free(gerr);
return TRUE;
}
- msg[msgsz] = '\0';
+ if ((msgsz = msg[0]) < 3) {
+ fprintf(stderr, "webext: message too short: %d\n", msgsz);
+ return TRUE;
+ }
for (p = pages; p; p = p->next) {
- if (p->id == msg[0])
+ if (p->id == msg[1])
break;
}
if (!p || !(view = webkit_dom_document_get_default_view(
webkit_web_page_get_dom_document(p->webpage))))
return TRUE;
- switch (msg[1]) {
+ switch (msg[2]) {
case 'h':
+ if (msgsz != 4)
+ return TRUE;
ww = webkit_dom_dom_window_get_inner_width(view);
webkit_dom_dom_window_scroll_by(view,
- (ww / 100) * msg[2], 0);
+ (ww / 100) * msg[3], 0);
break;
case 'v':
+ if (msgsz != 4)
+ return TRUE;
wh = webkit_dom_dom_window_get_inner_height(view);
webkit_dom_dom_window_scroll_by(view,
- 0, (wh / 100) * msg[2]);
+ 0, (wh / 100) * msg[3]);
break;
}
diff --git a/surf.c b/surf.c
@@ -1209,20 +1209,22 @@ newview(Client *c, WebKitWebView *rv)
static gboolean
readpipe(GIOChannel *s, GIOCondition ioc, gpointer unused)
{
- char msg[MSGBUFSZ];
- gsize msgsz;
+ static char msg[MSGBUFSZ], msgsz;
GError *gerr = NULL;
- if (g_io_channel_read_chars(s, msg, sizeof(msg), &msgsz, &gerr) !=
+ if (g_io_channel_read_chars(s, msg, sizeof(msg), NULL, &gerr) !=
G_IO_STATUS_NORMAL) {
fprintf(stderr, "surf: error reading pipe: %s\n",
gerr->message);
g_error_free(gerr);
return TRUE;
}
- msg[msgsz] = '\0';
+ if ((msgsz = msg[0]) < 3) {
+ fprintf(stderr, "surf: message too short: %d\n", msgsz);
+ return TRUE;
+ }
- switch (msg[1]) {
+ switch (msg[2]) {
case 'i':
close(pipein[1]);
close(pipeout[0]);
@@ -1843,12 +1845,18 @@ zoom(Client *c, const Arg *a)
static void
msgext(Client *c, char type, const Arg *a)
{
- char msg[MSGBUFSZ] = { c->pageid, type, a->i, '\0' };
+ static char msg[MSGBUFSZ];
+ int ret;
- if (pipeout[1]) {
- if (write(pipeout[1], msg, sizeof(msg)) < 0)
- fprintf(stderr, "surf: error sending: %s\n", msg);
+ if ((ret = snprintf(msg, sizeof(msg), "%c%c%c%c",
+ 4, c->pageid, type, a->i))
+ >= sizeof(msg)) {
+ fprintf(stderr, "surf: message too long: %d\n", ret);
+ return;
}
+
+ if (pipeout[1] && write(pipeout[1], msg, sizeof(msg)) < 0)
+ fprintf(stderr, "surf: error sending: %.*s\n", ret-2, msg+2);
}
void
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.