[vlc-commits] Implement vlc_rand_bytes() for OS/2
KO Myung-Hun
git at videolan.org
Mon Mar 26 16:36:52 CEST 2012
vlc/vlc-2.0 | branch: master | KO Myung-Hun <komh at chollian.net> | Sun Mar 25 15:45:03 2012 +0900| [68b0a5ab6379ff6b430cf8e3c7cef21d6c7c3dfe] | committer: Rémi Denis-Courmont
Implement vlc_rand_bytes() for OS/2
Signed-off-by: Rémi Denis-Courmont <remi at remlab.net>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=68b0a5ab6379ff6b430cf8e3c7cef21d6c7c3dfe
---
src/misc/rand.c | 95 +++++++++++++++++++++++++++++++-----------------------
1 files changed, 54 insertions(+), 41 deletions(-)
diff --git a/src/misc/rand.c b/src/misc/rand.c
index 875c733..0084e2c 100644
--- a/src/misc/rand.c
+++ b/src/misc/rand.c
@@ -26,7 +26,60 @@
#include <vlc_common.h>
#include <vlc_rand.h>
-#ifndef WIN32
+#ifdef __OS2__
+void vlc_rand_bytes (void *buf, size_t len)
+{
+ QWORD qwTime;
+ uint8_t *p_buf = (uint8_t *)buf;
+
+ while (len > 0)
+ {
+ DosTmrQueryTime( &qwTime );
+
+ *p_buf++ = ( uint8_t )( qwTime.ulLo * rand());
+ len--;
+ }
+}
+#elif defined(WIN32)
+#include <wincrypt.h>
+
+void vlc_rand_bytes (void *buf, size_t len)
+{
+ HCRYPTPROV hProv;
+ size_t count = len;
+ uint8_t *p_buf = (uint8_t *)buf;
+
+ /* fill buffer with pseudo-random data */
+ while (count > 0)
+ {
+ unsigned int val;
+ val = rand();
+ if (count < sizeof (val))
+ {
+ memcpy (p_buf, &val, count);
+ break;
+ }
+
+ memcpy (p_buf, &val, sizeof (val));
+ count -= sizeof (val);
+ p_buf += sizeof (val);
+ }
+
+ /* acquire default encryption context */
+ if( CryptAcquireContext(
+ &hProv, // Variable to hold returned handle.
+ NULL, // Use default key container.
+ MS_DEF_PROV, // Use default CSP.
+ PROV_RSA_FULL, // Type of provider to acquire.
+ CRYPT_VERIFYCONTEXT) ) // Flag values
+ {
+ /* fill buffer with pseudo-random data, intial buffer content
+ is used as auxillary random seed */
+ CryptGenRandom(hProv, len, buf);
+ CryptReleaseContext(hProv, 0);
+ }
+}
+#else
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
@@ -117,46 +170,6 @@ void vlc_rand_bytes (void *buf, size_t len)
}
}
-#else /* WIN32 */
-
-#include <wincrypt.h>
-
-void vlc_rand_bytes (void *buf, size_t len)
-{
- HCRYPTPROV hProv;
- size_t count = len;
- uint8_t *p_buf = (uint8_t *)buf;
-
- /* fill buffer with pseudo-random data */
- while (count > 0)
- {
- unsigned int val;
- val = rand();
- if (count < sizeof (val))
- {
- memcpy (p_buf, &val, count);
- break;
- }
-
- memcpy (p_buf, &val, sizeof (val));
- count -= sizeof (val);
- p_buf += sizeof (val);
- }
-
- /* acquire default encryption context */
- if( CryptAcquireContext(
- &hProv, // Variable to hold returned handle.
- NULL, // Use default key container.
- MS_DEF_PROV, // Use default CSP.
- PROV_RSA_FULL, // Type of provider to acquire.
- CRYPT_VERIFYCONTEXT) ) // Flag values
- {
- /* fill buffer with pseudo-random data, intial buffer content
- is used as auxillary random seed */
- CryptGenRandom(hProv, len, buf);
- CryptReleaseContext(hProv, 0);
- }
-}
#endif
static struct
More information about the vlc-commits
mailing list