00001
00021 #ifndef _LIGHTMEDIASCANNER_PRIVATE_H_
00022 #define _LIGHTMEDIASCANNER_PRIVATE_H_ 1
00023
00024 #ifdef __GNUC__
00025 # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
00026 # define GNUC_NON_NULL(...) __attribute__((nonnull(__VA_ARGS__)))
00027 # else
00028 # define GNUC_NON_NULL(...)
00029 # endif
00030 #else
00031 # define GNUC_NON_NULL(...)
00032 #endif
00033
00034 #include "lightmediascanner.h"
00035 #include "lightmediascanner_plugin.h"
00036 #include "lightmediascanner_charset_conv.h"
00037 #include <sys/types.h>
00038 #include <poll.h>
00039 #include <limits.h>
00040 #include <sqlite3.h>
00041
00042 #define PATH_SIZE PATH_MAX
00043
00044 struct fds {
00045 int r;
00046 int w;
00047 };
00048
00049
00050 struct pinfo {
00051 struct fds master;
00052 struct fds slave;
00053 struct pollfd poll;
00054 lms_t *lms;
00055 pid_t child;
00056 };
00057
00058 struct parser {
00059 lms_plugin_t *plugin;
00060 void *dl_handle;
00061 char *so_path;
00062 };
00063
00064 struct lms {
00065 struct parser *parsers;
00066 int n_parsers;
00067 lms_charset_conv_t *cs_conv;
00068 char *db_path;
00069 int slave_timeout;
00070 unsigned int commit_interval;
00071 unsigned int is_processing:1;
00072 };
00073
00074 int lms_parser_del_int(lms_t *lms, int i) GNUC_NON_NULL(1);
00075 int lms_create_pipes(struct pinfo *pinfo) GNUC_NON_NULL(1);
00076 int lms_close_pipes(struct pinfo *pinfo) GNUC_NON_NULL(1);
00077 int lms_create_slave(struct pinfo *pinfo, int (*work)(lms_t *lms, struct fds *fds)) GNUC_NON_NULL(1, 2);
00078 int lms_restart_slave(struct pinfo *pinfo, int (*work)(lms_t *lms, struct fds *fds)) GNUC_NON_NULL(1, 2);
00079 int lms_finish_slave(struct pinfo *pinfo, int (*finish)(const struct fds *fds)) GNUC_NON_NULL(1, 2);
00080
00081 int lms_parsers_setup(lms_t *lms, sqlite3 *db) GNUC_NON_NULL(1, 2);
00082 int lms_parsers_start(lms_t *lms, sqlite3 *db) GNUC_NON_NULL(1, 2);
00083 int lms_parsers_finish(lms_t *lms, sqlite3 *db) GNUC_NON_NULL(1, 2);
00084 int lms_parsers_check_using(lms_t *lms, void **parser_match, struct lms_file_info *finfo) GNUC_NON_NULL(1, 2, 3);
00085 int lms_parsers_run(lms_t *lms, sqlite3 *db, void **parser_match, struct lms_file_info *finfo) GNUC_NON_NULL(1, 2, 3, 4);
00086
00087
00088 #endif