open-src/lib/libowconfig/sun-src/OWconfig.c
author X gate hg captive account <xhg@xserver.us.oracle.com>
Wed, 19 Aug 2015 13:48:41 -0700
changeset 1484 bc8922b8e1d2
parent 943 294f64612d23
permissions -rw-r--r--
Added tag s11u3_30 for changeset 221e9d9cc9cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
824
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
     1
/*
943
294f64612d23 6948254 Mass update of X gate sources to Oracle copyright format
Alan Coopersmith <Alan.Coopersmith@Oracle.COM>
parents: 919
diff changeset
     2
 * Copyright (c) 1993, 1996, Oracle and/or its affiliates. All rights reserved.
824
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
     3
 *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
     4
 * Permission is hereby granted, free of charge, to any person obtaining a
919
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
     5
 * copy of this software and associated documentation files (the "Software"),
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
     6
 * to deal in the Software without restriction, including without limitation
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
     7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
     8
 * and/or sell copies of the Software, and to permit persons to whom the
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
     9
 * Software is furnished to do so, subject to the following conditions:
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    10
 *
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    11
 * The above copyright notice and this permission notice (including the next
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    12
 * paragraph) shall be included in all copies or substantial portions of the
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    13
 * Software.
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    14
 *
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
425233ae7236 6931307 Standardize Sun copyright & license notices in X gate on current format
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents: 907
diff changeset
    21
 * DEALINGS IN THE SOFTWARE.
824
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    22
 */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    23
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    24
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    25
#include <stdio.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    26
#include <stdlib.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    27
#include <sys/types.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    28
#include <sys/stat.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    29
#include <fcntl.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    30
#include <ctype.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    31
#include <unistd.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    32
#include <string.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    33
#include <errno.h>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    34
#include "Sunowconfig.h"
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    35
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    36
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    37
Implementation Note:  This implementation was done with some generality
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    38
	in mind.  If at some point it becomes necessary to add more
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    39
	elaborate per class or per instance data, this should be
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    40
	readily accommodated by this implementation.  
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    41
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    42
		It is assumed that the configuration database is relatively 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    43
	small, say, fewer than 1000 entries.  There's no hard limit, but 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    44
	there's no optimization either.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    45
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    46
		The "package" mechanism is hokey.  It was done to
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    47
	address the concern that nobody wanted package names specified
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    48
	on a per instance basis, but there needed to be some mechanism
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    49
	that identified an instance as belonging to a package.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    50
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    51
		The previous implementation mentioned that it was not
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    52
	MTsafe or MThot.  The same applies to this implementation.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    53
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    54
		Error handling is very primitive.  If a more sophisticated
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    55
	means of reporting and acting upon error conditions can be
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    56
	developed..., great.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    57
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    58
		It would be nice if we could use alloca, but since this
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    59
	is also an Xsun server library, we can't.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    60
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    61
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    62
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    63
	OWconfig implementation private data structures...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    64
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    65
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    66
struct databaseStruct {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    67
	int dummy;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    68
};
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    69
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    70
struct classStruct {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    71
	int dummy;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    72
};
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    73
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    74
struct instanceStruct {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    75
	char *pkg;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    76
	int lineNumber;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    77
	struct nodeStruct *nextInstance, *prevInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    78
};
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    79
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    80
struct attrStruct {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    81
	char *value;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    82
};
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    83
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    84
/*
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    85
 *  A class list is a child of the database.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    86
 *  An instance list is a child of a class.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    87
 *  An attribute list is a child of an instance.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    88
 */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    89
struct nodeStruct {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    90
	char *name;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    91
	unsigned int hashValue;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    92
	struct nodeStruct *next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    93
	struct nodeStruct *prev;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    94
	struct nodeStruct *parent;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    95
	struct nodeStruct *head;	/* One end of the child list... */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    96
	struct nodeStruct *tail;	/* The other end... */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    97
	void (*nodeFree)();
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    98
	union {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
    99
		struct databaseStruct database;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   100
		struct classStruct class;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   101
		struct instanceStruct instance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   102
		struct attrStruct attr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   103
	} nodeValue;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   104
};
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   105
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   106
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   107
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   108
/*
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   109
 *  Store comments as a singly linked list...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   110
 */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   111
