Project import generated by Copybara.

GitOrigin-RevId: 638de8b11800d448fb0f537658680279d6f90a0a
Change-Id: I451bcf71922a5c326d2030115542deda2664b528
diff --git a/src/watchdog.c b/src/watchdog.c
index 8acb1c1..f554565 100644
--- a/src/watchdog.c
+++ b/src/watchdog.c
@@ -83,6 +83,7 @@
 #define HEARTBEAT	"heartbeat-file"
 #define HBSTAMPS	"heartbeat-stamps"
 #define LOGDIR		"log-dir"
+#define FALLBACKLOGDIR	"fallback-log-dir"
 #define TESTDIR		"test-directory"
 
 #ifndef TESTBIN_PATH
@@ -101,6 +102,7 @@
 time_t timeout = 0, rtimeout = 0;
 FILE *hb;
 char* logdir = "/var/log/watchdog";
+char* fallback_logdir = NULL;
 char *filename_buf;
 
 #if defined(_POSIX_MEMLOCK)
@@ -505,6 +507,11 @@
 			fprintf(stderr, "Ignoring invalid line in config file:\n%s\n", line);
 		else
 			logdir = strdup(line + i);
+	    } else if (strncmp(line + i, FALLBACKLOGDIR, strlen(FALLBACKLOGDIR)) == 0) {
+		if (spool(line, &i, strlen(FALLBACKLOGDIR)))
+			fprintf(stderr, "Ignoring invalid line in config file:\n%s\n", line);
+		else
+			fallback_logdir = strdup(line + i);
 	    } else if (strncmp(line + i, TESTDIR, strlen(TESTDIR)) == 0) {
 		if (spool(line, &i, strlen(TESTDIR)))
 			fprintf(stderr, "Ignoring invalid line in config file: %s ", line);
@@ -699,9 +706,20 @@
    
     /* make sure we get our own log directory */
     if (mkdir (logdir, 0750) && errno != EEXIST) {
-	fprintf(stderr, "%s error:\n", progname);
-        fprintf(stderr, "Cannot create directory %s\n", logdir);
-	exit (1);
+      fprintf(stderr, "%s error:\n", progname);
+      fprintf(stderr, "Cannot create log directory %s\n", logdir);
+      if (fallback_logdir != NULL) {
+        fprintf(stderr, "Fall back to create log directory %s\n", fallback_logdir);
+        if (mkdir (fallback_logdir, 0750) && errno != EEXIST) {
+          fprintf(stderr, "Cannot create fallback log directory %s\n", fallback_logdir);
+          exit (1);
+        } else {
+          logdir = fallback_logdir;
+        }
+      }
+      else {
+        exit (1);
+      }
     }
 
     /* set up pinging if in ping mode */