static int write_header(sox_format_t * ft) { char * comment = lsx_cat_comments(ft->oob.comments); size_t len = min(FIXED_HDR - 26, strlen(comment)) + 1; /* null-terminated */ size_t info_len = max(4, (len + 3) & ~3u); /* Minimum & multiple of 4 bytes */ int i = ft->encoding.reverse_bytes == MACHINE_IS_BIGENDIAN? 0 : 2; sox_bool error = sox_false ||lsx_writechars(ft, id[i].str, sizeof(id[i].str)) ||lsx_writef(ft, ft->signal.rate) ||lsx_writedw(ft, ft->signal.channels) ||lsx_writedw(ft, ft_enc(ft->encoding.bits_per_sample, ft->encoding.encoding)) ||lsx_writew(ft, SF_COMMENT) ||lsx_writew(ft, (unsigned) info_len) ||lsx_writechars(ft, comment, len) ||lsx_padbytes(ft, FIXED_HDR - 20 - len); free(comment); return error? SOX_EOF: SOX_SUCCESS; }
static int write_header(sox_format_t * ft) { char * comments = lsx_cat_comments(ft->oob.comments); size_t comments_len = strlen(comments); size_t comments_bytes = (comments_len + 7) & ~7u; /* Multiple of 8 bytes */ uint64_t size = ft->olength? ft->olength : ft->signal.length; sox_bool error = sox_false ||lsx_writedw(ft, *(uint32_t *)&magic[MACHINE_IS_BIGENDIAN]) ||lsx_writedw(ft, FIXED_HDR + (unsigned)comments_bytes) ||lsx_writeqw(ft, size) ||lsx_writedf(ft, ft->signal.rate) ||lsx_writedw(ft, ft->signal.channels) ||lsx_writedw(ft, (unsigned)comments_len) ||lsx_writechars(ft, comments, comments_len) ||lsx_padbytes(ft, comments_bytes - comments_len); free(comments); return error? SOX_EOF: SOX_SUCCESS; }
static int write_header(sox_format_t * ft) { return lsx_writechars(ft, ID1, sizeof(ID1)) || lsx_writedw(ft, (unsigned)(ft->olength? ft->olength:ft->signal.length)) || lsx_writechars(ft, ID2, sizeof(ID2))? SOX_EOF:SOX_SUCCESS; }