]> git.ozlabs.org Git - ccan/log
ccan
8 years agoconfigurator: Inline err.h functions
Kevin Locke [Thu, 29 Sep 2016 00:44:43 +0000 (18:44 -0600)]
configurator: Inline err.h functions

On systems where err.h is not provided (e.g. MSVC) configurator must
provide its own definition.  The err module can not be used by
configurator due to its dependency on config.h, so the relevant source
is copied into configurator with the minimum changes necessary.

Changes since v2:
- Use the CCAN err module sources instead of musl libc sources to avoid
  introducing another implementation of these functions.
- Prefix err.h functions with "c12r_" to avoid name conflicts and
  "static declaration follows non-static" errors.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: Reimplement run using popen
Kevin Locke [Thu, 29 Sep 2016 00:44:42 +0000 (18:44 -0600)]
configurator: Reimplement run using popen

Rather than using fork+pipe+system+waitpid, most of which are only
available on POSIX-like systems, use popen which is also available on
Windows (under the name _popen).

Changes since v1:
- Create fread_noeintr to avoid EINTR in fread without reading any data.
- Handle short reads from fread.  This can happen with non-conformant
  libc or if EINTR occurs after reading some data.
- Define _POSIX_C_SOURCE for popen/pclose with strict implementations
  which require it (e.g. gcc with -std=c11).

Changes since v2:
- Revert fread_noeintr and short read changes in v1 as unnecessary.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agolist: trivial: fix typos in list_for_each_off's documentation
Emilio G. Cota [Thu, 29 Sep 2016 21:54:13 +0000 (17:54 -0400)]
list: trivial: fix typos in list_for_each_off's documentation

Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agotime: add timemono_since
Emilio G. Cota [Tue, 27 Sep 2016 21:57:53 +0000 (17:57 -0400)]
time: add timemono_since

time_mono()'s documentation references time_since(), which is nowhere
to be found.

A possible fix would be to just remove that stale reference.

Instead, this patch adds timemono_since(), which hopefully
captures the meaning of the original time_since().

Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: Return pointer difference as ptrdiff_t
Kevin Locke [Fri, 23 Sep 2016 03:33:14 +0000 (21:33 -0600)]
configurator: Return pointer difference as ptrdiff_t

On LLP64 systems (like 64-bit Windows) long is 32 bits while pointers
are 64 bits, which results in a warning similar to the following:

warning C4244: 'return': conversion from '__int64' to 'long', possible loss of data

for HAVE_STACK_GROWS_UPWARDS.  Fix this by using the ptrdiff_t type
introduced by C99 for this purpose.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: Fix warning in HAVE_FOR_LOOP_DECLARATION
Kevin Locke [Fri, 23 Sep 2016 03:33:13 +0000 (21:33 -0600)]
configurator: Fix warning in HAVE_FOR_LOOP_DECLARATION

Visual C++ prints "warning C4702: unreachable code" due to the return
statement after the for loop which is never reached.  Fix this by
setting a variable returned by a single return statement at the end.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: Fix compiler warning with compare
Kevin Locke [Fri, 23 Sep 2016 03:33:10 +0000 (21:33 -0600)]
configurator: Fix compiler warning with compare

Visual Studio prints warning C4706 "assignment within conditional
expression" when there is an assignment without a comparison in a
conditional expression.  Therefore, to silence the warning, add an
explicit comparison.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: Mark non-Windows tests MAY_NOT_COMPILE
Kevin Locke [Fri, 23 Sep 2016 03:33:08 +0000 (21:33 -0600)]
configurator: Mark non-Windows tests MAY_NOT_COMPILE

Several of the EXECUTABLE tests depend on headers not available on
Windows.  Mark these tests MAY_NOT_COMPILE to handle this.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: Use native directory separator
Kevin Locke [Fri, 23 Sep 2016 03:33:07 +0000 (21:33 -0600)]
configurator: Use native directory separator

Although Windows APIs generally permit "/" or "\\" for directory
separators in paths, cmd.exe does not recognize "./" when invoking
executables using a relative path and prints the following error:

    '.' is not recognized as an internal or external command,
    operable program or batch file.

Therefore, use "\\" when invoking tests on Windows.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: Replace unlink with remove
Kevin Locke [Fri, 23 Sep 2016 03:33:04 +0000 (21:33 -0600)]
configurator: Replace unlink with remove

Although Windows provides unlink, using it adds complication due to the
lack of unistd.h which must be included to define the function on POSIX
systems.  Instead, use remove, which C89 requires to be in stdio.h.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoccan/list: Add list_empty_nocheck
Benjamin Herrenschmidt [Sat, 23 Jul 2016 10:46:58 +0000 (20:46 +1000)]
ccan/list: Add list_empty_nocheck

This is the same as list_empty but without the debug checks. This is
useful when wanting to check for an empty list without locks held,
potentially racing with addition/removal, which can be a valid thing
to do under some circumstances.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoaga: trivial: fix description of aga_bfs
Emilio G. Cota [Mon, 26 Sep 2016 21:27:00 +0000 (17:27 -0400)]
aga: trivial: fix description of aga_bfs

Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoRemove duplicate const qualifier
Jon Griffiths [Wed, 21 Sep 2016 01:48:58 +0000 (13:48 +1200)]
Remove duplicate const qualifier

This causes ccanlint to fail the 'no warnings' check under clang.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agotal/stack: fix up after tal change.
Rusty Russell [Thu, 8 Sep 2016 10:48:52 +0000 (20:18 +0930)]
tal/stack: fix up after tal change.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agotal: store length in bytes, not count, and always store if CCAN_TAL_DEBUG.
Rusty Russell [Thu, 8 Sep 2016 04:20:32 +0000 (13:50 +0930)]
tal: store length in bytes, not count, and always store if CCAN_TAL_DEBUG.

Useful for scanning all the memory, or tallying it.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agotal: remove unused assigned var (scan-build warning)
Rusty Russell [Thu, 8 Sep 2016 02:05:43 +0000 (11:35 +0930)]
tal: remove unused assigned var (scan-build warning)

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agopipecmd: fix minor memleak detected by scan-build.
Rusty Russell [Thu, 8 Sep 2016 02:00:08 +0000 (11:30 +0930)]
pipecmd: fix minor memleak detected by scan-build.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agotal: make tal_next() only return immediate children.
Rusty Russell [Wed, 7 Sep 2016 04:27:01 +0000 (13:57 +0930)]
tal: make tal_next() only return immediate children.

I tried to use it and got this wrong: moreover, I wanted to control
topology, which requires nested iteration, and skip children
of a node which I knew was changing.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoAdd a SHA512 implementation
Jon Griffiths [Sun, 28 Aug 2016 23:43:39 +0000 (11:43 +1200)]
Add a SHA512 implementation

This largely follows the SHA256 style. I've named Rusty as the maintainer.

Currently the functions to add data of various sizes/endianness have not
been implemented: There are no public test vectors for these cases and
I believe most use cases are working on byte buffers. They can be added
later if desired.

The openssl implementation has been tested on x86-64, while the inbuilt
version has been tested on 32/64 bit, little/big endian boxes.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agoccanlint: depends_accurate: don't detect false dependency when including test files.
Rusty Russell [Tue, 30 Aug 2016 12:28:13 +0000 (21:58 +0930)]
ccanlint: depends_accurate: don't detect false dependency when including test files.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agotools/ccanlint: test_depends_accurate: catch #include of other ccan C files.
Rusty Russell [Tue, 30 Aug 2016 00:35:06 +0000 (10:05 +0930)]
tools/ccanlint: test_depends_accurate: catch #include of other ccan C files.

Jon sent a test patch for sha256 which "#include <ccan/str/hex/hex.c>"
without adding str/hex to testdepends.  It "worked" (it wouldn't have
linked with "hex.h"), but ccanlint didn't spot the dependency.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoMerge remote-tracking branch 'origin/pr/48'
Rusty Russell [Tue, 30 Aug 2016 00:32:06 +0000 (10:02 +0930)]
Merge remote-tracking branch 'origin/pr/48'

8 years agoMerge remote-tracking branch 'origin/pr/50'
Rusty Russell [Tue, 30 Aug 2016 00:27:55 +0000 (09:57 +0930)]
Merge remote-tracking branch 'origin/pr/50'

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agosha256: Use hex for test results
Jon Griffiths [Mon, 29 Aug 2016 00:47:59 +0000 (12:47 +1200)]
sha256: Use hex for test results

Users should be able to verify our crypto tests by searching for the
vectors we use. Make that easier by using hex for the expected results.

A nice side effect is that the code is simpler and endian agnostic too.

8 years agomanifest: Print the directory name if no files are found
Jon Griffiths [Wed, 24 Aug 2016 07:55:03 +0000 (19:55 +1200)]
manifest: Print the directory name if no files are found

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agoconfigurator: Fix unused parameters
Jon Griffiths [Wed, 24 Aug 2016 07:51:27 +0000 (19:51 +1200)]
configurator: Fix unused parameters

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agoshachain: Fix signed/unsigned mismatches
Jon Griffiths [Wed, 24 Aug 2016 07:50:40 +0000 (19:50 +1200)]
shachain: Fix signed/unsigned mismatches

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agociniparser: Make key arguments const
Jon Griffiths [Wed, 24 Aug 2016 07:04:24 +0000 (19:04 +1200)]
ciniparser: Make key arguments const

Keys are never modified and are likely to be literals in the
real world (as they are in the test cases).

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agobase64: Remove an invalid assertion
Jon Griffiths [Wed, 24 Aug 2016 06:59:50 +0000 (18:59 +1200)]
base64: Remove an invalid assertion

Unsigned types cannot be negative.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agostrmap: Set the license for strmap to CC0
Jon Griffiths [Wed, 24 Aug 2016 06:44:12 +0000 (18:44 +1200)]
strmap: Set the license for strmap to CC0

This matches the license in _info and the source. It also means every
module now has a LICENSE file and so anyone happening to rewrite the
ccan makefiles can use wildcard to locate modules rather than listing
them by hand.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agogenerator: Don't print variable unless the generator returned a value
Jon Griffiths [Mon, 22 Aug 2016 14:39:38 +0000 (02:39 +1200)]
generator: Don't print variable unless the generator returned a value

clang warns that the generator assignment is conditional which could
lead to passing an undefined variable to printf.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agoEnsure config.h is created before the main travis builds
Jon Griffiths [Mon, 29 Aug 2016 01:10:29 +0000 (13:10 +1200)]
Ensure config.h is created before the main travis builds

The current makefiles are not parallel safe and reliably fail on the
clang build. The real fix is to rewrite the makefiles, but in the
meantime, allow the clang tests to pass.

8 years agosha256: Simplify test
Jon Griffiths [Sun, 28 Aug 2016 23:52:44 +0000 (11:52 +1200)]
sha256: Simplify test

We can use the iteration count in the test case to determine
whether a single call is required. This simplifies the code and
also means that we don't overstate the actual number of tests
performed by a factor of 2. Simplify a couple of expressions
while we are changing this.

8 years agotlist: Place tlists last in structures
Jon Griffiths [Mon, 22 Aug 2016 14:04:06 +0000 (02:04 +1200)]
tlist: Place tlists last in structures

TCON suggests placing _tcon members last in structs. Placing variable
sized structs anywhere but last is apparently a gcc extension that
gives warnings under clang.

This applies to tlists because they use TCON internally. Update the
docs and examples to place tlists last and so compile without clang
warnings.

There are other places where this occurs; they will be dealt with
separately.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agopr_log: Fix a warning building under clang
Jon Griffiths [Mon, 22 Aug 2016 13:09:28 +0000 (01:09 +1200)]
pr_log: Fix a warning building under clang

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agotools/ccan_depends: Don't crash when no dependencies are found
Jon Griffiths [Tue, 23 Aug 2016 14:05:55 +0000 (02:05 +1200)]
tools/ccan_depends: Don't crash when no dependencies are found

Running 'tools/ccan_depends --compile ccan/crypto' without this
patch will demonstrate the crash.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agotal: Fix a comment typo
Jon Griffiths [Tue, 23 Aug 2016 13:43:05 +0000 (01:43 +1200)]
tal: Fix a comment typo

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agoMerge remote-tracking branch 'origin/pr/47'
Rusty Russell [Tue, 23 Aug 2016 03:39:44 +0000 (13:09 +0930)]
Merge remote-tracking branch 'origin/pr/47'

Closes: 47
8 years agoMerge remote-tracking branch 'origin/pr/46'
Rusty Russell [Tue, 23 Aug 2016 03:37:07 +0000 (13:07 +0930)]
Merge remote-tracking branch 'origin/pr/46'

Closes: 46
8 years agoMerge remote-tracking branch 'origin/pr/45'
Rusty Russell [Tue, 23 Aug 2016 03:33:10 +0000 (13:03 +0930)]
Merge remote-tracking branch 'origin/pr/45'

Closes: 45
8 years agoripemd160: Remove unused static function Initialize()
Jon Griffiths [Mon, 22 Aug 2016 13:20:32 +0000 (01:20 +1200)]
ripemd160: Remove unused static function Initialize()

The header macro RIPEMD160_INIT is intended to be used instead I believe.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agoripemd160: Declare variable at the start of its function
Jon Griffiths [Mon, 22 Aug 2016 11:34:19 +0000 (23:34 +1200)]
ripemd160: Declare variable at the start of its function

The resulting code is just as clear to read, so lets not require
a C99 compiler to compile this.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agohex: Simplify hex_encode
Jon Griffiths [Mon, 30 May 2016 12:39:10 +0000 (00:39 +1200)]
hex: Simplify hex_encode

The documentation for hex_encode indicates that it returns simply true or
false. The old implementation was returning the written length on success,
cast to boolean. This will elicit a warning under MSVC.

On further examination, there is no need to check/modify the length inside
the loop, since we can check it once before starting. As a result the code
can be simplified a bit.

A side affect of this change is that nothing will be written at all if the
length is incorrect, vs the previous code writing characters until the length
available is exhausted. I prefer the new semantics but YMMV.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agosha256: Use fewer magic magic numbers
Jon Griffiths [Wed, 23 Mar 2016 04:25:29 +0000 (17:25 +1300)]
sha256: Use fewer magic magic numbers

Show the derivation of the constants to match the comment above them.
The compiler doesn't care, but it helps the code read better.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agosha256: Move 'bytes' to the end of sha256_ctx and make it a size_t
Jon Griffiths [Tue, 22 Mar 2016 22:54:50 +0000 (11:54 +1300)]
sha256: Move 'bytes' to the end of sha256_ctx and make it a size_t

The code already assigns to/from bytes as a size_t, so make it
official (and better on platforms with a 32 bit size_t).

Moving bytes makes it act as a canary in the event that there is a rogue
write/off by one somewhere - since it ends up in the hash we are
more likely to detect this should we corrupt it. This also makes the
working buffer better aligned which can't hurt.

Also, initialise the buffer to zero while we are changing the initialisation
macro anyway. It costs little compared to the hashing overhead, should be
optimised away if redundant in most cases, and it removes a warning from both
gcc and clang about unititialised struct members.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agosha256: Use the same union order as the ctx structure
Jon Griffiths [Tue, 22 Mar 2016 22:51:50 +0000 (11:51 +1300)]
sha256: Use the same union order as the ctx structure

This reads better. Also remove duplicated comments for the members.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agosha256: Make our u32 and u8 fields the same size
Jon Griffiths [Tue, 22 Mar 2016 22:49:48 +0000 (11:49 +1300)]
sha256: Make our u32 and u8 fields the same size

These are just aliases to a buffer: its customary for these to
have the same size, and makes sizeof() consistent in case anyone
decides to use the members instead of the containing union.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agosha256: Mark parameters as potentially unused
Jon Griffiths [Tue, 15 Mar 2016 06:48:29 +0000 (19:48 +1300)]
sha256: Mark parameters as potentially unused

Prevents warnings from gcc at higher warning levels.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agocrypto: Comment typo
Jon Griffiths [Tue, 22 Mar 2016 11:04:04 +0000 (00:04 +1300)]
crypto: Comment typo

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agocrypto: Remove C++ comments
Jon Griffiths [Tue, 22 Mar 2016 06:57:29 +0000 (19:57 +1300)]
crypto: Remove C++ comments

Prevents warnings from gcc at higher warning levels.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agoripemd160: Fix a name typo
Jon Griffiths [Mon, 28 Mar 2016 14:09:30 +0000 (03:09 +1300)]
ripemd160: Fix a name typo

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agoripemd160: Mark parameters as potentially unused
Jon Griffiths [Tue, 22 Mar 2016 06:48:39 +0000 (19:48 +1300)]
ripemd160: Mark parameters as potentially unused

Prevents warnings from gcc at higher warning levels.

