summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2015-02-10 16:23:17 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2015-02-10 16:25:50 -0500
commit141c27b85274d7fc499705a11024872c83a476d6 (patch)
tree6abb7852e9af906bcbd99e3de98278da4f08a193
parent4ac337c0b19e850c51db5a0830e4828b8ac5c4fb (diff)
downloadefl-141c27b85274d7fc499705a11024872c83a476d6.tar.gz
ecore-drm should not use sscanf when getting logind vt
this should be more robust for when something like "/dev/tty4" is passed @fix
-rw-r--r--src/lib/ecore_drm/ecore_drm_logind.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/lib/ecore_drm/ecore_drm_logind.c b/src/lib/ecore_drm/ecore_drm_logind.c
index d4db3b92bc..f8207567cd 100644
--- a/src/lib/ecore_drm/ecore_drm_logind.c
+++ b/src/lib/ecore_drm/ecore_drm_logind.c
@@ -1,4 +1,5 @@
#include "ecore_drm_private.h"
+#include <ctype.h>
#ifndef KDSKBMUTE
# define KDSKBMUTE 0x4B51
@@ -11,7 +12,7 @@ static inline Eina_Bool
_ecore_drm_logind_vt_get(Ecore_Drm_Device *dev)
{
int ret;
- char *tty;
+ char *tty, *p;
ret = sd_session_get_tty(dev->session, &tty);
if (ret < 0)
@@ -20,12 +21,18 @@ _ecore_drm_logind_vt_get(Ecore_Drm_Device *dev)
return EINA_FALSE;
}
- ret = sscanf(tty, "tty%u", &dev->vt);
+ p = strchr(tty, 't');
+ dev->vt = UINT_MAX;
+ if (p)
+ {
+ while (p[0] && (!isdigit(p[0])))
+ p++;
+ if (p[0])
+ dev->vt = strtoul(p, NULL, 10);
+ }
free(tty);
- if (ret != 1) return EINA_FALSE;
-
- return EINA_TRUE;
+ return dev->vt != UINT_MAX;
}
#endif