-
Notifications
You must be signed in to change notification settings - Fork 0
/
uuid.c
81 lines (71 loc) · 1.78 KB
/
uuid.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* This file is part of UEFI GPT fdisk.
*
* UEFI GPT fdisk is a port of GPT fdisk to UEFI/BIOS.
* UEFI GPT fdisk est un portage de GPT fdisk vers UEFI/BIOS.
* Ce fichier a été initié par Bernard Burette en janvier 2014.
*
* All this work is copyleft Bernard Burette.
* Gauche d'auteur Bernard Burette.
*
* This program is distributed under the terms of the GNU GPL version 2.
* La diffusion de ce code est faite selon les termes de la GPL GNU version 2.
*/
/**
*
* Fonction de génération de nombres aléatoires et de UUID.
*
*/
/* en premier */
#include "uefi.h"
#include "debug.h"
#include <efi.h>
#include <efilib.h>
#include <errno.h>
#include <stdlib.h>
#include <uuid/uuid.h>
/**
* Racine pour les nombres aléatoires.
*/
static uint32_t holdrand = 1 ;
/**
* Positionne la racine.
*/
void srand( seed )
unsigned int seed ;
{
UEFI_dprintf( D_INIT | D_DEBUG , "--> srand(%d)\n" , seed ) ;
/* store this seed */
holdrand = (uint32_t) seed ;
UEFI_dprintf( D_INIT | D_DEBUG , "<-- srand()\n" ) ;
}
/*
* Génère un nombre aléatoire.
*/
int rand()
{
/* return a pseudo-random in range 0-0x7fff */
return ( ( holdrand = holdrand * 214013L + 2531011L ) >> 16 )
& 0x7fff ;
}
/*
* Construit un UUID.
*/
void uuid_generate( out )
uuid_t out ;
{
size_t i ;
/* generates 128 random bits for new UUID */
for ( i = 0 ; i < 16 ; i ++ ) {
int v ;
/* if we didn't knew max rand() value and since the most
random bits are the most significant we would do
v=(int)(256.0f*((float)rand()/(RAND_MAX+1.0f)));
but here it is simpler beacuse RAND_MAX == 0x7fff */
v = rand() >> 7 ;
out[ i ] = (unsigned char) v ;
}
/* set variant 10x and version 4 as required by RFC 4122 */
out[ 8 ] = 0x80 | ( out[ 8 ] & 0x3f ) ;
out[ 6 ] = 0x40 | ( out[ 6 ] & 0xf ) ;
}