Commit Graph

524 Commits

Author SHA1 Message Date
Max Kellermann
af9840daf7 util/Clamp: remove redundant inline keywords from constexpr functions 2019-03-12 11:54:51 +01:00
Max Kellermann
f6c0688684 util/ByteOrder: remove redundant inline keywords from constexpr functions 2019-03-08 10:23:14 +01:00
Max Kellermann
c176d94598 system/ByteOrder: move to util/ 2019-03-08 10:21:10 +01:00
Max Kellermann
05aa9f72a9 util/StringView: add SkipPrefix(), RemoveSuffix() 2019-02-19 11:51:32 +01:00
Max Kellermann
5cf889b676 util/WStringView: add missing include 2019-01-22 08:38:03 +01:00
Max Kellermann
b02fee7309 util/PrintException: support "const char *" 2019-01-21 21:19:35 +01:00
Max Kellermann
424f75c9e1 util/OffsetPointer: remove redundant inline keywords from constexpr functions 2019-01-21 21:19:09 +01:00
Max Kellermann
f6e1176f97 util/CharUtil: remove redundant inline keywords from constexpr functions 2019-01-21 21:18:23 +01:00
Max Kellermann
e4700c0a27 util/Cast: remove redundant inline keywords from constexpr functions 2019-01-21 21:17:58 +01:00
Max Kellermann
7104ac963b util/AllocatedArray: import std::swap 2018-12-28 17:18:41 +01:00
Max Kellermann
2cb36590b2 util/AllocatedArray: add noexcept 2018-12-28 17:17:28 +01:00
Max Kellermann
53a4de35c4 util/DynamicFifoBuffer: add noexcept 2018-12-28 17:06:01 +01:00
Max Kellermann
ce49d99c2f check.h: remove obsolete header
Since we switched from autotools to Meson in commit
94592c1406, we don't need to include
`config.h` early to properly enable large file support.  Meson passes
the required macros on the compiler command line instead of defining
them in `config.h`.

