void DVDA_Title_dealloc(decoders_DVDA_Title *self) { /*additional memory deallocation here*/ close_mlp_decoder(self->mlp_decoder); if (self->packet_reader != NULL) close_packet_reader(self->packet_reader); if (self->sector_reader != NULL) close_sector_reader(self->sector_reader); buf_close(self->packet_data); buf_close(self->frames); self->codec_framelist->del(self->codec_framelist); self->output_framelist->del(self->output_framelist); #ifndef STANDALONE Py_XDECREF(self->audiotools_pcm); self->ob_type->tp_free((PyObject*)self); #endif }
static void flacdec_read_vorbis_comment(BitstreamReader *comment, unsigned channel_count, int *channel_mask) { struct bs_buffer *line = buf_new(); unsigned line_len; unsigned total_lines; const char mask_prefix[] = "WAVEFORMATEXTENSIBLE_CHANNEL_MASK="; if (!setjmp(*br_try(comment))) { /*skip over vendor string*/ line_len = comment->read(comment, 32); comment->skip_bytes(comment, line_len); /*walk through all entries in the comment*/ for (total_lines = comment->read(comment, 32); total_lines > 0; total_lines--) { const char *s; /*populate entry one character at a time (this avoids allocating a big chunk of space if the length field is something way too large)*/ buf_reset(line); for (line_len = comment->read(comment, 32); line_len > 0; line_len--) { buf_putc( toupper((int)comment->read(comment, 8)), line); } buf_putc(0, line); /*NULL terminator*/ s = (const char *)buf_window_start(line); /*if line starts with mask prefix*/ if (strstr(s, mask_prefix) == s) { /*convert rest of line to base-16 integer*/ unsigned mask = (unsigned)strtoul( s + strlen(mask_prefix), NULL, 16); /*and populate mask field if its number of channel bits matches the stream's channel count*/ if (channel_bits(mask) == channel_count) { *channel_mask = mask; } } } br_etry(comment); } else { /*read error in VORBIS_COMMENT (probably invalid length field somewhere)*/ br_etry(comment); } buf_close(line); }
int imsg_close(struct imsgbuf *ibuf, struct buf *msg) { int n; if ((n = buf_close(&ibuf->w, msg)) < 0) { log_warnx("imsg_close: buf_close error"); buf_free(msg); return (-1); } return (n); }
void imsg_close(struct imsgbuf *ibuf, struct buf *msg) { struct imsg_hdr *hdr; hdr = (struct imsg_hdr *)msg->buf; hdr->flags &= ~IMSGF_HASFD; if (msg->fd != -1) hdr->flags |= IMSGF_HASFD; hdr->len = (u_int16_t)msg->wpos; buf_close(&ibuf->w, msg); }
TEST close_works(void) { char b[] = "hello"; ASSERT_EQ(status_ok, NORM_INIT(h)); ASSERT_EQ(status_ok, buf_write(&h, b, sizeof(b))); ASSERT_STR_EQ("", (char *)flush_buffer); ASSERT_STR_EQ("hello", (char *)buffer); ASSERT_EQ(status_ok, buf_close(&h)); ASSERT_STR_EQ("hello", (char *)flush_buffer); PASS(); };
void dispatch_imsg(struct interface_info *ifi, int fd) { struct imsg_hdr hdr; char *medium, *reason, *filename, *servername, *prefix; size_t medium_len, reason_len, filename_len, servername_len, prefix_len, totlen; struct client_lease lease; int ret, i, optlen; struct buf *buf; buf_read(fd, &hdr, sizeof(hdr)); switch (hdr.code) { case IMSG_SCRIPT_INIT: if (hdr.len < sizeof(hdr) + sizeof(size_t)) error("corrupted message received"); buf_read(fd, &medium_len, sizeof(medium_len)); if (hdr.len < medium_len + sizeof(size_t) + sizeof(hdr) + sizeof(size_t) || medium_len == SIZE_T_MAX) error("corrupted message received"); if (medium_len > 0) { if ((medium = calloc(1, medium_len + 1)) == NULL) error("%m"); buf_read(fd, medium, medium_len); } else medium = NULL; buf_read(fd, &reason_len, sizeof(reason_len)); if (hdr.len < medium_len + reason_len + sizeof(hdr) || reason_len == SIZE_T_MAX) error("corrupted message received"); if (reason_len > 0) { if ((reason = calloc(1, reason_len + 1)) == NULL) error("%m"); buf_read(fd, reason, reason_len); } else reason = NULL; priv_script_init(reason, medium); free(reason); free(medium); break; case IMSG_SCRIPT_WRITE_PARAMS: bzero(&lease, sizeof lease); totlen = sizeof(hdr) + sizeof(lease) + sizeof(size_t); if (hdr.len < totlen) error("corrupted message received"); buf_read(fd, &lease, sizeof(lease)); buf_read(fd, &filename_len, sizeof(filename_len)); totlen += filename_len + sizeof(size_t); if (hdr.len < totlen || filename_len == SIZE_T_MAX) error("corrupted message received"); if (filename_len > 0) { if ((filename = calloc(1, filename_len + 1)) == NULL) error("%m"); buf_read(fd, filename, filename_len); } else filename = NULL; buf_read(fd, &servername_len, sizeof(servername_len)); totlen += servername_len + sizeof(size_t); if (hdr.len < totlen || servername_len == SIZE_T_MAX) error("corrupted message received"); if (servername_len > 0) { if ((servername = calloc(1, servername_len + 1)) == NULL) error("%m"); buf_read(fd, servername, servername_len); } else servername = NULL; buf_read(fd, &prefix_len, sizeof(prefix_len)); totlen += prefix_len; if (hdr.len < totlen || prefix_len == SIZE_T_MAX) error("corrupted message received"); if (prefix_len > 0) { if ((prefix = calloc(1, prefix_len + 1)) == NULL) error("%m"); buf_read(fd, prefix, prefix_len); } else prefix = NULL; for (i = 0; i < 256; i++) { totlen += sizeof(optlen); if (hdr.len < totlen) error("corrupted message received"); buf_read(fd, &optlen, sizeof(optlen)); lease.options[i].data = NULL; lease.options[i].len = optlen; if (optlen > 0) { totlen += optlen; if (hdr.len < totlen || optlen == SIZE_T_MAX) error("corrupted message received"); lease.options[i].data = calloc(1, optlen + 1); if (lease.options[i].data == NULL) error("%m"); buf_read(fd, lease.options[i].data, optlen); } } lease.server_name = servername; lease.filename = filename; priv_script_write_params(prefix, &lease); free(servername); free(filename); free(prefix); for (i = 0; i < 256; i++) if (lease.options[i].len > 0) free(lease.options[i].data); break; case IMSG_SCRIPT_GO: if (hdr.len != sizeof(hdr)) error("corrupted message received"); ret = priv_script_go(); hdr.code = IMSG_SCRIPT_GO_RET; hdr.len = sizeof(struct imsg_hdr) + sizeof(int); if ((buf = buf_open(hdr.len)) == NULL) error("buf_open: %m"); if (buf_add(buf, &hdr, sizeof(hdr))) error("buf_add: %m"); if (buf_add(buf, &ret, sizeof(ret))) error("buf_add: %m"); if (buf_close(fd, buf) == -1) error("buf_close: %m"); break; case IMSG_SEND_PACKET: send_packet_priv(ifi, &hdr, fd); break; default: error("received unknown message, code %d", hdr.code); } }