#include #include #include // #define D(x) x #ifndef D #define D(x) #endif #include #include #include #include "z3blib.c" #include "z3dlib.c" #include "z3flib.c" static void showsize(int fd) { struct stat buf; fstat(fd, &buf); fprintf(stderr, " size=%d\n", buf.st_size); } int main(int argc, char **argv) { struct z3fe_handle zh; __u8 code[500000]; struct timeval tv; int r, i, w; int f = 0; gettimeofday(&tv, NULL); r = z3f_encode_init(STDOUT_FILENO, &zh, (argc > 1) ? atoi(argv[1]) : 0, tv.tv_sec, 3, 0, NULL, (argc > 2) ? argv[2] : NULL, NULL); if (r < 0) { fprintf(stderr, "z3f_encode_init failed: %s\n", strerror(-r)); return 1; } do { r = z3f_encode_header(&zh, 0, NULL, (argc > 2) ? argv[2] : NULL, NULL); } while (r == -EAGAIN); if (r < 0) { fprintf(stderr, "z3f_encode_header failed: %s\n", strerror(-r)); return 1; } do { r = read(STDIN_FILENO, &code[0], f ? sizeof(code) : 100); f = 1; if (r < 0) { perror("read failed"); return 1; } i = 0; while (i < r) { w = z3f_encode_write(&zh, &code[i], r-i); fprintf(stderr, "written: %d (len=%d)\n", w, r-i); showsize(STDOUT_FILENO); if (w == -EAGAIN) { w = 0; } else if (w <= 0) { fprintf(stderr, "z3f_encode_write failed: %d, %s\n", w, strerror(-w)); return 1; } i += w; } } while (r != 0); do { w = z3f_encode_write(&zh, NULL, 0); fprintf(stderr, "written: %d (end)\n", w); showsize(STDOUT_FILENO); } while (w == -EAGAIN); if (w != 0) { fprintf(stderr, "z3f_encode_write failed: %d, %s\n", w, strerror(-w)); return 1; } return 0; }