once.h revision 40f53fa8d9c6a4fc38c0014495e7a42b08f52481
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence/*
ca41b452ede6feaa9d8739ec3cae19389a7b0d03Bob Halley * Copyright (C) 1999, 2000 Internet Software Consortium.
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence *
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence * Permission to use, copy, modify, and distribute this software for any
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence * purpose with or without fee is hereby granted, provided that the above
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence * copyright notice and this permission notice appear in all copies.
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence *
15a44745412679c30a6d022733925af70a38b715David Lawrence * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
15a44745412679c30a6d022733925af70a38b715David Lawrence * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
15a44745412679c30a6d022733925af70a38b715David Lawrence * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
15a44745412679c30a6d022733925af70a38b715David Lawrence * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
15a44745412679c30a6d022733925af70a38b715David Lawrence * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
15a44745412679c30a6d022733925af70a38b715David Lawrence * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
15a44745412679c30a6d022733925af70a38b715David Lawrence * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
15a44745412679c30a6d022733925af70a38b715David Lawrence * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence */
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence/* $Id: once.h,v 1.5 2000/08/01 01:32:03 tale Exp $ */
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#ifndef ISC_ONCE_H
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#define ISC_ONCE_H 1
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#include <isc/lang.h>
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#include <isc/result.h>
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David LawrenceISC_LANG_BEGINDECLS
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrencetypedef struct {
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence int status;
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence int counter;
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence} isc_once_t;
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#define ISC_ONCE_INIT_NEEDED 0
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#define ISC_ONCE_INIT_DONE 1
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#define ISC_ONCE_INIT { ISC_ONCE_INIT_NEEDED, 1 }
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrenceisc_result_t
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrenceisc_once_do(isc_once_t *controller, void(*function)(void));
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David LawrenceISC_LANG_ENDDECLS
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence
cb73e2bfacb60eed27a3e4940f6dbe0c0580fc18David Lawrence#endif /* ISC_ONCE_H */