Signed-off-by: Jon Griffiths <jon_p_griffiths@yahoo.com>
8 years agocast: fix indentation in example.
Rusty Russell [Tue, 28 Jun 2016 20:39:52 +0000 (06:09 +0930)]
cast: fix indentation in example.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoaltstack: Don't log internal calls in test cases
David Gibson [Fri, 3 Jun 2016 08:42:03 +0000 (18:42 +1000)]
altstack: Don't log internal calls in test cases

altstack/test/run.c uses some hairy macros to intercept the standard
library functions that altstack uses.  This has two purposes: 1) to
conditionally cause those functions to fail, and thereby test altstack's
error paths, and 2) log which of the library functions was called in each
testcase.

The second function isn't actually useful - for the purposes of testing the
module, we want to check the actual behaviour, not what calls it made in
what order to accomplish it.  Explicitly checking the calls makes it much
harder to change altstack's implementation without breaking the tests.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoaltstack: Don't use 0 pointer literals
David Gibson [Fri, 3 Jun 2016 08:42:02 +0000 (18:42 +1000)]
altstack: Don't use 0 pointer literals

In a number of places the altstack module uses a literal '0' for pointer
values.  That's correct C, but doesn't make it obvious on a quick read
whether values are integers or pointers.  This patch changes those cases
to use the NULL define instead.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoaltstack: Use ptrint instead of bare casts
David Gibson [Fri, 3 Jun 2016 08:42:01 +0000 (18:42 +1000)]
altstack: Use ptrint instead of bare casts

Functions invoked with altstack take a void * parameter.  However, the
test program wants to pass an integer, and so uses the trick of casting
the integer values to (void *) and back again.

The ptrint() module handles exactly this case in a more portable and
(somewhat) typesafe way, so use that instead.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoaltstack: Restore alternate signal stack state
David Gibson [Fri, 3 Jun 2016 08:42:00 +0000 (18:42 +1000)]
altstack: Restore alternate signal stack state

altstack relies on catching a SIGSEGV caused when overrunning the stack.
This means that the SEGV handler itself can't use the already overflowed
stack, and so we use sigaltstack() to assign the signal handler a different
stack.  On completion, altstack() clears the alternate signal stack.

However, it's possible that the calling program could be using
sigaltstack() for its own reasons, so it's more correct to restore the
sigaltstack() state to that from the beginning of the altstack() call.
This patch implements this behaviour.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoaltstack: Consolidate thread-local variables
David Gibson [Fri, 3 Jun 2016 08:41:59 +0000 (18:41 +1000)]
altstack: Consolidate thread-local variables

altstack uses a number of __thread variables to track internal state.  This
allows altstack to be thread-safe, although it's still not re-entrant.
This patch gathers all these variables into a single per-thread state
structure.  This makes it easy to see at a glance what the whole of the
required state is, and thereby easier to reason about correctness of
changes to the implementation.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agohtable: allow htable_type keys to be non-pointers.
Rusty Russell [Mon, 6 Jun 2016 04:37:44 +0000 (14:07 +0930)]
htable: allow htable_type keys to be non-pointers.

Common case is mapping ints to structures.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agohtable: htable_type add htable_copy.
Rusty Russell [Mon, 6 Jun 2016 04:20:39 +0000 (13:50 +0930)]
htable: htable_type add htable_copy.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agohtable: add htable_copy.
Rusty Russell [Mon, 6 Jun 2016 04:14:36 +0000 (13:44 +0930)]
htable: add htable_copy.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agohtable: add a htable_prev method to oppose _next
Cody P Schafer [Fri, 3 Jun 2016 15:55:45 +0000 (11:55 -0400)]
htable: add a htable_prev method to oppose _next

Useful for unwinding actions taken while iterating over a htable.

Signed-off-by: Cody P Schafer <dev@codyps.com>
8 years agotlist: Add tlist_next() and tlist_prev() functions
David Gibson [Sat, 4 Jun 2016 10:21:33 +0000 (20:21 +1000)]
tlist: Add tlist_next() and tlist_prev() functions

An odd omission from the tlist module is basic tlist_next() and
tlist_prev() macros matching list_next() and list_prev() in the basic
list module.  This adds them.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoagar: Add static graph initializer
David Gibson [Fri, 3 Jun 2016 10:07:10 +0000 (20:07 +1000)]
agar: Add static graph initializer