This means we can include `config.h` at any time, whenever we want to
check its macros, and there are no ordering constraints.
2018-11-19 16:33:49 +01:00
Max Kellermann
f5c9071494 *: copyright year 2018 2018-10-31 17:54:59 +01:00
Max Kellermann
d0349880da util/StringCompare: add StringAfterPrefixIgnoreCase() 2018-10-29 14:34:29 +01:00
Max Kellermann
94592c1406 build with Meson instead of autotools
So long, autotools!  This is my last MPD related project to migrate
away from it.  It has its strengths, but also very obvious weaknesses
and weirdnesses.  Today, many of its quirks are not needed anymore,
and are cumbersome and slow.  Now welcome our new Meson overlords!
2018-10-14 23:41:38 +02:00
Max Kellermann
608d232373 util/SliceBuffer: re-add line which got lost in the last commit 2018-09-23 19:33:34 +02:00
Max Kellermann
1702e98fdf util/SliceBuffer: move code to DiscardMemory() 2018-09-23 19:15:28 +02:00
Max Kellermann
728e4e9a38 util/StringCompare: add StringEndsWithIgnoreCase(), StringStartsWithIgnoreCase() 2018-09-06 19:52:43 +02:00
Max Kellermann
2d6f9f9a9c Util/WStringAPI: non-Windows implementation of _wcs*cmp() 2018-09-06 19:49:45 +02:00
Max Kellermann
c2e2e5543e util/WStringAPI: add wcscoll() wrapper 2018-09-06 19:39:28 +02:00
Max Kellermann
349d8eb248 util/WStringCompare: add "noexcept" 2018-09-06 19:35:09 +02:00
Max Kellermann
94b96bde9b util/WStringCompare: wcpcpy() and wcsdup() are available on Android 2018-09-06 19:33:50 +02:00
Max Kellermann
45ffc864c5 util/StringCompare: add more function attributes 2018-09-06 19:23:13 +02:00
Max Kellermann
eee91aa4ea util/Exception: update copyright 2018-08-21 08:20:52 +02:00
Max Kellermann
855750c784 util/{Const,Writable}Buffer: add method SetEnd() 2018-08-21 08:20:17 +02:00
Max Kellermann
2156fc64f4 util/StringStrip: more API documentation 2018-08-20 16:30:46 +02:00
Max Kellermann
441440101d util/StringStrip: add more "nonnull" attributes 2018-08-20 16:28:43 +02:00
Max Kellermann
ec54754e22 Compiler.h: move to util/ 2018-08-20 16:19:17 +02:00
Max Kellermann
489e11072e util/WritableBuffer: add ConstBuffer cast operator 2018-08-20 15:36:50 +02:00
Max Kellermann
5e2af15e94 util/Manual: add static method Cast() 2018-08-20 15:35:43 +02:00
Max Kellermann
3fbb54e0a4 util/IterableSplitString: use operator==(nullptr_t) 2018-08-20 15:35:09 +02:00
Max Kellermann
fe6de14faf util/StringView: add ConstBuffer cast constructors 2018-08-20 15:34:07 +02:00
Max Kellermann
e85b9960f0 util/StringCompare: use StringAPI.hxx 2018-08-20 15:33:16 +02:00
Max Kellermann
75c836fbd9 util/StringAPI: use StringCompare() in StringIsEqual() 2018-08-20 15:31:09 +02:00
Max Kellermann
94b1025780 util/RuntimeError: fix typo 2018-08-20 15:22:24 +02:00
Max Kellermann
36ca9d01fb util/ForeignFifoBuffer: shift the buffer in MoveFrom() on demand
The API documentation says "move as much data as possible", and if
there is room at the head of the buffer, we should use that if the
room after the tail is not large enough.
2018-08-20 15:21:05 +02:00
Max Kellermann
3bceed1b53 util/ForeignFifoBuffer: add "noexcept" 2018-08-20 14:53:39 +02:00
Max Kellermann
90de2c4bd6 util/Exception: move code to NestCurrentException() 2018-08-20 14:52:54 +02:00
Max Kellermann
9d63c8220b util/Cast: reverse operands in ContainerAttributeOffset()
The result shall be positive.
2018-08-20 14:23:02 +02:00
Max Kellermann
edd9d16c84 util/Cast: move OffsetPointer() to OffsetPointer.hxx 2018-08-20 13:46:18 +02:00
Max Kellermann
ec373eba5d util/BindMethod: add "noexcept" 2018-08-20 13:45:41 +02:00
Max Kellermann
0dfb27b7e5 util/StringAPI: stpcpy() was added in Bionic API level 21 2018-08-20 13:31:23 +02:00
Max Kellermann
cf471e830f Merge branch 'v0.20.x' 2018-08-02 11:07:40 +02:00
Max Kellermann
906972973e case-insensitive URI scheme comparison
Required according to RFC 3986:

> An implementation should accept uppercase letters as equivalent to
> lowercase in scheme names

