DF-2752 / pipefinal.c
#include <stdio.h> #include <unistd.h> #include <string.h> int main(void) { int p[2]; if (pipe(p)) return 1; size_t sz = 20480; unsigned char out[65536], in[65536]; for (size_t i = 0; i < sz; i++) out[i] = (unsigned char)(i % 251); ssize_t w = write(p[1], out, sz); ssize_t r = read(p[0], in, sz); printf("w=%zd r=%zd\n", w, r); long bad = 0; long first = -1, last = -1; for (ssize_t i = 0; i < r; i++) if (in[i] != out[i]) { bad++; if (first<0) first=i; last=i; } printf("corrupted bytes: %ld / %zd range [%ld..%ld]\n", bad, r, first, last); printf("%s\n", bad ? "FAIL: non-pow2 kern.pipe.size aliases FIFO slots and corrupts in-flight pipe data" : "PASS: no corruption"); return bad ? 2 : 0; } |