]> granicus.if.org Git - graphviz/log
graphviz
3 years agostr_mpy: [nfc] pre-compute and allocate the result string
Matthew Fernandez [Thu, 15 Jul 2021 04:32:52 +0000 (21:32 -0700)]
str_mpy: [nfc] pre-compute and allocate the result string

This change does not affect the functionality of this function, but it has two
motivating advantages:

  1. The temporary scratch buffer `ex->tmp` is no longer used. Though it is not
     obvious without auditing a lot of surrounding code, the data written into
     this buffer does not need to be retained beyond the lifetime of this
     function. Removing its use not only removes a code path through sfio, but
     decouples this code from other code using `ex->tmp` making it easier to
     understand. Related to #1873, #1998.

  2. The prior code used an sfio temporary buffer to construct the result string
     and then duplicated it into a vmalloc-allocated buffer. This is reasonable
     as vmalloc has no support for incrementally constructing dynamically
     allocated strings. However we can avoid the intermediate sfio buffer by
     simply pre-computing the final vmalloc allocation that will be needed. This
     change does exactly that and simply writes the result once into its final
     destination instead of copying through an intermediate buffer. This
     should not only (slightly) decrease transient heap pressure, but also
     (again slightly) accelerate the performance of this function.

Both these effects are a simplification with respect to how the compiler sees
this function. That is, an optimizing compiler should now better comprehend the
intent of this function and be able to more aggressively specialize and inline
it where relevant.

3 years agostr_mpy: [nfc] rewrite in more modern C99 style
Matthew Fernandez [Thu, 15 Jul 2021 04:24:41 +0000 (21:24 -0700)]
str_mpy: [nfc] rewrite in more modern C99 style

Upcoming changes will improve the efficiency of this function and decrease its
coupling with other operations. Rather than introduce these new changes in a
differing style, this preparatory commit rewrites the existing functionality in
this style first, without affecting its behavior. Related to #1873, #1998.

3 years agostr_mod: [nfc] pre-compute and allocate the result string
Matthew Fernandez [Thu, 15 Jul 2021 04:17:27 +0000 (21:17 -0700)]
str_mod: [nfc] pre-compute and allocate the result string

This change does not affect the functionality of this function, but it has two
motivating advantages:

  1. The temporary scratch buffer `ex->tmp` is no longer used. Though it is not
     obvious without auditing a lot of surrounding code, the data written into
     this buffer does not need to be retained beyond the lifetime of this
     function. Removing its use not only removes a code path through sfio, but
     decouples this code from other code using `ex->tmp` making it easier to
     understand. Related to #1873, #1998.

  2. The prior code used an sfio temporary buffer to construct the result string
     and then duplicated it into a vmalloc-allocated buffer. This is reasonable
     as vmalloc has no support for incrementally constructing dynamically
     allocated strings. However we can avoid the intermediate sfio buffer by
     simply pre-computing the final vmalloc allocation that will be needed. This
     change does exactly that and simply writes the result once into its final
     destination instead of copying through an intermediate buffer. This
     should not only (slightly) decrease transient heap pressure, but also
     (again slightly) accelerate the performance of this function.

Both these effects are a simplification with respect to how the compiler sees
this function. That is, an optimizing compiler should now better comprehend the
intent of this function and be able to more aggressively specialize and inline
it where relevant.

3 years agostr_mod: [nfc] rewrite in more modern C99 style
Matthew Fernandez [Thu, 15 Jul 2021 04:12:16 +0000 (21:12 -0700)]
str_mod: [nfc] rewrite in more modern C99 style

Upcoming changes will improve the efficiency of this function and decrease its
coupling with other operations. Rather than introduce these new changes in a
differing style, this preparatory commit rewrites the existing functionality in
this style first, without affecting its behavior. Related to #1873, #1998.

3 years agostr_xor: [nfc] pre-compute and allocate the result string
Matthew Fernandez [Thu, 15 Jul 2021 04:04:44 +0000 (21:04 -0700)]
str_xor: [nfc] pre-compute and allocate the result string

This change does not affect the functionality of this function, but it has two
motivating advantages:

  1. The temporary scratch buffer `ex->tmp` is no longer used. Though it is not
     obvious without auditing a lot of surrounding code, the data written into
     this buffer does not need to be retained beyond the lifetime of this
     function. Removing its use not only removes a code path through sfio, but
     decouples this code from other code using `ex->tmp` making it easier to
     understand. Related to #1873, #1998.

  2. The prior code used an sfio temporary buffer to construct the result string
     and then duplicated it into a vmalloc-allocated buffer. This is reasonable
     as vmalloc has no support for incrementally constructing dynamically
     allocated strings. However we can avoid the intermediate sfio buffer by
     simply pre-computing the final vmalloc allocation that will be needed. This
     change does exactly that and simply writes the result once into its final
     destination instead of copying through an intermediate buffer. This
     should not only (slightly) decrease transient heap pressure, but also
     (again slightly) accelerate the performance of this function.

