Browse Source

Skip blank lines in format_double_null().

Ignore blank lines when formatting, so the user doesn't need to worry
about entering environment variables or dependency names in the exactly
correct format.
Iain Patterson 7 years ago
parent
commit
d25f6e7c82
1 changed files with 21 additions and 0 deletions
  1. 21 0
      registry.cpp

+ 21 - 0
registry.cpp

@@ -392,6 +392,27 @@ int unformat_double_null(TCHAR *dn, unsigned long dnlen, TCHAR **unformatted, un
   }
 
   for (i = 0; i < dnlen; i++) if (dn[i] != _T('\r')) ++*newlen;
+
+  /* Skip blank lines. */
+  for (i = 0; i < dnlen; i++) {
+    if (dn[i] == _T('\r') && dn[i + 1] == _T('\n')) {
+      /* This is the last CRLF. */
+      if (i >= dnlen - 2) break;
+
+      /*
+        Strip at the start of the block or if the next characters are
+        CRLF too.
+      */
+      if (! i || (dn[i + 2] == _T('\r') && dn[i + 3] == _T('\n'))) {
+        for (j = i + 2; j < dnlen; j++) dn[j - 2] = dn[j];
+        dn[dnlen--] = _T('\0');
+        dn[dnlen--] = _T('\0');
+        i--;
+        --*newlen;
+      }
+    }
+  }
+
   /* Must end with two NULLs. */
   *newlen += 2;