commit - 50e0da0e7f8e07ab5d5c970ebca132a49b5fdbd8
commit + 9307af9e3cb00ecb2647b4a62818fb728ca05dd4
blob - a564ad9a76e0273f9f5f0df79e9d1725d8f655c1
blob + b4c6b13bb50662e21b5c2c07350b4534676818f0
--- amused.c
+++ amused.c
struct imsgev *iev = d;
struct imsgbuf *imsgbuf = &iev->imsgbuf;
struct imsg imsg;
+ struct ibuf ibuf;
size_t datalen;
ssize_t n;
int shut = 0;
if (n == 0) /* No more messages. */
break;
- datalen = IMSG_DATA_SIZE(imsg);
switch (imsg.hdr.type) {
case IMSG_POS:
- if (datalen != sizeof(current_position))
- fatalx("IMSG_POS: got wrong size (%zu vs %zu)",
- datalen, sizeof(current_position));
- memcpy(¤t_position, imsg.data,
- sizeof(current_position));
+ if (imsg_get_data(&imsg, ¤t_position,
+ sizeof(current_position)) == -1)
+ fatalx("IMSG_POS: got wrong size");
if (current_position < 0)
current_position = -1;
control_notify(IMSG_CTL_SEEK);
break;
case IMSG_LEN:
- if (datalen != sizeof(current_duration))
- fatalx("IMSG_LEN: got wrong size (%zu vs %zu)",
- datalen, sizeof(current_duration));
- memcpy(¤t_duration, imsg.data,
- sizeof(current_duration));
+ if (imsg_get_data(&imsg, ¤t_duration,
+ sizeof(current_duration)) == -1)
+ fatalx("IMSG_LEN: got wrong size");
if (current_duration < 0)
current_duration = -1;
break;
case IMSG_ERR:
- if (datalen == 0)
+ if (imsg_get_ibuf(&imsg, &ibuf) == -1 ||
+ (datalen = ibuf_size(&ibuf)) == 0)
errstr = "unknown error";
else {
- errstr = imsg.data;
+ errstr = ibuf_data(&ibuf);
errstr[datalen-1] = '\0';
}
log_warnx("%s; skipping %s", errstr, current_song);
void
main_playlist_jump(struct imsgev *iev, struct imsg *imsg)
{
- size_t datalen;
char arg[PATH_MAX];
const char *song;
- datalen = IMSG_DATA_SIZE(*imsg);
- if (datalen != sizeof(arg)) {
+ if (imsg_get_data(imsg, arg, sizeof(arg)) == -1) {
main_senderr(iev, "wrong size");
return;
}
- memcpy(arg, imsg->data, sizeof(arg));
if (arg[sizeof(arg)-1] != '\0') {
main_senderr(iev, "data corrupted");
return;
main_enqueue(int tx, struct playlist *px, struct imsgev *iev,
struct imsg *imsg)
{
- size_t datalen;
char path[PATH_MAX];
const char *err = NULL;
- datalen = IMSG_DATA_SIZE(*imsg);
- if (datalen != sizeof(path)) {
+ if (imsg_get_data(imsg, path, sizeof(path)) == -1) {
err = "data size mismatch";
goto err;
}
- memcpy(path, imsg->data, sizeof(path));
- if (path[datalen-1] != '\0') {
+ if (path[sizeof(path)-1] != '\0') {
err = "malformed data";
goto err;
}
blob - 988d2bcd20786c9e57b0a22d5009d482ff7259d8
blob + 9d5e547e17bd94286648f3a42a40c7e637c55821
--- control.c
+++ control.c
main_playlist_jump(&c->iev, &imsg);
break;
case IMSG_CTL_MODE:
- if (IMSG_DATA_SIZE(imsg) != sizeof(mode)) {
+ if (imsg_get_data(&imsg, &mode, sizeof(mode)) == -1) {
log_warnx("%s: got wrong size", __func__);
break;
}
- memcpy(&mode, imsg.data, sizeof(mode));
consume = new_mode(consume, mode.consume);
repeat_all = new_mode(repeat_all, mode.repeat_all);
repeat_one = new_mode(repeat_one, mode.repeat_one);
main_senderr(&c->iev, "locked");
break;
}
- if (IMSG_DATA_SIZE(imsg) != sizeof(off)) {
+ if (imsg_get_data(&imsg, &off, sizeof(off)) == -1) {
main_senderr(&c->iev, "wrong size");
break;
}
- memcpy(&off, imsg.data, sizeof(off));
playlist_swap(&control_state.play, off);
memset(&control_state.play, 0,
sizeof(control_state.play));
c->monitor = 1;
break;
case IMSG_CTL_SEEK:
- if (IMSG_DATA_SIZE(imsg) != sizeof(seek)) {
+ if (imsg_get_data(&imsg, &seek, sizeof(seek)) == -1) {
main_senderr(&c->iev, "wrong size");
break;
}
- memcpy(&seek, imsg.data, sizeof(seek));
main_seek(&seek);
break;
default:
blob - 465d6a472c51cdb319d512a85f9bb2ee5280c1e7
blob + cb65f159136ceeccc6d056e7c9214215f8d47380
--- ctl.c
+++ ctl.c
static const char *
imsg_strerror(struct imsg *imsg)
{
+ struct ibuf ibuf;
size_t datalen;
const char *msg;
- datalen = IMSG_DATA_SIZE(*imsg);
- msg = imsg->data;
- if (datalen == 0 || msg[datalen-1] != '\0')
+ if (imsg_get_ibuf(imsg, &ibuf) == -1 ||
+ (datalen = ibuf_size(&ibuf)) == 0 ||
+ (msg = ibuf_data(&ibuf)) == NULL ||
+ msg[datalen - 1] != '\0')
fatalx("malformed error message");
return msg;
struct imsg imsg;
struct player_status ps;
struct player_event ev;
- size_t datalen;
ssize_t n;
int i, ret = 0, done = 1;
done = 1;
break;
}
-
- datalen = IMSG_DATA_SIZE(imsg);
switch (res->action) {
case ADD:
done = res->files[i] == NULL;
break;
case SHOW:
- if (datalen == 0) {
+ if (imsg_get_len(&imsg) == 0) {
done = 1;
break;
}
- if (datalen != sizeof(ps))
+ if (imsg_get_data(&imsg, &ps, sizeof(ps))
+ == -1)
fatalx("data size mismatch");
- memcpy(&ps, imsg.data, sizeof(ps));
if (ps.path[sizeof(ps.path) - 1] != '\0')
fatalx("received corrupted data");
if (res->pretty) {
fatalx("invalid message %d",
imsg.hdr.type);
- if (datalen != sizeof(ps))
+ if (imsg_get_data(&imsg, &ps, sizeof(ps))
+ == -1)
fatalx("data size mismatch");
- memcpy(&ps, imsg.data, sizeof(ps));
if (ps.path[sizeof(ps.path) - 1] != '\0')
fatalx("received corrupted data");
fatalx("invalid message %d",
imsg.hdr.type);
- if (datalen != sizeof(ev))
+ if (imsg_get_data(&imsg, &ev, sizeof(ev))
+ == -1)
fatalx("data size mismatch");
- memcpy(&ev, imsg.data, sizeof(ev));
if (ev.event < 0 || ev.event > IMSG__LAST)
fatalx("received corrupted data");
blob - 856bac10e35258f4711b55437794f4e815427be0
blob + 9270889eb3a67de7cfa82fc7a63d2f9e198ac5a5
--- player.c
+++ player.c
case IMSG_CTL_SEEK:
if (s == NULL)
break;
- if (IMSG_DATA_SIZE(imsg) != sizeof(seek))
+ if (imsg_get_data(&imsg, &seek, sizeof(seek)) == -1)
fatalx("wrong size for seek ctl");
- memcpy(&seek, imsg.data, sizeof(seek));
if (seek.percent)
*s = (double)seek.offset * (double)duration / 100.0;
else
blob - 8e365099a89783bf8a46797ee6c04fe3e0610a28
blob + 77c66abdeb8de47549a767232c6a8ff8264bdfdc
--- web/web.c
+++ web/web.c
static int off_found;
char seekmsg[128];
struct imsg imsg;
+ struct ibuf ibuf;
struct player_status ps;
struct player_event event;
const char *msg;
switch (imsg.hdr.type) {
case IMSG_CTL_ERR:
- msg = imsg.data;
- if (datalen == 0 || msg[datalen - 1] != '\0')
+ if (imsg_get_ibuf(&imsg, &ibuf) == -1 ||
+ (datalen = ibuf_size(&ibuf)) == 0 ||
+ (msg = ibuf_data(&ibuf)) == NULL ||
+ msg[datalen - 1] != '\0')
fatalx("malformed error message");
log_warnx("error: %s", msg);
break;
break;
case IMSG_CTL_MONITOR:
- if (datalen != sizeof(event))
+ if (imsg_get_data(&imsg, &event, sizeof(event)) == -1)
fatalx("corrupted IMSG_CTL_MONITOR");
- memcpy(&event, imsg.data, sizeof(event));
switch (event.event) {
case IMSG_CTL_PLAY:
case IMSG_CTL_PAUSE:
break;
case IMSG_CTL_SHOW:
- if (datalen == 0) {
+ if (imsg_get_len(&imsg) == 0) {
if (playlist_tmp.len == 0) {
dispatch_event("x:");
off = -1;
off_found = 0;
break;
}
- if (datalen != sizeof(ps))
+ if (imsg_get_data(&imsg, &ps, sizeof(ps)) == -1)
fatalx("corrupted IMSG_CTL_SHOW");
- memcpy(&ps, imsg.data, sizeof(ps));
if (ps.path[sizeof(ps.path) - 1] != '\0')
fatalx("corrupted IMSG_CTL_SHOW");
if (playlist_tmp.len == 0)
break;
case IMSG_CTL_STATUS:
- if (datalen != sizeof(player_status))
+ if (imsg_get_data(&imsg, &player_status,
+ sizeof(player_status)) == -1)
fatalx("corrupted IMSG_CTL_STATUS");
- memcpy(&player_status, imsg.data, datalen);
if (player_status.path[sizeof(player_status.path) - 1]
!= '\0')
fatalx("corrupted IMSG_CTL_STATUS");