Tue, 10 Nov 2015 21:11:06 +0100
refactored IO system
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2013 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include "../config/acl.h" #include "../util/atomic.h" #include "config.h" #include "acldata.h" ACLData* acl_data_new() { ACLData *dat = malloc(sizeof(ACLData)); dat->ref = 1; dat->namedACLs = ucx_map_new(16); return dat; } void acl_data_ref(ACLData *acldata) { if(acldata) { ws_atomic_inc32(&acldata->ref); } } void acl_data_unref(ACLData *acldata) { uint32_t ref = ws_atomic_dec32(&acldata->ref); if(ref == 0) { UcxMapIterator i = ucx_map_iterator(acldata->namedACLs); WSAcl *acl; UCX_MAP_FOREACH(key, acl, i) { free(acl->ace); free(acl->ece); if(acl->acl.authprompt) { free(acl->acl.authprompt); } free(acl); } ucx_map_free(acldata->namedACLs); free(acldata); } } ACLList* acl_get(ACLData *acldata, char *name) { ACLList *acl = ucx_map_cstr_get(acldata->namedACLs, name); return acl; }