summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-sysdeps.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2005-02-25 22:03:30 +0000
committerHavoc Pennington <hp@redhat.com>2005-02-25 22:03:30 +0000
commit7ce7502e1ae23766ba40105327de787c2d1cef9d (patch)
tree06fcb80d134ca45a88a510e0f53d34e2f415fd50 /dbus/dbus-sysdeps.c
parent1b5dace8e6986965af7b573b3b2c5991af11cf6e (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.c59
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);
}
/**