Both these effects are a simplification with respect to how the compiler sees
this function. That is, an optimizing compiler should now better comprehend the
intent of this function and be able to more aggressively specialize and inline
it where relevant.

3 years agostr_xor: [nfc] rewrite in more modern C99 style
Matthew Fernandez [Thu, 15 Jul 2021 03:58:50 +0000 (20:58 -0700)]
str_xor: [nfc] rewrite in more modern C99 style

Upcoming changes will improve the efficiency of this function and decrease its
coupling with other operations. Rather than introduce these new changes in a
differing style, this preparatory commit rewrites the existing functionality in
this style first, without affecting its behavior. Related to #1873, #1998.

3 years agostr_and: [nfc] pre-compute and allocate the result string
Matthew Fernandez [Thu, 15 Jul 2021 03:48:00 +0000 (20:48 -0700)]
str_and: [nfc] pre-compute and allocate the result string

This change does not affect the functionality of this function, but it has two
motivating advantages:

  1. The temporary scratch buffer `ex->tmp` is no longer used. Though it is not
     obvious without auditing a lot of surrounding code, the data written into
     this buffer does not need to be retained beyond the lifetime of this
     function. Removing its use not only removes a code path through sfio, but
     decouples this code from other code using `ex->tmp` making it easier to
     understand. Related to #1873, #1998.

  2. The prior code used an sfio temporary buffer to construct the result string
     and then duplicated it into a vmalloc-allocated buffer. This is reasonable
     as vmalloc has no support for incrementally constructing dynamically
     allocated strings. However we can avoid the intermediate sfio buffer by
     simply pre-computing the final vmalloc allocation that will be needed. This
     change does exactly that and simply writes the result once into its final
     destination instead of copying through an intermediate buffer. This
     should not only (slightly) decrease transient heap pressure, but also
     (again slightly) accelerate the performance of this function.

Both these effects are a simplification with respect to how the compiler sees
this function. That is, an optimizing compiler should now better comprehend the
intent of this function and be able to more aggressively specialize and inline
it where relevant.

3 years agostr_and: [nfc] rewrite in more modern C99 style
Matthew Fernandez [Thu, 15 Jul 2021 03:42:24 +0000 (20:42 -0700)]
str_and: [nfc] rewrite in more modern C99 style

Upcoming changes will improve the efficiency of this function and decrease its
coupling with other operations. Rather than introduce these new changes in a
differing style, this preparatory commit rewrites the existing functionality in
this style first, without affecting its behavior. Related to #1873, #1998.

3 years agostr_ior: [nfc] pre-compute and allocate the result string
Matthew Fernandez [Thu, 15 Jul 2021 03:23:31 +0000 (20:23 -0700)]
str_ior: [nfc] pre-compute and allocate the result string

This change does not affect the functionality of this function, but it has two
motivating advantages:

  1. The temporary scratch buffer `ex->tmp` is no longer used. Though it is not
     obvious without auditing a lot of surrounding code, the data written into
     this buffer does not need to be retained beyond the lifetime of this
     function. Removing its use not only removes a code path through sfio, but
     decouples this code from other code using `ex->tmp` making it easier to
     understand. Related to #1873, #1998.

  2. The prior code used an sfio temporary buffer to construct the result string
     and then duplicated it into a vmalloc-allocated buffer. This is reasonable
     as vmalloc has no support for incrementally constructing dynamically
     allocated strings. However we can avoid the intermediate sfio buffer by
     simply pre-computing the final vmalloc allocation that will be needed. This
     change does exactly that and simply writes the result once into its final
     destination instead of copying through an intermediate buffer. This
     should not only (slightly) decrease transient heap pressure, but also
     (again slightly) accelerate the performance of this function.

Both these effects are a simplification with respect to how the compiler sees
this function. That is, an optimizing compiler should now better comprehend the
intent of this function and be able to more aggressively specialize and inline
it where relevant.

3 years agostr_ior: [nfc] rewrite in more modern C99 style
Matthew Fernandez [Thu, 15 Jul 2021 03:10:33 +0000 (20:10 -0700)]
str_ior: [nfc] rewrite in more modern C99 style

Upcoming changes will improve the efficiency of this function and decrease its
coupling with other operations. Rather than introduce these new changes in a
differing style, this preparatory commit rewrites the existing functionality in
this style first, without affecting its behavior. Related to #1873, #1998.

3 years agoMerge branch 'smattr/e0ddc47d-fb9b-459e-a69c-ff27972c83dd' into 'main'
Matthew Fernandez [Tue, 20 Jul 2021 15:08:55 +0000 (15:08 +0000)]
Merge branch 'smattr/e0ddc47d-fb9b-459e-a69c-ff27972c83dd' into 'main'

more warning squashing

See merge request graphviz/graphviz!2052