Closes #330
2018-08-02 11:01:45 +02:00
Max Kellermann
116edf5fce util/ASCII: add StringStartsWithCaseASCII() 2018-08-02 10:42:28 +02:00
Max Kellermann
7db7568dcf lib/gcrypt/MD5: move code to util/HexFormat.cxx 2018-07-26 17:46:56 +02:00
Max Kellermann
235ddc0990 util/TimeISO8601: new utility library 2018-07-25 08:43:06 +02:00
Max Kellermann
517f5b1999 util/TimeConvert: new utility library 2018-07-25 08:34:52 +02:00
Max Kellermann
b778fb38a9 util/StringAPI: add raw strcmp() wrapper 2018-07-18 17:18:34 +02:00
Max Kellermann
6448b31b11 util/StringAPI: add strpbrk() wrapper 2018-07-18 16:51:29 +02:00
Max Kellermann
edb44a536a util/PrintException: new utility class 2018-07-17 21:58:07 +02:00
Max Kellermann
60d5bf0240 util/StringFormat: new utility library 2018-07-06 19:07:02 +02:00
Max Kellermann
e1ee8e7812 util/FormatString: remove obsolete Windows fallback
Since 7d353bbe2a, _GNU_SOURCE is always
defined, which implies __USE_MINGW_ANSI_STDIO and thus switches to
the mingw implementations of the printf() family.  That's
standards-compliant, unlike Microsoft's CRT implementations.
2018-07-06 19:04:33 +02:00
Max Kellermann
ae8a2ab652 util/SparseBuffer: new utility class 2018-06-22 22:18:26 +02:00
Max Kellermann
eeb00ac45b util/TemplateString: new utility library 2018-06-03 12:13:47 +02:00
Max Kellermann
65bbb0e0aa release v0.20.17
-----BEGIN PGP SIGNATURE-----
 
 iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlqAMO0QHG1heEBtdXNp
 Y3BkLm9yZwAKCRAjbopYxttFEg8eD/49NlFvlNdkamgYvh7MI1Sn67yKAwQt+N51
 W0hVnmXwPoSg76gfWw8J9kVyQy/jEkaCxsPF/UuEbH5jzqAC0y8hwYVRkJaRc9wN
 ZfwHvLHeaUxQweoguEwRSREy4ZC4ImQOK+eAxI1R43mqxxyhko1Akc1NmRVWzYfv
 /FGmAjTi1U6FR/yDpdSFn1NdlPmIgZ4WDuRsDT2NrshX/Bb32FiyZBytvek2P8n/
 QNgXv18E4yWXSb+zBYhPy/eaKhGasyjI3cbht1F0hNW9Yo/BsFxDuwXrX1vNBaOS
 E3Dux4s/nfcJ4RMRjmrkFwXImCvxt7+AGfh8RYBXuwqMExXz2kZjIs4ZVvO7Nu9A
 pFDJQwRIojXMfk73LU/MEpmNNEXhvfQLYkrM7poSqYaOr8SWMszqSgNnnfq6+flB
 sJbstgAStI6lL0jy0HrtMTvPVEiAGh6wCvMy/r2G9XUAyw76ccOg7MaIldn0MHJv
 A51+GfRTi4ILH0ReL1BGAg9nG97uFmRAWGkfkhtyD540xGRk7x5R8/ml4zFogHN6
 SbrV0NPdwk+uFd0y2znQT2gWyjc0id4WEKEoHX+Gl6c5qtPIfrq+PQPyk9kR+u+i
 AxwqMoKQer6Ji5qnsvCiKSkaGGiVNivrZ11jDWNCZaKjmvlKlvj/P5GxbPpORorq
 v4ru/4vNXQ==
 =v4t8
 -----END PGP SIGNATURE-----

Merge tag 'v0.20.17'

release v0.20.17
2018-02-11 13:22:43 +01:00
Max Kellermann
0f8d223c7f protocol/ArgParser: move strtof()/strtod() switch to util/NumberParser.hxx 2018-02-09 22:54:22 +01:00
Max Kellermann
97f670658f util/StringFormat: new utility library 2018-01-24 13:28:28 +01:00
Max Kellermann
be137a191e util/FormatString: remove obsolete Windows fallback
Since 7d353bbe2a, _GNU_SOURCE is always
defined, which implies __USE_MINGW_ANSI_STDIO and thus switches to
the mingw implementations of the printf() family.  That's
standards-compliant, unlike Microsoft's CRT implementations.
2018-01-24 13:22:43 +01:00
Max Kellermann
fe1f3df36e util/StringBuffer: add "noexcept" 2018-01-24 12:52:05 +01:00
Max Kellermann
3ca80a7336 util/RefCount, db/simple/Mount: remove obsolete libc++ workarounds
No longer a problem with NDK r16.
2018-01-19 23:19:46 +01:00
Max Kellermann
3e2e0d062b util/OptionParser: support option values 2018-01-17 11:14:57 +01:00
Max Kellermann
c45fe3517c util/OptionParser: add struct Result
Prepare for option values.
2018-01-17 11:08:05 +01:00
Max Kellermann
735a371249 util/OptionParser: pass array of OptionDefs to constructor 2018-01-17 10:24:06 +01:00
Max Kellermann
5ab086e337 util/OptionParser: loop in ParseNext() until a new option is found 2018-01-16 11:25:18 +01:00
Max Kellermann
68f660dbcc util/OptionParser: collect remaining arguments
Allow the caller to use a simple "for" loop without checking
arguments.
2018-01-16 11:08:23 +01:00
Max Kellermann
0066f7a818 util/{Const,Writable}Buffer: add constructor with two pointers 2018-01-16 11:06:33 +01:00
Max Kellermann
65059f2add util/{Const,Writable}Buffer: eliminate static method Null(), use nullptr cast instead 2018-01-16 11:04:51 +01:00
Max Kellermann
23dff4f209 util/OptionParser: use ConstBuffer<const char*> to store argv/argc 2018-01-16 10:22:06 +01:00
Max Kellermann
4a304bf34e util/OptionParser: make string pointers "const" 2018-01-16 10:20:53 +01:00
Max Kellermann
36a6405e8b util/OptionParser: add "constexpr" 2018-01-16 10:20:52 +01:00
Max Kellermann
42c1fe963b util/OptionParser: add "noexcept" 2018-01-16 10:13:39 +01:00
Max Kellermann
465b154fc0 util/OptionParser: use C++11 initializers 2018-01-16 10:12:48 +01:00
Max Kellermann
a0c4102b5a util/OptionDef: add "constexpr" 2018-01-16 10:11:35 +01:00
Max Kellermann
90cc32f6f8 util/RefCount: remove obsolete class 2017-12-22 16:37:30 +01:00
Max Kellermann
300a619991 Merge branch 'v0.20.x' 2017-12-22 16:10:05 +01:00
Max Kellermann
412c0a965c util/WStringAPI: fix indent 2017-12-21 18:45:26 +01:00
Ilya ilyxa Tyshchenko
2becf79223 correct action for compile on Solaris 11.3 X86 2017-12-21 18:42:36 +01:00
Max Kellermann
1d559bf00c util/SliceBuffer: add "noexcept" 2017-12-20 14:41:03 +01:00
Max Kellermann
3d960b5e55 util/RuntimeError: add FormatInvalidArgument() 2017-12-19 11:56:29 +01:00
Max Kellermann
edee8a3446 Compiler.h: add gcc_returns_nonnull, gcc_returns_twice 2017-12-18 23:00:13 +01:00
Max Kellermann
6246d36fe6 Merge branch 'v0.20.x' 2017-12-16 20:56:06 +01:00
Max Kellermann
dfaf08743c *: check defined(_WIN32) instead of defined(WIN32)
Only _WIN32 is defined by the compiler, and WIN32 is not standardized
and may be missing.

