mirror of https://gitee.com/openkylin/libvirt.git
use the gnulib random_r function
This commit is contained in:
parent
1b745219c7
commit
c4985e9419
11
ChangeLog
11
ChangeLog
|
@ -1,4 +1,13 @@
|
||||||
Thu Jan 21 19:04:12 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
Thu Jan 21 19:44:12 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
Use the GNULIB random_r function
|
||||||
|
* Makefile.maint: print 4 lines of context when complaining
|
||||||
|
about prohibited POSIX apis
|
||||||
|
* src/libvirt.c: Initialize random number generator
|
||||||
|
* src/util.c, src/util.h: Generate API for random number gen
|
||||||
|
* src/uuid.: Use generic random number generator API
|
||||||
|
|
||||||
|
Thu Jan 21 19:41:12 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
Remove use of non-reentrant POSIX api calls
|
Remove use of non-reentrant POSIX api calls
|
||||||
* configure.in: Check for strtok_r getmntent_r getgrnam_r getpwuid_r
|
* configure.in: Check for strtok_r getmntent_r getgrnam_r getpwuid_r
|
||||||
|
|
|
@ -117,7 +117,7 @@ sc_prohibit_nonreentrant:
|
||||||
@fail=0 ; \
|
@fail=0 ; \
|
||||||
for i in $(NON_REENTRANT) ; \
|
for i in $(NON_REENTRANT) ; \
|
||||||
do \
|
do \
|
||||||
grep -nE "\<$$i\>[:space:]*\(" $$($(VC_LIST_EXCEPT)) && \
|
grep --before 2 --after 1 -nE "\<$$i\>[:space:]*\(" $$($(VC_LIST_EXCEPT)) && \
|
||||||
fail=1 && echo "$(ME): use $${i}_r, not $${i}" || : ; \
|
fail=1 && echo "$(ME): use $${i}_r, not $${i}" || : ; \
|
||||||
done ; \
|
done ; \
|
||||||
exit $$fail
|
exit $$fail
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#ifdef HAVE_SYS_WAIT_H
|
#ifdef HAVE_SYS_WAIT_H
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include <libxml/parser.h>
|
#include <libxml/parser.h>
|
||||||
#include <libxml/xpath.h>
|
#include <libxml/xpath.h>
|
||||||
|
@ -257,7 +258,8 @@ virInitialize(void)
|
||||||
initialized = 1;
|
initialized = 1;
|
||||||
|
|
||||||
if (virThreadInitialize() < 0 ||
|
if (virThreadInitialize() < 0 ||
|
||||||
virErrorInitialize() < 0)
|
virErrorInitialize() < 0 ||
|
||||||
|
virRandomInitialize(time(NULL) ^ getpid()))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#ifdef ENABLE_DEBUG
|
#ifdef ENABLE_DEBUG
|
||||||
|
@ -332,23 +334,19 @@ DllMain (HINSTANCE instance ATTRIBUTE_UNUSED,
|
||||||
{
|
{
|
||||||
switch (reason) {
|
switch (reason) {
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
fprintf(stderr, "Initializing DLL\n");
|
|
||||||
virInitialize();
|
virInitialize();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLL_THREAD_ATTACH:
|
case DLL_THREAD_ATTACH:
|
||||||
fprintf(stderr, "Thread start\n");
|
|
||||||
/* Nothing todo in libvirt yet */
|
/* Nothing todo in libvirt yet */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLL_THREAD_DETACH:
|
case DLL_THREAD_DETACH:
|
||||||
fprintf(stderr, "Thread exit\n");
|
|
||||||
/* Release per-thread local data */
|
/* Release per-thread local data */
|
||||||
virThreadOnExit();
|
virThreadOnExit();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
fprintf(stderr, "Process exit\n");
|
|
||||||
/* Don't bother releasing per-thread data
|
/* Don't bother releasing per-thread data
|
||||||
since (hopefully) windows cleans up
|
since (hopefully) windows cleans up
|
||||||
everything on process exit */
|
everything on process exit */
|
||||||
|
|
38
src/util.c
38
src/util.c
|
@ -32,6 +32,7 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
|
#include <time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
@ -59,6 +60,7 @@
|
||||||
#include "buf.h"
|
#include "buf.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "threads.h"
|
||||||
|
|
||||||
#ifndef NSIG
|
#ifndef NSIG
|
||||||
# define NSIG 32
|
# define NSIG 32
|
||||||
|
@ -1285,9 +1287,9 @@ void virGenerateMacAddr(const unsigned char *prefix,
|
||||||
addr[0] = prefix[0];
|
addr[0] = prefix[0];
|
||||||
addr[1] = prefix[1];
|
addr[1] = prefix[1];
|
||||||
addr[2] = prefix[2];
|
addr[2] = prefix[2];
|
||||||
addr[3] = (int)(256*(rand()/(RAND_MAX+1.0)));
|
addr[3] = virRandom(256);
|
||||||
addr[4] = (int)(256*(rand()/(RAND_MAX+1.0)));
|
addr[4] = virRandom(256);
|
||||||
addr[5] = (int)(256*(rand()/(RAND_MAX+1.0)));
|
addr[5] = virRandom(256);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1436,6 +1438,36 @@ int virKillProcess(pid_t pid, int sig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char randomState[128];
|
||||||
|
static struct random_data randomData;
|
||||||
|
static virMutex randomLock;
|
||||||
|
|
||||||
|
int virRandomInitialize(unsigned int seed)
|
||||||
|
{
|
||||||
|
if (virMutexInit(&randomLock) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (initstate_r(seed,
|
||||||
|
randomState,
|
||||||
|
sizeof(randomState),
|
||||||
|
&randomData) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int virRandom(int max)
|
||||||
|
{
|
||||||
|
int32_t ret;
|
||||||
|
|
||||||
|
virMutexLock(&randomLock);
|
||||||
|
random_r(&randomData, &ret);
|
||||||
|
virMutexUnlock(&randomLock);
|
||||||
|
|
||||||
|
return (int) ((double)max * ((double)ret / (double)RAND_MAX));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_GETPWUID_R
|
#ifdef HAVE_GETPWUID_R
|
||||||
char *virGetUserDirectory(virConnectPtr conn,
|
char *virGetUserDirectory(virConnectPtr conn,
|
||||||
uid_t uid)
|
uid_t uid)
|
||||||
|
|
|
@ -177,4 +177,7 @@ char *virGetUserDirectory(virConnectPtr conn,
|
||||||
uid_t uid);
|
uid_t uid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int virRandomInitialize(unsigned int seed);
|
||||||
|
int virRandom(int max);
|
||||||
|
|
||||||
#endif /* __VIR_UTIL_H__ */
|
#endif /* __VIR_UTIL_H__ */
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
|
|
||||||
#include "c-ctype.h"
|
#include "c-ctype.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#define qemudLog(level, msg...) fprintf(stderr, msg)
|
#define qemudLog(level, msg...) fprintf(stderr, msg)
|
||||||
|
|
||||||
|
@ -74,9 +75,8 @@ static int
|
||||||
virUUIDGeneratePseudoRandomBytes(unsigned char *buf,
|
virUUIDGeneratePseudoRandomBytes(unsigned char *buf,
|
||||||
int buflen)
|
int buflen)
|
||||||
{
|
{
|
||||||
srand(time(NULL));
|
|
||||||
while (buflen > 0) {
|
while (buflen > 0) {
|
||||||
*buf = (int) (255.0 * (rand() / (double) RAND_MAX));
|
*buf = virRandom(256);
|
||||||
buflen--;
|
buflen--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue