diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-12-21 17:09:54 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-12-21 17:09:54 +0000 |
commit | 6aacd0c1284a35cf4bd566739760ef4815597f2b (patch) | |
tree | f739bf9367f95a2f53240fab7e82ab6823f7e90c /funcs | |
parent | 5eaf407bf441baa53625db1747956131466c7894 (diff) |
Bug 5440 - Add STAT() dialplan function
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7575 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs')
-rw-r--r-- | funcs/func_env.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/funcs/func_env.c b/funcs/func_env.c index 4906c7d11..a4a5162d6 100644 --- a/funcs/func_env.c +++ b/funcs/func_env.c @@ -23,6 +23,7 @@ #include <stdlib.h> #include <string.h> #include <sys/types.h> +#include <sys/stat.h> #include "asterisk.h" @@ -59,6 +60,51 @@ static void builtin_function_env_write(struct ast_channel *chan, char *cmd, char } } +static char *builtin_function_stat_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + char *action; + struct stat s; + + ast_copy_string(buf, "0", len); + if (!data) { + ast_log(LOG_ERROR, "Out of memory\n"); + return buf; + } + + action = strsep(&data, "|"); + if (stat(data, &s)) { + return buf; + } else { + switch (*action) { + case 'e': + ast_copy_string(buf, "1", len); + break; + case 's': + snprintf(buf, len, "%d", (unsigned int)s.st_size); + break; + case 'f': + snprintf(buf, len, "%d", S_ISREG(s.st_mode) ? 1 : 0); + break; + case 'd': + snprintf(buf, len, "%d", S_ISDIR(s.st_mode) ? 1 : 0); + break; + case 'M': + snprintf(buf, len, "%d", (int)s.st_mtime); + break; + case 'A': + snprintf(buf, len, "%d", (int)s.st_mtime); + break; + case 'C': + snprintf(buf, len, "%d", (int)s.st_ctime); + break; + case 'm': + snprintf(buf, len, "%o", (int)s.st_mode); + break; + } + } + return buf; +} + #ifndef BUILTIN_FUNC static #endif @@ -69,3 +115,24 @@ struct ast_custom_function env_function = { .read = builtin_function_env_read, .write = builtin_function_env_write, }; + +#ifndef BUILTIN_FUNC +static +#endif +struct ast_custom_function stat_function = { + .name = "STAT", + .synopsis = "Does a check on the specified file", + .syntax = "STAT(<flag>,<filename>)", + .read = builtin_function_stat_read, + .desc = +"flag may be one of the following:\n" +" d - Checks if the file is a directory\n" +" e - Checks if the file exists\n" +" f - Checks if the file is a regular file\n" +" m - Returns the file mode (in octal)\n" +" s - Returns the size (in bytes) of the file\n" +" A - Returns the epoch at which the file was last accessed\n" +" C - Returns the epoch at which the inode was last changed\n" +" M - Returns the epoch at which the file was last modified\n", +}; + |