summaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2021-09-11windows: Make thread_once static and remove const qualifiers from ↵Gravatar Nikias Bassen1-3/+3
thread_once_t globals
2021-07-13cpp: Array: Make sure the array passed to array_fill ist passed by referenceGravatar liujianfengv1-1/+1
When creating a new Array object, for example through PList::Node::FromPlist(plist_t node), the array_fill function is called from Array() constructor in line 51. It seems that the intended way of calling array_fill() is to pass the _array object by reference, however it is actually passed by value. Thus the changes to the array object made by array_fill() are discarded when the function returns. This commit passes the _array by reference so we keep the changes.
2021-06-22[clang-tidy] Remove casts to the same typeGravatar Rosen Penev2-2/+2
Found with google-readability-casting Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-06-22[clang-tidy] cpp: Replace free with deleteGravatar Rosen Penev5-19/+9
It's the C++ way. It also avoids having to check for NULL. Found with cppcoreguidelines-owning-memory Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-06-22[clang-tidy] Fix bad widening castsGravatar Rosen Penev1-2/+2
Found with bugprone-misplaced-widening-cast Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-06-22[clang-tidy] cpp: Use correct type for loop variableGravatar Rosen Penev1-4/+2
Found with bugprone-too-small-loop-variable Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-06-22[clang-tidy] cpp: Turn reference operators to constGravatar Rosen Penev10-10/+10
Found with cppcoreguidelines-c-copy-assignment-signature Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-06-22[clang-tidy] Avoid global non-const variablesGravatar Rosen Penev2-4/+4
Found with cppcoreguidelines-avoid-non-const-global-variables Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-06-22[clang-tidy] Remove pointless constGravatar Rosen Penev2-2/+2
The const is actually misplaced. const plist_t evaluates to void *const instead of const void *. const qualification of the former makes no sense in function declarations. Found with misc-misplaced-const Signed-off-by: Rosen Penev <rosenp@gmail.com>
2021-01-25Replace malloc + memset with calloc where appropriateGravatar Rosen Penev1-2/+1
calloc is faster for big allocations. It's also simpler. Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-11-24time64: Remove code duplication in separate if branches by combining the ↵Gravatar Rosen Penev1-6/+1
conditions [clang-tidy] Found with bugprone-branch-clone Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-11-24Add parentheses to macros for better readabilityGravatar Rosen Penev2-15/+15
[clang-tidy] Found with bugprone-macro-parentheses Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-11-24Improve code readability by using explicit != 0 compare when using strncmpGravatar Rosen Penev1-4/+4
[clang-tidy] Found with bugprone-suspicious-string-compare Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-11-24Improve code readability by not using else after returnGravatar Rosen Penev2-54/+50
[clang-tidy] Found with readability-else-after-return Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-11-21bplist: Fix offset table range check, don't rely on pointer overflowGravatar Nikias Bassen1-1/+1
2020-06-14Add API version to library and pkgconfig file for proper linkingGravatar Nikias Bassen3-12/+12
2020-06-09Unfold automake variables into multiple lines for maintainabilityGravatar Martin Szulecki1-36/+47
2020-06-09Fix pkg-config file liblist++-2.0.pc referencing wrong (old) libplistGravatar Nikias Bassen1-1/+1
2020-06-08Remove whitespace errors from all filesGravatar Martin Szulecki4-10/+10
2020-06-08pkgconfig: Correctly rename libplist*.pc to libplist*-2.0.pcGravatar Nikias Bassen3-1/+1
2020-06-03c++: Switch to c++ headersGravatar Rosen Penev12-13/+13
[clang-tidy]Found with hicpp-deprecated-headers Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-06-03c++: Remove redundant initializationGravatar Rosen Penev2-2/+2
[clang-tidy] Found with readability-redundant-member-init Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-06-03c++: Add closing namespace commentGravatar Rosen Penev12-12/+12
[clang-tidy] Found with google-readability-namespace-comments Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-06-03Remove pointless return in void functionsGravatar Rosen Penev3-14/+0
[clang-tidy] Found with readability-redundant-control-flow Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-05-26Make plist_bool_val_is_true() return 0 instead of -1 if node is NULL or not ↵Gravatar Nikias Bassen1-1/+1
a PLIST_BOOLEAN
2020-05-25Return NULL from plist_copy() if passed a NULL pointerGravatar Xiao Deng1-1/+1
This will prevent an assert if a NULL pointer is passed, and can make writing some code easier and cleaner without the need for a NULL check. For example, plist_copy(plist_dict_get_item(dict, "abc")) would give us a copy of the dict's node if the dict has a value for the given key, or NULL without any further checks.
2020-05-21Fix symbol mismatch between public header and interface (plist_bool_val_is_true)Gravatar Nikias Bassen1-1/+1
2020-05-14time64: Silence compiler warnings about shadowed variable declarationsGravatar Nikias Bassen1-29/+29
2020-05-14bplist: Prevent 32bit compiler warningGravatar Nikias Bassen1-1/+3
2020-05-11bplist: Remove unnecessary allocation and unused variablesGravatar Nikias Bassen1-10/+5
2020-05-11Suppress compiler warning about memmem on LinuxGravatar Nikias Bassen1-0/+1
2020-05-11Add plist_*_val_compare, plist_*_val_contains, etc. for the respective node ↵Gravatar Nikias Bassen1-0/+231
types ... except container node types like PLIST_ARRAY or PLIST_DICT.
2020-04-21time64/ctime64_r: localtime64_r can failGravatar Derrick Lyndon Pallas1-1/+3
In ctime64_r, the call to localtime64_r can fail. If we don't check for this and then call asctime64_r, the results are garbage. Signed-off-by: Derrick Lyndon Pallas <derrick@pallas.us>
2019-12-09bplist: Silence compiler warningGravatar Nikias Bassen1-2/+2
2019-12-09bplist: Add cast to/from uint32_t when reading/storing indices for recursion ↵Gravatar Nikias Bassen1-4/+4
check
2019-12-09bplist: use ptr_array instead of PLIST_ARRAY to store node indices for ↵Gravatar XD1-10/+10
recursing check This improves performance by at least 30% for large files, and also reduces the memory footprint.
2019-12-09ptrarray: Add function returning the size (number of elements) of the arrayGravatar XD2-1/+7
2019-11-07xplist: Bail out when '.' is found while checking for ',' in double to ↵Gravatar Nikias Bassen1-0/+2
string conversion
2019-11-07Add plist_get_data_ptr() and plist_get_string_ptr() to the interfaceGravatar Nikias Bassen1-0/+25
2019-11-07Add plist_to_bin_free() and plist_to_xml_free() functions that free memory ↵Gravatar Nikias Bassen2-0/+10
allocated by plist_to_bin()/plist_to_xml()
2019-11-07xplist: Increase precision when converting PLIST_REAL nodes to XMLGravatar Nikias Bassen1-37/+16
2019-08-13plist: Remove unnecessary parameter from plist_copy_node()Gravatar Xiao Deng1-14/+6
2019-08-09Make sure to copy hash table entries properly when cloning array/dict nodesGravatar Nikias Bassen1-18/+22
As mentioned in #142, plist_copy_node() was not correctly handling the hash tables when cloning array or dict nodes; it incorrectly filled the hash table with the original child node info, which effectively would lead to a segmentation fault / UaF if the original array/dict would be freed followed by an attempt to access an element in the new hash table.
2019-07-07Add PList::Dictionary::const_iteratorGravatar Alexander Böhn1-0/+15
... and const versions of three member functions, each returning const_iterator: * Plist::Dictionary::Begin() * PList::Dictionary::End() * PList::Dictionary::Find()
2019-06-26Fixed bug in dictionary_fillGravatar tihmstar1-1/+1
Bug: when creating a new Dictionary object (for example through PList::Node::FromPlist(plist_t node) ), the dictionary_fill function is called from Dictionary() constructor in line 50. It seems that the intended way of calling dictionary_fill() is to pass the _map object by reference, however it is actually passed by value. Thus the changes to the map object made by dictionary_fill() are discarded when the function returns. Fix: pass _map by reference to keep the changes
2019-05-20plist_set_key_val(): prevent setting a key value that already exists in a ↵Gravatar Nikias Bassen1-0/+5
PLIST_DICT
2019-05-20Add plist_dict_item_get_key() to allow retrieving the key node for a given ↵Gravatar Nikias Bassen1-0/+11
item of a #PLIST_DICT
2019-05-19Add plist_array_item_remove() to allow removing an array's child node ↵Gravatar Nikias Bassen1-0/+15
without relying on the index
2019-05-19plist_array_get_item_index(): return UINT_MAX instead of 0 when node can't ↵Gravatar Nikias Bassen2-1/+5
be found
2019-05-19Add index lookup table for large PLIST_ARRAY nodesGravatar Nikias Bassen3-22/+113