]> granicus.if.org Git - graphviz/commitdiff
cgraph: fix mismatched type signatures between 'agobjfn_t' and 'agraphattr_init'
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 6 Nov 2022 18:19:29 +0000 (10:19 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 10 Nov 2022 16:47:34 +0000 (08:47 -0800)
Squashes a compiler warning:

  attr.c: In function ‘init_all_attrs’:
  attr.c:534:37: warning: cast between incompatible function types from ‘void
    (*)(Agraph_t *)’ {aka ‘void (*)(struct Agraph_s *)’} to ‘void (*)(Agraph_t
    *, Agobj_t *, void *)’ {aka ‘void (*)(struct Agraph_s *, struct Agobj_s *,
    void *)’} [-Wcast-function-type]
    534 |     agapply(root, (Agobj_t *) root, (agobjfn_t) agraphattr_init,
        |                                     ^

This code was incorrect. But on the most common architecture in contemporary
use, x86-64, the calling convention for both is fully in registers, so no user
visible misbehavior would have been seen.

Gitlab: #2300

lib/cgraph/attr.c

index dea9dfe7cf1bec617a443d1bb0479d09279ac3ee..4c5c23fb51e9f6ecd3e37508dae78aaac51e573c 100644 (file)
@@ -518,6 +518,13 @@ int agsafeset(void *obj, char *name, const char *value, const char *def) {
     return agxset(obj, a, value);
 }
 
+static void agraphattr_init_wrapper(Agraph_t *g, Agobj_t *ignored1,
+                                    void *ignored2) {
+  (void)ignored1;
+  (void)ignored2;
+
+  agraphattr_init(g);
+}
 
 /*
  * attach attributes to the already created graph objs.
@@ -531,8 +538,7 @@ static void init_all_attrs(Agraph_t * g)
     Agedge_t *e;
 
     root = agroot(g);
-    agapply(root, (Agobj_t *) root, (agobjfn_t) agraphattr_init,
-           NULL, TRUE);
+    agapply(root, (Agobj_t*)root, agraphattr_init_wrapper, NULL, TRUE);
     for (n = agfstnode(root); n; n = agnxtnode(root, n)) {
        agnodeattr_init(g, n);
        for (e = agfstout(root, n); e; e = agnxtout(root, e)) {