ГОСТ Р ИСО/МЭК 9834-8—2011
format_uu»d_v1 (uuid, clockseq, timestamp, node);
return 1;
}
Г format_uuld_v1 -- создать УУИд из timestamp, clockseq
и node 4
void format_uuid_v1(uu»d_t’ uuld. unslgned16 clock_seq,
uuid_bme_t timestamp, uuld_node_t node)
{
/’ Построить УУИд версии 1 с уже собранной информацией
плюс некоторые постоянные. ’/
uuid->tlme_low = (unsigned long)(timestamp & OxFFFFFFFF);
uuid->tlme_mid = (unsigned short)((timestamp >> 32) & OxFFFF);
uuid->time_hi_and_verslon *
(unsigned short)((tlmestamp >> 48) & OxOFFF).
uuid->tlme_hl_and_verslon |= (1 << 12);
uuid->clock_seqJo\v = clock_seq 4 OxFF;
uuid->cJock_seq_hi_and_reserved = (ctock_seq & Ox3FOO)» 8;
uuld->ctock_seq_hi_and_reserved |» 0x80;
memcpy(4uuid->node. &node. sizeof uuid->node);
>
Г типданных для устойчивого состояния генератора УУИд */
typedef struct{
uuid_time_lts;Г сохраненный timestamp ’/
uuid_node_t node; Г сохраненный node */
unslgned16 cs;
/’ сохраненная временная
последовательность 7
}uuld_state;
static uuid_statest;
/* read_state - прочитать состояние генератора УУИд из
неизменяющейся памяти 7
intread_state(unsigned 16 ’clockseq. uuid_bme_t "timestamp.
uuid_node_t ’node)
{
static int inlted * 0;
FILE *fp;
/* состояние нужно читать только один раз за загрузку V
if (!lnited){
fp = fopenfstate’ , "rt>").
If(fp * NULL)
return 0.
fread(&st. sizeofst, 1. fp);
fclose(fp).
Inlted = 1;
)
•clockseq = st.cs;
•timestamp = st.ts;
’node = st.node;
return 1;
}
)’ write_state -- сохранить состояние генератора УУИд обратно в
неизменякмцуюся память 7
void wnte_state(unsigned16 clockseq. uuld_time_ttimestamp.
uuid_node_tnode)
{
static mt Inlted = 0;
static uuld_time_t next_save;
FILE* fp;
19