struct commentStruct {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   112
	char *comment;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   113
	int lineNumber;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   114
	struct commentStruct *next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   115
};
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   116
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   117
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   118
/*** Max pathname length... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   119
#define FNLENGTH 300
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   120
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   121
/*** Unit of allocation for input line buffer... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   122
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   123
#define LINEALLOCUNIT 128
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   124
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   125
/*** Max length of statically allocated strings... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   126
#define MAXVALLENGTH 128
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   127
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   128
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   129
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   130
Data Declarations...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   131
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   132
static struct nodeStruct OWconfigDatabase;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   133
static int databaseValid = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   134
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   135
static char currentPackage[MAXVALLENGTH];
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   136
static char *defaultNewPkgName="RESERVED-unassigned";
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   137
static char *defaultOldPkgName="RESERVED-oldstyle";
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   138
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   139
/*** If ever there are multiple databases, this could be moved into
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   140
     a database nodeStruct.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   141
***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   142
static char *readFile1 = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   143
static char *readFile2 = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   144
static int OWconfigFlags = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   145
static void *(*allocMem)();
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   146
static void (*freeMem)();
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   147
static time_t readFile1TimeStamp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   148
static time_t readFile2TimeStamp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   149
static struct commentStruct *commentList = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   150
static struct commentStruct *lastComment = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   151
static struct nodeStruct *instanceListHead = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   152
static struct nodeStruct *instanceListTail = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   153
static int lineNumber;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   154
static int lastLineNumber;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   155
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   156
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   157
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   158
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   159
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   160
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   161
****************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   162
Implementation private functions...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   163
****************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   164
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   165
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   166
#define FREENODE(np) \
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   167
	if (np->parent->head == np)\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   168
		np->parent->head = np->next;\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   169
	if (np->parent->tail == np)\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   170
		np->parent->tail = np->prev;\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   171
	if (np->next)\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   172
		np->next->prev = np->prev;\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   173
	if (np->prev)\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   174
		np->prev->next = np->next;\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   175
	freeMem(np->name);\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   176
	freeMem((char *)np);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   177
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   178
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   179
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   180
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   181
freeNodeList:  The generic node list destructor...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   182
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   183
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   184
freeNodeList(struct nodeStruct *np)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   185
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   186
	struct nodeStruct *next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   187
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   188
	while (np) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   189
		if (np->head)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   190
			freeNodeList(np->head);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   191
		next = np->next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   192
		if (np->nodeFree)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   193
			np->nodeFree(np);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   194
		np = next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   195
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   196
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   197
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   198
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   199
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   200
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   201
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   202
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   203
freeClass:  The class node destructor...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   204
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   205
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   206
freeClass(struct nodeStruct *cp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   207
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   208
	if (cp->head)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   209
		freeNodeList(cp->head);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   210
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   211
	FREENODE(cp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   212
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   213
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   214
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   215
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   216
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   217
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   218
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   219
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   220
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   221
freeInstance:  The instance node destructor...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   222
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   223
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   224
freeInstance(struct nodeStruct *ip)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   225
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   226
	char *tmp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   227
	struct nodeStruct *nextInstance, *prevInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   228
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   229
	if (ip->head)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   230
		freeNodeList(ip->head);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   231
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   232
	tmp = ip->nodeValue.instance.pkg;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   233
	if (tmp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   234
		freeMem(tmp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   235
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   236
	if (OWconfigFlags & OWFLAG_RETAIN) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   237
		nextInstance = ip->nodeValue.instance.nextInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   238
		prevInstance = ip->nodeValue.instance.prevInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   239
		if (nextInstance)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   240
			nextInstance->nodeValue.instance.prevInstance = 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   241
				prevInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   242
		if (prevInstance)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   243
			prevInstance->nodeValue.instance.nextInstance = 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   244
				nextInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   245
		if (instanceListHead == ip)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   246
			instanceListHead = nextInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   247
		if (instanceListTail == ip)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   248
			instanceListTail = prevInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   249
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   250
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   251
	FREENODE(ip);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   252
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   253
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   254
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   255
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   256
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   257
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   258
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   259
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   260
freeAttr:  The attribute node destructor...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   261
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   262
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   263
freeAttr(struct nodeStruct *ap)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   264
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   265
	char *value;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   266
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   267
	value = ap->nodeValue.attr.value;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   268
	if (value)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   269
		freeMem(value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   270
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   271
	FREENODE(ap);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   272
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   273
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   274
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   275
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   276
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   277
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   278
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   279
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   280
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   281
hashValue:  Generates the arithmetic sum of the bytes of the string 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   282
	specified by "str".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   283
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   284
static unsigned int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   285
hashValue(char *str)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   286
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   287
        unsigned int ret = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   288
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   289
	while (*str) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   290
                ret += (unsigned int)*str;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   291
		str++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   292
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   293
 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   294
        return(ret);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   295
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   296
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   297
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   298
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   299
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   300
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   301
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   302
dupString:  Given a non-null pointer to a string, allocates memory
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   303
	sufficient to contain a copy of the string pointed to by
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   304
	"str", copies the string to the newly allocated memory, and
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   305
	returns a pointer to the new string.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   306
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   307
static char *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   308
dupString(char *str)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   309
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   310
	int len;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   311
	char *ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   312
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   313
	if (str) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   314
		len = strlen(str) + 1;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   315
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   316
		ptr = (char *)allocMem(len);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   317
		if (ptr)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   318
			(void)memcpy(ptr, str, len);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   319
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   320
		return(ptr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   321
	} else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   322
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   323
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   324
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   325
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   326
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   327
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   328
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   329
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   330
searchNodeList:  Searches next-wise along a list, starting at the node
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   331
	pointed to by "node", until either the end of the list is
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   332
	found, or a node whose name matches the string pointed to by
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   333
	"name".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   334
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   335
static struct nodeStruct *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   336
searchNodeList(struct nodeStruct *node, char *name)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   337
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   338
	unsigned int nameHash;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   339
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   340
	nameHash = hashValue(name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   341
	while (node) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   342
		if ((nameHash == node->hashValue) && !strcmp(name, node->name))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   343
			break;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   344
		node = node->next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   345
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   346
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   347
	return(node);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   348
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   349
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   350
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   351
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   352
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   353
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   354
searchClass:  Searches for the class node whose name matches the string
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   355
	pointed to by "class".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   356
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   357
static struct nodeStruct *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   358
searchClass(char *class)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   359
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   360
	if (OWconfigDatabase.head)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   361
		return(searchNodeList(OWconfigDatabase.head, class));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   362
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   363
	return((struct nodeStruct *)NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   364
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   365
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   366
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   367
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   368
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   369
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   370
searchInstance:  Searches for the instance node identified by "name",
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   371
	parented by the class node identified by "class".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   372
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   373
static struct nodeStruct *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   374
searchInstance(char *class, char *name)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   375
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   376
	struct nodeStruct *cp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   377
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   378
	cp = searchClass(class);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   379
	if (cp && cp->head) 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   380
		return(searchNodeList(cp->head, name));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   381
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   382
	return((struct nodeStruct *)NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   383
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   384
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   385
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   386
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   387
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   388
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   389
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   390
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   391
searchAttr:  Searches for the attribute node identified by "attr",
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   392
	parented by the instance node identified by "name",
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   393
	which in turn is parented by the class node identified by "class".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   394
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   395
static struct nodeStruct *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   396
searchAttr(char *class, char *name, char *attr)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   397
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   398
	struct nodeStruct *instanceNode;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   399
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   400
	instanceNode = searchInstance(class, name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   401
	if (instanceNode && instanceNode->head) 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   402
		return(searchNodeList(instanceNode->head, attr));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   403
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   404
	return((struct nodeStruct *)NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   405
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   406
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   407
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   408
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   409
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   410
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   411
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   412
createClass:  Creates a new class node within the OWconfig database.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   413
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   414
static struct nodeStruct *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   415
createClass(char *class)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   416
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   417
	struct nodeStruct *cp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   418
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   419
	cp = (struct nodeStruct *)allocMem(sizeof(struct nodeStruct));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   420
	if (!cp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   421
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   422
	cp->name = dupString(class);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   423
	if (!cp->name) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   424
		freeMem(cp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   425
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   426
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   427
	cp->hashValue = hashValue(class);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   428
	cp->parent = &OWconfigDatabase;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   429
	cp->head = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   430
	cp->tail = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   431
	cp->nodeFree = freeClass;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   432
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   433
	if (!OWconfigDatabase.head) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   434
		OWconfigDatabase.head = cp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   435
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   436
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   437
	cp->prev = OWconfigDatabase.tail;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   438
	cp->next = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   439
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   440
	if (OWconfigDatabase.tail)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   441
		OWconfigDatabase.tail->next = cp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   442
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   443
	OWconfigDatabase.tail = cp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   444
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   445
	return(cp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   446
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   447
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   448
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   449
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   450
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   451
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   452
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   453
createInstance:  Creates a new instance node parented by the class node
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   454
	identified by "class".  The instance node will be identified
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   455
	by "name".  If the class node does not already exist, it will
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   456
	be created.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   457
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   458
static struct nodeStruct *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   459
createInstance(char *class, char *name)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   460
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   461
	struct nodeStruct *cp, *ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   462
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   463
	cp = searchClass(class);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   464
	if (!cp) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   465
		cp = createClass(class);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   466
		if (!cp) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   467
			return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   468
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   469
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   470
	ip = (struct nodeStruct *)allocMem(sizeof(struct nodeStruct));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   471
	if (!ip)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   472
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   473
	ip->name = dupString(name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   474
	if (!ip->name) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   475
		freeMem(ip);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   476
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   477
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   478
	ip->hashValue = hashValue(name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   479
	ip->parent = cp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   480
	ip->head = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   481
	ip->tail = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   482
	ip->nodeFree = freeInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   483
	ip->nodeValue.instance.pkg = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   484
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   485
	if (OWconfigFlags & OWFLAG_RETAIN) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   486
		if (instanceListTail) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   487
			if (instanceListTail->nodeValue.instance.lineNumber ==
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   488
			    lineNumber)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   489
				lineNumber++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   490
			ip->nodeValue.instance.lineNumber = lineNumber;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   491
			ip->nodeValue.instance.nextInstance = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   492
			ip->nodeValue.instance.prevInstance = instanceListTail;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   493
			instanceListTail->nodeValue.instance.nextInstance = ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   494
			instanceListTail = ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   495
		} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   496
			instanceListHead = instanceListTail = ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   497
			ip->nodeValue.instance.lineNumber = lineNumber;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   498
			ip->nodeValue.instance.nextInstance = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   499
			ip->nodeValue.instance.prevInstance = NULL;;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   500
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   501
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   502
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   503
	if (!cp->head) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   504
		cp->head = ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   505
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   506
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   507
	ip->prev = cp->tail;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   508
	ip->next = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   509
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   510
	if (cp->tail)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   511
		cp->tail->next = ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   512
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   513
	cp->tail = ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   514
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   515
	return(ip);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   516
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   517
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   518
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   519
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   520
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   521
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   522
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   523
unlockOWconfig:  Remove the read or write lock from an OWconfig file.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   524
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   525
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   526
unlockOWconfig(int f)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   527
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   528
/* 4007038
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   529
Remvoe any read/write locking/unlocking.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   530
	flock_t lockStruct;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   531
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   532
	lockStruct.l_type = F_UNLCK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   533
	lockStruct.l_whence = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   534
	lockStruct.l_start = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   535
	lockStruct.l_len = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   536
	(void)fcntl(f, F_SETLK, &lockStruct);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   537
*/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   538
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   539
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   540
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   541
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   542
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   543
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   544
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   545
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   546
readLockOWconfig:  Place a read lock on an OWconfig file.  Should only
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   547
	fail if the file is write locked.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   548
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   549
static int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   550
readLockOWconfig(int f)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   551
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   552
/* 4007038
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   553
Do not do any read locking.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   554
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   555
	int result;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   556
	flock_t lockStruct;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   557
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   558
	lockStruct.l_type = F_RDLCK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   559
	lockStruct.l_whence = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   560
	lockStruct.l_start = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   561
	lockStruct.l_len = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   562
	result = fcntl(f, F_SETLK, &lockStruct);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   563
	if (result != -1)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   564
		return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   565
	else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   566
		return(OWCFG_LOCK1FAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   567
*/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   568
	return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   569
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   570
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   571
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   572
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   573
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   574
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   575
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   576
writeLockOWconfig:  Place a write lock on an OWconfig file.  Will fail
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   577
	if any other locks, read or write, are already on the file.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   578
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   579
static int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   580
writeLockOWconfig(int f)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   581
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   582
/* 4007038
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   583
Do not do any write locking.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   584
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   585
	int result;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   586
	flock_t lockStruct;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   587
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   588
	lockStruct.l_type = F_WRLCK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   589
	lockStruct.l_whence = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   590
	lockStruct.l_start = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   591
	lockStruct.l_len = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   592
	result = fcntl(f, F_SETLK, &lockStruct);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   593
	if (result != -1)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   594
		return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   595
	else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   596
		return(OWCFG_LOCK1FAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   597
*/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   598
	return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   599
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   600
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   601
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   602
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   603
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   604
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   605
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   606
accumulateComment:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   607
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   608
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   609
accumulateComment(char *comment, int lineNumber)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   610
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   611
	int len;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   612
	struct commentStruct *newComment;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   613
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   614
	len = strlen(comment);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   615
	if (len == 0)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   616
		return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   617
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   618
	if (*comment =='\n')
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   619
		return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   620
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   621
	newComment = (struct commentStruct *)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   622
		     allocMem(len + 1 + sizeof(struct commentStruct));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   623
	newComment->comment = (char *)newComment + 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   624
			      sizeof(struct commentStruct);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   625
	strcpy(newComment->comment, comment);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   626
	newComment->lineNumber = lineNumber;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   627
	newComment->next = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   628
	if (lastComment != NULL) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   629
		lastComment->next = newComment;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   630
		lastComment = newComment;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   631
	} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   632
		commentList = lastComment = newComment;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   633
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   634
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   635
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   636
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   637
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   638
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   639
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   640
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   641
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   642
freeComments:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   643
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   644
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   645
freeComments(void)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   646
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   647
	struct commentStruct *commentP = commentList;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   648
	struct commentStruct *next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   649
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   650
	while (commentP) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   651
		next = commentP->next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   652
		freeMem(commentP);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   653
		commentP = next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   654
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   655
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   656
	commentList = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   657
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   658
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   659
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   660
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   661
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   662
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   663
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   664
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   665
initDatabase:  If a database already exists, free it, and set the 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   666
	OWconfigDatabase structure to a known state.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   667
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   668
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   669
initDatabase(void)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   670
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   671
	if (databaseValid) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   672
		freeNodeList(OWconfigDatabase.head);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   673
		freeMem(readFile1);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   674
		readFile1 = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   675
		freeMem(readFile2);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   676
		readFile2 = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   677
		freeComments();
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   678
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   679
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   680
	databaseValid = 1;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   681
	OWconfigDatabase.head = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   682
	OWconfigDatabase.tail = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   683
	OWconfigDatabase.next = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   684
	OWconfigDatabase.prev = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   685
	OWconfigDatabase.nodeFree = (void (*)())0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   686
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   687
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   688
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   689
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   690
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   691
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   692
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   693
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   694
reAllocMem:  Because we don't really want to add another parameter to
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   695
	OWconfigInit..., we implement a realloc routine that uses
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   696
	the allocMem and freeMem routines specified by OWconfigInit.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   697
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   698
static char *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   699
reAllocMem(char *ptr, unsigned int oldSize, unsigned int newSize)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   700
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   701
	char *newPtr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   702
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   703
	if (newSize <= oldSize)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   704
		return(ptr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   705
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   706
	newPtr = allocMem(newSize);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   707
	if (newPtr) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   708
		memcpy(newPtr, ptr, oldSize);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   709
		freeMem(ptr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   710
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   711
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   712
	return(newPtr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   713
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   714
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   715
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   716
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   717
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   718
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   719
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   720
readLine:  Read the file, line by line, until an "interesting" line
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   721
	is encountered.  Maintain a line number counter along the
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   722
	way.  When a line is found, fill "lineBuf" with the data.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   723
	It is the responsibility of the caller to free the dynamically
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   724
	allocated line buffer.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   725
Note:  Need to find proper way to use ctype functions...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   726
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   727
static int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   728
readLine(FILE *fp, char **lineBuf, int *lineNumber)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   729
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   730
	char *result;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   731
	int lineBufSize = LINEALLOCUNIT+1;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   732
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   733
	(*lineNumber)++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   734
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   735
	*lineBuf = (char *)allocMem(lineBufSize);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   736
	if (!*lineBuf)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   737
		return(EOF);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   738
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   739
	result = fgets(*lineBuf, LINEALLOCUNIT, fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   740
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   741
	if (result) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   742
		int bufLen = strlen(result);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   743
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   744
		while (result[bufLen-1] != 0xa) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   745
		    char *newBuf;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   746
		    int newBufSize;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   747
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   748
		    newBufSize = lineBufSize + LINEALLOCUNIT;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   749
		    newBuf = reAllocMem(*lineBuf, lineBufSize, newBufSize);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   750
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   751
		    if (!newBuf) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   752
			freeMem(*lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   753
			*lineBuf = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   754
			return(EOF);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   755
		    }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   756
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   757
		    *lineBuf = newBuf;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   758
		    lineBufSize = newBufSize;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   759
		    result = fgets((newBuf)+bufLen, 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   760
				   LINEALLOCUNIT, fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   761
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   762
		    if (!result) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   763
			freeMem(*lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   764
			*lineBuf = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   765
			return(EOF);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   766
		    }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   767
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   768
		    bufLen = strlen(newBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   769
		    result = newBuf;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   770
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   771
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   772
		while (isspace(*result) && *result != '#' && *result)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   773
			result++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   774
		if (*result == '#' || *result == (char)0) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   775
			if (OWconfigFlags & OWFLAG_RETAIN) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   776
				accumulateComment(*lineBuf, *lineNumber);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   777
			}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   778
			freeMem(*lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   779
			return(readLine(fp, lineBuf, lineNumber));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   780
		} else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   781
			return(1);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   782
	} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   783
		return(EOF);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   784
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   785
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   786
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   787
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   788
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   789
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   790
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   791
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   792
readPair:  Starting at character position "charPos" in "lineBuf",
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   793
	search for an expression of appx. the following syntax:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   794
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   795
	<alnum>{<whitespace>}<equal>{<whitespace>}\
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   796
		(<quote><anything goes, even \ stuff><quote>) | \
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   797
		<alnum>
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   798
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   799
	If such an expression is found, "nameBuf" is filled with the
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   800
	value to the left of the = and "valBuf" is filled with the
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   801
	value to the right of the =.  "charPos" will be updated to
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   802
	point at the next candidate expression.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   803
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   804
static int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   805
readPair(char *lineBuf, char *nameBuf, char *valBuf, int *charPos)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   806
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   807
	char *ptr = lineBuf + *charPos;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   808
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   809
	/*** Skip whitespace preceding name... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   810
	while (*ptr && isspace(*ptr)) 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   811
		ptr++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   812
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   813
	if ((!isalnum(*ptr)) || *ptr == (char)0 || *ptr == ';') {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   814
		*charPos = (int)(ptr - lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   815
		if (*ptr == (char)0 || *ptr == ';')
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   816
			return(!OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   817
		else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   818
			return(OWCFG_SYNTAX1);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   819
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   820
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   821
	/*** Get name... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   822
	while (*ptr && isalnum(*ptr)) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   823
		*nameBuf = *ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   824
		nameBuf++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   825
		ptr++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   826
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   827
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   828
	*nameBuf = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   829
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   830
	/*** Skip "=" and whitespace preceding open quote or string...***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   831
	while (*ptr && (*ptr=='=' || isspace(*ptr)))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   832
		ptr++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   833
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   834
	if (*ptr == (char)0) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   835
		*charPos = (int)(ptr - lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   836
		return(OWCFG_SYNTAX1);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   837
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   838
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   839
	if (*ptr == '"') {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   840
		/*** Fetch quote delimited string... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   841
		ptr++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   842
		while (*ptr && *ptr != '"') {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   843
		  if (*ptr == '\\') {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   844
		    if (!*(++ptr))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   845
		      break;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   846
		  }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   847
		  *valBuf = *ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   848
		  valBuf++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   849
		  ptr++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   850
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   851
	} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   852
		/*** Fetch white space terminated string... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   853
		while (*ptr && (*ptr != ';') && (!isspace(*ptr))) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   854
		  if (*ptr == '\\') {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   855
		    if (!*(++ptr))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   856
		      break;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   857
		  }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   858
		  *valBuf = *ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   859
		  valBuf++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   860
		  ptr++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   861
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   862
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   863
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   864
	*valBuf = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   865
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   866
	/*** Skip past terminating character, if any. ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   867
	if (*ptr)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   868
		ptr++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   869
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   870
	*charPos = (int)(ptr - lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   871
	return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   872
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   873
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   874
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   875
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   876
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   877
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   878
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   879
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   880
readOWconfig:  Read the OWconfig database file named by "fileName".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   881
	The internal database is built and the file's last modified time
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   882
	is returned in "timeStamp".  If anything goes wrong, it is
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   883
	the caller's responsibility to clean up the database.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   884
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   885
static int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   886
readOWconfig(char *fileName, time_t *timeStamp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   887
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   888
	char *lineBuf = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   889
	char nameBuf[MAXVALLENGTH];
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   890
	char *valBuf = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   891
	char classVal[MAXVALLENGTH];
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   892
	char nameVal[MAXVALLENGTH];
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   893
	char pkgVal[MAXVALLENGTH];
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   894
	int skipping = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   895
	FILE *fp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   896
	struct stat statbuf;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   897
	int result;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   898
	int syntaxResult = OWCFG_OK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   899
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   900
	fp = fopen(fileName, "r");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   901
	if (!fp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   902
		return(OWCFG_OPEN1FAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   903
	if (readLockOWconfig(fileno(fp)) != OWCFG_OK) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   904
		(void)fclose(fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   905
		return(OWCFG_LOCK1FAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   906
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   907
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   908
	classVal[0] = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   909
	nameVal[0] = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   910
	pkgVal[0] = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   911
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   912
	strcpy(currentPackage, defaultOldPkgName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   913
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   914
	while (readLine(fp, &lineBuf, &lineNumber) != EOF) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   915
		int charPos;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   916
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   917
		valBuf = allocMem(strlen(lineBuf)+1);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   918
		if (!valBuf) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   919
			freeMem(lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   920
			unlockOWconfig(fileno(fp));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   921
			fclose(fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   922
			return(OWCFG_ALLOC);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   923
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   924
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   925
		charPos = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   926
		while ((result = readPair(lineBuf, nameBuf, valBuf, 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   927
					      &charPos)) == OWCFG_OK) 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   928
		{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   929
		  /*** class=<value> ??? ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   930
		  if (!strcmp(nameBuf, "class")) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   931
		    (void)strcpy(classVal, valBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   932
		    skipping = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   933
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   934
		  /*** name=<value> ??? ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   935
		  } else if (!strcmp(nameBuf, "name")) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   936
		    (void)strcpy(nameVal, valBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   937
		    skipping = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   938
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   939
		  /*** package=<value> ??? ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   940
		  } else if (!strcmp(nameBuf, "package")) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   941
		    (void)strcpy(currentPackage, valBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   942
		    skipping = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   943
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   944
		  /*** <attr>=<value> ??? ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   945
		  } else if (*classVal != (char)0 && *nameVal != (char)0) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   946
		    result = OWconfigSetAttribute(classVal, nameVal,
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   947
		                                  nameBuf, valBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   948
		    if (result != OWCFG_OK) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   949
		      unlockOWconfig(fileno(fp));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   950
		      (void)fclose(fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   951
		      if (lineBuf)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   952
		        freeMem(lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   953
		      if (valBuf)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   954
			freeMem(valBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   955
		      return(result);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   956
		    }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   957
		    skipping = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   958
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   959
		  /*** BLAMMO (TM)... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   960
		  } else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   961
		    if (!skipping) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   962
		      (void)fprintf(stderr,"%s\n",lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   963
		      (void)fprintf(stderr,"^^^ Bad class instance, line %d, ^^^\n", lineNumber-lastLineNumber);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   964
		      (void)fprintf(stderr,"    in file %s.\n", fileName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   965
		      skipping = 1;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   966
		    }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   967
		    classVal[0] = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   968
		    nameVal[0] = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   969
		  }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   970
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   971
		} /* while readPair... */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   972
		
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   973
		if (result == OWCFG_SYNTAX1)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   974
			syntaxResult = result;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   975
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   976
		if (lineBuf[charPos] == ';') {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   977
			classVal[0] = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   978
			nameVal[0] = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   979
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   980
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   981
		if (lineBuf) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   982
			freeMem(lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   983
			lineBuf = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   984
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   985
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   986
		if (valBuf) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   987
			freeMem(valBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   988
			valBuf = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   989
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   990
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   991
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   992
	} /* while readLine... */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   993
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   994
	if (lineBuf)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   995
		freeMem(lineBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   996
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   997
	if (valBuf)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   998
		freeMem(valBuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
   999
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1000
	(void)fstat(fileno(fp), &statbuf);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1001
	*timeStamp = statbuf.st_mtime;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1002
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1003
	unlockOWconfig(fileno(fp));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1004
	(void)fclose(fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1005
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1006
	return(syntaxResult);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1007
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1008
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1009
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1010
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1011
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1012
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1013
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1014
writeString:  Writes to "fp" a quoted string specified by "str".  Does
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1015
	the necessary \ stuff.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1016
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1017
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1018
writeString(FILE *fp, char *str)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1019
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1020
	if (str) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1021
		(void)fputc('"', fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1022
		while (*str) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1023
			if (*str == '\\' || *str == '"')
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1024
				(void)fputc('\\', fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1025
			(void)fputc(*str, fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1026
			str++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1027
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1028
		(void)fputc('"', fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1029
	} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1030
		(void)fprintf(fp, "\"\"");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1031
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1032
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1033
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1034
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1035
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1036
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1037
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1038
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1039
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1040
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1041
writeDatabase:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1042
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1043
static void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1044
writeDatabase(FILE *fp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1045
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1046
	struct nodeStruct *cp, *ip, *ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1047
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1048
	/*** Need to do something about Copyright notices... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1049
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1050
	currentPackage[0] = (char)0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1051
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1052
	if (OWconfigFlags && OWFLAG_RETAIN) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1053
	    struct commentStruct *commentP = commentList;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1054
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1055
	    ip = instanceListHead;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1056
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1057
	    /*** Write database in something resembling
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1058
		 original source order...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1059
	    ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1060
	    while (ip) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1061
	        char *pkg = ip->nodeValue.instance.pkg;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1062
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1063
		cp = ip->parent;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1064
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1065
		while (commentP && (commentP->lineNumber <
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1066
		       ip->nodeValue.instance.lineNumber))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1067
		{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1068
		    (void)fprintf(fp, "%s", commentP->comment);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1069
		    commentP = commentP->next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1070
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1071
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1072
	        /*** Start new package? ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1073
	        if (strcmp(currentPackage, pkg)) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1074
	          (void)strcpy(currentPackage, pkg);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1075
	          (void)fprintf(fp, "\npackage=");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1076
	          writeString(fp, currentPackage);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1077
	          (void)fprintf(fp, "\n\n");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1078
	        }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1079
	        (void)fprintf(fp, "class=");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1080
	        writeString(fp, cp->name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1081
	        (void)fprintf(fp, " ");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1082
	        (void)fprintf(fp, "name=");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1083
	        writeString(fp, ip->name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1084
	        (void)fprintf(fp, "\n");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1085
	        for (ap = ip->head;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1086
	             ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1087
	             ap = ap->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1088
	        {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1089
	          (void)fprintf(fp, "    %s=", ap->name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1090
	          writeString(fp, ap->nodeValue.attr.value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1091
	          if (ap->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1092
	            (void)fprintf(fp, "\n");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1093
	          else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1094
	            (void)fprintf(fp, ";\n");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1095
	        }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1096
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1097
		ip = ip->nodeValue.instance.nextInstance;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1098
	    }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1099
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1100
	    while (commentP) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1101
		(void)fprintf(fp, "%s", commentP->comment);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1102
		commentP = commentP->next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1103
	    }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1104
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1105
	} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1106
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1107
	    /*** Write database, class by class... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1108
	    for (cp = OWconfigDatabase.head;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1109
	         cp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1110
	         cp = cp->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1111
	    {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1112
	      for (ip = cp->head;	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1113
	           ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1114
	           ip = ip->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1115
	      {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1116
	        char *pkg = ip->nodeValue.instance.pkg;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1117
    
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1118
	        /*** Start new package? ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1119
	        if (strcmp(currentPackage, pkg)) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1120
	          (void)strcpy(currentPackage, pkg);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1121
	          (void)fprintf(fp, "package=");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1122
	          writeString(fp, currentPackage);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1123
	          (void)fprintf(fp, "\n\n");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1124
	        }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1125
	        (void)fprintf(fp, "class=");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1126
	        writeString(fp, cp->name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1127
	        (void)fprintf(fp, " ");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1128
	        (void)fprintf(fp, "name=");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1129
	        writeString(fp, ip->name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1130
	        (void)fprintf(fp, "\n");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1131
	        for (ap = ip->head;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1132
	             ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1133
	             ap = ap->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1134
	        {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1135
	          (void)fprintf(fp, "    %s=", ap->name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1136
	          writeString(fp, ap->nodeValue.attr.value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1137
	          if (ap->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1138
	            (void)fprintf(fp, "\n");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1139
	          else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1140
	            (void)fprintf(fp, ";\n");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1141
	        }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1142
	      } /* for */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1143
	    } /* for */
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1144
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1145
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1146
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1147
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1148
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1149
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1150
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1151
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1152
writeOWconfig:  Writes the internal database, in OWconfig syntax, to
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1153
	the file specified by fileName.  As a precaution, the original
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1154
	file is preserved, renamed as <filename>.BAK.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1155
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1156
Note:  I'm concerned that a more sophisticated locking mechanism might be
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1157
more trouble prone than this one.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1158
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1159
static int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1160
writeOWconfig(char *fileName)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1161
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1162
	FILE *fp;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1163
	char tmpFileName[FNLENGTH];
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1164
	char bakFileName[FNLENGTH];
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1165
	char pidString[FNLENGTH];
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1166
	int f;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1167
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1168
	(void)sprintf(pidString, ".%d", getpid());
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1169
	(void)strcpy(tmpFileName, fileName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1170
	(void)strcat(tmpFileName, pidString);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1171
	(void)strcpy(bakFileName, fileName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1172
	(void)strcat(bakFileName, ".BAK");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1173
	fp = fopen(tmpFileName, "w");
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1174
	if (!fp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1175
		return(OWCFG_OPENTMPFAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1176
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1177
	writeDatabase(fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1178
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1179
	(void)fclose(fp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1180
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1181
	/*** Try write locking current OWconfig file... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1182
	f = open(fileName, O_WRONLY);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1183
	if (f == -1) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1184
		if (errno != ENOENT) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1185
			(void)unlink(tmpFileName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1186
			return(OWCFG_OPENWFAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1187
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1188
	} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1189
		if (writeLockOWconfig(f) != OWCFG_OK) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1190
			(void)close(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1191
			(void)unlink(tmpFileName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1192
			return(OWCFG_LOCKWFAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1193
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1194
		if (rename(fileName, bakFileName) == -1) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1195
			unlockOWconfig(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1196
			(void)close(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1197
			(void)unlink(tmpFileName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1198
			return(OWCFG_RENAMEFAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1199
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1200
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1201
	if (rename(tmpFileName, fileName) == -1) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1202
		if (f != -1) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1203
			(void)rename(bakFileName, fileName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1204
			unlockOWconfig(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1205
			(void)close(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1206
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1207
		(void)unlink(tmpFileName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1208
		return(OWCFG_RENAMEFAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1209
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1210
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1211
	unlockOWconfig(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1212
	(void)close(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1213
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1214
	return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1215
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1216
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1217
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1218
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1219
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1220
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1221
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1222
****************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1223
Exported functions...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1224
****************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1225
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1226
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1227
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1228
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1229
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1230
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1231
OWconfigSetPackage:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1232
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1233
This function establishes the name of the package to associate with
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1234
database resources created by subsequent calls to OWconfigSetAttribute or
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1235
OWconfigCreateClass.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1236
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1237
Return:  None.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1238
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1239
void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1240
OWconfigSetPackage(char *package)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1241
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1242
	if (package)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1243
		(void)strcpy(currentPackage, package);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1244
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1245
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1246
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1247
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1248
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1249
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1250
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1251
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1252
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1253
OWconfigRemovePackage:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1254
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1255
This function removes any resources from the database that were
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1256
associated with the named package.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1257
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1258
Return:  OWCFG_OK or !OWCFG_OK.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1259
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1260
Note:  The data structure is not really optimal for searching by package,
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1261
but performance isn't really critical here.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1262
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1263
int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1264
OWconfigRemovePackage(char *package)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1265
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1266
	struct nodeStruct *cp, *ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1267
	int result = OWCFG_PKGNAME;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1268
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1269
	if (!package)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1270
		return(OWCFG_ARGS);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1271
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1272
	cp = OWconfigDatabase.head;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1273
	while (cp) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1274
		ip = cp->head;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1275
		while(ip) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1276
		  char *pkg = ip->nodeValue.instance.pkg;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1277
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1278
		  if (pkg && !strcmp(pkg, package)) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1279
		    struct nodeStruct *next = ip->next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1280
		    
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1281
		    ip->nodeFree(ip);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1282
		    ip = next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1283
		    result = OWCFG_OK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1284
		    continue;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1285
		  }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1286
		  ip = ip->next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1287
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1288
		cp = cp->next;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1289
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1290
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1291
	return(result);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1292
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1293
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1294
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1295
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1296
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1297
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1298
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1299
OWconfigSetInstance:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1300
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1301
"OWconfigSetInstance" is a convenient front end to "OWconfigSetAttribute".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1302
It takes a list of attributes and adds them to an instance of a class.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1303
If that class and/or instance does not already exist, they are or it is created.If that instance does exist, replacements, when necessary, occur on a per
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1304
attribute/value pair basis, otherwise they are merely added to the instance.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1305
 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1306
Return:  OWCFG_OK or !OWCFG_OK(could occur during an out of memory condition).
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1307
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1308
int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1309
OWconfigSetInstance(char *class, char *name, OWconfigAttributePtr attr,
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1310
                    int numberInattr)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1311
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1312
	OWconfigAttributePtr limit;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1313
	int result = OWCFG_OK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1314
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1315
	if (!(class && name && attr))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1316
		return(OWCFG_ARGS);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1317
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1318
	limit = attr + numberInattr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1319
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1320
	for (;attr < limit;  attr++) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1321
		result = OWconfigSetAttribute(class, name, 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1322
					      attr->attribute,
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1323
					      attr->value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1324
		if (result != OWCFG_OK)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1325
			break;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1326
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1327
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1328
	return(result);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1329
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1330
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1331
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1332
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1333
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1334
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1335
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1336
OWconfigRemoveInstance:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1337
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1338
"OWconfigRemoveInstance" removes an instance of a class, identified by
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1339
"class" and "name".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1340
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1341
Return:  OWCFG_OK or !OWCFG_OK
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1342
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1343
int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1344
OWconfigRemoveInstance(char *class, char *name)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1345
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1346
	struct nodeStruct *ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1347
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1348
	if (!(class && name))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1349
		return(OWCFG_ARGS);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1350
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1351
	ip = searchInstance(class, name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1352
	if (!ip)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1353
		return(OWCFG_INSTANCENAME);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1354
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1355
	ip->nodeFree(ip);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1356
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1357
	return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1358
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1359
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1360
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1361
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1362
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1363
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1364
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1365
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1366
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1367
OWconfigSetAttribute:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1368
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1369
"OWconfigSetAttribute" takes an attribute/value pair and adds it to an
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1370
instance of a class.  If that class and/or instance does not already
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1371
exist, they are or it is created.  If the named attribute already exists
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1372
within the instance, it is replaced.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1373
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1374
Return:  OWCFG_OK or !OWCFG_OK(could occur during with out of memory condition).
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1375
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1376
int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1377
OWconfigSetAttribute(char *class, char *name, char *attribute, char *value)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1378
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1379
	struct nodeStruct *cp, *ip, *ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1380
	char *tmpPkg;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1381
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1382
	if (!(class && name && attribute && value))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1383
		return(OWCFG_ARGS);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1384
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1385
	cp = searchClass(class);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1386
	if (!cp) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1387
		cp = createClass(class);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1388
		if (!cp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1389
			return(OWCFG_ALLOC);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1390
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1391
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1392
	ip = searchNodeList(cp->head, name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1393
	if (!ip) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1394
		ip = createInstance(class, name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1395
		if (!ip)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1396
			return(OWCFG_ALLOC);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1397
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1398
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1399
	ap = searchNodeList(ip->head, attribute);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1400
	if (ap) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1401
		if (ap->nodeValue.attr.value)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1402
			freeMem(ap->nodeValue.attr.value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1403
	} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1404
		ap = (struct nodeStruct *)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1405
		     allocMem(sizeof(struct nodeStruct));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1406
		if (!ap)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1407
			return(OWCFG_ALLOC);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1408
		ap->name = dupString(attribute);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1409
		if (!ap->name) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1410
			freeMem(ap);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1411
			return(OWCFG_ALLOC);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1412
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1413
		ap->hashValue = hashValue(attribute);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1414
		ap->parent = ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1415
		ap->head = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1416
		ap->tail = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1417
		ap->nodeFree = freeAttr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1418
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1419
		if (!ip->head)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1420
			ip->head = ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1421
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1422
		ap->prev = ip->tail;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1423
		ap->next = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1424
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1425
		if (ip->tail)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1426
			ip->tail->next = ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1427
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1428
		ip->tail = ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1429
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1430
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1431
	ap->nodeValue.attr.value = dupString(value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1432
	if (!ap->nodeValue.attr.value) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1433
		freeAttr(ap);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1434
		return(OWCFG_ALLOC);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1435
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1436
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1437
	if (!ip->nodeValue.instance.pkg) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1438
		tmpPkg = dupString(currentPackage);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1439
		if (!tmpPkg)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1440
			return(OWCFG_ALLOC);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1441
		ip->nodeValue.instance.pkg = tmpPkg;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1442
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1443
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1444
	return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1445
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1446
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1447
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1448
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1449
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1450
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1451
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1452
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1453
OWconfigGetClassNames:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1454
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1455
"OWconfigGetClassNames" returns a list of the names of all the
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1456
instances of the named class.  The end of the list is indicated by
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1457
a NULL pointer.  All users of this function may call "OWconfigFreeClassNames"
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1458
to free the list and the strings it points to.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1459
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1460
Return:  (char **) to list of class instance names or NULL if class did
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1461
         not exist.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1462
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1463
char **
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1464
OWconfigGetClassNames(char *class)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1465
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1466
	struct nodeStruct *cp, *ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1467
	int instanceCount = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1468
	char **listOfString, **ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1469
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1470
	if (!class)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1471
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1472
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1473
	cp = searchClass(class);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1474
	if (!cp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1475
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1476
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1477
	/*** Count the number of instances in the class... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1478
	for (ip=cp->head;  ip;  ip=ip->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1479
		instanceCount++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1480
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1481
	listOfString = (char **)allocMem((instanceCount+1) * sizeof(char *));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1482
	if (listOfString) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1483
		for (ptr=listOfString, ip=cp->head;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1484
		     ip;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1485
		     ptr++, ip=ip->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1486
		{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1487
			*ptr = dupString(ip->name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1488
			
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1489
			/*** If dupString fails, free previously allocated
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1490
			     strings and return NULL...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1491
			***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1492
			if (!(*ptr)) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1493
			  char **limit = ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1494
			
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1495
			  for (ptr = listOfString;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1496
			       ptr < limit;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1497
			       ptr++)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1498
			  {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1499
			    freeMem(*ptr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1500
			  }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1501
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1502
			  freeMem(listOfString);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1503
			  return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1504
			}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1505
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1506
		*ptr = NULL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1507
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1508
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1509
	return(listOfString);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1510
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1511
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1512
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1513
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1514
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1515
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1516
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1517
OWconfigFreeClassNames:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1518
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1519
"OWconfigFreeClassNames" frees the list of class names returned by
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1520
"OWconfigGetClassNames".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1521
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1522
void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1523
OWconfigFreeClassNames(char **list)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1524
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1525
	char **ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1526
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1527
	if (!list)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1528
		return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1529
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1530
	for (ptr = list;  *ptr;  ptr++)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1531
		freeMem(*ptr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1532
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1533
	freeMem(list);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1534
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1535
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1536
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1537
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1538
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1539
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1540
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1541
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1542
OWconfigGetInstance:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1543
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1544
"OWconfigGetInstance" returns a list of attribute definitions belonging
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1545
to the instance identified by "class" and "name".  Use "OWconfigFreeInstance" 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1546
to free the memory allocated to the information returned by 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1547
"OWconfigGetInstance".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1548
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1549
Return:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1550
	OWconfigAttributePtr or NULL (if instance doesn't exist).
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1551
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1552
OWconfigAttributePtr
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1553
OWconfigGetInstance(char *class, char *name, int *numberInAttr)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1554
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1555
	struct nodeStruct *ip, *ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1556
	int attrCount = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1557
	OWconfigAttributePtr replyPtr, ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1558
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1559
	if ((!class) || (!name) || (!numberInAttr))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1560
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1561
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1562
	ip = searchInstance(class, name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1563
	if (!ip)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1564
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1565
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1566
	/*** Count the number of attributes in the instance... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1567
	for (ap = ip->head;  ap;  ap=ap->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1568
		attrCount++;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1569
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1570
	replyPtr = (OWconfigAttributePtr)allocMem(attrCount * sizeof(*replyPtr));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1571
	if (replyPtr) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1572
		for (ptr=replyPtr, ap=ip->head;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1573
		     ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1574
		     ptr++, ap=ap->next)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1575
		{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1576
			ptr->attribute = dupString(ap->name);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1577
			ptr->value = dupString(ap->nodeValue.attr.value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1578
			if ((!ptr->attribute) || (!ptr->value)) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1579
			  OWconfigAttributePtr limit=ptr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1580
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1581
			  if (ptr->attribute)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1582
			    freeMem(ptr->attribute);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1583
			  else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1584
			    freeMem(ptr->value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1585
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1586
			  for (ptr = replyPtr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1587
			       ptr < limit;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1588
			       ptr++)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1589
			  {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1590
			    freeMem(ptr->attribute);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1591
			    freeMem(ptr->value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1592
			  }
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1593
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1594
			  freeMem(replyPtr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1595
			  return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1596
			}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1597
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1598
		*numberInAttr = attrCount;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1599
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1600
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1601
	return(replyPtr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1602
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1603
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1604
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1605
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1606
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1607
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1608
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1609
OWconfigFreeInstance:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1610
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1611
"OWconfigFreeInstance" frees the data returned by OWconfigGetInstance.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1612
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1613
void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1614
OWconfigFreeInstance(OWconfigAttributePtr attr, int numberInAttr)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1615
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1616
	OWconfigAttributePtr ptr, limit;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1617
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1618
	if ((!attr) || (!numberInAttr))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1619
		return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1620
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1621
	for (ptr = attr, limit = attr + numberInAttr;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1622
	     ptr < limit;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1623
	     ptr++)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1624
	{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1625
		freeMem(ptr->attribute);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1626
		freeMem(ptr->value);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1627
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1628
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1629
	freeMem(attr);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1630
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1631
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1632
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1633
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1634
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1635
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1636
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1637
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1638
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1639
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1640
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1641
OWconfigGetAttribute:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1642
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1643
"OWconfigGetAttribute" returns the string value of the requested attribute.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1644
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1645
Return:  (char *) to value of attribute or NULL if attribute could not
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1646
         be found.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1647
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1648
char *
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1649
OWconfigGetAttribute(char *class, char *name, char *attribute)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1650
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1651
	struct nodeStruct *ap;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1652
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1653
	if (!(class && name && attribute))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1654
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1655
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1656
	ap = searchAttr(class, name, attribute);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1657
	if (ap)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1658
		return(dupString(ap->nodeValue.attr.value));
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1659
	else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1660
		return(NULL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1661
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1662
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1663
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1664
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1665
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1666
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1667
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1668
OWconfigFreeAttribute:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1669
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1670
"OWconfigFreeAttribute" frees the string returned by OWconfigGetAttribute.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1671
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1672
void
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1673
OWconfigFreeAttribute(char *attribute)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1674
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1675
	if (attribute)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1676
		freeMem(attribute);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1677
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1678
	return;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1679
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1680
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1681
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1682
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1683
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1684
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1685
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1686
OWconfigClose:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1687
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1688
If writefile was specified, the existing target file, if any, is write locked 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1689
using fcntl.  If the lock succeeds, the new OWconfig file is written to the 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1690
same directory, with a temporary name.  The old file is removed and the new 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1691
file is renamed to match the old file.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1692
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1693
The internal database is freed.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1694
 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1695
Return:  OWCFG_OK or !OWCFG_OK(could occur if write or write lock failed).
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1696
 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1697
Note:  When a file is written, all comments are lost from the
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1698
original file(s).  When written, the OWconfig entries will be grouped by class.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1699
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1700
int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1701
OWconfigClose(char *writeFile)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1702
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1703
	int result = OWCFG_OK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1704
	
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1705
	if (writeFile != NULL)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1706
		result = writeOWconfig(writeFile);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1707
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1708
	initDatabase();
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1709
	return(result);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1710
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1711
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1712
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1713
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1714
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1715
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1716
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1717
OWconfigValidate:  Verifies that the internal database is up to date
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1718
	with respect to the database file indicated by the global "readFlags".
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1719
	If it isn't, the files are re-read and a new internal database is 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1720
	created.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1721
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1722
Return:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1723
	OWCFG_OK or !OWCFG_OK (if re-read fails).
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1724
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1725
int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1726
OWconfigValidate(void)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1727
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1728
	int f;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1729
	int result=OWCFG_OK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1730
	int validate = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1731
	struct stat statbuf;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1732
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1733
	if (readFile1) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1734
		f = open(readFile1, O_RDONLY);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1735
		if (f == -1)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1736
			return(OWCFG_OPEN1FAIL); /*Leave well enough alone*/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1737
		if (fstat(f, &statbuf) == -1) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1738
			(void)close(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1739
			return(OWCFG_FSTAT1FAIL); /*Leave well enough alone*/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1740
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1741
		if (statbuf.st_mtime > readFile1TimeStamp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1742
			validate = 1;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1743
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1744
		(void)close(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1745
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1746
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1747
	if (!validate && readFile2) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1748
		f = open(readFile2, O_RDONLY);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1749
		if (f == -1)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1750
			return(OWCFG_OPEN2FAIL); /*Leave well enough alone*/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1751
		if (fstat(f, &statbuf) == -1) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1752
			(void)close(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1753
			return(OWCFG_FSTAT2FAIL); /*Leave well enough alone*/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1754
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1755
		if (statbuf.st_mtime > readFile2TimeStamp)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1756
			validate = 1;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1757
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1758
		(void)close(f);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1759
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1760
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1761
	if (validate) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1762
		struct nodeStruct *oldHead, *oldTail;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1763
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1764
		oldHead = OWconfigDatabase.head;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1765
		oldTail = OWconfigDatabase.tail;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1766
		/***  Setting databaseValid to zero causes initDatabase()
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1767
		      to NOT free existing database...
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1768
		***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1769
		databaseValid = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1770
		result = OWconfigInit(readFile1, readFile2, OWconfigFlags,
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1771
				      allocMem, freeMem);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1772
		if (result != OWCFG_OK) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1773
			OWconfigDatabase.head = oldHead;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1774
			OWconfigDatabase.tail = oldTail;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1775
			databaseValid = 1;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1776
		} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1777
			freeNodeList(oldHead);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1778
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1779
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1780
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1781
	return(result);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1782
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1783
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1784
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1785
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1786
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1787
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1788
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1789
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1790
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1791
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1792
/***************************************************************************
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1793
OWconfigInit:
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1794
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1795
"OWconfigInit" will read the OWconfig files named by readfile1 and
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1796
readfile2.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1797
Class instances and attribute/value pairs read from readfile2 will override
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1798
those read from readfile1.  The replacement will occur on a per
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1799
attribute/value pair basis.  Before a database file is read, it is
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1800
read locked using the fcntl facility.  Immediately after the file
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1801
is read, it is unlocked.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1802
 
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1803
Return:  OWCFG_OK or !OWCFG_OK.  Bogus filepaths can return !OWCFG_OK.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1804
	If readfile1 and readfile2 are both non-NULL, and the read of
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1805
	readfile1 succeeds but the read of readfile2 fails, OWCFG_OK
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1806
	will be returned.  Lock test failures will return !OWCFG_OK.
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1807
***************************************************************************/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1808
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1809
int
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1810
OWconfigInit(char *readfile1, char *readfile2, int flags,
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1811
	     void *(*allocmem)(unsigned), void (*freemem)(void *))
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1812
{
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1813
	int result, result1, result2;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1814
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1815
	if (allocmem)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1816
		allocMem = allocmem;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1817
	else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1818
		allocMem = malloc;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1819
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1820
	if (freemem)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1821
		freeMem = freemem;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1822
	else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1823
		freeMem = free;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1824
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1825
	initDatabase();
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1826
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1827
	if (readfile1 != readFile1)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1828
		readFile1 = dupString(readfile1);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1829
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1830
	if (readfile2 != readFile2)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1831
		readFile2 = dupString(readfile2);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1832
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1833
	OWconfigFlags = flags;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1834
	lineNumber = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1835
	lastLineNumber = 0;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1836
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1837
	/*** Check for specific corner cases... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1838
	if (readFile1 == NULL && readFile2 == NULL)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1839
		return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1840
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1841
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1842
	/*** Read file 1, if specified... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1843
	result1 = OWCFG_OK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1844
	if (readFile1) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1845
		result1 = readOWconfig(readFile1, &readFile1TimeStamp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1846
		if (result1 != OWCFG_OK && result1 != OWCFG_OPEN1FAIL) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1847
			initDatabase();
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1848
			return(result1);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1849
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1850
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1851
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1852
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1853
	/*** Read file 2, if specified... ***/
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1854
	lastLineNumber = lineNumber;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1855
	result2 = OWCFG_OK;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1856
	if (readFile2) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1857
		result2 = readOWconfig(readFile2, &readFile2TimeStamp);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1858
		if (result2 != OWCFG_OK && result2 != OWCFG_OPEN1FAIL) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1859
			initDatabase();
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1860
			if (result2 == OWCFG_LOCK1FAIL)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1861
				result2 = OWCFG_LOCK2FAIL;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1862
			if (result2 == OWCFG_SYNTAX1)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1863
				result2 = OWCFG_SYNTAX2;
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1864
			return(result2);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1865
		}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1866
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1867
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1868
	(void)strcpy(currentPackage, defaultNewPkgName);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1869
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1870
	if (result1 == result2) {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1871
		if (result1 == OWCFG_OK)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1872
			return(OWCFG_OK);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1873
		else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1874
			return(OWCFG_OPENBOTHFAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1875
	} else {
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1876
		if (result1 == OWCFG_OPEN1FAIL)
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1877
			return(OWCFG_OPEN1FAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1878
		else
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1879
			return(OWCFG_OPEN2FAIL);
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1880
	}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1881
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1882
}
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1883
b194b3fada3c 6899419 Move libowconfig to open-src & /usr/X11
Alan Coopersmith <Alan.Coopersmith@Sun.COM>
parents:
diff changeset
  1884