static gboolean affile_sd_init(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) { AFFileSourceDriver *self = (AFFileSourceDriver *) s; int fd, flags; if (self->flags & AFFILE_PIPE) flags = O_RDWR | O_NOCTTY | O_NONBLOCK | O_LARGEFILE; else flags = O_RDONLY | O_NOCTTY | O_NONBLOCK | O_LARGEFILE; log_reader_options_init(&self->reader_options, cfg); #if 0/*start dongshu*/ if (affile_open_file(self->filename->str, flags, -1, -1, -1, 0, 0, 0, 0, &fd)) #else if (affile_open_file(self->filename->str, flags, -1, -1, -1, 0, 0, 0, 0, &fd,0)) #endif/*end*/ { self->reader = log_reader_new(fd_read_new(fd, 0), LR_LOCAL | LR_NOMREAD, s, &self->reader_options); log_pipe_append(self->reader, s); /* call log_reader_init() */ if (!log_pipe_init(self->reader, NULL, NULL)) { msg_error("Error initializing log_reader, closing fd", evt_tag_int("fd", fd), NULL); log_pipe_unref(self->reader); self->reader = NULL; close(fd); return FALSE; } } else { msg_error("Error opening file for reading", evt_tag_str("filename", self->filename->str), evt_tag_errno(EVT_TAG_OSERROR, errno), NULL); return self->super.optional; } return TRUE; }
static gboolean affile_sd_open_file(AFFileSourceDriver *self, gchar *name, gint *fd) { gint flags; if (self->flags & AFFILE_PIPE) flags = O_RDWR | O_NOCTTY | O_NONBLOCK | O_LARGEFILE; else flags = O_RDONLY | O_NOCTTY | O_NONBLOCK | O_LARGEFILE; if (affile_open_file(name, flags, -1, -1, -1, 0, 0, 0, 0, !!(self->flags & AFFILE_PRIVILEGED), !!(self->flags & AFFILE_PIPE), fd)) return TRUE; return FALSE; }
static gboolean open_file(gchar *fname, int open_flags, gint extra_flags, gint *fd) { FilePermOptions perm_opts; FileOpenOptions open_opts; file_perm_options_defaults(&perm_opts); open_opts.open_flags = open_flags; open_opts.create_dirs = !!(extra_flags & CREATE_DIRS); open_opts.is_pipe = !!(extra_flags & PIPE); open_opts.needs_privileges = FALSE; return affile_open_file(fname, &open_opts, &perm_opts, fd); }
gboolean affile_sd_open_file(AFFileSourceDriver *self, gchar *name, gint *fd) { return affile_open_file(name, &self->file_open_options, &self->file_perm_options, fd); }