Sometimes it's not convenient to initialize an agar graph at runtime with
agar_init_graph().  This adds an AGAR_INIT_GRAPH() macro to do the same
thing as a static initializer.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoaga: Remove unused state defines
David Gibson [Tue, 31 May 2016 10:09:30 +0000 (20:09 +1000)]
aga: Remove unused state defines

These were left over from a previous approach which didn't pan out.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agotcon: add testcase for const members in tcon_container_of()
Rusty Russell [Thu, 2 Jun 2016 02:00:53 +0000 (11:30 +0930)]
tcon: add testcase for const members in tcon_container_of()

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agotcon: add test case for const members.
Rusty Russell [Thu, 2 Jun 2016 01:58:54 +0000 (11:28 +0930)]
tcon: add test case for const members.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agotlist2: a alternate to tlist that encodes the member offset into the container type
Cody P Schafer [Tue, 31 May 2016 19:09:13 +0000 (15:09 -0400)]
tlist2: a alternate to tlist that encodes the member offset into the container type

Signed-off-by: Cody P Schafer <dev@codyps.com>
8 years agotcon: avoid error 'expected `void *` but argument is of type `const void *`' in tcon_...
Cody P Schafer [Tue, 31 May 2016 19:30:40 +0000 (15:30 -0400)]
tcon: avoid error 'expected `void *` but argument is of type `const void *`' in tcon_container_of()

I did not see any failures of other modules with this change, but I'm
not completely certain there are no cases that it breaks.

Signed-off-by: Cody P Schafer <dev@codyps.com>
8 years agolist: add parens to gaurd macro args in LIST_INIT
Cody P Schafer [Tue, 31 May 2016 18:24:46 +0000 (14:24 -0400)]
list: add parens to gaurd macro args in LIST_INIT

When other macros are emitting LIST_INIT expansions, `name` can get a
bit complicated.

Signed-off-by: Cody P Schafer <dev@codyps.com>
8 years agohtable/htable_type: allow keyof to be a simple macro
Cody P Schafer [Tue, 31 May 2016 16:06:16 +0000 (12:06 -0400)]
htable/htable_type: allow keyof to be a simple macro

Without this, one had to either use a function or a macro with casts to
get the expected behavior.

Signed-off-by: Cody P Schafer <dev@codyps.com>
8 years agohtable/htable_type: avoid warning about an unused argument
Cody P Schafer [Tue, 31 May 2016 16:05:33 +0000 (12:05 -0400)]
htable/htable_type: avoid warning about an unused argument

Signed-off-by: Cody P Schafer <dev@codyps.com>
8 years agocrypto/siphash: new module.
Rusty Russell [Tue, 31 May 2016 02:35:44 +0000 (12:05 +0930)]
crypto/siphash: new module.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoBuild info files
David Gibson [Mon, 9 May 2016 19:44:47 +0000 (20:44 +0100)]
Build info files

All modules have a _info file (a C file, despite the lack of extension)
giving metadata for the module.  The Makefiles have a rule to build these..
but it's broken (missing an include directive).

This patch fixes the rule, and builds the info binaries for all modules by
default.  This is a useful check and also useful for manually inspecting
a module's metadata.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoAutomatically determine which modules have source
David Gibson [Thu, 5 May 2016 15:40:48 +0000 (16:40 +0100)]
Automatically determine which modules have source

Currently, build of ccan is controlled by two Make variables: MODS_WITH_SRC
and MODS_NO_SRC which list modules containing .c files, and modules with
only .h files respectively.

When adding new modules this is fiddly to get right, and there are a number
of modules already listed in the wrong variable.  There's also some
redundant logic in the DIRS variable to again filter out modules without
source.

This simplifies things by having a single manually updated MODS variable
listing every module, and determining MODS_WITH_SOURCE programmatically.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoMakefile: exclude altstack so Jenkins works again.
Rusty Russell [Mon, 9 May 2016 01:34:33 +0000 (11:04 +0930)]
Makefile: exclude altstack so Jenkins works again.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoccanlint: fix missing file.
Rusty Russell [Mon, 9 May 2016 01:16:53 +0000 (10:46 +0930)]
ccanlint: fix missing file.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agotools/ccanlint: make sure _info compiles.
Rusty Russell [Fri, 6 May 2016 00:44:10 +0000 (10:14 +0930)]
tools/ccanlint: make sure _info compiles.

