diff --git a/profiles/input/suspend-dummy.c b/profiles/input/suspend-dummy.c
index 97e42e0..9fa3fda 100644
--- a/profiles/input/suspend-dummy.c
+++ b/profiles/input/suspend-dummy.c
int suspend_init(suspend_event suspend, resume_event resume)
{
+ struct stat st;
int ret;
+ DBG("");
+
suspend_cb = suspend;
resume_cb = resume;
- if (mkfifo(HOG_SUSPEND_FIFO, S_IRUSR | S_IWUSR) < 0) {
- int err = -errno;
-
- if (err == -EEXIST) {
- DBG("FIFO (%s) already exists, trying to remove",
- HOG_SUSPEND_FIFO);
-
- /* remove pre-existing FIFO and retry */
- if (unlink(HOG_SUSPEND_FIFO) < 0) {
- err = -errno;
- error("Failed to remove FIFO (%s): %s (%d)",
- HOG_SUSPEND_FIFO, strerror(-err), -err);
- return err;
- }
+ if (stat(HOG_SUSPEND_FIFO, &st) == 0) {
+ if (!S_ISFIFO(st.st_mode)) {
+ error("Unexpected non-FIFO %s file", HOG_SUSPEND_FIFO);
+ return -EIO;
+ }
- return suspend_init(suspend, resume);
+ if (unlink(HOG_SUSPEND_FIFO) < 0) {
+ int err = -errno;
+ error("Failed to remove FIFO (%s): %s (%d)",
+ HOG_SUSPEND_FIFO, strerror(-err), -err);
+ return err;
}
+ }
+
+ if (mkfifo(HOG_SUSPEND_FIFO, S_IRUSR | S_IWUSR) < 0) {
+ int err = -errno;
error("Can't create FIFO (%s): %s (%d)", HOG_SUSPEND_FIFO,
strerror(-err), -err);