123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /*
- * Test application for mkstemp/mkstemps/mkostemp/mkostemps
- * Copyright (C) 2015 by Romain Naour <romain.naour@openwide.fr>
- *
- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <errno.h>
- #define assert(x) \
- if (!(x)) \
- { \
- fputs ("test failed: " #x "\n", stderr); \
- retval = 1; \
- goto the_end; \
- }
- int
- main (int argc, char *argv[])
- {
- char name[256];
- char name_suffix[256];
- FILE *fp = NULL;
- int retval = 0;
- int fd;
- int flags = O_RDONLY | O_CLOEXEC;
- struct stat sb_f1;
- struct stat sb_f2;
- /* mkstemp test */
- sprintf(name, "/tmp/%s-uClibc-test.XXXXXX", __FILE__);
- fd = mkstemp(name);
- fstat(fd, &sb_f1);
- assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)
- stat(name, &sb_f2);
- assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)
- assert (sb_f1.st_ino == sb_f2.st_ino)
- close(fd);
- unlink (name);
- /* mkstemps test */
- sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX.txt", __FILE__);
- fd = mkstemps(name_suffix, 4);
- fstat(fd, &sb_f1);
- assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)
- stat(name_suffix, &sb_f2);
- assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)
- assert (sb_f1.st_ino == sb_f2.st_ino)
- close(fd);
- unlink (name_suffix);
- /* mkostemp test */
- sprintf(name, "/tmp/%s-uClibc-test.XXXXXX", __FILE__);
- fd = mkostemp(name, flags);
- fstat(fd, &sb_f1);
- assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)
- stat(name, &sb_f2);
- assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)
- assert (sb_f1.st_ino == sb_f2.st_ino)
- assert (sb_f1.st_mode == sb_f2.st_mode)
- close(fd);
- unlink (name);
- /* mkostemps test */
- sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX.txt", __FILE__);
- fd = mkostemps(name_suffix, 4, flags);
- fstat(fd, &sb_f1);
- assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)
- stat(name_suffix, &sb_f2);
- assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)
- assert (sb_f1.st_ino == sb_f2.st_ino)
- assert (sb_f1.st_mode == sb_f2.st_mode)
- close(fd);
- unlink (name_suffix);
- /* suffixlen = 0 */
- sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX", __FILE__);
- fd = mkostemps(name_suffix, 0, flags);
- fstat(fd, &sb_f1);
- assert ((sb_f1.st_mode & S_IFMT) == S_IFREG)
- stat(name_suffix, &sb_f2);
- assert ((sb_f2.st_mode & S_IFMT) == S_IFREG)
- assert (sb_f1.st_ino == sb_f2.st_ino)
- assert (sb_f1.st_mode == sb_f2.st_mode)
- close(fd);
- unlink (name_suffix);
- /* stress tests */
- /* template len < 6 */
- sprintf(name, "XXXXX");
- fd = mkstemp(name);
- assert(fd == -1);
- assert(errno == EINVAL);
- /* suffixlen < 0 */
- sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX.txt", __FILE__);
- fd = mkostemps(name_suffix, -1, flags);
- assert(fd == -1);
- assert(errno == EINVAL);
- /* Missing one X */
- sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXX.txt", __FILE__);
- fd = mkostemps(name_suffix, 4, flags);
- assert(fd == -1);
- assert(errno == EINVAL);
- /* wrong suffixlen */
- sprintf(name_suffix, "/tmp/%s-uClibc-test.XXXXXX.txt", __FILE__);
- fd = mkostemps(name_suffix, 2, flags);
- assert(fd == -1);
- assert(errno == EINVAL);
- the_end:
- if (fp != NULL)
- assert (fclose (fp) == 0);
- unlink (name);
- unlink (name_suffix);
- return retval;
- }
|