rename db.c to afs.c and db.h to afs.h
authorAndre Noll <maan@systemlinux.org>
Tue, 20 Feb 2007 20:15:53 +0000 (21:15 +0100)
committerAndre Noll <maan@systemlinux.org>
Tue, 20 Feb 2007 20:15:53 +0000 (21:15 +0100)
12 files changed:
afs.c [new file with mode: 0644]
afs.h [new file with mode: 0644]
command.c
configure.ac
db.c [deleted file]
db.h [deleted file]
error.h
mysql_selector.c
playlist_selector.c
random_selector.c
server.c
vss.c

diff --git a/afs.c b/afs.c
new file mode 100644 (file)
index 0000000..f5de660
--- /dev/null
+++ b/afs.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
+ *
+ *     This program is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This program is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this program; if not, write to the Free Software
+ *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ */
+
+
+/** \file afs.c functions common to all audio file selectors */
+
+#include "server.cmdline.h"
+#include "server.h"
+#include "vss.h"
+#include <dirent.h> /* readdir() */
+#include <sys/stat.h> /* stat */
+#include <sys/types.h> /* mode_t */
+#include "error.h"
+#include "string.h"
+
+/**
+ * traverse the given directory recursively
+ *
+ * @param dirname the directory to traverse
+ * @param f: the function to call for each entry.
+ *
+ * for each regular file whose filename ends in .yyy, where yyy is a supported
+ * audio format, the supplied function \a f is called.  The directory and
+ * filename component of the regular file are passed to \a f.
+ *
+ * \return On success, 1 is returned. Otherwise, this function returns a
+ * negative value which indicates the kind of the error.
+ */
+int find_audio_files(const char *dirname, int (*f)(const char *, const char *))
+{
+       DIR *dir = NULL;
+       struct dirent *entry;
+       /*
+        * Opening the current directory (".") and calling fchdir() to return
+        * is usually faster and more reliable than saving cwd in some buffer
+        * and calling chdir() afterwards (see man 3 getcwd).
+        */
+       int cwd_fd = open(".", O_RDONLY);
+       struct stat s;
+       int ret = -1;
+
+//     PARA_DEBUG_LOG("dirname: %s\n", dirname);
+       if (cwd_fd < 0)
+               return -E_GETCWD;
+       ret = -E_CHDIR;
+       if (chdir(dirname) < 0)
+               goto out;
+       ret = -E_OPENDIR;
+       dir = opendir(".");
+       if (!dir)
+               goto out;
+       /* scan cwd recursively */
+       while ((entry = readdir(dir))) {
+               mode_t m;
+               char *tmp;
+
+               if (!strcmp(entry->d_name, "."))
+                       continue;
+               if (!strcmp(entry->d_name, ".."))
+                       continue;
+               ret = -E_LSTAT;
+               if (lstat(entry->d_name, &s) == -1)
+                       continue;
+               m = s.st_mode;
+               if (!S_ISREG(m) && !S_ISDIR(m)) /* skip links, sockets, ... */
+                       continue;
+               if (S_ISREG(m)) { /* regular file */
+                       if (guess_audio_format(entry->d_name) < 0)
+                               continue;
+                       ret = f(dirname, entry->d_name);
+                       if (ret < 0)
+                               goto out;
+                       continue;
+               }
+               /* directory */
+               tmp = make_message("%s/%s", dirname, entry->d_name);
+               ret = find_audio_files(tmp, f);
+               free(tmp);
+               if (ret < 0)
+                       goto out;
+       }
+       ret = 1;
+out:
+       if (dir)
+               closedir(dir);
+       if (fchdir(cwd_fd) < 0)
+               ret = -E_CHDIR;
+       close(cwd_fd);
+       if (ret < 0)
+               PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
+       return ret;
+}
diff --git a/afs.h b/afs.h
new file mode 100644 (file)
index 0000000..520bd5b
--- /dev/null
+++ b/afs.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
+ *
+ *     This program is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This program is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this program; if not, write to the Free Software
+ *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ */
+
+/** \file afs.h data structures common to all audio file selectors */
+
+#include <sys/select.h>
+
+
+int find_audio_files(const char *dirname, int (*f)(const char *, const char *));
+
+/**
+ * describes one supported audio file selector
+ *
+ * There is one such struct for each supported selector.  During the startup
+ * part of para_server the \a init() function of the activated selector gets
+ * called which fills in all other function pointers.
+ *
+ */
+struct audio_file_selector {
+/**
+ * name name of this selector
+ */
+const char *name;
+/**
+ * the init routine of the selector
+ *
+ * It should check its command line options and do all necessary initialization
+ * like connecting to a database server.
+ *
+ * A negative return value indicates an initialization error and means that
+ * this selector should be ignored for now (it may later be activated again via
+ * the chs command).
+ *
+ * If \a init() returns success (non-negative return value), it must have
+ * initialized in all non-optional function pointers of the given selector
+ * struct. Moreover, \a cmd_list must point to a NULL-terminated array which
+ * holds the list of all commands that are supported by this selector.
+ */
+int (*init)(struct audio_file_selector *self);
+/**
+ * list of commands supported by this selector
+ */
+struct server_command *cmd_list;
+/**
+ * pointer to function returning list of at most \a num audio files to be
+ * streamed next
+ *
+ * \a get_audio_file_list() must return a pointer to a array of at most \a num
+ * char* pointers (terminated by a NULL pointer), or NULL on errors.  Both the
+ * array and its contents must be dynamically allocated and are freed by the
+ * caller.
+ *
+*/
+char **(*get_audio_file_list)(unsigned int num);
+/**
+ *
+ * the update hook
+ *
+ * The \a update_audio_file pointer is optional and need not be supplied. In this
+ * case it is not neccessary to init this pointer from within init(). If
+ * \a update_audio_file is non-NULL, the function it points to gets called
+ * whenever a new audio file was successfully loaded and is going to be
+ * streamed by any of paraslash's senders. The full path of the audio file is
+ * passed \a update_audio_file().
+ *
+ */
+void (*update_audio_file)(char *audio_file);
+/**
+ *
+ * shutdown this selector and free all resources
+ *
+ * This gets called whenever the audio file selector changes. The reason for
+ * this change might be that some user sent the chs command, that para_server
+ * receives the HUP signal, or that 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 selector gets called just before
+ * para_server enters its main select loop. The selector may add its own file
+ * descriptors to the \a rfds or the \a wfds set.
+ *
+ * \return The highest-numbered file descriptor which was added to either of
+ * the two fd sets (or -1 if no file descriptors were added).
+ *
+ * \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);
+/**
+ * each selector has its private data pointer */
+void *private_data;
+};
+
+int mysql_selector_init(struct audio_file_selector*);
+int playlist_selector_init(struct audio_file_selector*);
+int random_selector_init(struct audio_file_selector*);
+
index ffd660d63c0cdd94cd73d952a8785007873f1a97..325f768604ef192ef986e47ca0b603de92938cbb 100644 (file)
--- a/command.c
+++ b/command.c
@@ -20,7 +20,7 @@
 
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
 
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
-#include "db.h"
+#include "afs.h"
 #include "server.h"
 #include "vss.h"
 #include "send.h"
 #include "server.h"
 #include "vss.h"
 #include "send.h"
