to ensure that it is not modified by any client.
const have internal linkage unless marked by extern
Change-Id: Ife1def2feb43aead32164f479e39ee3fd71b2ba0
Signed-off-by: Adam Miartus <external.Adam.Miartus@de.bosch.com>
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
* Add guide for compiling on MinGW using waf
* Update wscripts and guide for MinGW
* Fix README_MINGW typos
* Add instructions for ASIO support
* Update jackd example
* Patch for metadata support on Windows
* Update VS project for building JackRouter
* JackRouter/VS: add int redefinition fix to all build configurations
* VS: ignore Visual Studio build files and user settings
* Revise and extend README_MINGW
* Fix typos in README_MINGW
* Update MinGW build guide
* Replace MAX_PATH with PATH_MAX (win32)
* Include limits.h in JackMetadata.h
Co-authored-by: Schrödinger's Cat <6382400+Schroedingers-Cat@users.noreply.github.com>
* Set MIDI port pretty names on macOS
* Set MIDI port pretty names on Windows
* Set MIDI port pretty names on Linux/alsarawmidi
* Update alsarawmidi port naming to match CoreMIDI and WinMME
* Rename PortSetPrettyNameProperty to PortSetDeviceName
* Set hardware property to MIDI port names
Problem:
#set two properties for UUID 4294967296
$ jack_property -s 4294967296 "a" 1
$ jack_property -s 4294967296 b "2"
#-l lists them
$ jack_property -l
4294967296
key: b value: 2
key: a value: 1
#-l for UUID doesn't list them <<<<<<
$ jack_property -l 4294967296
$ jack_property -l 4294967296 a
Value not found for a of 4294967296
$ jack_property -l 4294967296 b
Value not found for b of 4294967296
#it seems that 3 chars is the minimum length for value when querying for UUID
$ jack_property -s 4294967296 a 123
$ jack_property -l 4294967296
key: a value: 123
$ jack_property -l 4294967296 a
123
In example-clients/property.c:
/* list all properties for a given UUID */
if ((cnt = jack_get_properties (uuid, &description)) < 0) {
fprintf (stderr, "could not retrieve properties for %s\n", subject);
exit (1);
}
cnt is always 0 for values < 3 chars. Why?
In common/JackMetadata.cpp:
int JackMetadata::GetProperty(jack_uuid_t subject, const char* key, char** value, char** type)
int JackMetadata::GetProperties(jack_uuid_t subject, jack_description_t* desc)
This loop gets results:
while ((ret = cursor->get (cursor, &key, &data, DB_NEXT)) == 0) {
but are dropped because of this check:
/* result must have at least 2 chars plus 2 nulls to be valid
if (data.size < 4) {
This rule isn't understood. Explanations are welcome!
Reducing the check to 2 (1 char + null) will consider single char values.
This makes listing properties for a given UUID the same keys as when listing all UUIDs and keys.
No side-effects of lowering the value has been detected (yet).
Note: there is no problem getting "short" values in this method:
int JackMetadata::GetAllProperties(jack_description_t** descriptions)
(as used by jack_property -l without UUID)
jack_property output after change to (data.size < 2):
$ jack_property -s 4294967296 "a" 1
$ jack_property -s 4294967296 b "2"
$ jack_property -l
4294967296
key: b value: 2
key: a value: 1
$ jack_property -l 4294967296
key: b value: 2
key: a value: 1
$ jack_property -l 4294967296 a
1
$ jack_property -l 4294967296 b
2
Note: This change should be considered also for JACK1 (libjack/metadata.c)
to keep implementations in sync.
* [metadata] Metadata properties implementation.
* [metadata] Fixed for shared server metadata-base accessor; alsofixed coding/naming style.
* [metadata] Fixed a tab for space.
* [metadata] Use of Berkeley DB is now truly optional on configure time.
* [metadata] Fixed tabs for spaces, again.
* [metadata] Fixed for shared metadata-base initialization and external clients.
* [metadata] Blind-fix for windows codebase.
* [metadata] Metadata API moved into client-side library only.
* [metadata] Fixed jack_port_uuid() stubbiness, now returning a proper UUID from port index.
* [metadata] Uniform method names.
* [metadata] Fixed PropertyChangeNotify through server async call.