static void test_stpncpy(const char *s) { char *src, *dst; size_t size, len, bufsize, x; int i, j; size = strlen(s) + 1; for (i = 0; i <= 1; i++) { for (j = 0; j <= 1; j++) { for (bufsize = 0; bufsize <= size + 10; bufsize++) { src = makebuf(size, i); memcpy(src, s, size); dst = makebuf(bufsize, j); memset(dst, 'X', bufsize); len = (bufsize < size) ? bufsize : size - 1; assert(stpncpy(dst, src, bufsize) == dst+len); assert(memcmp(src, dst, len) == 0); for (x = len; x < bufsize; x++) assert(dst[x] == '\0'); } } } }
int main(int argc, char *argv[]) { int c; size_t i; Buffer *buf; errno = 0; setpname(argv[0]); if (argc < 2) die(2, "usage: %s file", getpname()); if ((c = open(argv[1], O_RDONLY)) == -1) die(1, "failed to open file %s:", argv[1]); if ((buf = makebuf(512)) == NULL) die(1, "allocating buffer failed:"); if (initbuf(buf, c, O_RDONLY) == EOF) die(1, "initializing buffer failed:"); i = 0; while ((c = bgetchar(buf)) != EOF) { if (i == 511 || i == 512 || i == 513) { if (bungetchar(buf) == EOF) { die(1, "bungetchar failed at char %lu", i); break; } if ((c = bgetchar(buf)) == EOF) break; } putc(c, stdout); i++; } if (errno != 0) die(1, "bgetchar failed at char %lu:", i); fprintf(stderr, "reached end of input file %s\n", argv[1]); fprintf(stderr, "%lu bytes read\n", i); bclose(buf); exit(0); }
static void test_wcsnlen(const wchar_t *s) { wchar_t *s1; size_t size, len, bufsize; int i; size = wcslen(s) + 1; for (i = 0; i <= 1; i++) { for (bufsize = 0; bufsize <= size + 10; bufsize++) { s1 = makebuf(bufsize * sizeof(wchar_t), i); wmemcpy(s1, s, bufsize); len = (size > bufsize) ? bufsize : size - 1; assert(wcsnlen(s1, bufsize) == len); } } }