]> granicus.if.org Git - graphviz/commitdiff
Revert "gvc auto_output_filename: avoid 'strdup' when constructing file name"
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 4 Sep 2022 18:44:01 +0000 (11:44 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 4 Sep 2022 18:56:02 +0000 (11:56 -0700)
This reverts commit 4291cc769a3eeef8b1c171e5479194733a4da6cd. This commit that
was intended to be a functional no-op actually altered the generated output
filename to remove `.` characters.

Github: xflr6/graphviz #178, NixOS/nixpkgs #188175
Gitlab: fixes #2270
Reported-by: Sebastian Bank <sebastian.bank@uni-leipzig.de>
CHANGELOG.md
lib/gvc/gvdevice.c
tests/test_regression.py

index 5ab3b3dfdd9dab3c5b809f0e9fb452678bcd971c..218a2f9138a2a30e3d952129a1ffd547cffe8953 100644 (file)
@@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ### Fixed
 
 - Id attribute is not used in linearGradient. #2258
+- Graphviz 5.0.1 undocumented change of automatically generated output filename
+  with -O flag (missing dot separator). This was a regression in 5.0.1. #2270
 
 ### Removed
 
index aca908f113cab49d52cd56548e9b8fae46669163..dfe68871d2c4d85dfecf0b4250147546071e2c7e 100644 (file)
@@ -17,7 +17,6 @@
 #include <ctype.h>
 #include <stdarg.h>
 #include <stdbool.h>
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <inttypes.h>
@@ -87,7 +86,7 @@ static void auto_output_filename(GVJ_t *job)
     static char *buf;
     static size_t bufsz;
     char gidx[100];  /* large enough for '.' plus any integer */
-    char *fn;
+    char *fn, *p, *q;
     size_t len;
 
     if (job->graph_index)
@@ -108,23 +107,14 @@ static void auto_output_filename(GVJ_t *job)
     strcpy(buf, fn);
     strcat(buf, gidx);
     strcat(buf, ".");
-
-    {
-        char *dst = buf + strlen(buf);
-        const char *src = job->output_langname;
-        const char *src_end = src + strlen(src);
-        for (const char *q = src_end; ; --q) {
-            if (*q == ':') {
-                sprintf(dst, "%.*s.", (int)(src_end - q - 1), q + 1);
-                dst += (size_t)(src_end - q - 1);
-                src_end = q;
-            }
-            if (q == src) {
-                sprintf(dst, "%.*s", (int)(src_end - src), src);
-                break;
-            }
-        }
+    p = strdup(job->output_langname);
+    while ((q = strrchr(p, ':'))) {
+        strcat(buf, q+1);
+        strcat(buf, ".");
+       *q = '\0';
     }
+    strcat(buf, p);
+    free(p);
 
     job->output_filename = buf;
 }
index e3fcf59449fe1316c5caf066a66f04d803d460e1..6316adf24bd999965ef24000db6cf34c69cb1873 100644 (file)
@@ -1952,7 +1952,6 @@ def test_2258():
   for gradient in gradients:
     assert "G2" in gradient.get("id"), "ID was not applied to linear gradients"
 
-@pytest.mark.xfail(strict=True)
 def test_2270(tmp_path: Path):
   """
   `-O` should result in the expected output filename