index fd01b188885cbb8d8d5b06b1190d7cb41d7b91e4..aeb6f8d4bf3aed0ff3b1fb5e98d608ede0a7c935 100644 (file)
@@ -91,7 +91,7 @@ audiod_audio_formats=""
 server_cmdline_objs="server.cmdline server_command_list random_selector_command_list
        playlist_selector_command_list"
 server_errlist_objs="server mp3_afh vss command net string signal random_selector
 server_cmdline_objs="server.cmdline server_command_list random_selector_command_list
        playlist_selector_command_list"
 server_errlist_objs="server mp3_afh vss command net string signal random_selector
-       time daemon stat crypt http_send db close_on_fork playlist_selector
+       time daemon stat crypt http_send afs close_on_fork playlist_selector
        ipc dccp dccp_send fd user_list"
 server_ldflags=""
 server_audio_formats=" mp3"
        ipc dccp dccp_send fd user_list"
 server_ldflags=""
 server_audio_formats=" mp3"
diff --git a/db.c b/db.c
deleted file mode 100644 (file)
index 027dfda..0000000
--- a/db.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
- *
- *     This program is free software; you can redistribute it and/or modify
- *     it under the terms of the GNU General Public License as published by
- *     the Free Software Foundation; either version 2 of the License, or
- *     (at your option) any later version.
- *
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public License
- *     along with this program; if not, write to the Free Software
- *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
- */
-
-
-/** \file db.c functions common to all audio file selectors */
-
-#include "server.cmdline.h"
-#include "server.h"
-#include "vss.h"
-#include <dirent.h> /* readdir() */
-#include <sys/stat.h> /* stat */
-#include <sys/types.h> /* mode_t */
-#include "error.h"
-#include "string.h"
-
-/**
- * traverse the given directory recursively
- *
- * @param dirname the directory to traverse
- * @param f: the function to call for each entry.
- *
- * for each regular file whose filename ends in .yyy, where yyy is a supported
- * audio format, the supplied function \a f is called.  The directory and
- * filename component of the regular file are passed to \a f.
- *
- * \return On success, 1 is returned. Otherwise, this function returns a
- * negative value which indicates the kind of the error.
- */
-int find_audio_files(const char *dirname, int (*f)(const char *, const char *))
-{
-       DIR *dir = NULL;
-       struct dirent *entry;
-       /*
-        * Opening the current directory (".") and calling fchdir() to return
-        * is usually faster and more reliable than saving cwd in some buffer
-        * and calling chdir() afterwards (see man 3 getcwd).
-        */
-       int cwd_fd = open(".", O_RDONLY);
-       struct stat s;
-       int ret = -1;
-
-//     PARA_DEBUG_LOG("dirname: %s\n", dirname);
-       if (cwd_fd < 0)
-               return -E_GETCWD;
-       ret = -E_CHDIR;
-       if (chdir(dirname) < 0)
-               goto out;
-       ret = -E_OPENDIR;
-       dir = opendir(".");
-       if (!dir)
-               goto out;
-       /* scan cwd recursively */
-       while ((entry = readdir(dir))) {
-               mode_t m;
-               char *tmp;
-
-               if (!strcmp(entry->d_name, "."))
-                       continue;
-               if (!strcmp(entry->d_name, ".."))
-                       continue;
-               ret = -E_LSTAT;
-               if (lstat(entry->d_name, &s) == -1)
-                       continue;
-               m = s.st_mode;
-               if (!S_ISREG(m) && !S_ISDIR(m)) /* skip links, sockets, ... */
-                       continue;
-               if (S_ISREG(m)) { /* regular file */
-                       if (guess_audio_format(entry->d_name) < 0)
-                               continue;
-                       ret = f(dirname, entry->d_name);
-                       if (ret < 0)
-                               goto out;
-                       continue;
-               }
-               /* directory */
-               tmp = make_message("%s/%s", dirname, entry->d_name);
-               ret = find_audio_files(tmp, f);
-               free(tmp);
-               if (ret < 0)
-                       goto out;
-       }
-       ret = 1;
-out:
-       if (dir)
-               closedir(dir);
-       if (fchdir(cwd_fd) < 0)
-               ret = -E_CHDIR;
-       close(cwd_fd);
-       if (ret < 0)
-               PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
-       return ret;
-}
diff --git a/db.h b/db.h
deleted file mode 100644 (file)
index 3b9d453..0000000
--- a/db.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2005-2006 Andre Noll <maan@systemlinux.org>
- *
- *     This program is free software; you can redistribute it and/or modify
- *     it under the terms of the GNU General Public License as published by
- *     the Free Software Foundation; either version 2 of the License, or
- *     (at your option) any later version.
- *
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- *
- *     You should have received a copy of the GNU General Public License
- *     along with this program; if not, write to the Free Software
- *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
- */
-
-/** \file db.h data structures common to all audio file selectors */
-
-#include <sys/select.h>
-
-
-int find_audio_files(const char *dirname, int (*f)(const char *, const char *));
-
-/**
- * describes one supported audio file selector
- *
- * There is one such struct for each supported selector.  During the startup
- * part of para_server the \a init() function of the activated selector gets
- * called which fills in all other function pointers.
- *
- */
-struct audio_file_selector {
-/**
- * name name of this selector
- */
-const char *name;
-/**
- * the init routine of the selector
- *
- * It should check its command line options and do all necessary initialization
- * like connecting to a database server.
- *
- * A negative return value indicates an initialization error and means that
- * this selector should be ignored for now (it may later be activated again via
- * the chs command).
- *
- * If \a init() returns success (non-negative return value), it must have
- * initialized in all non-optional function pointers of the given selector
- * struct. Moreover, \a cmd_list must point to a NULL-terminated array which
- * holds the list of all commands that are supported by this selector.
- */
-int (*init)(struct audio_file_selector *self);
-/**
- * list of commands supported by this selector
- */
-struct server_command *cmd_list;
-/**
- * pointer to function returning list of at most \a num audio files to be
- * streamed next
- *
- * \a get_audio_file_list() must return a pointer to a array of at most \a num
- * char* pointers (terminated by a NULL pointer), or NULL on errors.  Both the
- * array and its contents must be dynamically allocated and are freed by the
- * caller.
- *
-*/
-char **(*get_audio_file_list)(unsigned int num);
-/**
- *
- * the update hook
- *
- * The \a update_audio_file pointer is optional and need not be supplied. In this
- * case it is not neccessary to init this pointer from within init(). If
- * \a update_audio_file is non-NULL, the function it points to gets called
- * whenever a new audio file was successfully loaded and is going to be
- * streamed by any of paraslash's senders. The full path of the audio file is
- * passed \a update_audio_file().
- *
- */
-void (*update_audio_file)(char *audio_file);
-/**
- *
- * shutdown this selector and free all resources
- *
- * This gets called whenever the audio file selector changes. The reason for
- * this change might be that some user sent the chs command, that para_server
- * receives the HUP signal, or that 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 selector gets called just before
- * para_server enters its main select loop. The selector may add its own file
- * descriptors to the \a rfds or the \a wfds set.
- *
- * \return The highest-numbered file descriptor which was added to either of
- * the two fd sets (or -1 if no file descriptors were added).
- *
- * \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);
-/**
- * each selector has its private data pointer */
-void *private_data;
-};
-
-int mysql_selector_init(struct audio_file_selector*);
-int playlist_selector_init(struct audio_file_selector*);
-int random_selector_init(struct audio_file_selector*);
-
diff --git a/error.h b/error.h
index b970947704dffb401097a5ebe4d88a8624ad423a..537aca5723e48a2ea32037fd342dca2f5068859c 100644 (file)
--- a/error.h
+++ b/error.h
@@ -55,7 +55,7 @@ enum para_subsystem {
        SS_CRYPT,
        SS_HTTP_SEND,
        SS_ORTP_SEND,
        SS_CRYPT,
        SS_HTTP_SEND,
        SS_ORTP_SEND,
-       SS_DB,
+       SS_AFS,
        SS_OGG_AFH,
        SS_MP3_AFH,
        SS_AAC_AFH,
        SS_OGG_AFH,
        SS_MP3_AFH,
        SS_AAC_AFH,
@@ -305,7 +305,7 @@ extern const char **para_errlist[];
        PARA_ERROR(FSTAT, "failed to fstat() audio file"), \
 
 
        PARA_ERROR(FSTAT, "failed to fstat() audio file"), \
 
 
-#define DB_ERRORS \
+#define AFS_ERRORS \
        PARA_ERROR(GETCWD, "can not get current working directory"), \
        PARA_ERROR(CHDIR, "can not change directory"), \
        PARA_ERROR(OPENDIR, "can not open directory"), \
        PARA_ERROR(GETCWD, "can not get current working directory"), \
        PARA_ERROR(CHDIR, "can not change directory"), \
        PARA_ERROR(OPENDIR, "can not open directory"), \
@@ -559,7 +559,7 @@ SS_ENUM(PLAYLIST_SELECTOR);
 SS_ENUM(CRYPT);
 SS_ENUM(HTTP_SEND);
 SS_ENUM(ORTP_SEND);
 SS_ENUM(CRYPT);
 SS_ENUM(HTTP_SEND);
 SS_ENUM(ORTP_SEND);
-SS_ENUM(DB);
+SS_ENUM(AFS);
 SS_ENUM(MYSQL_SELECTOR);
 SS_ENUM(IPC);
 SS_ENUM(DCCP);
 SS_ENUM(MYSQL_SELECTOR);
 SS_ENUM(IPC);
 SS_ENUM(DCCP);
index d4ccc86845821d02f53edd5868a265ca6bd777f9..e545f0da6d5bf04f05a835dc3d17f7dc2ac41fcf 100644 (file)
@@ -25,7 +25,7 @@
 #include "server.cmdline.h"
 #include "server.h"
 #include "vss.h"
 #include "server.cmdline.h"
 #include "server.h"
 #include "vss.h"
-#include "db.h"
+#include "afs.h"
 #include <mysql/mysql.h>
 #include <mysql/mysql_version.h>
 #include <regex.h>
 #include <mysql/mysql.h>
 #include <mysql/mysql_version.h>
 #include <regex.h>
index 8d1d45165983b494ab4db26acd91ccf05c99c943..2b0599cb0dd9f05d6bb8ee747277956e87ddcee0 100644 (file)
@@ -19,7 +19,7 @@
 /** \file playlist_selector.c The playlist audio file selector of paraslash  */
 
 #include "server.h"
 /** \file playlist_selector.c The playlist audio file selector of paraslash  */
 
 #include "server.h"
-#include "db.h"
+#include "afs.h"
 #include "error.h"
 #include "net.h"
 #include "string.h"
 #include "error.h"
 #include "net.h"
 #include "string.h"
index 5d8b386c6f433d68ef55b589bbe077df41c9331b..d9efaaf2cf4b9dd5fd329884f2caca7589c3f3b2 100644 (file)
@@ -21,7 +21,7 @@
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
 #include "server.h"
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
 #include "server.h"
-#include "db.h"
+#include "afs.h"
 #include "error.h"
 #include "net.h"
 #include "string.h"
 #include "error.h"
 #include "net.h"
 #include "string.h"
index 89f901f4d8e13a5bc73100945dc3cffa1b81091f..41d9a2accd71076daddfe2c101634cc0945b4dfb 100644 (file)
--- a/server.c
+++ b/server.c
@@ -30,7 +30,7 @@
 
 
 #include "server.cmdline.h"
 
 
 #include "server.cmdline.h"
-#include "db.h"
+#include "afs.h"
 #include "server.h"
 #include "vss.h"
 #include "config.h"
 #include "server.h"
 #include "vss.h"
 #include "config.h"
diff --git a/vss.c b/vss.c
index 4a395593f3aa1a6a5038b3d3c23330c6b0ea5610..b34703de5bd8b8fb46a99a87587c77f86e0ca617 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -25,7 +25,7 @@
 #include "server.h"
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
 #include "server.h"
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
-#include "db.h"
+#include "afs.h"
 #include "afh.h"
 #include "vss.h"
 #include "send.h"
 #include "afh.h"
 #include "vss.h"
 #include "send.h"