usr/src/lib/libc/port/gen/confstr.c
author stevel@tonic-gate
Tue, 14 Jun 2005 00:00:00 -0700
changeset 0 68f95e015346
child 2552 04b007b7b43f
permissions -rw-r--r--
OpenSolaris Launch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#include "synonyms.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#include "xpg6.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#include <unistd.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#include <errno.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <string.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
typedef struct {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
	int	config_value;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
	char	*value;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
} config;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 * keep these in the same order as in sys/unistd.h
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
static const config	default_conf[] = {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
	{ _CS_LFS_CFLAGS,	"-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
	{ _CS_LFS_LDFLAGS,	""					},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
	{ _CS_LFS_LIBS,		""					},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
	{ _CS_LFS_LINTFLAGS,	"-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
	{ _CS_LFS64_CFLAGS,	"-D_LARGEFILE64_SOURCE"			},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
	{ _CS_LFS64_LDFLAGS,	""					},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
	{ _CS_LFS64_LIBS,	""					},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
	{ _CS_LFS64_LINTFLAGS,	"-D_LARGEFILE64_SOURCE"			},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
	{ _CS_XBS5_ILP32_OFF32_CFLAGS,	""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
	{ _CS_XBS5_ILP32_OFF32_LDFLAGS,	""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
	{ _CS_XBS5_ILP32_OFF32_LIBS,	""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
	{ _CS_XBS5_ILP32_OFF32_LINTFLAGS, ""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
	{ _CS_XBS5_ILP32_OFFBIG_CFLAGS,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
"-Xa -Usun -Usparc -Uunix -Ui386 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
	{ _CS_XBS5_ILP32_OFFBIG_LDFLAGS, ""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
	{ _CS_XBS5_ILP32_OFFBIG_LIBS,	""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
	{ _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
		"-Xa -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
	{ _CS_POSIX_V6_ILP32_OFF32_CFLAGS,	""			},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
	{ _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,	""			},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
	{ _CS_POSIX_V6_ILP32_OFF32_LIBS,	""			},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
	{ _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
"-Xa -Usun -Usparc -Uunix -Ui386 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
	{ _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,	""			},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
	{ _CS_POSIX_V6_ILP32_OFFBIG_LIBS,	""			},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
	{ _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
		"POSIX_V6_ILP32_OFF32\nPOSIX_V6_ILP32_OFFBIG\n"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
		"POSIX_V6_LP64_OFF64\nPOSIX_V6_LPBIG_OFFBIG"		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
	{ _CS_XBS5_LP64_OFF64_CFLAGS, "-xarch=generic64"		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
	{ _CS_XBS5_LP64_OFF64_LDFLAGS,	"-xarch=generic64"		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
	{ _CS_XBS5_LP64_OFF64_LIBS,	""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	{ _CS_XBS5_LP64_OFF64_LINTFLAGS, "-xarch=generic64" 		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	{ _CS_XBS5_LPBIG_OFFBIG_CFLAGS, "-xarch=generic64" 		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	{ _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, "-xarch=generic64"		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	{ _CS_XBS5_LPBIG_OFFBIG_LIBS,	""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
	{ _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, "-xarch=generic64"		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	{ _CS_POSIX_V6_LP64_OFF64_CFLAGS, "-xarch=generic64"		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
	{ _CS_POSIX_V6_LP64_OFF64_LDFLAGS, "-xarch=generic64"		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
	{ _CS_POSIX_V6_LP64_OFF64_LIBS,	""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
	{ _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, "-xarch=generic64" 		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
	{ _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, "-xarch=generic64"		},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
	{ _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, ""				},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
#define	CS_ENTRY_COUNT (sizeof (default_conf) / sizeof (config))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
size_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
confstr(int name, char *buf, size_t length)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
	size_t			conf_length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	config			*entry;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	int			i;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	char			*path;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	/* Keep _CS_PATH in sync with execvp.c */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	if (name == _CS_PATH) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
		if (__xpg6 & _C99SUSv3_XPG6_sysconf_version)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
		    path = "/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:"\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
				"/usr/bin:/opt/SUNWspro/bin";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
		else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
		    path = "/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:"\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
				"/opt/SUNWspro/bin";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
		conf_length = strlen(path) + 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
		if (length != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
			(void) strncpy(buf, path, length);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
			buf[length - 1] = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
		return (conf_length);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
	 * Make sure others are known configuration parameters
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
	entry = (config *)default_conf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
	for (i = 0; i < CS_ENTRY_COUNT; i++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
		if (name == entry->config_value) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
			/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
			 * Copy out the parameter from our tables.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
			 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
			conf_length = strlen(entry->value) + 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
			if (length != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
				(void) strncpy(buf, entry->value, length);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
				buf[length - 1] = '\0';
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
			return (conf_length);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
		entry++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	/* If the entry was not found in table return an error */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
	errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
	return ((size_t)0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
}