]> granicus.if.org Git - graphviz/log
graphviz
3 years agoccomps: use size_t when dealing with buffer sizes in chkGraphName
Matthew Fernandez [Sun, 25 Jul 2021 17:42:28 +0000 (10:42 -0700)]
ccomps: use size_t when dealing with buffer sizes in chkGraphName

Squashes a -Wconversion and a -Wsign-conversion warning.

3 years agoccomps: use a size_t when dealing with buffer sizes in getBuf
Matthew Fernandez [Sun, 25 Jul 2021 17:37:41 +0000 (10:37 -0700)]
ccomps: use a size_t when dealing with buffer sizes in getBuf

Squashes a -Wsign-conversion and four -Wconversion warnings.

3 years agoccomps: mark getopt switch as exhaustive
Matthew Fernandez [Sun, 25 Jul 2021 17:35:37 +0000 (10:35 -0700)]
ccomps: mark getopt switch as exhaustive

Squashes a -Wswitch-default warning.

3 years agoccomps: use a size_t when dealing with character offsets in split
Matthew Fernandez [Sun, 25 Jul 2021 17:34:10 +0000 (10:34 -0700)]
ccomps: use a size_t when dealing with character offsets in split

Squashes a -Wconversion and a -Wsign-conversion warning.

3 years agoccomps: abort on all allocation failures
Matthew Fernandez [Sun, 25 Jul 2021 00:36:44 +0000 (17:36 -0700)]
ccomps: abort on all allocation failures

None of the allocations in ccomps could tolerate failure. So this change makes
them all call wrappers that cleanly abort in the event of out-of-memory. Note
that this also fixes an issue where ccomps incorrectly identified itself as `gc`
in one of the previous failure messages.

3 years agoccomps: remove an unnecessary code path in getBuf
Matthew Fernandez [Sun, 25 Jul 2021 00:26:21 +0000 (17:26 -0700)]
ccomps: remove an unnecessary code path in getBuf

When len is 0, buf is NULL and thus calling realloc is equivalent to calling
malloc.

3 years agoMerge branch 'smattr/728D79B1-E42D-4105-811D-08FA2A361B6F' into 'main'
Matthew Fernandez [Tue, 27 Jul 2021 05:06:12 +0000 (05:06 +0000)]
Merge branch 'smattr/728D79B1-E42D-4105-811D-08FA2A361B6F' into 'main'

remove Windows overrides of `inline`

See merge request graphviz/graphviz!2063

3 years agoremove Windows overrides of `inline`
Matthew Fernandez [Wed, 21 Jul 2021 03:58:59 +0000 (20:58 -0700)]
remove Windows overrides of `inline`

The `undef` part of this macro juggling was typoed as `WIN32_STATIC` in commit
b26b5fc076c1b5d9919ce79c807f5b3921149597, so it never properly undid the
preceding `inline` redirection. However, this redirection is unnecessary anyway.
Contrary to the Microsoft docs,¹ the `inline` keyword seems understood in *both*
C and C++.

¹ https://docs.microsoft.com/en-us/cpp/cpp/inline-functions-cpp?view=msvc-160

3 years agoMerge branch 'smattr/007BBBEC-441C-49AA-9E7F-31A25ACE5257' into 'main'
Matthew Fernandez [Tue, 27 Jul 2021 00:58:04 +0000 (00:58 +0000)]
Merge branch 'smattr/007BBBEC-441C-49AA-9E7F-31A25ACE5257' into 'main'

replace mkdefs-generated gdefs.h with X macros

Closes #2101

See merge request graphviz/graphviz!2062

3 years agoreplace mkdefs-generated gdefs.h with X macros
Matthew Fernandez [Tue, 20 Jul 2021 03:25:16 +0000 (20:25 -0700)]
replace mkdefs-generated gdefs.h with X macros

