aboutsummaryrefslogtreecommitdiffstats
path: root/res/res_musiconhold.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2008-10-16 08:30:32 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2008-10-16 08:30:32 +0000
commit23725d434ff598a981106ad298f6ccfab0b5f504 (patch)
treee7630d4b7484a502d07d0a54b79d5036fcc9fe84 /res/res_musiconhold.c
parentd7334f787c1bd6880589ec7840377da9a8290ca2 (diff)
support relative paths in musiconhold.conf, which makes moh work by default when Asterisk was configured using --prefix and 'make samples' is run
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@149917 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_musiconhold.c')
-rw-r--r--res/res_musiconhold.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index 9fce79475..004934676 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -65,6 +65,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/stringfields.h"
#include "asterisk/linkedlists.h"
#include "asterisk/manager.h"
+#include "asterisk/paths.h"
#define INITIAL_NUM_FILES 8
@@ -906,6 +907,7 @@ static int moh_scan_files(struct mohclass *class) {
DIR *files_DIR;
struct dirent *files_dirent;
+ char dir_path[PATH_MAX];
char path[PATH_MAX];
char filepath[PATH_MAX];
char *ext;
@@ -913,9 +915,17 @@ static int moh_scan_files(struct mohclass *class) {
int dirnamelen;
int i;
- files_DIR = opendir(class->dir);
+ if (class->dir[0] != '/') {
+ ast_copy_string(dir_path, ast_config_AST_VAR_DIR, sizeof(dir_path));
+ strncat(dir_path, "/", sizeof(dir_path));
+ strncat(dir_path, class->dir, sizeof(dir_path));
+ } else {
+ ast_copy_string(dir_path, class->dir, sizeof(dir_path));
+ }
+ ast_debug(4, "Scanning '%s' for files for class '%s'\n", dir_path, class->name);
+ files_DIR = opendir(dir_path);
if (!files_DIR) {
- ast_log(LOG_WARNING, "Cannot open dir %s or dir does not exist\n", class->dir);
+ ast_log(LOG_WARNING, "Cannot open dir %s or dir does not exist\n", dir_path);
return -1;
}
@@ -923,9 +933,9 @@ static int moh_scan_files(struct mohclass *class) {
ast_free(class->filearray[i]);
class->total_files = 0;
- dirnamelen = strlen(class->dir) + 2;
+ dirnamelen = strlen(dir_path) + 2;
getcwd(path, sizeof(path));
- chdir(class->dir);
+ chdir(dir_path);
while ((files_dirent = readdir(files_DIR))) {
/* The file name must be at least long enough to have the file type extension */
if ((strlen(files_dirent->d_name) < 4))
@@ -939,7 +949,7 @@ static int moh_scan_files(struct mohclass *class) {
if (!strchr(files_dirent->d_name, '.'))
continue;
- snprintf(filepath, sizeof(filepath), "%s/%s", class->dir, files_dirent->d_name);
+ snprintf(filepath, sizeof(filepath), "%s/%s", dir_path, files_dirent->d_name);
if (stat(filepath, &statbuf))
continue;