Beispiel #1
0
IF_DESKTOP(long long) int bz_write(bz_stream *strm, void* rbuf, ssize_t rlen, void *wbuf)
{
	int n, n2, ret;

	strm->avail_in = rlen;
	strm->next_in = rbuf;
	while (1) {
		strm->avail_out = IOBUF_SIZE;
		strm->next_out = wbuf;

		ret = BZ2_bzCompress(strm, rlen ? BZ_RUN : BZ_FINISH);
		if (ret != BZ_RUN_OK /* BZ_RUNning */
		 && ret != BZ_FINISH_OK /* BZ_FINISHing, but not done yet */
		 && ret != BZ_STREAM_END /* BZ_FINISHed */
		) {
			bb_error_msg_and_die("internal error %d", ret);
		}

		n = IOBUF_SIZE - strm->avail_out;
		if (n) {
			n2 = full_write(STDOUT_FILENO, wbuf, n);
			if (n2 != n) {
				if (n2 >= 0)
					errno = 0; /* prevent bogus error message */
				bb_perror_msg(n2 >= 0 ? "short write" : bb_msg_write_error);
				return -1;
			}
		}

		if (ret == BZ_STREAM_END)
			break;
		if (rlen && strm->avail_in == 0)
			break;
	}
	return 0 IF_DESKTOP( + strm->total_out );
}
int cmp_main(int argc UNUSED_PARAM, char **argv)
{
    FILE *fp1, *fp2, *outfile = stdout;
    const char *filename1, *filename2 = "-";
    IF_DESKTOP(off_t skip1 = 0, skip2 = 0;)
    off_t char_pos = 0;
    int line_pos = 1; /* Hopefully won't overflow... */
    const char *fmt;
    int c1, c2;
    unsigned opt;
    int retval = 0;

    xfunc_error_retval = 2;	/* 1 is returned if files are different. */

    opt_complementary = "-1"
                        IF_DESKTOP(":?4")
                        IF_NOT_DESKTOP(":?2")
                        ":l--s:s--l";
    opt = getopt32(argv, opt_chars);
    argv += optind;

    filename1 = *argv;
    fp1 = xfopen_stdin(filename1);

    if (*++argv) {
        filename2 = *argv;
#if ENABLE_DESKTOP
        if (*++argv) {
            skip1 = XATOOFF(*argv);
            if (*++argv) {
                skip2 = XATOOFF(*argv);