Prior to this commit, the gdefs.h header was generated by a C program, mkdefs.c.
There were a number of issues with this approach:

  1. The CMake build system was assuming the compiler to build mkdefs.c and the
     compiler to build Graphviz itself were the same. This is not necessarily
     true when cross-compiling.

  2. Generation under MSBuild seems to have been impractical, so the generated
     header was checked in to the repository under windows/include/gvpr/gdefs.h,
     somewhat defeating the purpose of making it generated.

  3. The CMake build system seems to not have been setup to correctly compile
     mkdefs.c under all circumstances (see #2101).

This change removes any reliance on a host C compiler and instead uses a series
of X macros¹ to achieve the same effect. The values of all generated constants
and the content of generated structures is intended to be unchanged, though some
#defines have been altered to enums. In these cases, there was no advantage to
using a macro and multiple advantages to not using a macro.

This change is affecting a shipped header (gdefs.h) and also removes it from the
list of shipped headers. Installing it appears to have been a mistake as there
is no easy way for end users to use it. The header, fully expanded, still relies
on further expansion of macros that are only defined in expr.h, a header that is
not shipped.

Closes #2101.

¹ https://en.wikipedia.org/wiki/X_Macro

3 years agoMerge branch 'smattr/F218DB16-9060-4D1D-88E2-DDDBF8A5034D' into 'main'
Matthew Fernandez [Sat, 24 Jul 2021 18:22:56 +0000 (18:22 +0000)]
Merge branch 'smattr/F218DB16-9060-4D1D-88E2-DDDBF8A5034D' into 'main'

add Fedora 34 testing to CI

Closes #2059

See merge request graphviz/graphviz!2070

3 years agoadd Fedora 34 testing to CI
Matthew Fernandez [Sat, 24 Jul 2021 00:28:55 +0000 (17:28 -0700)]
add Fedora 34 testing to CI

Closes #2059.

3 years agoMerge branch 'smattr/16FA1351-3EE8-4DAB-84C6-E98818C000D1' into 'main'
Matthew Fernandez [Sat, 24 Jul 2021 02:13:42 +0000 (02:13 +0000)]
Merge branch 'smattr/16FA1351-3EE8-4DAB-84C6-E98818C000D1' into 'main'

lib/gvc: [nfc] fix some comment typos

See merge request graphviz/graphviz!2069

3 years agolib/gvc: [nfc] fix some comment typos
Matthew Fernandez [Fri, 23 Jul 2021 04:39:39 +0000 (21:39 -0700)]
lib/gvc: [nfc] fix some comment typos

3 years agoMerge branch 'smattr/5BC8FF91-4894-488A-8212-6A37F2A35ECC' into 'main'
Matthew Fernandez [Sat, 24 Jul 2021 01:12:24 +0000 (01:12 +0000)]
Merge branch 'smattr/5BC8FF91-4894-488A-8212-6A37F2A35ECC' into 'main'

remove RS HPPA header work arounds

See merge request graphviz/graphviz!2068

3 years agorename LS to LSH for consistency with RSH
Matthew Fernandez [Fri, 23 Jul 2021 03:22:34 +0000 (20:22 -0700)]
rename LS to LSH for consistency with RSH

3 years agoremove no longer necessary RS undefine
Matthew Fernandez [Fri, 23 Jul 2021 03:21:07 +0000 (20:21 -0700)]
remove no longer necessary RS undefine

3 years agolib/expr: use RSH as a constant for >> instead of RS
Matthew Fernandez [Fri, 23 Jul 2021 03:18:51 +0000 (20:18 -0700)]
lib/expr: use RSH as a constant for >> instead of RS

A couple of places in the code base are dodging an `RS` symbol apparently
introduced by an HPPA header. It is simpler to just use a symbol that does not
collide at all.

3 years agoMerge branch 'cmansley:cmansley-main-patch-01536' into main
Matthew Fernandez [Sat, 24 Jul 2021 00:07:53 +0000 (17:07 -0700)]
Merge branch 'cmansley:cmansley-main-patch-01536' into main

See merge request graphviz/graphviz!2064

3 years agoInitialize nPasses in aspect_t struct in SetAspect
Chris Mansley [Wed, 21 Jul 2021 19:33:42 +0000 (19:33 +0000)]
Initialize nPasses in aspect_t struct in SetAspect

In dotLayout, nPasses is decremented in a while loop. Since it may be
uninitialized, this triggers clang's UndefinedBehaviorSanitizer:
signed-integer-overflow. While behavior does not change because the loop also
checks nextIter, which is initialized, this change fixes the sanitizer error.

3 years agoMerge branch 'smattr/5c73db2b-d34f-4673-9e8a-b67c3070c221' into 'main'
Matthew Fernandez [Thu, 22 Jul 2021 01:07:34 +0000 (01:07 +0000)]
Merge branch 'smattr/5c73db2b-d34f-4673-9e8a-b67c3070c221' into 'main'

rewrite edgepaint command line parsing using getopt_long

Closes #1971

See merge request graphviz/graphviz!2059

3 years agoedgepaint: more consistently use EXIT_SUCCESS and EXIT_FAILURE when exiting
Matthew Fernandez [Sun, 18 Jul 2021 21:32:47 +0000 (14:32 -0700)]
edgepaint: more consistently use EXIT_SUCCESS and EXIT_FAILURE when exiting

These are more portable than relying on numeric values.

3 years agoedgepaint: remove unused infile
Matthew Fernandez [Sun, 18 Jul 2021 21:26:47 +0000 (14:26 -0700)]
edgepaint: remove unused infile

Surprisingly this is configured but never used. Instead all code accesses the
input file(s) through `Files`.

3 years agoedgepaint: remove mode argument to openFile
Matthew Fernandez [Sun, 18 Jul 2021 21:24:13 +0000 (14:24 -0700)]
edgepaint: remove mode argument to openFile

In edgepaint, this function is only called to open a file in write mode.

3 years agorewrite edgepaint command line parsing using getopt_long
Matthew Fernandez [Sun, 18 Jul 2021 21:17:49 +0000 (14:17 -0700)]
rewrite edgepaint command line parsing using getopt_long

This change makes edgepaint command line parsing code more standard and robust.
It now rejects invalid arguments and takes more standard GNU-style double dash
prefixed options. Note that the old style single dash prefixed options are also
still accepted for compatibility purposes. Closes #1971.

3 years agoqualify openFile’s arguments as const
Matthew Fernandez [Sun, 18 Jul 2021 21:03:29 +0000 (14:03 -0700)]
qualify openFile’s arguments as const

The various versions of this function all do more or less the same thing, none
of which involves modifying input parameters. Related to #634, #1971.

3 years agoqualify knownColorScheme’s argument as const
Matthew Fernandez [Sun, 18 Jul 2021 20:54:23 +0000 (13:54 -0700)]
qualify knownColorScheme’s argument as const

This function does not modify its parameter. Related to #634, #1971.

3 years agoqualify color_palettes_Q’s argument as const
Matthew Fernandez [Sun, 18 Jul 2021 20:45:57 +0000 (13:45 -0700)]
qualify color_palettes_Q’s argument as const

This function does not modify its parameter. Related to #634, #1971.

3 years agofix memory leak in edgepaint command line parsing
Matthew Fernandez [Sun, 18 Jul 2021 20:25:09 +0000 (13:25 -0700)]
fix memory leak in edgepaint command line parsing

When passing the option `-lightness` multiple times, pointers to previous
lightness strings would be overwritten and lost. This is unlikely to have had a
significant effect. Related to #1971.

3 years agoadd a test case for #1971
Matthew Fernandez [Sun, 18 Jul 2021 19:29:50 +0000 (12:29 -0700)]
add a test case for #1971

3 years agoadd a test case for edgepaint command line parsing
Matthew Fernandez [Sun, 18 Jul 2021 19:23:00 +0000 (12:23 -0700)]
add a test case for edgepaint command line parsing

This is a safe guard for upcoming changes that will rewrite how edgepaint parses
command line options. We want to ensure the existing interpretation of options
is not broken by this change. Related to #1971.

3 years agoreflow edgepaint man page and make content consistent
Matthew Fernandez [Sun, 18 Jul 2021 18:55:44 +0000 (11:55 -0700)]
reflow edgepaint man page and make content consistent

Text is now wrapped at 80 columns (in the source, not the `man` output display),
sentences begin with capitals and end with periods, and `\fR` is used instead of
`\fP`. `\fR` sets regular text while `\fP` returns to the previous font. On the
surface, `\fP` sounds better, but troff only remembers the immediately prior
font, rather than a stack. So `\fP`s do not nest. With this in mind, `\fR` is
simpler and more comprehensible.

3 years agofix typos in edgepaint man page
Matthew Fernandez [Sun, 18 Jul 2021 18:49:44 +0000 (11:49 -0700)]
fix typos in edgepaint man page

3 years agoupdate URLs in edgepaint usage text and man page
Matthew Fernandez [Sun, 18 Jul 2021 18:41:17 +0000 (11:41 -0700)]
update URLs in edgepaint usage text and man page

3 years agofix typo in edgepaint usage text
Matthew Fernandez [Sun, 18 Jul 2021 18:39:07 +0000 (11:39 -0700)]
fix typo in edgepaint usage text

3 years agoMerge branch 'stop-redefining-extern' into 'main'
Magnus Jacobsson [Wed, 21 Jul 2021 17:19:55 +0000 (17:19 +0000)]
Merge branch 'stop-redefining-extern' into 'main'

Replace redefinition of extern

See merge request graphviz/graphviz!2061

3 years ago[nfc] define VIS_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 06:36:27 +0000 (08:36 +0200)]
[nfc] define VIS_API instead of redefining extern

