diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-11-05 07:08:20 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-11-05 07:08:20 +0000 |
commit | ae5a2970eff8806dcfac05953e78077b4ef82dbf (patch) | |
tree | 735da4d704da6a2fc0c3b4d19ca7ef2bae585603 /libc/unistd/sysconf.c | |
parent | 4d1abac54cfba89a15ac9e21824600f05affe79e (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.c | 162 |
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 |