3 years agoDotIO.c: use unsigned types where possible when interacting with ND_id
Matthew Fernandez [Wed, 14 Jul 2021 03:58:32 +0000 (20:58 -0700)]
DotIO.c: use unsigned types where possible when interacting with ND_id

Squashes 4 -Wsign-conversion warnings.

3 years ago_sffilbuf: squash another -Wsign-compare warning
Matthew Fernandez [Wed, 14 Jul 2021 02:58:44 +0000 (19:58 -0700)]
_sffilbuf: squash another -Wsign-compare warning

The variable n is known to be greater than 0 in this branch.

3 years ago_sffilbuf: squash a -Wsign-compare warning
Matthew Fernandez [Wed, 14 Jul 2021 02:56:54 +0000 (19:56 -0700)]
_sffilbuf: squash a -Wsign-compare warning

The variable r is known to be greater than 0 in this branch.

3 years agoagcallbacks: force flag to be treated as a boolean
Matthew Fernandez [Wed, 14 Jul 2021 02:43:27 +0000 (19:43 -0700)]
agcallbacks: force flag to be treated as a boolean

We cannot easily change this function’s signature to take a C99 bool without
breaking API, but we can at least ensure it is treating its flag as a boolean
internally. This squashes two -Wconversion warnings.

3 years agomark all cb_t switches as exhaustive
Matthew Fernandez [Wed, 14 Jul 2021 02:38:25 +0000 (19:38 -0700)]
mark all cb_t switches as exhaustive

Now that the switched-on type is represented as an enum, it is simpler to audit
all call sites and confirm that the default case of all these switches is
unreachable.

3 years agouse an enum for CB_* constants
Matthew Fernandez [Wed, 14 Jul 2021 02:33:10 +0000 (19:33 -0700)]
use an enum for CB_* constants

Nothing was relying on the values of these constants and it is clearer to use
an enum here. It is now more obvious to readers when one of these values is
being passed between functions instead of an ambiguous int.

3 years agoagrename: mark switch as covering all cases
Matthew Fernandez [Wed, 14 Jul 2021 02:22:22 +0000 (19:22 -0700)]
agrename: mark switch as covering all cases

Squashes one -Wswitch warning.

3 years agoattrstmt: mark unreachable case in kind switch
Matthew Fernandez [Wed, 14 Jul 2021 02:20:05 +0000 (19:20 -0700)]
attrstmt: mark unreachable case in kind switch

This function is only ever called with one of the three kinds covered in the
switch. This squashes one -Wswitch warning.

3 years agomultilevel_spring_electrical_embedding_core: remove redundant branch
Matthew Fernandez [Wed, 14 Jul 2021 02:07:02 +0000 (19:07 -0700)]
multilevel_spring_electrical_embedding_core: remove redundant branch

The code in this branch is identical to the else branch of this conditional
ladder. Detected using GCC 8.3.0’s -Wduplicated-branches.

3 years agoMerge branch 'smattr/1c5ab0d2-4505-400c-9113-29aea91e5436' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 23:01:59 +0000 (23:01 +0000)]
Merge branch 'smattr/1c5ab0d2-4505-400c-9113-29aea91e5436' into 'main'

remove vmalloc indirection through function pointers

See merge request graphviz/graphviz!2056

3 years agoremove unused exstrdup
Matthew Fernandez [Sat, 17 Jul 2021 00:41:51 +0000 (17:41 -0700)]
remove unused exstrdup

3 years agoinline exfree and remove it
Matthew Fernandez [Sat, 17 Jul 2021 00:40:59 +0000 (17:40 -0700)]
inline exfree and remove it

It does not seem worthwhile maintaining a macro that is used in a single place.

3 years agoremove return value from vmfree
Matthew Fernandez [Sat, 17 Jul 2021 00:37:51 +0000 (17:37 -0700)]
remove return value from vmfree

There is no reasonable action for a caller to take based on a deallocation
request failing. This is inline with ISO C’s `free` having no return value.

3 years agoremove vmhdr.h
Matthew Fernandez [Sat, 17 Jul 2021 00:26:49 +0000 (17:26 -0700)]
remove vmhdr.h

With the allocation functions’ prototypes moved to the public header, there was
nothing significant remaining in this header.

3 years agorename vmbest.c to vmalloc.c
Matthew Fernandez [Sat, 17 Jul 2021 00:20:20 +0000 (17:20 -0700)]
rename vmbest.c to vmalloc.c

With the best* functions gone, it does not make sense to leave the
implementation in a file called vmbest.c

3 years agoremove vmalloc indirection through function pointers
Matthew Fernandez [Sat, 17 Jul 2021 00:09:10 +0000 (17:09 -0700)]
remove vmalloc indirection through function pointers

