prof_int.h revision bfc032a14cc866ab7f34ca6fd86c240a5ebede9d
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara/* Solaris Kerberos */
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara * This is the structure which stores the profile information for a
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara * particular configuration file.
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * Locking strategy:
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * - filespec, fslen are fixed after creation
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * - refcount and next should only be tweaked with the global lock held
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara * - other fields can be tweaked after grabbing the in-struct lock
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara time_t timestamp; /* time tree was last updated from file */
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara unsigned long frac_ts; /* fractional part of timestamp, if any */
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara int upd_serial; /* incremented when data changes */
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara /* Some separation between fields controlled by different
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara mutexes. Theoretically, both could be accessed at the same
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara time from different threads on different CPUs with separate
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara caches. Don't let the threads clobber each other's
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara changes. One mutex controlling the whole thing would be
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara better, but sufficient separation might suffice.
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara This is icky. I just hope it's adequate.
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara For next major release, fix this. */
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara union { double d; void *p; UINT64_TYPE ll; k5_mutex_t m; } pad;
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara /* Was: "profile_filespec_t filespec". Now: flexible char
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara array ... except, we need to work in C89, so an array
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara length must be specified. */
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * The profile flags
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * This structure defines the high-level, user visible profile_t
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * object, which is used as a handle by users who need to query some
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * configuration file(s)
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergaratypedef struct _profile_options {
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergaratypedef struct _profile_times {
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * Solaris Kerberos: Added here to provide to other non-prof_get functions.
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * The profile_string_list structure is used for internal booking
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * purposes to build up the list, which is returned in *ret_list by
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * the end_list() function.
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara * Used by the profile iterator in prof_get.c
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara * Check if a filespec is last in a list (NULL on UNIX, invalid FSSpec on MacOS
11178d20048abeee671d0cdb2aab6dfbaa36293bjvergara#define PROFILE_LAST_FILESPEC(x) (((x) == NULL) || ((x)[0] == '\0'))
4cf0e2c1065147b79e7d6ffe59e517c38cbc6bdejvergara char **ret_name, struct profile_node **subsection);
char **ret_name);
(void **iter_p);
/* prof_file.c */
#define profile_flush_file(P) (((P) && (P)->magic == PROF_MAGIC_FILE) ? profile_flush_file_data((P)->data) : PROF_MAGIC_FILE)
#define profile_flush_file_to_file(P,F) (((P) && (P)->magic == PROF_MAGIC_FILE) ? profile_flush_file_data_to_file((P)->data, (F)) : PROF_MAGIC_FILE)
void profile_free_file
int profile_lock_global (void);
int profile_unlock_global (void);
/* prof_init.c -- included from profile.h */
/* prof_get.c */
const char **ret_value);
/* Others included from profile.h */
/* prof_set.c -- included from profile.h */