Diff between b3d5315d9e879af7eb208e06b2c9112a121b10f8 and daea0f3b12c18f96b7fde7f33e4b6ef4901e927a

Changed Files

File Additions Deletions Status
profiles/input/suspend-dummy.c +17 -15 modified

Full Patch

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
@@ -112,28 +112,30 @@ static int fifo_open(void)
 
 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);