mirror of
https://github.com/clearlinux/graphene.git
synced 2026-08-23 15:37:33 +00:00
95 lines
2.1 KiB
C
95 lines
2.1 KiB
C
#include <dirent.h>
|
|
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <unistd.h>
|
|
|
|
#define TEST_DIR "tmp"
|
|
#define TEST_FILE "__testfile__"
|
|
|
|
/* return true if file_name exists, otherwise false */
|
|
static bool find_file(char* dir_name, char* file_name) {
|
|
bool found = false;
|
|
DIR* dir = opendir(dir_name);
|
|
if (dir == NULL) {
|
|
perror("opendir failed");
|
|
return found;
|
|
}
|
|
|
|
struct dirent* dent = NULL;
|
|
while (1) {
|
|
errno = 0;
|
|
dent = readdir(dir);
|
|
if (dent == NULL) {
|
|
if (errno == 0)
|
|
break;
|
|
perror("readdir failed");
|
|
goto out;
|
|
}
|
|
|
|
if (strncmp(file_name, dent->d_name, strlen(file_name)) == 0) {
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
out:
|
|
closedir(dir);
|
|
return found;
|
|
}
|
|
|
|
int main(int argc, const char** argv) {
|
|
int rv = 0;
|
|
int fd = 0;
|
|
|
|
/* setup the test directory and file */
|
|
rv = mkdir(TEST_DIR, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
|
|
if (rv < 0 && errno != EEXIST) {
|
|
perror("mkdir failed");
|
|
return 1;
|
|
}
|
|
|
|
rv = unlink(TEST_DIR "/" TEST_FILE);
|
|
if (rv < 0 && errno != ENOENT) {
|
|
perror("unlink failed");
|
|
return 1;
|
|
}
|
|
|
|
/* test readdir: should not find a file that we just deleted */
|
|
if (find_file(TEST_DIR, TEST_FILE)) {
|
|
perror("file " TEST_FILE " was unexpectedly found");
|
|
return 1;
|
|
}
|
|
|
|
fd = open(TEST_DIR "/" TEST_FILE, O_CREAT | O_RDWR | O_EXCL,
|
|
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
|
|
if (fd < 0) {
|
|
perror("open failed");
|
|
return 1;
|
|
}
|
|
|
|
if (!find_file(TEST_DIR, TEST_FILE)) {
|
|
perror("file " TEST_FILE " was not found");
|
|
return 1;
|
|
}
|
|
|
|
rv = close(fd);
|
|
if (rv < 0) {
|
|
perror("close failed");
|
|
return 1;
|
|
}
|
|
|
|
rv = unlink(TEST_DIR "/" TEST_FILE);
|
|
if (rv < 0) {
|
|
perror("unlink failed");
|
|
return 1;
|
|
}
|
|
|
|
printf("test completed successfully\n");
|
|
return rv;
|
|
}
|