Rename afs.[ch] to afs_common.[ch].
authorAndre Noll <maan@systemlinux.org>
Sat, 8 Sep 2007 07:14:27 +0000 (09:14 +0200)
committerAndre Noll <maan@systemlinux.org>
Sat, 8 Sep 2007 07:14:27 +0000 (09:14 +0200)
As a prepraration for merging the new afs.

12 files changed:
afs.c [deleted file]
afs.h [deleted file]
afs_common.c [new file with mode: 0644]
afs_common.h [new file with mode: 0644]
command.c
configure.ac
error.h
mysql_selector.c
playlist_selector.c
random_selector.c
server.c
vss.c

diff --git a/afs.c b/afs.c
deleted file mode 100644 (file)
index 13a9ccb..0000000
--- a/afs.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
-
-
-/** \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;
-
-       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
deleted file mode 100644 (file)
index 1fb6a43..0000000
--- a/afs.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
-
-/** \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*);
-
diff --git a/afs_common.c b/afs_common.c
new file mode 100644 (file)
index 0000000..36da960
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
+ *
+ * Licensed under the GPL v2. For licencing details see COPYING.
+ */
+
+
+/** \file afs_common.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;
+
+       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_common.h b/afs_common.h
new file mode 100644 (file)
index 0000000..fd4c096
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
+ *
+ * Licensed under the GPL v2. For licencing details see COPYING.
+ */
+
+/** \file afs_common.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 056df57..ae4c700 100644 (file)
--- a/command.c
+++ b/command.c
@@ -8,7 +8,7 @@
 
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
-#include "afs.h"
+#include "afs_common.h"
 #include "server.h"
 #include "vss.h"
 #include "send.h"
index 19244f9..a0d3785 100644 (file)
@@ -108,7 +108,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
-       time daemon stat crypt http_send afs close_on_fork playlist_selector
+       time daemon stat crypt http_send afs_common close_on_fork playlist_selector
        ipc dccp dccp_send fd user_list chunk_queue"
 server_ldflags=""
 server_audio_formats=" mp3"
diff --git a/error.h b/error.h
index c0888aa..060268d 100644 (file)
--- a/error.h
+++ b/error.h
@@ -43,7 +43,7 @@ enum para_subsystem {
        SS_CRYPT,
        SS_HTTP_SEND,
        SS_ORTP_SEND,
-       SS_AFS,
+       SS_AFS_COMMON,
        SS_OGG_AFH,
        SS_MP3_AFH,
        SS_AAC_AFH,
@@ -279,7 +279,7 @@ extern const char **para_errlist[];
        PARA_ERROR(CHUNK, "unable to get chunk"), \
 
 
-#define AFS_ERRORS \
+#define AFS_COMMON_ERRORS \
        PARA_ERROR(GETCWD, "can not get current working directory"), \
        PARA_ERROR(CHDIR, "can not change directory"), \
        PARA_ERROR(OPENDIR, "can not open directory"), \
@@ -537,7 +537,7 @@ SS_ENUM(PLAYLIST_SELECTOR);
 SS_ENUM(CRYPT);
 SS_ENUM(HTTP_SEND);
 SS_ENUM(ORTP_SEND);
-SS_ENUM(AFS);
+SS_ENUM(AFS_COMMON);
 SS_ENUM(MYSQL_SELECTOR);
 SS_ENUM(IPC);
 SS_ENUM(DCCP);
index bbc05bd..46fc65b 100644 (file)
@@ -13,7 +13,7 @@
 #include "server.cmdline.h"
 #include "server.h"
 #include "vss.h"
-#include "afs.h"
+#include "afs_common.h"
 #include <mysql/mysql.h>
 #include <mysql/mysql_version.h>
 #include <regex.h>
index d114926..a497ec1 100644 (file)
@@ -7,7 +7,7 @@
 /** \file playlist_selector.c The playlist audio file selector of paraslash  */
 
 #include "server.h"
-#include "afs.h"
+#include "afs_common.h"
 #include "error.h"
 #include "net.h"
 #include "string.h"
index bef1b7f..c3d7e9b 100644 (file)
@@ -9,7 +9,7 @@
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
 #include "server.h"
-#include "afs.h"
+#include "afs_common.h"
 #include "error.h"
 #include "net.h"
 #include "string.h"
index b4397c8..e39354e 100644 (file)
--- a/server.c
+++ b/server.c
@@ -18,7 +18,7 @@
 
 
 #include "server.cmdline.h"
-#include "afs.h"
+#include "afs_common.h"
 #include "server.h"
 #include "vss.h"
 #include "config.h"
diff --git a/vss.c b/vss.c
index c15fbd7..859fd61 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -15,7 +15,7 @@
 #include <sys/mman.h> /* mmap */
 #include <sys/time.h> /* gettimeofday */
 #include "server.cmdline.h"
-#include "afs.h"
+#include "afs_common.h"
 #include "vss.h"
 #include "send.h"
 #include "error.h"