From: Andre Date: Tue, 21 Feb 2006 08:09:36 +0000 (+0100) Subject: add dbtool hooks X-Git-Tag: v0.2.11~67^2 X-Git-Url: http://git.tue.mpg.de/?a=commitdiff_plain;h=f6dc51ad7914b60fe71a4fc53460925bdc513a9d;p=paraslash.git add dbtool hooks pre_select/post_select. Also, add a private_dbtool pointer for each audio format to mmd. --- diff --git a/db.h b/db.h index 960bf59f..328f7de8 100644 --- a/db.h +++ b/db.h @@ -18,6 +18,8 @@ /** \file db.h data structures common to all database tools */ +#include + int find_audio_files(const char *dirname, int (*f)(const char *, const char *)); /** @@ -78,7 +80,7 @@ char **(*get_audio_file_list)(unsigned int num); * passed \a update_audio_file(). * */ -void (*update_audio_file)(char *audio_file); +void (*update_audio_file)(char *audio_file); /** * * shutdown this database tool and free all resources @@ -86,8 +88,30 @@ void (*update_audio_file)(char *audio_file); * This gets called whenever the database tool changes (via the cdt command), * or when para_server receives the HUP signal, or when para_server shuts down. * It is assumed to succeed. -*/ + */ void (*shutdown)(void); +/** + * + * add file descriptors to fd_sets + * + * The pre_select function of the activated database tool gets called just + * before para_server enters its main select loop. The dbtool may add its own + * file descriptors to the \a rfds or the \a wfds set. + * + * If a file descriptor was added, \a max_fileno must be increased by + * this function, if neccessary. + * + * \sa select(2) + */ +int (*pre_select)(fd_set *rfds, fd_set *wfds); +/** + * handle the file descriptors which are ready for I/O + * + * If the pre_select hook added one ore more file descriptors to the read or write + * set, this is the hook to check the result and do any I/O on those descriptors + * which are ready for reading/writing. + */ +void (*post_select)(fd_set *rfds, fd_set *wfds); }; int mysql_dbtool_init(struct dbtool*); diff --git a/para.h b/para.h index 049262d3..e645cb1c 100644 --- a/para.h +++ b/para.h @@ -225,3 +225,9 @@ __printf_2_3 void para_log(int, char*, ...); +enum supported_dbtools {DBT_DOPEY, +#ifdef HAVE_MYSQL + DBT_MYSQL, +#endif + NUM_DBTOOLS +}; diff --git a/server.c b/server.c index 71ee9eb6..8d943533 100644 --- a/server.c +++ b/server.c @@ -66,12 +66,16 @@ struct dbtool dblist[] = { .name = "dopey", .init = dopey_dbtool_init, .update_audio_file = NULL, + .pre_select = NULL, + .post_select = NULL, }, #ifdef HAVE_MYSQL { .name = "mysql", .init = mysql_dbtool_init, .update_audio_file = NULL, + .pre_select = NULL, + .post_select = NULL, }, #endif { diff --git a/server.h b/server.h index b01c3f6a..ba9b39e4 100644 --- a/server.h +++ b/server.h @@ -145,8 +145,10 @@ struct misc_meta_data{ int dbt_num; /** commands set this to non-zero to request a database tool change */ int dbt_change; -/* used by the sender command */ +/** used by the sender command */ struct sender_command_data sender_cmd_data; +/** each dbtool has its private data pointer */ + void *private_dbtool_data[NUM_DBTOOLS]; };