diff --git a/src/logfile.c b/src/logfile.c index 8261db1..d30cfe7 100644 --- a/src/logfile.c +++ b/src/logfile.c @@ -8,29 +8,32 @@ #include "logfile.h" bool -f2b_logfile_open(f2b_logfile_t *file, const char *filename) { +f2b_logfile_open(f2b_logfile_t *file, const char *path) { struct stat st; + char buf[PATH_MAX] = ""; assert(file != NULL); - assert(filename != NULL); + assert(path != NULL || file->path[0] != '\0'); + + strlcpy(buf, path ? path : file->path, sizeof(buf)); memset(file, 0x0, sizeof(f2b_logfile_t)); - if (stat(filename, &st) != 0) + if (stat(buf, &st) != 0) return false; if (!(S_ISREG(st.st_mode) || S_ISFIFO(st.st_mode))) return false; - strlcpy(file->path, filename, sizeof(file->path)); - memcpy(&file->st, &st, sizeof(st)); - - if ((file->fd = fopen(filename, "r")) == NULL) + if ((file->fd = fopen(buf, "r")) == NULL) return false; if (S_ISREG(st.st_mode) && fseek(file->fd, 0, SEEK_END) < 0) return false; + memcpy(&file->st, &st, sizeof(st)); + strlcpy(file->path, buf, sizeof(file->path)); + return true; } diff --git a/src/logfile.h b/src/logfile.h index cf03278..a520926 100644 --- a/src/logfile.h +++ b/src/logfile.h @@ -14,7 +14,7 @@ typedef struct f2b_logfile_t { struct stat st; } f2b_logfile_t; -bool f2b_logfile_open(f2b_logfile_t *file, const char *filename); +bool f2b_logfile_open(f2b_logfile_t *file, const char *path); void f2b_logfile_close(const f2b_logfile_t *file); bool f2b_logfile_rotated(const f2b_logfile_t *file); bool f2b_logfile_getline(const f2b_logfile_t *file, char *buf, size_t bufsize);