Merge pull request #2749 from martinpitt/adjtime
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 28 Feb 2016 23:56:07 +0000 (18:56 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 28 Feb 2016 23:56:56 +0000 (18:56 -0500)
1  2 
src/timedate/timedated.c

@@@ -125,21 -125,35 +125,35 @@@ static int context_write_data_local_rtc
                  if (!w)
                          return -ENOMEM;
          } else {
-                 char *p, *e;
+                 char *p;
 -                char *e = (char*) "\n"; /* default if there are not 3 lines with \n terminator */
++                const char *e = "\n"; /* default if there is less than 3 lines */
+                 const char *prepend = "";
                  size_t a, b;
  
-                 p = strchr(s, '\n');
-                 if (!p)
-                         return -EIO;
-                 p = strchr(p+1, '\n');
-                 if (!p)
-                         return -EIO;
-                 p++;
-                 e = strchr(p, '\n');
-                 if (!e)
-                         return -EIO;
+                 p = strchrnul(s, '\n');
+                 if (*p == '\0') {
+                         /* only one line, no \n terminator */
+                         prepend = "\n0\n";
+                 } else if (p[1] == '\0') {
+                         /* only one line, with \n terminator */
+                         ++p;
+                         prepend = "0\n";
+                 } else {
+                         p = strchr(p+1, '\n');
+                         if (!p) {
+                                 /* only two lines, no \n terminator */
+                                 prepend = "\n";
+                                 p = s + strlen(s);
+                         } else {
+                                 char *end;
+                                 /* third line might have a \n terminator or not */
+                                 p++;
+                                 end = strchr(p, '\n');
+                                 /* if we actually have a fourth line, use that as suffix "e", otherwise the default \n */
+                                 if (end)
+                                         e = end;
+                         }
+                 }
  
                  a = p - s;
                  b = strlen(e);