Age | Commit message (Collapse) | Author |
|
Add a named parameter fd_cb, which is called when the callee returned a
file descriptor.
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
File descriptors can be passed via the named fd argument
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
This can be used to send and receive file descriptors from within an object
method call.
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
This can be used to synchronously complete a deferred ubus request,
waiting for completion or timeout.
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
When a function supports many parameters, the order can be somewhat
confusing, especially when dealing with several optional ones.
In order to make this easier to use, support for passing an object with
named parameters.
for example:
obj.notify("test", data, null, null, null, 1000);
can be written as:
obj.notify({
method: "test",
data,
timeout: 1000
});
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Avoid re-invoking any event listener callbacks after an invocation
triggered an exception in order to avoid accidentially clearing the
exception information.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
socket: fix AF_PACKET recvmsg() and sockaddr formatting
|
|
- Do not unconditionally pass the `MSG_CMSG_CLOEXEC` flag to `recvmsg()`
invocations as not all protocol specific recvmsg implementations in the
kernel tolerate it; `packet_recvmsg()` for example will immediately
return yield `EINVAL` if any non-whitelisted flag is passed.
- Ensure that the HW address string buffer is zero-terminated when
converting MAC addresses from C to ucode values.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
main: add global ARGV0 variable
|
|
Fill it with the command line provided path to the source file
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
docs: Mention `libmd` in macOS docs
|
|
docs: Fix compilation command for macOS
|
|
Fixes: #265 "macOS build broken not finding libucode.0.dylib"
Suggested-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Paul Spooren <mail@aparcar.org>
|
|
Signed-off-by: Paul Spooren <mail@aparcar.org>
|
|
debian/control: libucode Recommends ucode-modules
|
|
|
|
debian/control: Build-Depend on cmake
|
|
|
|
|
|
|
|
struct: fix memory leak in buffer.pull()
|
|
Do not increase the refcount when returning the pulled buffer contents
as string since the returned value already is the sole reference.
Without this change, pulled buffer contents will be leaked whenever
the `pull()` function is used.
Also ensure that the buffer memory is completely zero initialized when
it is allocated from scratch, the existing logic only cleared the trailing
data area on reallocations but never the head on fresh allocations.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
uci: eliminate usage of global variables
|
|
Use the VM registry to store the last uci error code and lookup the uci
cursor resource type at resource creation time instead of caching it in
a global variable.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The previously introduced signal handler restoration logic did not take
the signal dispatching pipe into account.
Extend the `uc_vm_signal_handlers_reset()` function to also close any
related pipe handles.
Fixes: #255
Fixes: f9d2faf ("vm: reset signals when freeing VM")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
main: fix crash on printing -p output
|
|
Delete a duplicate ucv_put() line that can lead to a double-free bug.
Reproduced by running:
ucode -l nl80211 -p 'sprintf("%.J\n",
nl80211.request(nl80211.const.NL80211_CMD_GET_WIPHY,
nl80211.const.NLM_F_DUMP,
{ wiphy: 0, split_wiphy_dump: true }))'
Fixes: 0a7ff4715cb8 ("main: pretty-print `-p` output by default")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
Reenabling signal dispatching caused a new object allocation so update the
expected GC counts in the testcases.
Fixes: a362263 ("vm: fix inverted condition in uc_vm_signal_handlers_setup()")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The previous code refactoring inadvertently broke the signal setup
condition check.
Fixes: #254
Fixes: f9d2faf ("vm: reset signals when freeing VM")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
struct: Add new buffer API for incremental packing/unpacking
|
|
Drop the usage of global static variables for caching the per-VM resource
type objects in order to properly support loading the library in multiple
concurrent threads or VM instances.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
main: pretty-print `-p` output by default
|
|
Implement a new struct buffer API to support incremental packing and
unpacking of binary data. This API allows for more flexible and efficient
handling of structured data, especially for streaming or partial
processing scenarios.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
lexer: Preserve keyword, regexp flags until processing non-comment to…
|
|
When outputting non-string expression results while running the cli
interpreter using the `-p` flag, pretty-print the resulting JSON data
for better readability.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
When the lexer has either the `no_keyword` or `no_regexp` flag set, it
should retain these flags until it encounters a non-comment token.
Only then should it stop preventing the interpretation of tokens beginning
with a letter or forward slash as keywords or regular expression literals,
respectively.
Previously, these flags were being reset too early when processing comments,
which could cause incorrect parsing when comments appeared between relevant
tokens. The flags should only be reset after consuming an actual non-comment
token to ensure consistent parsing behavior.
Fixes: #250
Fixes: 855854f ("lexer: emit comment and template statement block tokens")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
nl80211: properly support split_wiphy_dump for single phys
|
|
When performing a `NL80211_CMD_GET_WIPHY` request for a single wiphy with
`split_wiphy_dump` set to true, the expectation is that only a single phy
object is returned, like when performing the same request without splitting,
yet the current implementation returns a sparse array with only the
requested phy index populated instead.
Fix this issue by special-casing NL80211_CMD_GET_WIPHY command requests
with a set `split_wiphy_dump` attribute. Also implicitly set the
`NLM_F_DUMP` flag in this case as it is required for the kernel to send
all information.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Since `typename` is a reserved word in C++ avoid using it to allow
successful compilation with a C++ compiler.
Fixes: #248
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
lib: utilize `ucv_array_sort_r()` and `ucv_object_sort_r()`
|
|
Utilize the newly introduced sort functions to eliminate the global sort
context usage. This change was originally part of PR #242 but got dropped
during refactoring.
Suggested-by: Isaac de Wolff <idewolff@vincitech.nl>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Removed all global variables from libucode for thread safety
|
|
When invoking `uc_vm_free()` on a VM with enabled `.setup_signal_handlers`
configuration, reset system signal handlers back to their default actions.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Introduce an extensible private TLS context structure and use it within
libucode to store global state such as active object iterators.
This allows using libucode concurrently in multiple threads without
unintentionally sharing global state among them.
Also adjust the signal dispatching setup logic in `uc_vm_init()` to only
enable signal handling if no other VM in the same thread already handles
signals.
Suggested-by: Isaac de Wolff <idewolff@vincitech.nl>
[squash commits, move signal handler vm pointer and object iterator list
into common extensible TLS context, whitespace and naming adjustments,
extended signal setup logic]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Introduce two new functions for ordering arrays and object keys which
utilize a different compare callback signature and allow passing a user
provided pointer to the comparison callback.
The main advantages of the `ucv_*_sort_r()` flavors are the ability to
pass custom context to comparisons via the user data pointer and the
invocation of the comparison callback with direct `uc_value_t *` pointers
instead of opaque `const void *` arguments pointing to `uc_value_t *` or
json-c internal `struct lh_entry *` pointers respectively.
Suggested-by: Isaac de Wolff <idewolff@vincitech.nl>
[align naming and whitespace with the rest of the codebase, rename some
variables for clarity, group sort related changes into two commits,
drop constness from `uc_value_t *` compare function arguments]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
lib: Removed global variables from module fs for thread safety
|
|
lib: introduce digest library
|
|
Introduce a new default enabled CMake option `DIGEST_SUPPORT_EXTENDED`
which, when turned off, disables all but the most common md5, sha1 and
sha256 alogirthms to reduce the library size.
Also prefer statically linking libmd if possible.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
This is needed for the upcoming digest library support.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|