diff options
author | Havoc Pennington <hp@redhat.com> | 2005-02-25 22:03:30 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2005-02-25 22:03:30 +0000 |
commit | 7ce7502e1ae23766ba40105327de787c2d1cef9d (patch) | |
tree | 06fcb80d134ca45a88a510e0f53d34e2f415fd50 /dbus/dbus-sysdeps.c | |
parent | 1b5dace8e6986965af7b573b3b2c5991af11cf6e (diff) |
2005-02-25 Havoc Pennington <hp@redhat.com>
* doc/dbus-specification.xml: document the GUID thing
* dbus/dbus-server.c (_dbus_server_init_base): initialize a
globally unique ID for the server, and put a "guid=hexencoded"
field in the address
* dbus/dbus-bus.c: fix missing #include of dbus-threads-internal.h
* dbus/dbus-message.c: ditto
* dbus/dbus-dataslot.c: ditto
* dbus/dbus-list.c: ditto
* dbus/dbus-internals.h: wait, just include
dbus-threads-internal.h here
* dbus/dbus-string.c (_dbus_string_copy_to_buffer): move back for
use in main library
* dbus/dbus-sysdeps.c (_dbus_generate_random_bytes_buffer): new function
Diffstat (limited to 'dbus/dbus-sysdeps.c')
-rw-r--r-- | dbus/dbus-sysdeps.c | 59 |
1 files changed, 47 insertions, 12 deletions
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index 83c1ce4c..830e26f1 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -2328,15 +2328,12 @@ _dbus_concat_dir_and_file (DBusString *dir, } static dbus_bool_t -pseudorandom_generate_random_bytes (DBusString *str, - int n_bytes) +pseudorandom_generate_random_bytes_buffer (char *buffer, + int n_bytes) { - int old_len; unsigned long tv_usec; int i; - old_len = _dbus_string_get_length (str); - /* fall back to pseudorandom */ _dbus_verbose ("Falling back to pseudorandom for %d bytes\n", n_bytes); @@ -2352,18 +2349,56 @@ pseudorandom_generate_random_bytes (DBusString *str, r = rand (); b = (r / (double) RAND_MAX) * 255.0; - - if (!_dbus_string_append_byte (str, b)) - goto failed; - + + buffer[i] = b; + ++i; } +} + +static dbus_bool_t +pseudorandom_generate_random_bytes (DBusString *str, + int n_bytes) +{ + int old_len; + char *p; + + old_len = _dbus_string_get_length (str); + + if (!_dbus_string_lengthen (str, n_bytes)) + return FALSE; + + p = _dbus_string_get_data_len (str, old_len, n_bytes); + + pseudorandom_generate_random_bytes_buffer (p, n_bytes); return TRUE; +} - failed: - _dbus_string_set_length (str, old_len); - return FALSE; +/** + * Fills n_bytes of the given buffer with random bytes. + * + * @param buffer an allocated buffer + * @param n_bytes the number of bytes in buffer to write to + */ +void +_dbus_generate_random_bytes_buffer (char *buffer, + int n_bytes) +{ + DBusString str; + + if (!_dbus_string_init (&str)) + return pseudorandom_generate_random_bytes_buffer (buffer, n_bytes); + + if (!_dbus_generate_random_bytes (&str, n_bytes)) + { + _dbus_string_free (&str); + return pseudorandom_generate_random_bytes_buffer (buffer, n_bytes); + } + + _dbus_string_copy_to_buffer (&str, buffer, n_bytes); + + _dbus_string_free (&str); } /** |