In the past, vmalloc supported a configurable allocation method. That is, it was
parametrized with the underlying allocator. Commit
099964281cfccd7b4b0dbc4473ad9347ed3ca2f0 removed support for this and made the
so-called “bestalloc” the only option, directly using malloc. Since then, the
Vmethod_t part of vmalloc has been more-or-less pure overhead. Allocator
function pointers were maintained here and all calls were indirected through
these function pointers.

This commit removes these function pointers (reducing allocation of the
Vmalloc_t struct by sizeof(void*) * 3) and exposes the (only) implementation
behind these pointers as direct functions that can be called. It is expected
this will accelerate the performance of any lib/expr code heavily using vmalloc.
Apart from performance impact, this is a significant simplification of the
vmalloc code.

3 years agoremove prototype for unimplemented vmaddr
Matthew Fernandez [Sat, 17 Jul 2021 00:46:17 +0000 (17:46 -0700)]
remove prototype for unimplemented vmaddr

The vmaddr macro was removed in 4f5e8468b8c69f7f617d6d9d7bf0759a04217cda but its
prototype was incorrectly left behind.

3 years agoreplace ASSERT macro with standard assert
Matthew Fernandez [Sat, 17 Jul 2021 00:46:09 +0000 (17:46 -0700)]
replace ASSERT macro with standard assert

The standard libc assert is more familiar to programmers, renders more useful
debugging messages, and is more easily toggled with NDEBUG.

3 years agoMerge branch 'smattr/42F20EFF-77BB-4A0B-8730-E80BFCB58A15' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 22:12:08 +0000 (22:12 +0000)]
Merge branch 'smattr/42F20EFF-77BB-4A0B-8730-E80BFCB58A15' into 'main'

replace 1-byte strstr calls with strchr

See merge request graphviz/graphviz!2054

3 years agoremove some further commented out code
Matthew Fernandez [Fri, 16 Jul 2021 03:49:05 +0000 (20:49 -0700)]
remove some further commented out code

3 years agoremove some commented out code
Matthew Fernandez [Fri, 16 Jul 2021 03:48:02 +0000 (20:48 -0700)]
remove some commented out code

3 years agofix a couple of comment typos
Matthew Fernandez [Fri, 16 Jul 2021 03:46:41 +0000 (20:46 -0700)]
fix a couple of comment typos

3 years agoreplace 1-byte strstr calls with strchr
Matthew Fernandez [Fri, 16 Jul 2021 03:44:04 +0000 (20:44 -0700)]
replace 1-byte strstr calls with strchr

This change has no effect on functionality, but strchr is cheaper to call and
equivalent to these strstr calls. This likely makes no difference in an
optimized build as modern compilers can see this transformation is possible
themselves. However, this change may assist older compilers or accelerate
unoptimized builds.

3 years agoremove unnecessary INT32_MAX definition
Matthew Fernandez [Fri, 16 Jul 2021 03:42:05 +0000 (20:42 -0700)]
remove unnecessary INT32_MAX definition

All currently supported environments define this in stdint.h.

3 years agoremove unused UINT32_MAX definition
Matthew Fernandez [Fri, 16 Jul 2021 03:41:04 +0000 (20:41 -0700)]
remove unused UINT32_MAX definition

All currently supported environments define this constant in stdint.h. But it
was not being used in this file anyway.

3 years agoremove redundant #include
Matthew Fernandez [Fri, 16 Jul 2021 03:37:33 +0000 (20:37 -0700)]
remove redundant #include

It is unnecessary to include stddef.h if you are including stdlib.h.

3 years agoMerge branch 'smattr/e2b47b18-64c6-46f9-9ebe-57f338c3b2fc' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 20:49:28 +0000 (20:49 +0000)]
Merge branch 'smattr/e2b47b18-64c6-46f9-9ebe-57f338c3b2fc' into 'main'

fix: remove hard limit of 1000 boxes in dot spline code

Closes #2095

See merge request graphviz/graphviz!2050

3 years agofix: remove hard limit of 1000 boxes in dot spline code
Matthew Fernandez [Mon, 12 Jul 2021 00:38:45 +0000 (17:38 -0700)]
fix: remove hard limit of 1000 boxes in dot spline code

The dot spline code used a static array of 1000 box data structures. It is not
clear to me why this limit was thought to be enough. I suspect the limit (added
in the initial Graphviz revision) was just thought to be something sufficiently
large that no user would ever hit it.

This is no longer true. The graph in issue #2095 exceeds this limit. Because
there are no bounds checks when moving through the boxes array, this resulted in
a crash due to a write beyond the end of the array.

In this commit, we remove this limit entirely and instead use a dynamically
allocated expanding array of boxes. This permits handling an arbitrary number of
boxes during computation. Fixes #2095.

3 years agomake_flat_edge: use a local box array instead of the global boxes
Matthew Fernandez [Mon, 12 Jul 2021 00:00:40 +0000 (17:00 -0700)]
make_flat_edge: use a local box array instead of the global boxes