Closes #169
2017-12-12 10:22:20 +01:00
Max Kellermann
2670e13cbd util/{Const,Writable}Buffer: add static_assert to FromVoid() 2017-11-10 19:43:17 +01:00
Max Kellermann
49784513b1 util/{Const,Writable}Buffer, ...: rename IsEmpty() to empty(), imitating STL 2017-11-10 19:24:33 +01:00
Max Kellermann
034bb13e1c util/HugeAllocator: add missing "static inline"
Fixes the non-Linux build.
2017-10-26 09:01:06 +02:00
Max Kellermann
c8a2a557db util/HugeAllocator: remove obsolete class HugeAllocation 2017-09-21 21:52:08 +02:00
Max Kellermann
7b2b965415 util/SliceBuffer: use class HugeArray 2017-09-21 21:48:08 +02:00
Max Kellermann
c3cfa18ebe util/HugeAllocator: add template class HugeArray 2017-09-21 21:47:52 +02:00
Max Kellermann
b46835e15e util/HugeAllocator: HugeAllocator() returns WritableBuffer<void> 2017-09-21 21:47:49 +02:00
Max Kellermann
3e5ce3c92c util/{Const,Writable}Buffer: add static method FromVoidFloor() 2017-09-21 21:45:39 +02:00
Max Kellermann
e5c9b4cd75 util/{Const,Writable}Buffer: add operator==(nullptr_t) 2017-09-21 20:34:36 +02:00
Max Kellermann
8753e558f2 util/HugeAllocator: move MADV_DONTFORK setting to HugeForkCow()
Enforcing MADV_DONTFORK is a surprising limitation for this library
which aims to be generic.
2017-09-21 19:36:33 +02:00
Max Kellermann
56a9bf459d util/SliceBuffer: use C++11 initializers 2017-09-19 19:48:04 +02:00
Max Kellermann
11dbba3503 util/HugeAllocator: document std::bad_alloc 2017-09-19 19:45:52 +02:00
Max Kellermann
8662427d48 util/HugeAllocator: use std::exchange() 2017-09-19 19:42:21 +02:00
Max Kellermann
821480d329 util/HugeAllocator: make constructor explicit 2017-09-19 19:42:19 +02:00
Max Kellermann
c196710fae util/WStringCompare: relicense to BSD-2 2017-09-13 16:43:41 +02:00
Max Kellermann
e4f62483ff util/StringView: add default constructors
It was implicitly deleted since commit
db23c2f27b
2017-09-13 12:59:31 +02:00
Max Kellermann
8d9347edc5 Util/WStringCompare: use struct WStringView 2017-09-13 11:47:48 +02:00
Max Kellermann
eff821c1ca Util/StringView: move struct WStringView to separate header 2017-09-13 11:22:59 +02:00
Max Kellermann
3bcd6ecbad util/Exception: update API documentation 2017-09-13 10:49:34 +02:00
Max Kellermann
e76f4c2ae9 util/DeleteDisposer: convert struct to class 2017-09-13 10:35:51 +02:00
Max Kellermann
f46ac45d69 util/*: update include guards 2017-09-13 10:35:11 +02:00
Max Kellermann
1d1259a86d util/AllocatedString: add method data() 2017-09-13 10:34:12 +02:00
Max Kellermann
101f08ca75 util/Cast: make the "member" pointer const 2017-09-13 10:32:55 +02:00
Max Kellermann
3b7f9827ab Util/IterableSplitString: add wchar_t specialization 2017-09-12 19:12:09 +02:00
Max Kellermann
f98bf39005 Util/IterableSplitString: add template class BasicIterableSplitString 2017-09-12 19:12:09 +02:00
Max Kellermann
9e7df54ccd Util/StringView: add struct TStringView 2017-09-12 19:12:09 +02:00
Max Kellermann
db23c2f27b util/StringView: allow casting from BasicStringView to StringView 2017-09-12 19:08:47 +02:00
Max Kellermann
9744f437d8 Util/CharUtil: add wchar_t overloads
Needed for WStringView.
2017-09-12 18:22:02 +02:00
Max Kellermann
01f84b0e53 util/StringView: add struct WStringView 2017-09-12 17:17:13 +02:00
Max Kellermann
5dbdd36263 util/StringView: add struct BasicStringView 2017-09-12 17:17:13 +02:00
Max Kellermann
96b557c1f0 util/StringView: remove methods SetEmpty(), Empty() 2017-09-12 17:17:13 +02:00
Max Kellermann
ebdb7c8de2 util/WStringAPI: add StringIsEqualIgnoreCase() overload 2017-09-12 17:17:13 +02:00
Max Kellermann
1fda842ee6 util/StringView: use StringAPI.hxx 2017-09-12 17:00:42 +02:00
Max Kellermann
f71e20d0ce util/StringView: use value_type 2017-09-12 17:00:38 +02:00
Max Kellermann
988680de33 util/StringView: remove unnecessary operator= overloads
These will be generated by the compiler automatically.
2017-09-12 17:00:02 +02:00
Max Kellermann
cdf92c6300 util/StringView: remove redundant template parameters 2017-09-12 16:57:19 +02:00
Max Kellermann
be5b726c0a util/StringView: remove Literal()
This is not necessary, because a strlen() on a literal gets optimized
away by the compiler.
2017-09-12 16:55:10 +02:00
Max Kellermann
fe9ffcb9d2 Merge branch 'v0.20.x' 2017-08-08 19:30:30 +02:00
Max Kellermann
a4019cb6aa util/StringBuffer: use std::array::const_iterator 2017-08-07 16:18:43 +02:00
Max Kellermann
b0703b92c3 util/FormatString: pass the allocated buffer to AllocatedString::Donate()
.. and not the stack buffer.  This made the AllocatedString destructor
crash.

Closes #52
2017-08-03 00:25:30 +02:00
Max Kellermann
501a4af914 util/StringUtil: move strip functions to StringStrip.cxx 2017-07-05 17:20:02 +02:00
Max Kellermann
dad7d7e798 util/TruncateString: rename CopyString() to CopyTruncateString() 2017-07-05 17:15:58 +02:00
Max Kellermann
4b94ae8040 util/StringUtil: move CopyString() to TruncateString.cxx 2017-07-05 17:11:34 +02:00
Max Kellermann
b04679b429 util/WritableBuffer: add method MoveFront() 2017-07-05 17:10:59 +02:00
Max Kellermann
19358d1c42 util/Exception: add more utility functions 2017-07-05 17:08:26 +02:00
Max Kellermann
8679074be7 util/Exception: move code to AppendNestedMessage() 2017-07-05 17:07:43 +02:00
Max Kellermann
ba09e22c30 util/Exception: add GetFullMessage(std::exception) 2017-07-05 17:07:41 +02:00
Max Kellermann
6515b9727d util/Exception: catch std::nested_exception 2017-07-05 17:07:40 +02:00
Max Kellermann
4af8e5bdb5 util/Exception: include cleanup 2017-07-05 17:07:39 +02:00
Max Kellermann
2db8cf477b util/Exception: add "fallback" and "separator" parameters 2017-07-05 16:59:40 +02:00
Max Kellermann
3cfefa53f7 util/Exception: rename FullMessage() to GetFullMessage() 2017-07-05 12:25:55 +02:00
Max Kellermann
bce89feb13 util/Manual: drop prefix from include guard 2017-07-05 12:25:32 +02:00
Max Kellermann
88f5220acf util/Manual: drop support for gcc 4.6 2017-07-05 12:25:20 +02:00
Max Kellermann
3e87ac75a1 util/Manual: use C++11 initializer 2017-07-05 12:12:41 +02:00
Max Kellermann
9237f2a80c util/{Const,Writable}Buffer: add array constructor 2017-07-05 12:09:27 +02:00
Max Kellermann
61aca389c4 util/{Const,Writable}Buffer: add typedef value_type 2017-07-05 12:08:34 +02:00
Max Kellermann
80438c4876 util/BindMethod: add BIND_FUNCTION() 2017-07-05 12:04:29 +02:00
Max Kellermann
70ac4fa96b util/AllocatedString: implement AllocatedString<wchar_t>::Duplicate() 2017-07-05 10:26:39 +02:00
Max Kellermann
979f1b6c39 release v0.20.9
-----BEGIN PGP SIGNATURE-----
 
 iQJEBAABCAAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlkz5jkQHG1heEBtdXNp
 Y3BkLm9yZwAKCRAjbopYxttFEubuD/kBXMcV4XawqGNNtSHdrY8CxSL8wJMCMJQl
 aMgRkKLPRml8Hj9FNNG9pjXBuT+qUgPX7t9gBEiT7c+sV3fHH40gUf1js5GIsEPm
 BAVfvww5EhmQWWVhPTLk1iZ4jp6E96mDmIG1znwo7etSZHXU8RJfR7woBi3SPJ9f
 OPcrimskNuWpAWeaEIKi/1Iwzy8d9VK9Ttb73gA3M5zSm7ioXzt3YClpwLRM8JU6
 QeUJchy6VwXnygswjUNmbhPc3GsD2FyUZ4OtJ0hodnqqajfldBxhcHUnQk4zZULr
 1nLSyOuA9bwLuFohH1T6HiY9z8PFzgqdIHvsjOJgZ4gQa69PVNjal2tUEUav9zFv
 aK4LvTVPnIk+hqRbtLpV7/rPKuClrC9BO4oYdBGBDNY4hqVpvRA9obP1s00aOi+K
 UhYqLqg7yeIEeTlUxFOhXJCKAEL69BuXT5ihJtDlB/dCUzv37sEch/4WDgs7uc+O
 9kJYlElvozw57mbczsee/PCSnSWrLCq/qG/bNEUUQOTueWNuifh3PL62UXGgfbEH
 01hJDyLr6ETSmWn7rjTfLJiHThX/EQQvOhs+35fbCyry65z4tFwrilGDmFVUWGPq
 /6QEpY1D6q4fkoma/iWOZoTkfKewatAPGMGWoJaGhCnfQFz4VTFtS2bDtuUctQ16
 jnXnPFxqBw==
 =0SSp
 -----END PGP SIGNATURE-----

Merge tag 'v0.20.9'

release v0.20.9
2017-06-04 12:57:05 +02:00
Max Kellermann
a057b4f6d8 *: add lost of "noexcept" specifications 2017-06-04 12:46:48 +02:00
Max Kellermann
cdd2d4cc1d util/StringView: add method EndsWith() 2017-05-17 12:39:01 +02:00
Max Kellermann
907fb257cd util/StringAPI: add StringToken(), StringIsEqualIgnoreCase(), StringCollate() 2017-05-16 23:04:27 +02:00
Max Kellermann
60bd60db03 util/String{Compare,API}: add more "noexcept" 2017-05-16 23:02:36 +02:00
Max Kellermann
0fcc28a108 util/String{Compare,API}: indent with tabs 2017-05-16 23:01:43 +02:00
Max Kellermann
ab8005f03e util/ScopeExit: include cleanup 2017-05-16 22:56:30 +02:00
Max Kellermann
5e8f578e78 util/ConcatString: return the end pointer 2017-05-16 11:56:56 +02:00