/* $Id: mkstemp-t.c 5329 2002-03-17 07:39:14Z rra $ */ /* mkstemp test suite */ #include "config.h" #include "clibrary.h" #include #include #include "libtest.h" int test_mkstemp(char *template); int main(void) { int fd; char template[] = "tsXXXXXXX"; char tooshort[] = "XXXXX"; char bad1[] = "/foo/barXXXXX"; char bad2[] = "/foo/barXXXXXX.out"; char buffer[256]; struct stat st1, st2; ssize_t length; puts("20"); /* First, test a few error messages. */ errno = 0; ok_int(1, -1, test_mkstemp(tooshort)); ok(2, errno == EINVAL); ok_string(3, "XXXXX", tooshort); errno = 0; ok_int(4, -1, test_mkstemp(bad1)); ok(5, errno == EINVAL); ok_string(6, "/foo/barXXXXX", bad1); errno = 0; ok_int(7, -1, test_mkstemp(bad2)); ok(8, errno == EINVAL); ok_string(9, "/foo/barXXXXXX.out", bad2); errno = 0; /* Now try creating a real file. */ fd = test_mkstemp(template); ok(10, fd >= 0); ok(11, strcmp(template, "tsXXXXXXX") != 0); ok(12, strncmp(template, "tsX", 3) == 0); ok(13, access(template, F_OK) == 0); /* Make sure that it's the same file as template refers to now. */ ok(14, stat(template, &st1) == 0); ok(15, fstat(fd, &st2) == 0); ok(16, st1.st_ino == st2.st_ino); unlink(template); /* Make sure the open mode is correct. */ length = strlen(template); ok(17, write(fd, template, length) == length); ok(18, lseek(fd, 0, SEEK_SET) == 0); ok(19, read(fd, buffer, length) == length); buffer[length] = '\0'; ok_string(20, template, buffer); close(fd); return 0; }