main/utils: allow checking for command in $PATH
ASTERISK-30037 Change-Id: I4b6f7264c8c737c476c798d2352f3232b263bbdf
This commit is contained in:
parent
55328b1e5c
commit
b89130c184
|
@ -1105,4 +1105,14 @@ int ast_thread_user_interface_set(int is_user_interface);
|
|||
*/
|
||||
int ast_thread_is_user_interface(void);
|
||||
|
||||
/*!
|
||||
* \brief Test for the presence of an executable command in $PATH
|
||||
*
|
||||
* \param cmd Name of command to locate.
|
||||
*
|
||||
* \retval True (non-zero) if command is in $PATH.
|
||||
* \retval False (zero) command not found.
|
||||
*/
|
||||
int ast_check_command_in_path(const char *cmd);
|
||||
|
||||
#endif /* _ASTERISK_UTILS_H */
|
||||
|
|
35
main/utils.c
35
main/utils.c
|
@ -3216,3 +3216,38 @@ int ast_thread_is_user_interface(void)
|
|||
|
||||
return *thread_user_interface;
|
||||
}
|
||||
|
||||
int ast_check_command_in_path(const char *cmd)
|
||||
{
|
||||
char *token, *saveptr, *path = getenv("PATH");
|
||||
char filename[PATH_MAX];
|
||||
int len;
|
||||
|
||||
if (path == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
path = ast_strdup(path);
|
||||
if (path == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
token = strtok_r(path, ":", &saveptr);
|
||||
while (token != NULL) {
|
||||
len = snprintf(filename, sizeof(filename), "%s/%s", token, cmd);
|
||||
if (len < 0 || len >= sizeof(filename)) {
|
||||
ast_log(LOG_WARNING, "Path constructed with '%s' too long; skipping\n", token);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (access(filename, X_OK) == 0) {
|
||||
ast_free(path);
|
||||
return 1;
|
||||
}
|
||||
|
||||
token = strtok_r(NULL, ":", &saveptr);
|
||||
}
|
||||
ast_free(path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue