src/lib/libxlc/lcDBUnicode.c
author Jon Tibble <meths@btinternet.com>
Thu, 03 May 2012 18:34:11 +0100
changeset 575 a99c06dc8ffa
parent 45 ac701d8057f4
permissions -rw-r--r--
Added tag oi_151a_prestable3 for changeset 54f799203c89
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     1
/* $XConsortium: lcDB.c /main/9 1995/12/01 11:53:25 kaleb $ */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     2
/*
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     3
 * Copyright (c) 1996, 1998, 1999, 2001 by Sun Microsystems, Inc.
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     4
 * All rights reserved.
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     5
 */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     6
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     7
#pragma	ident	"@(#)lcDBUnicode.c	1.7 01/07/16 SMI"
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     8
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
     9
/*
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    10
 *
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    11
 * Copyright IBM Corporation 1993
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    12
 *
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    13
 * All Rights Reserved
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    14
 *
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    15
 * License to use, copy, modify, and distribute this software and its
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    16
 * documentation for any purpose and without fee is hereby granted,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    17
 * provided that the above copyright notice appear in all copies and that
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    18
 * both that copyright notice and this permission notice appear in
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    19
 * supporting documentation, and that the name of IBM not be
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    20
 * used in advertising or publicity pertaining to distribution of the
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    21
 * software without specific, written prior permission.
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    22
 *
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    23
 * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    24
 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND 
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    25
 * NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    26
 * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    27
 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    28
 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    29
 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    30
 * SOFTWARE.
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    31
 *
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    32
*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    33
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    34
#ifndef	NOT_X_ENV
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    35
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    36
#include <X11/Xlib.h>
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    37
#include <X11/Xresource.h>
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    38
#include <X11/Xlibint.h>
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    39
#include <X11/XlcPubI.h>
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    40
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    41
#else	/* NOT_X_ENV */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    42
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    43
#define	Xmalloc	malloc
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    44
#define	Xrealloc	realloc
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    45
#define	Xfree	free
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    46
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    47
#endif	/* NOT_X_ENV */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    48
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    49
/* specifying NOT_X_ENV allows users to just use
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    50
   the database parsing routine. */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    51
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    52
#ifndef	BUFSIZE
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    53
#define	BUFSIZE	2048
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    54
#endif
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    55
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    56
#include <X11/Xlocale.h>
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    57
#define WC_TO_CS_CONV_TABLE_ENTRY	"wc_conversion_table"
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    58
#define CS_TO_WC_CONV_FILE_ENTRY	"cs_conversion_file"
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    59
#define CS_TO_WC_CONV_TABLE_ENTRY	"cs_conversion_table"
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    60
#define	XLOCALE_USER_DIR	".Xlocale"
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    61
#define	XLOCALE_USER_NAME	"required.charsets"
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    62
#define	XLOCALE_USER_CATEGORY	"XLC_XLOCALE_USER"
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    63
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    64
#include <stdio.h>
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    65
#include <unistd.h>
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    66
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    67
typedef struct _DatabaseRec {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    68
    char *category;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    69
    char *name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    70
    char **value;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    71
    int value_num;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    72
    struct _DatabaseRec *next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    73
} DatabaseRec, *Database;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    74
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    75
typedef enum {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    76
    S_NULL,	/* outside category */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    77
    S_CATEGORY,	/* inside category */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    78
    S_NAME,	/* has name, expecting values */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    79
    S_VALUE
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    80
} ParseState;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    81
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    82
typedef enum {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    83
    T_NEWLINE,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    84
    T_COMMENT,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    85
    T_SEMICOLON,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    86
    T_DOUBLE_QUOTE,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    87
    T_LEFT_BRACE,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    88
    T_RIGHT_BRACE,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    89
    T_SPACE,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    90
    T_TAB,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    91
    T_BACKSLASH,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    92
    T_NUMERIC_HEX,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    93
    T_NUMERIC_DEC,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    94
    T_NUMERIC_OCT,
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    95
    T_DEFAULT
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    96
} Token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    97
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    98
typedef struct {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
    99
    Token token;	/* token id */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   100
    char *name;		/* token sequence */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   101
    int len;		/* length of token sequence */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   102
    int (*parse_proc)(); /* parsing procedure */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   103
} TokenTable;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   104
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   105
static int f_newline();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   106
static int f_comment();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   107
static int f_semicolon();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   108
static int f_double_quote();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   109
static int f_left_brace();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   110
static int f_right_brace();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   111
static int f_white();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   112
static int f_backslash();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   113
static int f_numeric();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   114
static int f_default();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   115
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   116
static TokenTable token_tbl[] = {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   117
    { T_NEWLINE,	"\n",	1,	f_newline },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   118
    { T_COMMENT,	"#",	1,	f_comment },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   119
    { T_SEMICOLON,	";",	1,	f_semicolon },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   120
    { T_DOUBLE_QUOTE,	"\"",	1,	f_double_quote },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   121
    { T_LEFT_BRACE,	"{",	1,	f_left_brace },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   122
    { T_RIGHT_BRACE,	"}",	1,	f_right_brace },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   123
    { T_SPACE,		" ",	1,	f_white },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   124
    { T_TAB,		"\t",	1,	f_white },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   125
    { T_BACKSLASH,	"\\",	1,	f_backslash },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   126
    { T_NUMERIC_HEX,	"\\x",	2,	f_numeric },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   127
    { T_NUMERIC_DEC,	"\\d",	2,	f_numeric },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   128
    { T_NUMERIC_OCT,	"\\o",	2,	f_numeric },
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   129
    { T_DEFAULT,	" ",	1,	f_default },	/* any character */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   130
    0 
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   131
};
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   132
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   133
#define	SYM_NEWLINE	'\n'
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   134
#define	SYM_COMMENT	'#'
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   135
#define	SYM_SEMICOLON	';'
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   136
#define	SYM_DOUBLE_QUOTE	'"'
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   137
#define	SYM_LEFT_BRACE	'{'
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   138
#define	SYM_RIGHT_BRACE	'}'
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   139
#define	SYM_SPACE	' '
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   140
#define	SYM_TAB		'\t'
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   141
#define	SYM_BACKSLASH	'\\'
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   142
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   143
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   144
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   145
#define MAX_NAME_NEST	64
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   146
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   147
typedef struct {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   148
    ParseState pre_state;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   149
    char *category;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   150
    char *name[MAX_NAME_NEST];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   151
    int nest_depth;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   152
    char **value;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   153
    int value_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   154
    int value_num;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   155
    char buf[BUFSIZE];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   156
    int bufsize;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   157
} DBParseInfo;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   158
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   159
static DBParseInfo parse_info;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   160
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   161
static void
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   162
clear_parse_info()
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   163
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   164
    int i;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   165
    parse_info.pre_state = S_NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   166
    if(parse_info.category != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   167
	Xfree(parse_info.category);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   168
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   169
    for(i = 0; i <= parse_info.nest_depth; ++i){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   170
	if(parse_info.name[i]){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   171
	    Xfree(parse_info.name[i]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   172
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   173
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   174
    if(parse_info.value){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   175
	if(*parse_info.value){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   176
	    Xfree(*parse_info.value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   177
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   178
	Xfree((char *)parse_info.value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   179
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   180
    memset((void *)&parse_info, 0, sizeof(DBParseInfo));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   181
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   182
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   183
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   184
typedef struct _Line {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   185
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   186
    int cursize;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   187
    int maxsize;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   188
    int seq;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   189
} Line;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   190
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   191
static void
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   192
free_line(line)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   193
    Line *line;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   194
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   195
    if(line->str != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   196
	Xfree(line->str);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   197
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   198
    memset((void *)line, 0, sizeof(Line));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   199
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   200
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   201
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   202
realloc_line(line, size)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   203
    Line *line;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   204
    int size;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   205
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   206
    char *str = line->str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   207
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   208
    if(str != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   209
	str = (char *)Xrealloc(str, size);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   210
    }else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   211
	str = (char *)Xmalloc(size);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   212
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   213
    if(str == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   214
	/* malloc error */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   215
	memset((void *)line, 0, sizeof(Line));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   216
	return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   217
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   218
    line->str = str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   219
    line->maxsize = size;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   220
    return 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   221
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   222
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   223
#define	ISWHITE(ch)	((ch) == SYM_SPACE   || (ch) == SYM_TAB)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   224
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   225
static void
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   226
zap_comment(str, quoted)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   227
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   228
    int *quoted;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   229
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   230
    char *p = str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   231
#ifdef	never
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   232
    *quoted = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   233
    if(*p == SYM_COMMENT){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   234
	int len = strlen(str);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   235
	if(p[len - 1] == SYM_NEWLINE){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   236
	    *p++ = SYM_NEWLINE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   237
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   238
	*p = '\0';
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   239
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   240
#else
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   241
    while(*p){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   242
	if(*p == SYM_DOUBLE_QUOTE){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   243
	    if(p == str || p[-1] != SYM_BACKSLASH){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   244
		/* unescaped double quote changes quoted state. */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   245
		*quoted = *quoted ? 0 : 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   246
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   247
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   248
	if(*p == SYM_COMMENT && !*quoted){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   249
	    int pos = p - str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   250
	    if(pos == 0 ||
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   251
	       ISWHITE(p[-1]) && (pos == 1 || p[-2] != SYM_BACKSLASH)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   252
		int len = strlen(p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   253
		if(len > 0 && p[len - 1] == SYM_NEWLINE){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   254
		    /* newline is the identifier for finding end of value.
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   255
		       therefore, it should not be removed. */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   256
		    *p++ = SYM_NEWLINE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   257
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   258
		*p = '\0';
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   259
		break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   260
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   261
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   262
	++p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   263
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   264
#endif
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   265
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   266
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   267
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   268
read_line(fd, line)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   269
    FILE *fd;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   270
    Line *line;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   271
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   272
    char buf[BUFSIZE], *p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   273
    int len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   274
    int quoted = 0;	/* quoted by double quote? */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   275
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   276
    int cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   277
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   278
    str = line->str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   279
    cur = line->cursize = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   280
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   281
    while((p = fgets(buf, BUFSIZE, fd)) != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   282
	++line->seq;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   283
	zap_comment(p, &quoted);	/* remove comment line */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   284
	len = strlen(p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   285
	if(len == 0){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   286
	    if(cur > 0){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   287
		break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   288
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   289
	    continue;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   290
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   291
	if(cur + len + 1 > line->maxsize){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   292
	    /* need to reallocate buffer. */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   293
	    if(! realloc_line(line, line->maxsize + BUFSIZE)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   294
		goto err;	/* realloc error. */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   295
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   296
	    str = line->str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   297
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   298
	strncpy(str + cur, p, len);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   299
	cur += len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   300
	str[cur] = '\0';
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   301
	if(!quoted){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   302
	    if(cur > 1 && str[cur - 2] == SYM_BACKSLASH &&
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   303
	       str[cur - 1] == SYM_NEWLINE){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   304
		/* the line is ended backslash followed by newline.
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   305
		   need to concatinate the next line. */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   306
		cur -= 2;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   307
		str[cur] = '\0';
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   308
	    }else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   309
		break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   310
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   311
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   312
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   313
    if(quoted){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   314
	/* error.  still in quoted state. */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   315
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   316
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   317
    return line->cursize = cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   318
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   319
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   320
    return -1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   321
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   322
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   323
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   324
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   325
static Token
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   326
get_token(str)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   327
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   328
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   329
    switch(*str){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   330
    case SYM_NEWLINE:	return T_NEWLINE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   331
    case SYM_COMMENT:	return T_COMMENT;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   332
    case SYM_SEMICOLON:	return T_SEMICOLON;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   333
    case SYM_DOUBLE_QUOTE:	return T_DOUBLE_QUOTE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   334
    case SYM_LEFT_BRACE:	return T_LEFT_BRACE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   335
    case SYM_RIGHT_BRACE:	return T_RIGHT_BRACE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   336
    case SYM_SPACE:	return T_SPACE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   337
    case SYM_TAB:	return T_TAB;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   338
    case SYM_BACKSLASH:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   339
	switch(str[1]){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   340
	case 'x': return T_NUMERIC_HEX;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   341
	case 'd': return T_NUMERIC_DEC;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   342
	case 'o': return T_NUMERIC_OCT;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   343
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   344
	return T_BACKSLASH;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   345
    default:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   346
	return T_DEFAULT;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   347
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   348
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   349
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   350
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   351
get_word(str, word)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   352
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   353
    char *word;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   354
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   355
    char *p = str, *w = word;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   356
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   357
    int token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   358
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   359
    while(*p != '\0'){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   360
	token = get_token(p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   361
	token_len = token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   362
	if(token == T_BACKSLASH){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   363
	    p += token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   364
	    if(*p == '\0'){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   365
		break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   366
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   367
	    token = get_token(p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   368
	    token_len = token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   369
	}else if(token != T_COMMENT &&
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   370
		 token != T_DEFAULT){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   371
	    break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   372
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   373
	strncpy(w, p, token_len);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   374
	p += token_len; w += token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   375
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   376
    *w = '\0';
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   377
    return p - str;	/* return number of scanned chars */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   378
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   379
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   380
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   381
get_quoted_word(str, word)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   382
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   383
    char *word;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   384
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   385
    char *p = str, *w = word;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   386
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   387
    int token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   388
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   389
    if(*p == SYM_DOUBLE_QUOTE){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   390
	++p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   391
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   392
    while(*p != '\0'){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   393
	token = get_token(p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   394
	token_len = token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   395
	if(token == T_DOUBLE_QUOTE){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   396
	    p += token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   397
	    goto found;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   398
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   399
	if(token == T_BACKSLASH){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   400
	    p += token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   401
	    if(*p == '\0'){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   402
		break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   403
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   404
	    token = get_token(p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   405
	    token_len = token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   406
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   407
	strncpy(w, p, token_len);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   408
	p += token_len; w += token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   409
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   410
    /* error. cannot detect next double quote */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   411
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   412
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   413
 found:;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   414
    *w = '\0';
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   415
    return p - str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   416
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   417
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   418
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   419
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   420
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   421
append_value_list()
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   422
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   423
    char **value_list = parse_info.value;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   424
    char *value;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   425
    int value_num = parse_info.value_num;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   426
    int value_len = parse_info.value_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   427
    char *str = parse_info.buf;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   428
    int len = parse_info.bufsize;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   429
    char *p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   430
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   431
    if(len < 1){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   432
	return 1; /* return with no error */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   433
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   434
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   435
    if(value_list == (char **)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   436
	value_list = (char **)Xmalloc(sizeof(char *) * 2);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   437
	*value_list = NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   438
    }else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   439
	value_list = (char **)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   440
	    Xrealloc(value_list, sizeof(char *) * (value_num + 2));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   441
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   442
    if(value_list == (char **)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   443
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   444
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   445
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   446
    value = *value_list;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   447
    if(value == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   448
	value = (char *)Xmalloc(value_len + len + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   449
    }else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   450
	value = (char *)Xrealloc(value, value_len + len + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   451
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   452
    if(value == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   453
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   454
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   455
    if(value != *value_list){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   456
	int delta, i;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   457
	delta = value - *value_list;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   458
	*value_list = value;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   459
	for(i = 1; i < value_num; ++i){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   460
	    value_list[i] += delta;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   461
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   462
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   463
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   464
    value_list[value_num] = p = &value[value_len];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   465
    value_list[value_num + 1] = NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   466
    strncpy(p, str, len);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   467
    p[len] = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   468
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   469
    parse_info.value = value_list;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   470
    parse_info.value_num = value_num + 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   471
    parse_info.value_len = value_len + len + 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   472
    parse_info.bufsize = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   473
    return 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   474
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   475
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   476
    if(value_list){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   477
	Xfree((char **)value_list);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   478
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   479
    if(value){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   480
	Xfree(value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   481
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   482
    parse_info.value = (char **)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   483
    parse_info.value_num = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   484
    parse_info.value_len = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   485
    parse_info.bufsize = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   486
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   487
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   488
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   489
static int 
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   490
construct_name(name)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   491
    char *name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   492
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   493
    int i, len = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   494
    char *p = name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   495
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   496
    for(i = 0; i <= parse_info.nest_depth; ++i){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   497
	len += strlen(parse_info.name[i]) + 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   498
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   499
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   500
    strcpy(p, parse_info.name[0]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   501
    p += strlen(parse_info.name[0]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   502
    for(i = 1; i <= parse_info.nest_depth; ++i){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   503
	*p++ = '.';
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   504
	strcpy(p, parse_info.name[i]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   505
	p += strlen(parse_info.name[i]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   506
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   507
    return *name != '\0';
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   508
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   509
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   510
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   511
store_to_database(db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   512
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   513
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   514
    Database new = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   515
    char name[BUFSIZE];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   516
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   517
    if(parse_info.pre_state == S_VALUE){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   518
	if(! append_value_list()){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   519
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   520
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   521
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   522
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   523
    if(parse_info.name[parse_info.nest_depth] == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   524
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   525
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   526
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   527
    new = (Database)Xmalloc(sizeof(DatabaseRec));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   528
    if(new == (Database)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   529
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   530
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   531
    memset((void *)new, 0, sizeof(DatabaseRec));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   532
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   533
    new->category = (char *)Xmalloc(strlen(parse_info.category) + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   534
    if(new->category == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   535
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   536
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   537
    strcpy(new->category, parse_info.category);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   538
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   539
    if(! construct_name(name)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   540
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   541
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   542
    new->name = (char *)Xmalloc(strlen(name) + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   543
    if(new->name == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   544
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   545
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   546
    strcpy(new->name, name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   547
    new->next = *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   548
    new->value = parse_info.value;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   549
    new->value_num = parse_info.value_num;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   550
    *db = new;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   551
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   552
    Xfree(parse_info.name[parse_info.nest_depth]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   553
    parse_info.name[parse_info.nest_depth] = NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   554
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   555
    parse_info.value = (char **)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   556
    parse_info.value_num = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   557
    parse_info.value_len = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   558
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   559
    return 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   560
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   561
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   562
    if(new){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   563
	if(new->category){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   564
	    Xfree(new->category);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   565
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   566
	if(new->name){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   567
	    Xfree(new->name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   568
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   569
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   570
    if(parse_info.value){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   571
	if(*parse_info.value){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   572
	    Xfree(*parse_info.value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   573
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   574
	Xfree((char **)parse_info.value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   575
	parse_info.value = (char **)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   576
	parse_info.value_num = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   577
	parse_info.value_len = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   578
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   579
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   580
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   581
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   582
#define END_MARK	"END"
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   583
#define	END_MARK_LEN	3 /*strlen(END_MARK)*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   584
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   585
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   586
check_category_end(str)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   587
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   588
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   589
    char *p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   590
    int len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   591
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   592
    p = str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   593
    if(strncmp(p, END_MARK, END_MARK_LEN)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   594
	return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   595
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   596
    p += END_MARK_LEN;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   597
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   598
    while(ISWHITE(*p)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   599
	++p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   600
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   601
    len = strlen(parse_info.category);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   602
    if(strncmp(p, parse_info.category, len)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   603
	return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   604
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   605
    p += len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   606
    return p - str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   607
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   608
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   609
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   610
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   611
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   612
f_newline(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   613
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   614
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   615
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   616
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   617
    switch(parse_info.pre_state){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   618
    case S_NULL:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   619
    case S_CATEGORY:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   620
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   621
    case S_NAME:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   622
	goto err; /* no value */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   623
    case S_VALUE:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   624
	if(!store_to_database(db)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   625
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   626
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   627
	parse_info.pre_state = S_CATEGORY;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   628
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   629
    default:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   630
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   631
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   632
    return token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   633
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   634
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   635
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   636
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   637
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   638
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   639
f_comment(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   640
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   641
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   642
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   643
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   644
    /* NOTE: comment is already handled in read_line(),
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   645
       so this function is not necessary. */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   646
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   647
    char *p = str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   648
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   649
    while(*p != SYM_NEWLINE && *p != '\0'){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   650
	++p;	/* zap to the end of line */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   651
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   652
    return p - str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   653
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   654
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   655
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   656
f_white(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   657
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   658
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   659
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   660
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   661
    char *p = str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   662
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   663
    while(ISWHITE(*p)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   664
	++p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   665
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   666
    return p - str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   667
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   668
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   669
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   670
f_semicolon(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   671
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   672
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   673
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   674
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   675
    switch(parse_info.pre_state){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   676
    case S_NULL:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   677
    case S_CATEGORY:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   678
    case S_NAME:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   679
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   680
    case S_VALUE:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   681
	if(! append_value_list()){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   682
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   683
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   684
	parse_info.pre_state = S_VALUE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   685
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   686
    default:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   687
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   688
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   689
    return token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   690
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   691
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   692
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   693
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   694
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   695
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   696
f_left_brace(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   697
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   698
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   699
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   700
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   701
    switch(parse_info.pre_state){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   702
    case S_NULL:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   703
    case S_CATEGORY:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   704
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   705
    case S_NAME:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   706
	if(parse_info.name[parse_info.nest_depth] == NULL ||
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   707
	   parse_info.nest_depth + 1 > MAX_NAME_NEST){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   708
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   709
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   710
	++parse_info.nest_depth;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   711
	parse_info.pre_state = S_CATEGORY;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   712
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   713
    case S_VALUE:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   714
    default:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   715
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   716
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   717
    return token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   718
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   719
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   720
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   721
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   722
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   723
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   724
f_right_brace(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   725
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   726
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   727
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   728
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   729
    if(parse_info.nest_depth < 1){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   730
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   731
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   732
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   733
    switch(parse_info.pre_state){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   734
    case S_NULL:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   735
    case S_NAME:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   736
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   737
    case S_VALUE:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   738
	if(! store_to_database(db)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   739
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   740
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   741
	/* fall into next case */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   742
    case S_CATEGORY:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   743
	if(parse_info.name[parse_info.nest_depth] != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   744
	    Xfree(parse_info.name[parse_info.nest_depth]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   745
	    parse_info.name[parse_info.nest_depth] = NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   746
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   747
	--parse_info.nest_depth;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   748
	parse_info.pre_state = S_CATEGORY;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   749
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   750
    default:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   751
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   752
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   753
    return token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   754
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   755
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   756
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   757
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   758
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   759
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   760
f_double_quote(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   761
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   762
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   763
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   764
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   765
    char word[BUFSIZE];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   766
    int len = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   767
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   768
    switch(parse_info.pre_state){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   769
    case S_NULL:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   770
    case S_CATEGORY:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   771
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   772
    case S_NAME:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   773
    case S_VALUE:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   774
	len = get_quoted_word(str, word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   775
	if(len < 1){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   776
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   777
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   778
	strcpy(&parse_info.buf[parse_info.bufsize], word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   779
	parse_info.bufsize += strlen(word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   780
	parse_info.pre_state = S_VALUE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   781
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   782
    default:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   783
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   784
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   785
    return len;	/* including length of token */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   786
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   787
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   788
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   789
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   790
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   791
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   792
f_backslash(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   793
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   794
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   795
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   796
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   797
    return f_default(str, token, db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   798
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   799
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   800
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   801
f_numeric(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   802
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   803
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   804
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   805
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   806
    char word[BUFSIZE], *p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   807
    int len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   808
    int token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   809
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   810
    switch(parse_info.pre_state){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   811
    case S_NULL:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   812
    case S_CATEGORY:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   813
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   814
    case S_NAME:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   815
    case S_VALUE:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   816
	token_len = token_tbl[token].len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   817
	p = str + token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   818
	len = get_word(p, word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   819
	if(len < 1){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   820
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   821
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   822
	strncpy(&parse_info.buf[parse_info.bufsize], str, token_len);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   823
	strcpy(&parse_info.buf[parse_info.bufsize + token_len], word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   824
	parse_info.bufsize += token_len + strlen(word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   825
	parse_info.pre_state = S_VALUE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   826
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   827
    default:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   828
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   829
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   830
    return len + token_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   831
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   832
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   833
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   834
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   835
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   836
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   837
f_default(str, token, db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   838
    char *str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   839
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   840
    Database *db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   841
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   842
    char word[BUFSIZE], *p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   843
    int len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   844
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   845
    len = get_word(str, word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   846
    if(len < 1){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   847
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   848
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   849
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   850
    switch(parse_info.pre_state){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   851
    case S_NULL:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   852
	if(parse_info.category != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   853
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   854
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   855
	p = (char *)Xmalloc(strlen(word) + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   856
	if(p == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   857
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   858
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   859
	strcpy(p, word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   860
	parse_info.category = p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   861
	parse_info.pre_state = S_CATEGORY;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   862
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   863
    case S_CATEGORY:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   864
	if(parse_info.nest_depth == 0){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   865
	    if(check_category_end(str)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   866
		/* end of category is detected.
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   867
		   clear context and zap to end of this line */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   868
		clear_parse_info();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   869
		len = strlen(str);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   870
		break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   871
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   872
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   873
	p = (char *)Xmalloc(strlen(word) + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   874
	if(p == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   875
	    goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   876
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   877
	strcpy(p, word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   878
	if(parse_info.name[parse_info.nest_depth] != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   879
	    Xfree(parse_info.name[parse_info.nest_depth]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   880
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   881
	parse_info.name[parse_info.nest_depth] = p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   882
	parse_info.pre_state = S_NAME;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   883
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   884
    case S_NAME:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   885
    case S_VALUE:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   886
	strcpy(&parse_info.buf[parse_info.bufsize], word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   887
	parse_info.bufsize += strlen(word);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   888
	parse_info.pre_state = S_VALUE;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   889
	break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   890
    default:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   891
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   892
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   893
    return len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   894
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   895
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   896
    return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   897
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   898
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   899
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   900
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   901
#ifdef	DEBUG
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   902
static void
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   903
PrintDatabase(db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   904
    Database db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   905
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   906
    Database p = db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   907
    int i = 0, j;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   908
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   909
    printf("***\n*** BEGIN Database\n***\n");
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   910
    while(p){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   911
	printf("%3d: ", i++);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   912
	printf("%s, %s, ", p->category, p->name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   913
	printf("\t[%d: ", p->value_num);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   914
	for(j = 0; j < p->value_num; ++j){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   915
	    printf("%s, ", p->value[j]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   916
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   917
	printf("]\n");
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   918
	p = p->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   919
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   920
    printf("***\n*** END   Database\n***\n");
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   921
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   922
#endif
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   923
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   924
static void
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   925
DestroyDatabase(db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   926
    Database db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   927
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   928
    Database p = db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   929
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   930
    while(p){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   931
	if(p->category != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   932
	    Xfree(p->category);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   933
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   934
	if(p->name != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   935
	    Xfree(p->name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   936
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   937
	if(p->value != (char **)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   938
	    if(*p->value != NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   939
		Xfree(*p->value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   940
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   941
	    Xfree((char *)p->value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   942
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   943
	db = p->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   944
	Xfree((char *)p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   945
	p = db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   946
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   947
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   948
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   949
static int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   950
CountDatabase(db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   951
    Database db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   952
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   953
    Database p = db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   954
    int cnt = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   955
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   956
    while(p){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   957
	++cnt;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   958
	p = p->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   959
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   960
    return cnt;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   961
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   962
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   963
static Database
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   964
CreateDatabase(dbfile)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   965
    char *dbfile;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   966
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   967
    Database db = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   968
    FILE *fd;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   969
    Line line;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   970
    char *p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   971
    Token token;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   972
    int len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   973
    int error = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   974
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   975
    fd = fopen(dbfile, "r");
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   976
    if(fd == (FILE *)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   977
	return NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   978
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   979
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   980
    memset((void *)&line, 0, sizeof(Line));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   981
    memset((void *)&parse_info, 0, sizeof(DBParseInfo));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   982
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   983
    do {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   984
	int rc = read_line(fd, &line);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   985
	if(rc < 0){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   986
	    error = 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   987
	    break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   988
	}else if(rc == 0){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   989
	    break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   990
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   991
	p = line.str;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   992
	while(*p){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   993
	    token = get_token(p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   994
	    len = (*token_tbl[token].parse_proc)(p, token, &db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   995
	    if(len < 1){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   996
		error = 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   997
		break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   998
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
   999
	    p += len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1000
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1001
    } while (!error);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1002
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1003
    if(parse_info.pre_state != S_NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1004
	clear_parse_info();
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1005
	error = 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1006
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1007
    if(error){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1008
#ifdef	DEBUG
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1009
	fprintf(stderr, "database format error at line %d.\n", line.seq);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1010
#endif
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1011
	DestroyDatabase(db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1012
	db = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1013
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1014
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1015
    fclose(fd);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1016
    free_line(&line);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1017
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1018
#ifdef	DEBUG
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1019
    PrintDatabase(db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1020
#endif
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1021
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1022
    return db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1023
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1024
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1025
void	FreeDatabase(Database db)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1026
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1027
	if(db->category)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1028
		Xfree(db->category);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1029
	if(db->name)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1030
		Xfree(db->name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1031
	if(db->value){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1032
		if(*db->value)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1033
			Xfree(*db->value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1034
		Xfree(db->value);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1035
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1036
	Xfree(db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1037
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1038
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1039
#ifdef READ_USER_ENV
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1040
int
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1041
CheckUserFilename(char *name, char **path)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1042
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1043
	char	*home_dir, *locale_dir, *ptr;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1044
	char	locale_name[256];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1045
	char	*new_path;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1046
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1047
	if(strcmp(name, WC_TO_CS_CONV_TABLE_ENTRY)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1048
		if(strcmp(name, CS_TO_WC_CONV_TABLE_ENTRY)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1049
			if(strcmp(name, CS_TO_WC_CONV_FILE_ENTRY)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1050
				return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1051
			}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1052
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1053
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1054
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1055
	home_dir = getenv("HOME");
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1056
	if(home_dir == (char *)NULL)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1057
		return -1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1058
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1059
	locale_dir = _XlcLocaleDirName(setlocale(LC_CTYPE, (char *)NULL));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1060
	ptr = strrchr(locale_dir, '/');
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1061
	strcpy(locale_name, ptr + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1062
	Xfree(locale_dir);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1063
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1064
	new_path = (char *)malloc(strlen(home_dir) + 1 + strlen("XLOCALE_USER_DIR") + 1 + strlen(locale_name) + 1 + strlen(*path) + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1065
	if(new_path == (char *)NULL)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1066
		return -1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1067
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1068
	sprintf(new_path, "%s/%s/%s/%s", home_dir, XLOCALE_USER_DIR, locale_name, *path);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1069
	Xfree(*path);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1070
	*path = new_path;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1071
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1072
	return 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1073
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1074
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1075
static Database
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1076
MergeXLocaleDatabase(Database usr, Database sys)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1077
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1078
	Database	db_head, db_cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1079
	Database	sys_head, sys_cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1080
	Database	tmp_head, tmp_cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1081
	Database	usr_head, usr_cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1082
	Database	fs_head, fs_cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1083
	Database	ret_db = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1084
	int	fs_count, i;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1085
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1086
	db_head = (Database)Xmalloc(sizeof(DatabaseRec));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1087
	if(db_head == (Database)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1088
		goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1089
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1090
	db_head->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1091
	db_cur = db_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1092
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1093
	tmp_head = (Database)Xmalloc(sizeof(DatabaseRec));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1094
	if(tmp_head == (Database)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1095
		goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1096
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1097
	tmp_head->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1098
	tmp_cur = tmp_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1099
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1100
	sys_head = (Database)Xmalloc(sizeof(DatabaseRec));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1101
	if(sys_head == (Database)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1102
		goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1103
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1104
	sys_head->next = sys;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1105
	sys_cur = sys_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1106
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1107
	usr_head = (Database)Xmalloc(sizeof(DatabaseRec));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1108
	if(usr_head == (Database)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1109
		goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1110
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1111
	usr_head->next = usr;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1112
	usr_cur = usr_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1113
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1114
	fs_head = (Database)Xmalloc(sizeof(DatabaseRec));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1115
	if(fs_head == (Database)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1116
		goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1117
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1118
	fs_head->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1119
	fs_cur = fs_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1120
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1121
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1122
	/* remove non XLC_XLOCALE Category */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1123
	while(sys_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1124
		if (strcmp(sys_cur->next->category, "XLC_XLOCALE")){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1125
			tmp_cur->next = sys_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1126
			tmp_cur = tmp_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1127
			sys_cur->next = tmp_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1128
			tmp_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1129
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1130
		else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1131
			sys_cur = sys_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1132
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1133
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1134
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1135
	/* XLC_XLOCALE not csN in system */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1136
	sys_cur = sys_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1137
	while(sys_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1138
		if(strncmp(sys_cur->next->name, "cs", 2)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1139
			usr_cur = usr_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1140
			while(usr_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1141
				if(!strcmp(usr_cur->next->name, sys_cur->next->name)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1142
					Database unused;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1143
					if (CheckUserFilename(usr_cur->next->name, &(usr_cur->next->value[0])))
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1144
						goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1145
					db_cur->next = usr_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1146
					db_cur = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1147
					usr_cur->next = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1148
					db_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1149
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1150
					unused = sys_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1151
					sys_cur->next = unused->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1152
					FreeDatabase(unused);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1153
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1154
					goto found1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1155
					break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1156
				}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1157
				else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1158
					usr_cur = usr_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1159
				}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1160
			}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1161
			db_cur->next = sys_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1162
			db_cur = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1163
			sys_cur->next = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1164
			db_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1165
found1:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1166
			;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1167
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1168
		else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1169
			sys_cur = sys_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1170
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1171
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1172
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1173
	/* XLC_XLOCALE not csN in user */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1174
	usr_cur = usr_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1175
	while(usr_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1176
		if(strncmp(usr_cur->next->name, "cs", 2)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1177
			if (CheckUserFilename(usr_cur->next->name, &(usr_cur->next->value[0])))
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1178
				goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1179
			db_cur->next = usr_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1180
			db_cur = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1181
			usr_cur->next = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1182
			db_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1183
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1184
		else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1185
			usr_cur = usr_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1186
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1187
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1188
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1189
	/* XLC_XLOCALE csN in user */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1190
	usr_cur = usr_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1191
	while(usr_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1192
		char	*dot_ptr;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1193
		int	csN, ref_csN;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1194
		char	csN_name[6];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1195
		char	ref_csN_name[6];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1196
		int	csN_len, ref_csN_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1197
		char	*new_name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1198
		Database	ptr, cur_first, cur_last;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1199
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1200
		/* csN entry */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1201
		if((dot_ptr = strchr(usr_cur->next->name, '.')) != (char *)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1202
			csN_len = dot_ptr - usr_cur->next->name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1203
			strncpy(csN_name, usr_cur->next->name, csN_len);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1204
			csN_name[csN_len] = (char)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1205
			if(!strncmp(csN_name, "cs", 2)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1206
				csN = atoi(csN_name + 2);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1207
				ref_csN = -1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1208
				cur_first = usr_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1209
				cur_last = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1210
				/* first pass in user */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1211
				while(usr_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1212
					if(strncmp(usr_cur->next->name, csN_name, csN_len)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1213
						cur_last = usr_cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1214
						break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1215
					}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1216
					if(!strcmp(usr_cur->next->name + csN_len + 1, "base_csN")){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1217
						ref_csN = atoi(usr_cur->next->value[0]);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1218
					}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1219
					usr_cur = usr_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1220
				}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1221
				if(cur_last == (Database)NULL)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1222
					cur_last = usr_cur;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1223
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1224
				/* add system */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1225
				if(ref_csN >= 0){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1226
					sys_cur = sys_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1227
					sprintf(ref_csN_name, "cs%d", ref_csN);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1228
					ref_csN_len = strlen(ref_csN_name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1229
					while(sys_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1230
						if(!strncmp(sys_cur->next->name, ref_csN_name, ref_csN_len)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1231
							ptr = cur_first;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1232
							do{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1233
								if(!strcmp(sys_cur->next->name + ref_csN_len + 1, ptr->name + csN_len + 1)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1234
									goto found2;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1235
								}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1236
							}while(ptr != cur_last);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1237
							new_name = (char *)malloc(strlen(sys_cur->next->name) - ref_csN_len + csN_len + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1238
							if(new_name == (char *)NULL)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1239
								goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1240
							sprintf(new_name, "%s.%s", csN_name, sys_cur->next->name + ref_csN_len + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1241
							Xfree(sys_cur->next->name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1242
							sys_cur->next->name = new_name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1243
							db_cur->next = sys_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1244
							db_cur = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1245
							sys_cur->next = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1246
							db_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1247
						}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1248
						else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1249
found2:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1250
							sys_cur = sys_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1251
						}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1252
					}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1253
				}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1254
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1255
				/* add user */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1256
				ptr = cur_first;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1257
				do{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1258
					if(strcmp(ptr->name + csN_len + 1, "base_csN")){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1259
						if (CheckUserFilename(ptr->name + csN_len + 1, &(usr_cur->next->value[0])))
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1260
							goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1261
						db_cur->next = ptr;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1262
						db_cur = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1263
						db_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1264
					}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1265
				}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1266
				while(ptr != cur_last);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1267
				usr_cur = cur_last;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1268
			}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1269
			else
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1270
				usr_cur = usr_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1271
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1272
		else
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1273
			usr_cur = usr_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1274
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1275
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1276
	/* select XLC_FONTSET */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1277
	db_cur = db_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1278
	fs_cur = fs_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1279
	fs_count = 0;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1280
	while(db_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1281
		char	*dot_ptr;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1282
		if((dot_ptr = strchr(db_cur->next->name, '.')) == (char *)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1283
			goto nextloop1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1284
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1285
		if(strcmp(dot_ptr + 1, "ct_encoding")){ 
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1286
			goto nextloop1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1287
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1288
		for(i = 0; i < db_cur->next->value_num; i++){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1289
			tmp_cur = tmp_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1290
			while(tmp_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1291
				if(strcmp(tmp_cur->next->category, "XLC_FONTSET"))
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1292
					goto nextloop2;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1293
				if((dot_ptr = strchr(tmp_cur->next->name, '.')) == (char *)NULL)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1294
					goto nextloop2;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1295
				if(strcmp(dot_ptr + 1, "charset"))
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1296
					goto nextloop2;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1297
				if(tmp_cur->next->value_num < 1)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1298
					goto nextloop2;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1299
				if(!strcmp(tmp_cur->next->value[0], db_cur->next->value[0])){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1300
					fs_cur->next = tmp_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1301
					fs_cur = fs_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1302
					tmp_cur->next = fs_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1303
					fs_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1304
					fs_count++;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1305
					continue;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1306
				}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1307
nextloop2:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1308
				tmp_cur = tmp_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1309
			}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1310
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1311
nextloop1:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1312
		db_cur = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1313
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1314
	fs_cur = fs_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1315
	while(fs_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1316
		char	fsN_name[6], ref_fsN_name[6];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1317
		int	fsN_len, ref_fsN_len;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1318
		char	*dot_ptr;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1319
		char	*new_name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1320
		if((dot_ptr = strchr(fs_cur->next->name, '.')) != (char *)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1321
			ref_fsN_len = dot_ptr - fs_cur->next->name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1322
			strncpy(ref_fsN_name, fs_cur->next->name, ref_fsN_len);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1323
			ref_fsN_name[ref_fsN_len] = (char)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1324
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1325
			sprintf(fsN_name, "fs%d", --fs_count);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1326
			fsN_len = strlen(fsN_name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1327
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1328
			new_name = (char *)malloc(fsN_len + 1 + strlen(dot_ptr + 1) + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1329
			if(new_name == (char *)NULL)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1330
				goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1331
			sprintf(new_name, "%s.%s", fsN_name, dot_ptr + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1332
			Xfree(fs_cur->next->name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1333
			fs_cur->next->name = new_name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1334
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1335
			tmp_cur = tmp_head;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1336
			while(tmp_cur->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1337
				if(!strncmp(tmp_cur->next->name, ref_fsN_name, ref_fsN_len)){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1338
					if((dot_ptr = strchr(tmp_cur->next->name, '.')) != (char *)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1339
						new_name = (char *)malloc(fsN_len + 1 + strlen(dot_ptr + 1) + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1340
						if(new_name == (char *)NULL)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1341
							goto err_return;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1342
						sprintf(new_name, "%s.%s", fsN_name, dot_ptr + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1343
						Xfree(tmp_cur->next->name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1344
						tmp_cur->next->name = new_name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1345
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1346
						db_cur->next = tmp_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1347
						db_cur = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1348
						tmp_cur->next = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1349
						db_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1350
						continue;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1351
					}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1352
				}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1353
				tmp_cur = tmp_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1354
			}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1355
			db_cur->next = fs_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1356
			db_cur = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1357
			fs_cur->next = db_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1358
			db_cur->next = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1359
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1360
		else
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1361
			fs_cur = fs_cur->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1362
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1363
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1364
	ret_db = db_head->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1365
#ifdef DEBUG
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1366
	PrintDatabase(ret_db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1367
#endif
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1368
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1369
err_return:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1370
	DestroyDatabase(fs_head->next);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1371
	DestroyDatabase(usr_head->next);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1372
	DestroyDatabase(tmp_head->next);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1373
	DestroyDatabase(sys_head->next);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1374
	Xfree(fs_head);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1375
	Xfree(usr_head);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1376
	Xfree(tmp_head);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1377
	Xfree(sys_head);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1378
	Xfree(db_head);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1379
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1380
	return ret_db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1381
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1382
#endif
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1383
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1384
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1385
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1386
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1387
#ifndef	NOT_X_ENV
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1388
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1389
/* locale framework functions */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1390
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1391
typedef struct _XlcDatabaseRec {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1392
    XrmQuark category_q;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1393
    XrmQuark name_q;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1394
    Database db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1395
    struct _XlcDatabaseRec *next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1396
} XlcDatabaseRec, *XlcDatabase;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1397
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1398
typedef	struct _XlcDatabaseListRec {
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1399
    XrmQuark name_q;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1400
    XlcDatabase lc_db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1401
    Database database;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1402
    int ref_count;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1403
    struct _XlcDatabaseListRec *next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1404
} XlcDatabaseListRec, *XlcDatabaseList;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1405
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1406
/* database cache list (per file) */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1407
static XlcDatabaseList _db_list = (XlcDatabaseList)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1408
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1409
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1410
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1411
/*	_XlcDestroyLocaleDataBase(lcd)					*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1412
/*----------------------------------------------------------------------*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1413
/*	This function destroy the XLocale Database that bound to the 	*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1414
/*	specified lcd.  If the XLocale Database is refered from some 	*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1415
/*	other lcd, this function just decreases reference count of 	*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1416
/*	the database.  If no locale refers the database, this function	*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1417
/*	remove it from the cache list and free work area.		*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1418
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1419
void
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1420
_XlcDestroyLocaleDataBaseUnicode(lcd)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1421
    XLCd lcd;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1422
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1423
    XlcDatabase lc_db = (XlcDatabase)XLC_PUBLIC(lcd, xlocale_db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1424
    XlcDatabaseList p, prev;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1425
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1426
    for(p = _db_list, prev = (XlcDatabaseList)NULL; p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1427
	prev = p, p = p->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1428
	if(p->lc_db == lc_db){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1429
	    if((-- p->ref_count) < 1){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1430
		if(p->lc_db != (XlcDatabase)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1431
		    Xfree((char *)p->lc_db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1432
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1433
		DestroyDatabase(p->database);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1434
		if(prev == (XlcDatabaseList)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1435
		    _db_list = p->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1436
		}else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1437
		    prev->next = p->next;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1438
		}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1439
		Xfree((char*)p);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1440
	    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1441
	    break;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1442
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1443
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1444
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1445
    XLC_PUBLIC(lcd, xlocale_db) = (XPointer)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1446
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1447
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1448
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1449
/*	_XlcCreateLocaleDataBase(lcd)					*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1450
/*----------------------------------------------------------------------*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1451
/*	This function create an XLocale database which correspond to	*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1452
/*	the specified XLCd.						*/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1453
/************************************************************************/
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1454
XPointer
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1455
_XlcCreateLocaleDataBaseUnicode(lcd)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1456
    XLCd lcd;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1457
{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1458
    XlcDatabaseList list, new;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1459
    Database p, database = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1460
    XlcDatabase lc_db = (XlcDatabase)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1461
    XrmQuark name_q;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1462
    char pathname[256], *name;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1463
    int i, n;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1464
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1465
    Database database_sys = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1466
    Database database_usr = (Database)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1467
    char	*home_dir, *locale_dir, *ptr;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1468
    char	locale_name[256];
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1469
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1470
    name = _XlcFileName(lcd, "locale");
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1471
    if(name == NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1472
	return (XPointer)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1473
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1474
    strcpy(pathname, name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1475
    Xfree(name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1476
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1477
    name_q = XrmStringToQuark(pathname);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1478
    for(list = _db_list; list; list = list->next){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1479
	if(name_q == list->name_q){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1480
	    list->ref_count++;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1481
	    return XLC_PUBLIC(lcd, xlocale_db) = (XPointer)list->lc_db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1482
	}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1483
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1484
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1485
    /* read /usr/openwin/lib/locale/<locale>.UTF-8/XLC_LOCALE */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1486
    database_sys = CreateDatabase(pathname);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1487
    if(database_sys == (Database)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1488
	return (XPointer)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1489
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1490
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1491
/* READ_USER_ENV - read usr environment and merge */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1492
#ifdef READ_USER_ENV
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1493
    /* read ~/.Xlocale/*.UTF-8/XLC_LOCALE */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1494
    home_dir = getenv("HOME");
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1495
    if((locale_dir = _XlcLocaleDirName(setlocale(LC_CTYPE, (char *)NULL))) != (char *)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1496
    	if((ptr = strrchr(locale_dir, '/')) != (char *)NULL)
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1497
		strcpy(locale_name, ptr + 1);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1498
    	Xfree(locale_dir);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1499
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1500
    sprintf(pathname, "%s/%s/%s/%s", home_dir, XLOCALE_USER_DIR, locale_name, XLOCALE_USER_NAME);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1501
    database_usr = CreateDatabase(pathname);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1502
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1503
    /* merge two databases */
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1504
    if(database_usr != (Database)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1505
	database = MergeXLocaleDatabase(database_usr, database_sys);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1506
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1507
    else{
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1508
	database = database_sys;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1509
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1510
#else
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1511
    database = database_sys;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1512
#endif
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1513
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1514
    n = CountDatabase(database);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1515
    lc_db = (XlcDatabase)Xmalloc(sizeof(XlcDatabaseRec) * (n + 1));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1516
    if(lc_db == (XlcDatabase)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1517
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1518
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1519
    memset((void *)lc_db, 0, sizeof(XlcDatabaseRec) * (n + 1));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1520
    for(p = database, i = 0; p && i < n; p = p->next, ++i){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1521
	lc_db[i].category_q = XrmStringToQuark(p->category);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1522
	lc_db[i].name_q = XrmStringToQuark(p->name);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1523
	lc_db[i].db = p;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1524
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1525
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1526
    new = (XlcDatabaseList)Xmalloc(sizeof(XlcDatabaseListRec));
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1527
    if(new == (XlcDatabaseList)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1528
	goto err;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1529
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1530
    new->name_q = name_q;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1531
    new->lc_db = lc_db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1532
    new->database = database;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1533
    new->ref_count = 1;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1534
    new->next = _db_list;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1535
    _db_list = new;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1536
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1537
    return XLC_PUBLIC(lcd, xlocale_db) = (XPointer)lc_db;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1538
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1539
err:
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1540
    DestroyDatabase(database);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1541
    if(lc_db != (XlcDatabase)NULL){
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1542
	Xfree((char *)lc_db);
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1543
    }
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1544
    return (XPointer)NULL;
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1545
}
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1546
ac701d8057f4 imported patch add_libxlc.patch
Jan Lana <jan.lana@sun.com>
parents:
diff changeset
  1547
#endif	/* NOT_X_ENV */