summaryrefslogtreecommitdiff
path: root/libc/unistd/sysconf.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2003-11-05 07:08:20 +0000
committerEric Andersen <andersen@codepoet.org>2003-11-05 07:08:20 +0000
commitae5a2970eff8806dcfac05953e78077b4ef82dbf (patch)
tree735da4d704da6a2fc0c3b4d19ca7ef2bae585603 /libc/unistd/sysconf.c
parent4d1abac54cfba89a15ac9e21824600f05affe79e (diff)
Rip the guts out of the dynamically generated sysconf.c, and live with a simple
static version. This will need further work later on, but should do the job for the time being,
Diffstat (limited to 'libc/unistd/sysconf.c')
-rw-r--r--libc/unistd/sysconf.c162
1 files changed, 0 insertions, 162 deletions
diff --git a/libc/unistd/sysconf.c b/libc/unistd/sysconf.c
index 3aa03ea49..daf0e6144 100644
--- a/libc/unistd/sysconf.c
+++ b/libc/unistd/sysconf.c
@@ -47,7 +47,6 @@ extern int getdtablesize (void);
* repeats and moving to a table-based implementation, we generate 283
* bytes on i386 (-Os -fomit-frame-pointer).
*/
-#ifndef _UCLIBC_GENERATE_SYSCONF_MAIN
#ifdef _UCLIBC_GENERATE_SYSCONF_ARCH
/*
@@ -900,164 +899,3 @@ long int __sysconf(int name)
}
weak_alias(__sysconf, sysconf);
-#endif /* _UCLIBC_GENERATE_SYSCONF_MAIN */
-/***********************************************************************/
-#ifdef _UCLIBC_GENERATE_SYSCONF_MAIN
-
-static long int ret_vals[_UCLIBC_SYSCONF_NUM_VALID_ARGS];
-
-static const char *type_str[] = {
- "char", "short", "int", "long"
-};
-
-static const char *type_fmt[] = { " %4ld", " %6ld", " %8ld", " %8ld" };
-static const int type_mod[] = { 13, 9, 6, 6 };
-
-static int find_or_add_in_table(int index, long int val, int *table,
- int *num_in_table, int add_flag)
-{
- int i;
-
- for (i=0 ; i<*num_in_table ; i++) {
- if (ret_vals[table[i]] == val) {
- return i;
- }
- }
- if (add_flag) {
- table[(*num_in_table)++] = index;
- return i;
- } else {
- return -1;
- }
-}
-
-
-int main(void)
-{
- long int r;
- int type_table[5][_UCLIBC_SYSCONF_NUM_VALID_ARGS];
- int ret_type[_UCLIBC_SYSCONF_NUM_VALID_ARGS];
- int num_type[5];
- int i, j, k, code;
-
- for (i=0 ; i<5 ; i++) {
- num_type[i] = 0;
- }
-
- for (i=0; i<_UCLIBC_SYSCONF_NUM_VALID_ARGS ; i++) {
- __set_errno(0);
- r = ret_vals[i] = sysconf(i);
- switch(errno) {
- case EINVAL: /* we're missing a case! */
- fprintf(stderr,"sysconf.c is broken! case %d missing!\n", i);
- return EXIT_FAILURE;
- case EISNAM: /* function */
- find_or_add_in_table(i,r,type_table[4],num_type+4,1);
- ret_type[i] = 4;
- break;
- case ENOSYS: /* defaults to -1 */
- /* why does this break for shared???? */
- fprintf(stderr,"gen_sysconf advisory --"
- "case %d defaults to -1\n", i);
- /* fall through */
- case 0:
- if ((r>=CHAR_MIN) && (r<=CHAR_MAX)) {
- ret_type[i] = 0;
- find_or_add_in_table(i,r,type_table[0],num_type+0,1);
- } else if ((r>=SHRT_MIN) && (r<=SHRT_MAX)) {
- ret_type[i] = 1;
- find_or_add_in_table(i,r,type_table[1],num_type+1,1);
- } else if ((r>=INT_MIN) && (r<=INT_MAX)) {
- ret_type[i] = 2;
- find_or_add_in_table(i,r,type_table[2],num_type+2,1);
- } else {
- ret_type[i] = 3;
- find_or_add_in_table(i,r,type_table[3],num_type+3,1);
- }
- break;
- default:
- fprintf(stderr,"sysconf.c is broken! errno = %d!\n", errno);
- break;
- }
- }
-
- printf("#include <errno.h>\n#include <unistd.h>\n#include <limits.h>\n\n");
-
- printf("static const unsigned char index[%d] = {",
- _UCLIBC_SYSCONF_NUM_VALID_ARGS);
- for (i=0 ; i<_UCLIBC_SYSCONF_NUM_VALID_ARGS ; i++) {
- if (i) printf(",");
- if (i%15 == 0) printf("\n");
- code = 0;
- for (j=0 ; j<4 ; j++) {
- k = find_or_add_in_table(i,ret_vals[i],type_table[j],num_type+j,0);
- if (k>=0) {
- code += k;
- break;
- }
- code += num_type[j];
- }
- printf(" %3d", code);
- }
- printf("\n};\n\n");
-
- for (j=0 ; j < 4 ; j++) {
- if (num_type[j]) {
- printf("static const %s %s_vals[%d] = {",
- type_str[j], type_str[j], num_type[j]);
- for (i = 0 ; i<num_type[j] ; i++) {
- if (i) printf(",");
- if (i%13 == 0) printf("\n");
- if (ret_vals[type_table[j][i]] == INT_MIN) {
- printf("%12s","INT_MIN");
- } else {
- printf(type_fmt[j], ret_vals[type_table[j][i]]);
- }
-
- }
- printf("\n};\n\n");
- }
- }
-
- printf("long int sysconf(int name)\n{\n\tint i;\n\n"
- "\tif ((name < 0) || (name >= %d)) {\n"
- "\t\terrno=EINVAL;\n"
- "\t\treturn -1;\n"
- "\t}\n\n", _UCLIBC_SYSCONF_NUM_VALID_ARGS);
-
- printf("\ti = index[name];\n\n");
- k = 0;
- for (i=0 ; i<4 ; i++) {
- if (num_type[i]) {
- if (k>0) {
- printf("\ti -= %d;\n", k);
- }
- printf("\tif (i < %d) {\n"
- "\t\treturn %s_vals[i];\n"
- "\t}\n\n",
- num_type[i], type_str[i]);
- k = num_type[i];
- }
- }
-
- if (num_type[4]) {
- if (k>0) {
- printf("\ti -= %d;\n", k);
- }
- printf("\tswitch(i) {\n");
- for (i = 0 ; i<num_type[4] ; i++) {
- printf("\t\tcase %d:\n"
- "\t\t\treturn %s;\n",
- i, (const char *)ret_vals[type_table[4][i]]);
- }
- printf("\t}\n\n");
- }
-
- printf("\treturn -1;\n"
- "}\n");
-
-
- return EXIT_SUCCESS;
-}
-/***********************************************************************/
-#endif