diff options
author | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-02-18 16:48:11 +0000 |
---|---|---|
committer | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-02-18 16:48:11 +0000 |
commit | 8182e7cfe7d9c60567e48b876282594395062530 (patch) | |
tree | bb743948c6e926539b030102b804b5708222e8d4 /mdk-stage1/dietlibc/libcruft/sysconf_cpus.c | |
parent | c93f95560d3fde9eaefcc62c454c67b8b5626fa7 (diff) | |
download | drakx-8182e7cfe7d9c60567e48b876282594395062530.tar drakx-8182e7cfe7d9c60567e48b876282594395062530.tar.gz drakx-8182e7cfe7d9c60567e48b876282594395062530.tar.bz2 drakx-8182e7cfe7d9c60567e48b876282594395062530.tar.xz drakx-8182e7cfe7d9c60567e48b876282594395062530.zip |
Merge in CVS dietlibc 0.21 for IA-64 and X86-64 support. However, drop the
following architectures we currently don't support: arm, mips, mipsel, parisc,
s390, sparc64.
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/sysconf_cpus.c')
-rw-r--r-- | mdk-stage1/dietlibc/libcruft/sysconf_cpus.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/libcruft/sysconf_cpus.c b/mdk-stage1/dietlibc/libcruft/sysconf_cpus.c new file mode 100644 index 000000000..b5361d0a4 --- /dev/null +++ b/mdk-stage1/dietlibc/libcruft/sysconf_cpus.c @@ -0,0 +1,64 @@ +#include <unistd.h> +#include <string.h> +#include <fcntl.h> +#include <errno.h> +#include "dietfeatures.h" + +/* + * by Olaf Dreesen + * + * arm NO SMP ?!? (return 1) + * + * alpha -> cpus detected\t\t: <nr>\n + * sparc -> ncpus active\t: <nr>\n + * + * default -> processor\t: <cpunr>\n (one per cpu) + */ + +#ifdef SLASH_PROC_OK +int __sc_nr_cpus(void); +int __sc_nr_cpus() { +#if defined(__arm__) + return 1; +#else + int fd; + fd = open("/proc/cpuinfo", O_RDONLY); + if (fd==-1) return 1; /* fallback if no proc-fs mounted */ + else { + int n,nr=0; + char buf[2048]; /* holds ~6 cpuinfos */ + + while((n=read(fd,buf,sizeof(buf)))>0) { + register int i=0; + while (i<n) { +#if defined(__alpha__) + if ((buf[i]=='c')&&(!memcmp(buf+i,"cpus detected",13))) { + i+=17; + nr=atoi(buf+i); + break; + } +#elif defined(__sparc__) + if ((buf[i]=='n')&&(!memcmp(buf+i,"ncpus active",12))) { + i+=15; + nr=atoi(buf+i); + break; + } +#else /* DEFAULT */ + if ((buf[i]=='p')&&(!memcmp(buf+i,"processor",9))) { + ++nr; + i+=9; + } +#endif + while(buf[i++]!='\n'); /* skip rest of line */ + } + } + close(fd); + return nr; + } +#endif +} +#else +int __sc_nr_cpus() { + return 1; /* kludge kludge ;-) */ +} +#endif |