The values written to this array during make_flat_edge do not need to be
retained after the function returns. It was simply using the boxes as scratch
space. Using a local array instead makes it easier for the compiler to optimize
and will ease some upcoming changes. Related to #2095.

This introduces a new -Wshadow compiler warning, but that will be removed in a
future commit.

3 years agomake_flat_bottom_edges: use a local box array instead of the global boxes
Matthew Fernandez [Sun, 11 Jul 2021 23:57:14 +0000 (16:57 -0700)]
make_flat_bottom_edges: use a local box array instead of the global boxes

The values written to this array during make_flat_bottom_edges do not need to be
retained after the function returns. It was simply using the boxes as scratch
space. Using a local array instead makes it easier for the compiler to optimize
and will ease some upcoming changes. Related to #2095.

This introduces a new -Wshadow compiler warning, but that will be removed in a
future commit.

3 years agomake_flat_labeled_edge: use a local box array instead of the global boxes
Matthew Fernandez [Sun, 11 Jul 2021 23:37:16 +0000 (16:37 -0700)]
make_flat_labeled_edge: use a local box array instead of the global boxes

The values written to this array during make_flat_labeled_edge do not need to be
retained after the function returns. It was simply using the boxes as scratch
space. Using a local array instead makes it easier for the compiler to optimize
and will ease some upcoming changes. Related to #2095.

This introduces a new -Wshadow compiler warning, but that will be removed in a
future commit.

3 years agoadd a test case for #2095
Matthew Fernandez [Mon, 12 Jul 2021 00:44:20 +0000 (17:44 -0700)]
add a test case for #2095

3 years agoMerge branch 'smattr/d9d50ca2-985b-4441-8273-68f407feeb8b' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 19:50:45 +0000 (19:50 +0000)]
Merge branch 'smattr/d9d50ca2-985b-4441-8273-68f407feeb8b' into 'main'

add a warning when using layout on a non-graph, #2078

Closes #2078

See merge request graphviz/graphviz!2041

3 years agoremove some unnecessary bracketing
Matthew Fernandez [Thu, 8 Jul 2021 04:28:58 +0000 (21:28 -0700)]
remove some unnecessary bracketing

3 years agoadd a warning message when using layout on a non-graph
Matthew Fernandez [Thu, 8 Jul 2021 04:18:23 +0000 (21:18 -0700)]
add a warning message when using layout on a non-graph

Closes #2078.

3 years agoextend #2078 test case to ensure correct layout usage works
Matthew Fernandez [Sat, 10 Jul 2021 16:18:51 +0000 (09:18 -0700)]
extend #2078 test case to ensure correct layout usage works

3 years agoupdate #2078 test case to expect a warning
Matthew Fernandez [Thu, 8 Jul 2021 04:23:37 +0000 (21:23 -0700)]
update #2078 test case to expect a warning

As I look into how to resolve this issue, I realize it does not make sense to
look for mention of a subgraph because the layout attribute is invalid on *all*
entities except graphs. That is, the error/warning should just say it is only
valid for graphs. Related to #2078.

3 years agoremove unnecessary casts of string table entries
Matthew Fernandez [Thu, 8 Jul 2021 04:11:57 +0000 (21:11 -0700)]
remove unnecessary casts of string table entries

The right hand side of these expressions are already char pointers.

3 years agorewrite streq as a function and remove micro-optimization
Matthew Fernandez [Thu, 8 Jul 2021 04:07:51 +0000 (21:07 -0700)]
rewrite streq as a function and remove micro-optimization

There is no need for this to be a macro or for it to check the first character
explicitly. Modern compilers can do this kind of optimization themselves.

3 years agoremove commented out assertion
Matthew Fernandez [Thu, 8 Jul 2021 03:38:22 +0000 (20:38 -0700)]
remove commented out assertion

I do not know why the comment says it is surprising the assertion fails. It
seems perfectly normal to me that it would fail, as the correct condition is
against *both* AGINEDGE and AGOUTEDGE as in the following line.

3 years agoremove unhelpful comment
Matthew Fernandez [Thu, 8 Jul 2021 03:15:36 +0000 (20:15 -0700)]
remove unhelpful comment

It does not seem to aid understanding this code to know John Ellson and someone
known as GN requested it.

3 years agoMerge branch 'smattr/cbbcfbb8-167d-442f-ad12-962871e79e90' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 01:18:06 +0000 (01:18 +0000)]
Merge branch 'smattr/cbbcfbb8-167d-442f-ad12-962871e79e90' into 'main'

make some char pointer parameters to cgraph functions const

See merge request graphviz/graphviz!2044

3 years agorewrite is_id_char macro as a function
Matthew Fernandez [Sun, 4 Jul 2021 04:31:39 +0000 (21:31 -0700)]
rewrite is_id_char macro as a function

There is no need for this to be a macro. Making it a function allows stronger
type safety, safe to use with impure arguments, and reduces bracketing noise.