We used to crash, as reported by Stephen M. Cameron

Closes: #39
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoa_star: new module added to hacky Makefile-ccan list.
Rusty Russell [Tue, 3 May 2016 20:53:24 +0000 (06:23 +0930)]
a_star: new module added to hacky Makefile-ccan list.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoAdd A-star module
Stephen M. Cameron [Tue, 3 May 2016 06:02:26 +0000 (23:02 -0700)]
Add A-star module

Signed-off-by: Stephen M. Cameron <stephenmcameron@gmail.com>
8 years agoCorrectly include dependencies for nested modules
David Gibson [Tue, 16 Feb 2016 12:35:41 +0000 (23:35 +1100)]
Correctly include dependencies for nested modules

Currently we pull auto-generated dependencies into the Makefile with
include ccan/*/*.d.  That will omit any .d files from nested modules,
meaning things might not be correctly rebuilt there.

Correct this by using the list of modules instead of a 1-level wildcard.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoExclude system headers from .d files
David Gibson [Tue, 16 Feb 2016 12:32:34 +0000 (23:32 +1100)]
Exclude system headers from .d files

We currently generated .d dependency files with the -MD option to cc.  That
includes system header files in the dependencies, which isn't often useful
and makes the .d more complicated than necessary.

This changes to -MMD which excludes system headers.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoClean up use of 'rm' in Makefiles
David Gibson [Tue, 16 Feb 2016 12:24:05 +0000 (23:24 +1100)]
Clean up use of 'rm' in Makefiles

Most of the ccan Makefiles use $(RM) to remove files.  However, 'rm' is
traditionally considered one of the few shell tools which can be used in
Makefiles without indirecting via a variable.

rm is also typically invoked with -f in Makefiles, so that it doesn't cause
errors if the files don't exist (because they haven't been built).  A
number of instances in ccan were missing this.

This corrects these warts.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoAdd missing files to make clean
David Gibson [Tue, 16 Feb 2016 11:53:50 +0000 (22:53 +1100)]
Add missing files to make clean

At present, "make clean" will not remove the module-Makefile files for
non-top-level modules.  It also won't remove the generated config.h.
Correct those errors.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: fix HAVE_UCONTEXT test on Ubuntu 16.04.
Rusty Russell [Tue, 26 Apr 2016 04:55:22 +0000 (14:25 +0930)]
configurator: fix HAVE_UCONTEXT test on Ubuntu 16.04.

Seems to want more stack.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agogenerator: don't even try to compile if !HAVE_UCONTEXT.
Rusty Russell [Tue, 26 Apr 2016 04:54:21 +0000 (14:24 +0930)]
generator: don't even try to compile if !HAVE_UCONTEXT.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoMakefile: add altstack and generator to build exclusions.
Rusty Russell [Tue, 26 Apr 2016 04:41:01 +0000 (14:11 +0930)]
Makefile: add altstack and generator to build exclusions.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoMakefile: fix random pattern hack.
Rusty Russell [Tue, 26 Apr 2016 04:40:18 +0000 (14:10 +0930)]
Makefile: fix random pattern hack.

Turns out that patterns with / cause % to match /.  OK...

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agoMakefile-ccan: add cppmagic.
Rusty Russell [Tue, 26 Apr 2016 04:23:15 +0000 (13:53 +0930)]
Makefile-ccan: add cppmagic.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agohtable: add iterators to htable_type.
Rusty Russell [Tue, 26 Apr 2016 04:18:40 +0000 (13:48 +0930)]
htable: add iterators to htable_type.

Useful if you have more than one object with same key.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agostrgrp: Add cosine fudge-curve to unify filter comparison spaces
Andrew Jeffery [Sat, 20 Feb 2016 10:52:41 +0000 (21:22 +1030)]
strgrp: Add cosine fudge-curve to unify filter comparison spaces

If we are to use should_grp_score_cos(x,y) as a filter the the following
relationship must hold (from least to most expensive):

        should_grp_score_len(x,y)
                >= should_grp_score_cos(x,y)
                >= grp_score(x)

should_grp_score_cos(x,y) wasn't holding up its part of the bargain, so
real data was used to generate a fudge curve to bring
should_grp_score_cos(x,y) results into the same space. Really this is a
terrible hack and the problem needs more thought. Evaluation of
should_grp_score_cos(x,y)'s performance benefit (given the relaxation of
the filter under the fudge curve) is sorely needed.

8 years agostrgrp: Use angular similarity for distance metric properties
Andrew Jeffery [Sat, 20 Feb 2016 10:49:53 +0000 (21:19 +1030)]
strgrp: Use angular similarity for distance metric properties

Distance metrics allow us to compare similarity results, however
applying the change leads to test suite breakage as we no longer satisfy
the requirement that each filter's score is at most as large as that of
the previous filter^. As such, also stop ccanlint from executing the
tests that are known to fail until we work around the problem.

^ This is a problem that has existed since the introduction of the
cosine similarity filter, it just wasn't detected by the test suite.

8 years agostrgrp: Use ratio of hypotenuse for consistent comparisons
Andrew Jeffery [Sat, 20 Feb 2016 11:03:04 +0000 (21:33 +1030)]
strgrp: Use ratio of hypotenuse for consistent comparisons

Ensure comparing filter results is sensible by using a consistent
calculation. Note that the cosine similarity measurement doesn't yet
conform and this can give spurious results that are not detected by the
test suite.

8 years agostrgrp: Shift constant out of loop
Andrew Jeffery [Sat, 20 Feb 2016 11:01:43 +0000 (21:31 +1030)]
strgrp: Shift constant out of loop

Likely this was optimised away, but the code now represents the intent.

8 years agoshachain: clarify design in terms of binary tree, reverse indexes.
Rusty Russell [Tue, 8 Mar 2016 05:38:36 +0000 (16:08 +1030)]
shachain: clarify design in terms of binary tree, reverse indexes.

Olaoluwa Osuntokun came up with an alternative which used binary trees;
that's a much better way to explain it, so do that in design.txt and
update the implementation to work the same way.

Anthony Towns pointed out that the numbering is the reverse of the normal
hash chaining descriptions, so fix that too.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8 years agogenerator: Allow generators to take arguments
David Gibson [Fri, 12 Feb 2016 12:49:49 +0000 (23:49 +1100)]
generator: Allow generators to take arguments

Using some serious macro magic, this patch extends generators to allow
them to take arbitrary arguments.  The arguments are marshalled into a
structure placed at the far end of the generator's stack when it is
created.  Then, they're unmarshalled back into C parameters when we first
context switch into the generator.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agogenerator: Generators for C
David Gibson [Thu, 25 Feb 2016 11:07:17 +0000 (22:07 +1100)]
generator: Generators for C

Generators are a limited form of co-routine, which people may be familiar
with from Python.  This module adds an implementation of generators for C.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoconfigurator: Add test for ucontext.h
David Gibson [Sat, 19 Jul 2014 07:00:15 +0000 (17:00 +1000)]
configurator: Add test for ucontext.h

This adds a new HAVE_UCONTEXT define, which indicates that ucontext.h
is present, and more-or-less works.

It also adds HAVE_POINTER_SAFE_MAKECONTEXT, which indicates whether
pointer valued arguments can be passed through the varargs parameters
to makecontext().

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoaltstack: Clarify checking macros
David Gibson [Mon, 15 Feb 2016 11:49:54 +0000 (22:49 +1100)]
altstack: Clarify checking macros

The chkfail() and chkok() macros in altstack's test program are pretty
difficult to read.  More importantly, though, they do all their tests with
one big ok1().  That means if the test fails, you get no indication which
of the checks was actually wrong, making debugging harder.

This reworks the macros into a more verbose form that's easier to read,
and splits them into multiple ok1() tests to make failures more explicit.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
8 years agoaltstack: Declare memory clobbers
David Gibson [Mon, 15 Feb 2016 11:47:36 +0000 (22:47 +1100)]
altstack: Declare memory clobbers

altstack includes a couple of inline asm blocks with x86 push and pop
instructions.  These instructions will access memory (the stack), but
that's not declared in inline asm statement.  We seem to be getting away
with it, but in theory that could allow the compiler to re-order accesses
to local variables across the asm block.  Since those blocks change the
location of the stack, that could be very bad.

Adding a "memory" clobber should prevent this (effectively making the asm
blocks a compiler memory barrier).

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>