The Better String Library is an abstraction of a string data type which is superior to the C standard library char buffer string type. Among the features achieved are:
- Substantial mitigation of buffer overflow/overrun problems and other failures that result from erroneous usage of the common C string library functions
- Significantly simplified string manipulation
- High performance interoperability with other source/libraries which expect '\0' terminated char buffers
- Improved overall performance of common string operations
- Functional equivalency with other more modern languages
- Optional API for manipulating UTF-8 encoded strings
This is a fork of Paul Hsieh's Better String Library. The following features (or mis-features, depending on your point of view) are included:
- A build system (Meson+Ninja)
- Improved test suite using the Check library
- Continuous integration via GitHub Actions, including memory profiling with Valgrind
- Remove C++ wrapper code, returning this to a pure C library
- Documentation generation with Doxygen
Currently this fork should be binary-compatible with the original code. The
only source incompatibility is the removal of the const_bstring type.
Just use const bstring instead.
The bstring library is widely available as a binary package in various distributions. The shared library and development headers can be installed with their respective package manager.
The current packaging status as reported by repology.org:
The bstring library can be built using the Meson+Ninja build system and a C compiler. See the Porting Guide for notes on compiler compatibility.
Configure the build directory with Meson.
meson setup build
Then compile and install.
meson compile -C build
sudo meson install -C build
The following build options are available:
enable-utf8(default:true): Enable UTF-8 string manipulation functionsenable-docs(default:false): Generate documentation with Doxygenenable-tests(default:false): Build the test suite with the Check libraryenable-fuzzing(default:false): Build the fuzzing targets with libFuzzerenable-bgets-workaround(default:false): Avoid namespace conflict with thebgetsfunction in the standard C library (notably: Solaris)enable-old-api(default:false): Enable backward compatibility macros for pre-1.0 API
A test suite is available if the Check library is is installed.
meson setup build -Denable-docs=true
meson test -C build
If Valgrind is installed the test suite can be checked for memory leaks.
meson test --wrapper='valgrind --leak-check=full' -C build
The original documentation has been migrated into the header files and converted to the Doxygen format. The generated output can be found online.
The original documentation essays are available in the source distribution and are included in the Doxygen output.
These essays have been reformatted for easier reading. Minor edits have been made to reflect changes to the codebase.
The Better String Library is released under the BSD 3-Clause License or the GNU General Public License v2 at the option of the user.