3 years agoremove use of an unsigned char in _agstrcanon
Matthew Fernandez [Sun, 4 Jul 2021 04:29:20 +0000 (21:29 -0700)]
remove use of an unsigned char in _agstrcanon

As far as I can see, nothing in this function depends on uc being unsigned.
Making it a standard char reduces some cast noise.

3 years agotake a const pointer as the first argument to agcanonhtmlstr
Matthew Fernandez [Sun, 4 Jul 2021 04:18:44 +0000 (21:18 -0700)]
take a const pointer as the first argument to agcanonhtmlstr

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in getoutputbuffer
Matthew Fernandez [Sun, 4 Jul 2021 04:17:21 +0000 (21:17 -0700)]
take a const pointer in getoutputbuffer

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agoremove now unnecessary cast of a parameter to an agstrfree call
Matthew Fernandez [Sun, 4 Jul 2021 04:16:24 +0000 (21:16 -0700)]
remove now unnecessary cast of a parameter to an agstrfree call

Related to #634.

3 years agotake a const pointer in agstrfree
Matthew Fernandez [Sun, 4 Jul 2021 04:15:22 +0000 (21:15 -0700)]
take a const pointer in agstrfree

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in agstrbind
Matthew Fernandez [Sun, 4 Jul 2021 04:09:18 +0000 (21:09 -0700)]
take a const pointer in agstrbind

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in refstrbind
Matthew Fernandez [Sun, 4 Jul 2021 04:04:05 +0000 (21:04 -0700)]
take a const pointer in refstrbind

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in aghtmlstr
Matthew Fernandez [Sun, 4 Jul 2021 04:02:04 +0000 (21:02 -0700)]
take a const pointer in aghtmlstr

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in agstrdup_html
Matthew Fernandez [Sun, 4 Jul 2021 03:55:21 +0000 (20:55 -0700)]
take a const pointer in agstrdup_html

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agoremove now unnecessary cast of a parameter to an agstrdup call
Matthew Fernandez [Sun, 4 Jul 2021 03:47:00 +0000 (20:47 -0700)]
remove now unnecessary cast of a parameter to an agstrdup call

Related to #634.

3 years agotake a const pointer in agstrdup
Matthew Fernandez [Sun, 4 Jul 2021 03:45:02 +0000 (20:45 -0700)]
take a const pointer in agstrdup

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in refsymbind
Matthew Fernandez [Sun, 4 Jul 2021 03:37:10 +0000 (20:37 -0700)]
take a const pointer in refsymbind

This is preparation for accepting const pointers in the agstrdup functions.
Related to #634.

3 years agoMerge branch 'smattr/0b95f0d8-6fc3-4b7f-85e0-f6a2fbdee4f6' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 00:24:54 +0000 (00:24 +0000)]
Merge branch 'smattr/0b95f0d8-6fc3-4b7f-85e0-f6a2fbdee4f6' into 'main'

agrefstrdump: dump dictionary associated with the current graph, not default

Closes #1985

See merge request graphviz/graphviz!2047

3 years agoagrefstrdump: dump dictionary associated with the current graph, not default
Matthew Fernandez [Sat, 10 Jul 2021 16:51:57 +0000 (09:51 -0700)]
agrefstrdump: dump dictionary associated with the current graph, not default

It looks like a mistake that this function was ignoring its input argument and
always dumping the default string dictionary. This change makes the function
dump the string dictionary associated with the passed graph. This function is
only compiled in when DEBUG is defined and it is not exposed to users, so no
changelog entry for this. Fixes #1985.

3 years agoMerge branch 'smattr/6a348cdc-bade-4d57-ba72-d23352ae5692' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 21:19:28 +0000 (21:19 +0000)]
Merge branch 'smattr/6a348cdc-bade-4d57-ba72-d23352ae5692' into 'main'

CMake: move -Wextra enabling to the top level

See merge request graphviz/graphviz!2046

3 years agoCMake: remove unnecessary C++ -Wextra addition in tests/
Matthew Fernandez [Sat, 10 Jul 2021 16:34:45 +0000 (09:34 -0700)]
CMake: remove unnecessary C++ -Wextra addition in tests/

This is now set at the top level.

3 years agoCMake: enable -Wextra for C++
Matthew Fernandez [Sat, 10 Jul 2021 16:34:12 +0000 (09:34 -0700)]
CMake: enable -Wextra for C++

This does not seem to trigger any additional warnings.

3 years agoMerge branch 'smattr/ed045d7d-d4fa-44d4-8028-c38121b4df0c' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 20:21:02 +0000 (20:21 +0000)]
Merge branch 'smattr/ed045d7d-d4fa-44d4-8028-c38121b4df0c' into 'main'

SparseMatrix_copy: avoid calling memcpy with null pointers

See merge request graphviz/graphviz!2049

