diff options
author | Richard Mudgett <rmudgett@digium.com> | 2014-03-01 00:05:38 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2014-03-01 00:05:38 +0000 |
commit | c95146269c6d4682993599743a89551dd093f790 (patch) | |
tree | f0e00393ea55f9cd7dd1d74447c7a9fc9b1c781a /main/devicestate.c | |
parent | 77625956dd13cd95ac3d677b34562b423ed91e4a (diff) |
devicestate.c: Simplified some logic in _ast_device_state().
........
Merged revisions 409274 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@409275 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/devicestate.c')
-rw-r--r-- | main/devicestate.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/main/devicestate.c b/main/devicestate.c index 978d234b7..1f0c968aa 100644 --- a/main/devicestate.c +++ b/main/devicestate.c @@ -297,14 +297,11 @@ static enum ast_device_state devstate_cached(const char *device) /*! \brief Check device state through channel specific function or generic function */ static enum ast_device_state _ast_device_state(const char *device, int check_cache) { - char *buf; char *number; const struct ast_channel_tech *chan_tech; enum ast_device_state res; /*! \brief Channel driver that provides device state */ char *tech; - /*! \brief Another provider of device state */ - char *provider = NULL; /* If the last known state is cached, just return that */ if (check_cache) { @@ -314,16 +311,18 @@ static enum ast_device_state _ast_device_state(const char *device, int check_cac } } - buf = ast_strdupa(device); - tech = strsep(&buf, "/"); - if (!(number = buf)) { + number = ast_strdupa(device); + tech = strsep(&number, "/"); + if (!number) { + /*! \brief Another provider of device state */ + char *provider; + provider = strsep(&tech, ":"); if (!tech) { return AST_DEVICE_INVALID; } /* We have a provider */ number = tech; - tech = NULL; ast_debug(3, "Checking if I can find provider for \"%s\" - number: %s\n", provider, number); return getproviderstate(provider, number); @@ -331,18 +330,21 @@ static enum ast_device_state _ast_device_state(const char *device, int check_cac ast_debug(4, "No provider found, checking channel drivers for %s - %s\n", tech, number); - if (!(chan_tech = ast_get_channel_tech(tech))) + chan_tech = ast_get_channel_tech(tech); + if (!chan_tech) { return AST_DEVICE_INVALID; + } - if (!(chan_tech->devicestate)) /* Does the channel driver support device state notification? */ - return ast_parse_device_state(device); /* No, try the generic function */ + /* Does the channel driver support device state notification? */ + if (!chan_tech->devicestate) { + /* No, try the generic function */ + return ast_parse_device_state(device); + } res = chan_tech->devicestate(number); - - if (res != AST_DEVICE_UNKNOWN) - return res; - - res = ast_parse_device_state(device); + if (res == AST_DEVICE_UNKNOWN) { + res = ast_parse_device_state(device); + } return res; } |