3 years ago[nfc] define PATHUTIL_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 06:33:23 +0000 (08:33 +0200)]
[nfc] define PATHUTIL_API instead of redefining extern

3 years ago[nfc] define PACK_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 06:23:06 +0000 (08:23 +0200)]
[nfc] define PACK_API instead of redefining extern

3 years ago[nfc] define GVPLUGIN_LOADIMAGE_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 06:06:37 +0000 (08:06 +0200)]
[nfc] define GVPLUGIN_LOADIMAGE_API instead of redefining extern

3 years ago[nfc] define GVIO_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 05:39:46 +0000 (07:39 +0200)]
[nfc] define GVIO_API instead of redefining extern

3 years ago[nfc] remove useless redefining of extern to nothing
Magnus Jacobsson [Tue, 20 Jul 2021 05:19:42 +0000 (07:19 +0200)]
[nfc] remove useless redefining of extern to nothing

This also includes removing the use of the useless extern
declarations.

3 years ago[nfc] define GVC_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 05:11:55 +0000 (07:11 +0200)]
[nfc] define GVC_API instead of redefining extern

3 years ago[nfc] define UTILS_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 05:08:34 +0000 (07:08 +0200)]
[nfc] define UTILS_API instead of redefining extern

3 years ago[nfc] define RENDER_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 05:05:15 +0000 (07:05 +0200)]
[nfc] define RENDER_API instead of redefining extern

3 years ago[nfc] define POINTSET_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 05:01:37 +0000 (07:01 +0200)]
[nfc] define POINTSET_API instead of redefining extern

3 years ago[nfc] define MEMORY_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 04:59:53 +0000 (06:59 +0200)]
[nfc] define MEMORY_API instead of redefining extern

3 years ago[nfc] define GEOMPROCS_API instead of redefining extern
Magnus Jacobsson [Tue, 20 Jul 2021 04:56:25 +0000 (06:56 +0200)]
[nfc] define GEOMPROCS_API instead of redefining extern

3 years agoMerge branch 'smattr/422ba606-2c84-4de0-80b0-e20611ff8793' into 'main'
Matthew Fernandez [Wed, 21 Jul 2021 16:27:05 +0000 (16:27 +0000)]
Merge branch 'smattr/422ba606-2c84-4de0-80b0-e20611ff8793' into 'main'

lib/expr: [nfc] simplification of string functions and removal of sfio calls

See merge request graphviz/graphviz!2053

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.