3 years agoSparseMatrix_copy: avoid calling memcpy with null pointers
Matthew Fernandez [Sun, 11 Jul 2021 18:49:20 +0000 (11:49 -0700)]
SparseMatrix_copy: avoid calling memcpy with null pointers

The memcpy function technically requires both its pointer inputs to be non-null.
There is no special case for the length being 0. When running the example from
#2088 under UBSan, it detects this memcpy call as being performed with both null
source and destination pointers. It is unlikely any real world memcpy would
misbehave in this circumstance, but it is still good practice to avoid this.

3 years agoMerge branch 'smattr/7f6d376d-f48e-411e-bd4d-24d3e415d764' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 19:23:44 +0000 (19:23 +0000)]
Merge branch 'smattr/7f6d376d-f48e-411e-bd4d-24d3e415d764' into 'main'

SWIG bindings warning squashing

See merge request graphviz/graphviz!2048

3 years agodisable -Wunused-parameter when building SWIG-generated Guile bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:57:05 +0000 (19:57 -0700)]
disable -Wunused-parameter when building SWIG-generated Guile bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 68 compiler warnings.

3 years agoremove commented out code
Matthew Fernandez [Sun, 11 Jul 2021 02:50:20 +0000 (19:50 -0700)]
remove commented out code

3 years agodeal exclusively in size_t in Java bindings support code
Matthew Fernandez [Sun, 11 Jul 2021 02:42:24 +0000 (19:42 -0700)]
deal exclusively in size_t in Java bindings support code

In this code, committed in c7374588519a7ac557c14b38c147623dedf43fdb in 2014, it
is not clear to me why int was used. The correct type for these kind of
operations is size_t. The size_t type has been available since at least 1995, if
not earlier depending on your toolchain. Squashes 3
-Wsign-conversion/-Wconversion warnings.

3 years agodisable -Wunused-variable when building SWIG-generated OCaml bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:35:01 +0000 (19:35 -0700)]
disable -Wunused-variable when building SWIG-generated OCaml bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 112 compiler warnings.

3 years agodisable -Wunused-function when building SWIG-generated OCaml bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:28:50 +0000 (19:28 -0700)]
disable -Wunused-function when building SWIG-generated OCaml bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 24 compiler warnings.

3 years agosquash some -Wunused-parameter warnings in PHP bindings support code
Matthew Fernandez [Sun, 11 Jul 2021 02:20:34 +0000 (19:20 -0700)]
squash some -Wunused-parameter warnings in PHP bindings support code

3 years agodisable -Wunused-label when building SWIG-generated PHP bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:18:22 +0000 (19:18 -0700)]
disable -Wunused-label when building SWIG-generated PHP bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 95 compiler warnings.

3 years agodisable -Wunused-parameter when building SWIG-generated PHP bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:12:54 +0000 (19:12 -0700)]
disable -Wunused-parameter when building SWIG-generated PHP bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 4 compiler warnings.

3 years agosquash -Wunused-parameter warnings in dummy bindings init
Matthew Fernandez [Sun, 11 Jul 2021 02:03:13 +0000 (19:03 -0700)]
squash -Wunused-parameter warnings in dummy bindings init

3 years agogv_string_writer: gracefully handle sizes that exceed INT_MAX
Matthew Fernandez [Sun, 11 Jul 2021 02:01:01 +0000 (19:01 -0700)]
gv_string_writer: gracefully handle sizes that exceed INT_MAX

Similar to the previous commit, this deals with some mismatch between the TCL
API expecting int and the Graphviz API dealing in size_t.

This stems from a mismatch between gv_channel_write (or back tracking this, the
write_fn member of GVC) dealing in size_t and the TCL API dealing in int. Prior
to this change, a write of more than INT_MAX through this function would result
in passing a negative value to TCL. I do not know how it responds to such
things. Following this change, a write of more than INT_MAX results in a
truncated write of at most INT_MAX, something callers should already be
anticipating. Squashes two compiler warnings.

3 years agogv_channel_writer: gracefully handle sizes that exceed INT_MAX
Matthew Fernandez [Sun, 11 Jul 2021 01:40:56 +0000 (18:40 -0700)]
gv_channel_writer: gracefully handle sizes that exceed INT_MAX

The compiler (correctly) says:

  gv_tcl_init.c: In function ‘gv_channel_writer’:
  gv_tcl_init.c:25:58: warning: conversion from ‘size_t’ {aka ‘long
    unsigned int’} to ‘int’ may change value [-Wconversion]
       return Tcl_Write((Tcl_Channel)(job->output_file), s, len);
                                                            ^~~
  gv_tcl_init.c:25:12: warning: conversion to ‘size_t’ {aka ‘long unsigned
    int’} from ‘int’ may change the sign of the result [-Wsign-conversion]
       return Tcl_Write((Tcl_Channel)(job->output_file), s, len);
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This stems from a mismatch between gv_channel_write (or back tracking this, the
write_fn member of GVC) dealing in size_t and the TCL API dealing in int. Prior
to this change, a write of more than INT_MAX through this function would result
in passing a negative value to TCL. I do not know how it responds to such
things. Following this change, a write of more than INT_MAX results in a
truncated write of at most INT_MAX, something callers should already be
anticipating. Squashes two compiler warnings.

