mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
b83ba93eae
This version does the following:
1) talloc_free(), talloc_realloc() and talloc_steal() lose their
(redundent) first arguments
2) you can use _any_ talloc pointer as a talloc context to allocate
more memory. This allows you to create complex data structures
where the top level structure is the logical parent of the next
level down, and those are the parents of the level below
that. Then destroy either the lot with a single talloc_free() or
destroy any sub-part with a talloc_free() of that part
3) you can name any pointer. Use talloc_named() which is just like
talloc() but takes the printf style name argument as well as the
parent context and the size.
The whole thing ends up being a very simple piece of code, although
some of the pointer walking gets hairy.
So far, I'm just using the new talloc() like the old one. The next
step is to actually take advantage of the new interface
properly. Expect some new commits soon that simplify some common
coding styles in samba4 by using the new talloc().
(This used to be commit e35bb094c5
)
63 lines
1.9 KiB
C
63 lines
1.9 KiB
C
/*
|
|
* Unix SMB/CIFS implementation.
|
|
* UUID server routines
|
|
* Copyright (C) Theodore Ts'o 1996, 1997,
|
|
* Copyright (C) Jim McDonough 2002.
|
|
* Copyright (C) Andrew Tridgell 2003.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#include "includes.h"
|
|
|
|
void uuid_generate_random(struct GUID *out)
|
|
{
|
|
generate_random_buffer((unsigned char *)out, sizeof(struct GUID));
|
|
out->clock_seq[0] = (out->clock_seq[0] & 0x3F) | 0x80;
|
|
out->time_hi_and_version = (out->time_hi_and_version & 0x0FFF) | 0x4000;
|
|
}
|
|
|
|
BOOL uuid_all_zero(const struct GUID *u)
|
|
{
|
|
if (u->time_low != 0 ||
|
|
u->time_mid != 0 ||
|
|
u->time_hi_and_version != 0 ||
|
|
u->clock_seq[0] != 0 ||
|
|
u->clock_seq[1] != 0 ||
|
|
!all_zero(u->node, 6)) {
|
|
return False;
|
|
}
|
|
return True;
|
|
}
|
|
|
|
BOOL uuid_equal(const struct GUID *u1, const struct GUID *u2)
|
|
{
|
|
if (u1->time_low != u2->time_low ||
|
|
u1->time_mid != u2->time_mid ||
|
|
u1->time_hi_and_version != u2->time_hi_and_version ||
|
|
u1->clock_seq[0] != u2->clock_seq[0] ||
|
|
u1->clock_seq[1] != u2->clock_seq[1] ||
|
|
memcmp(u1->node, u2->node, 6) != 0) {
|
|
return False;
|
|
}
|
|
return True;
|
|
}
|
|
|
|
BOOL policy_handle_empty(struct policy_handle *h)
|
|
{
|
|
return (h->handle_type == 0 && uuid_all_zero(&h->uuid));
|
|
}
|
|
|