3 years agodisable -Wunused-parameter when building SWIG-generated Ruby bindings
Matthew Fernandez [Sun, 11 Jul 2021 01:28:31 +0000 (18:28 -0700)]
disable -Wunused-parameter when building SWIG-generated Ruby bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 91 compiler warnings.

3 years agoMerge branch 'smattr/ED9A017B-1B9E-42F5-9128-5885542A4EE8' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 18:33:37 +0000 (18:33 +0000)]
Merge branch 'smattr/ED9A017B-1B9E-42F5-9128-5885542A4EE8' into 'main'

some misc clean up

See merge request graphviz/graphviz!2045

3 years agosimplify twoDots
Matthew Fernandez [Sat, 10 Jul 2021 15:59:25 +0000 (08:59 -0700)]
simplify twoDots

The compiler can likely see this equivalence already. But this change makes the
code clearer to both it and to human readers.

3 years agoremove unnecessary not-null guards on free in spring_electrical_embedding_fast
Matthew Fernandez [Sat, 26 Jun 2021 23:21:16 +0000 (16:21 -0700)]
remove unnecessary not-null guards on free in spring_electrical_embedding_fast

It is well-defined to free null.

3 years agoremove unnecessary not-null guards to free in Operator_diag_precon_delete
Matthew Fernandez [Sat, 26 Jun 2021 23:19:44 +0000 (16:19 -0700)]
remove unnecessary not-null guards to free in Operator_diag_precon_delete

It is well-defined to free null. Apart from this though, the first condition
containing a dereference of `o` implies that `o` is not null so the second
condition can be assumed true.

3 years agoremove unnecessary not-null guards on free in StressMajorizationSmoother_smooth
Matthew Fernandez [Sat, 26 Jun 2021 23:18:00 +0000 (16:18 -0700)]
remove unnecessary not-null guards on free in StressMajorizationSmoother_smooth

It is well-defined to free null.

3 years agoremove unnecessary not-null guard in Operator_matmul_delete
Matthew Fernandez [Sat, 26 Jun 2021 23:09:17 +0000 (16:09 -0700)]
remove unnecessary not-null guard in Operator_matmul_delete

It is well-defined to free null.

3 years agoremove unnecessary cast in Operator_matmul_new
Matthew Fernandez [Sat, 26 Jun 2021 23:08:33 +0000 (16:08 -0700)]
remove unnecessary cast in Operator_matmul_new

A SparseMatrix implicitly coerces to void*.

3 years agoremove unnecessary branch in gvplugin_library_load
Matthew Fernandez [Sat, 26 Jun 2021 23:00:28 +0000 (16:00 -0700)]
remove unnecessary branch in gvplugin_library_load

The function grealloc can handle the input pointer being NULL and the follow on
code after this does not rely on the contents of the allocated buffer being
zeroed.

3 years agoremove unnecessary error handling in colorxlate
Matthew Fernandez [Sat, 26 Jun 2021 22:58:11 +0000 (15:58 -0700)]
remove unnecessary error handling in colorxlate

The grealloc function can only return NULL when the passed in size is 0. That is
not the case in this call site.

3 years agoremove unnecessary error handling in canontoken
Matthew Fernandez [Sat, 26 Jun 2021 22:56:41 +0000 (15:56 -0700)]
remove unnecessary error handling in canontoken

The grealloc function can only return NULL when the passed in size is 0. That is
not the case in this call site.

3 years agoremove unnecessary cast in canontoken
Matthew Fernandez [Sat, 26 Jun 2021 22:56:03 +0000 (15:56 -0700)]
remove unnecessary cast in canontoken

The variable canon is already an unsigned char pointer.

3 years agoremove unnecessary casts in makeDerivedNode
Matthew Fernandez [Sat, 26 Jun 2021 22:45:07 +0000 (15:45 -0700)]
remove unnecessary casts in makeDerivedNode

All these pointers implicitly coerce.

3 years agoMerge branch 'smattr/5EE3E1FF-FB01-4617-BEED-EEE6C36C5FF2' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 17:42:12 +0000 (17:42 +0000)]
Merge branch 'smattr/5EE3E1FF-FB01-4617-BEED-EEE6C36C5FF2' into 'main'

remove indent settings files

See merge request graphviz/graphviz!2055

3 years agoremove indent settings files
Matthew Fernandez [Fri, 16 Jul 2021 14:42:43 +0000 (07:42 -0700)]
remove indent settings files

Graphviz now uses clang-format for C/C++ style. Though admittedly most files are
not yet conformant.