summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile17
-rw-r--r--kernel/Makefile2
-rwxr-xr-xkernel/check_mar.pl10
-rw-r--r--kernel/list_modules.pm77
-rw-r--r--kernel/modules.pl194
-rwxr-xr-xkernel/update_kernel58
-rwxr-xr-xmake_boot_img268
-rw-r--r--mdk-stage1/.cvsignore12
-rw-r--r--mdk-stage1/Makefile104
-rw-r--r--mdk-stage1/Makefile.common15
-rw-r--r--mdk-stage1/automatic.h1
-rw-r--r--mdk-stage1/bzlib/Makefile15
-rw-r--r--mdk-stage1/config-stage1.h2
-rw-r--r--mdk-stage1/dhcp.c11
-rw-r--r--mdk-stage1/dietlibc/.cvsignore16
-rw-r--r--mdk-stage1/dietlibc/AUTHOR2
-rw-r--r--mdk-stage1/dietlibc/Makefile351
-rw-r--r--mdk-stage1/dietlibc/README14
-rw-r--r--mdk-stage1/dietlibc/alpha/Makefile.add2
-rw-r--r--mdk-stage1/dietlibc/alpha/__longjmp.S9
-rw-r--r--mdk-stage1/dietlibc/alpha/clone.S2
-rw-r--r--mdk-stage1/dietlibc/alpha/setjmp.S31
-rw-r--r--mdk-stage1/dietlibc/alpha/signal.S3
-rw-r--r--mdk-stage1/dietlibc/alpha/sigprocmask.S3
-rw-r--r--mdk-stage1/dietlibc/alpha/start.S20
-rw-r--r--mdk-stage1/dietlibc/alpha/unified.S12
-rw-r--r--mdk-stage1/dietlibc/diet.c317
-rw-r--r--mdk-stage1/dietlibc/dietdirent.h4
-rw-r--r--mdk-stage1/dietlibc/dietfeatures.h92
-rw-r--r--mdk-stage1/dietlibc/dietstdarg.h12
-rw-r--r--mdk-stage1/dietlibc/dietstdio.h84
-rw-r--r--mdk-stage1/dietlibc/dirstream.h78
-rw-r--r--mdk-stage1/dietlibc/i386/Makefile.add7
-rw-r--r--mdk-stage1/dietlibc/i386/__longjmp.S1
-rw-r--r--mdk-stage1/dietlibc/i386/__testandset.S1
-rw-r--r--mdk-stage1/dietlibc/i386/clone.S29
-rw-r--r--mdk-stage1/dietlibc/i386/setjmp.S55
-rw-r--r--mdk-stage1/dietlibc/i386/start.S69
-rw-r--r--mdk-stage1/dietlibc/i386/unified.S35
-rw-r--r--mdk-stage1/dietlibc/include/alloca.h13
-rw-r--r--mdk-stage1/dietlibc/include/arpa/inet.h1
-rw-r--r--mdk-stage1/dietlibc/include/arpa/nameser.h36
-rw-r--r--mdk-stage1/dietlibc/include/assert.h17
-rw-r--r--mdk-stage1/dietlibc/include/daemon.h2
-rw-r--r--mdk-stage1/dietlibc/include/dirent.h42
-rw-r--r--mdk-stage1/dietlibc/include/dlfcn.h3
-rw-r--r--mdk-stage1/dietlibc/include/elf.h781
-rw-r--r--mdk-stage1/dietlibc/include/endian.h45
-rw-r--r--mdk-stage1/dietlibc/include/errno.h543
-rw-r--r--mdk-stage1/dietlibc/include/fcntl.h550
-rw-r--r--mdk-stage1/dietlibc/include/features.h9
-rw-r--r--mdk-stage1/dietlibc/include/fnmatch.h2
-rw-r--r--mdk-stage1/dietlibc/include/ftw.h16
-rw-r--r--mdk-stage1/dietlibc/include/getopt.h6
-rw-r--r--mdk-stage1/dietlibc/include/glob.h2
-rw-r--r--mdk-stage1/dietlibc/include/grp.h10
-rw-r--r--mdk-stage1/dietlibc/include/inttypes.h247
-rw-r--r--mdk-stage1/dietlibc/include/limits.h51
-rw-r--r--mdk-stage1/dietlibc/include/locale.h86
-rw-r--r--mdk-stage1/dietlibc/include/math.h35
-rw-r--r--mdk-stage1/dietlibc/include/net/if.h93
-rw-r--r--mdk-stage1/dietlibc/include/net/if_arp.h109
-rw-r--r--mdk-stage1/dietlibc/include/net/route.h52
-rw-r--r--mdk-stage1/dietlibc/include/netdb.h64
-rw-r--r--mdk-stage1/dietlibc/include/netinet/in.h399
-rw-r--r--mdk-stage1/dietlibc/include/netinet/ip.h117
-rw-r--r--mdk-stage1/dietlibc/include/paths.h7
-rw-r--r--mdk-stage1/dietlibc/include/pthread.h37
-rw-r--r--mdk-stage1/dietlibc/include/pwd.h15
-rw-r--r--mdk-stage1/dietlibc/include/regex.h6
-rw-r--r--mdk-stage1/dietlibc/include/resolv.h125
-rw-r--r--mdk-stage1/dietlibc/include/rpc/auth.h23
-rw-r--r--mdk-stage1/dietlibc/include/rpc/auth_des.h8
-rw-r--r--mdk-stage1/dietlibc/include/rpc/auth_unix.h4
-rw-r--r--mdk-stage1/dietlibc/include/rpc/clnt.h112
-rw-r--r--mdk-stage1/dietlibc/include/rpc/key_prot.h74
-rw-r--r--mdk-stage1/dietlibc/include/rpc/netdb.h4
-rw-r--r--mdk-stage1/dietlibc/include/rpc/pmap_clnt.h38
-rw-r--r--mdk-stage1/dietlibc/include/rpc/pmap_prot.h22
-rw-r--r--mdk-stage1/dietlibc/include/rpc/pmap_rmt.h10
-rw-r--r--mdk-stage1/dietlibc/include/rpc/rpc.h2
-rw-r--r--mdk-stage1/dietlibc/include/rpc/rpc_msg.h24
-rw-r--r--mdk-stage1/dietlibc/include/rpc/svc.h22
-rw-r--r--mdk-stage1/dietlibc/include/rpc/types.h16
-rw-r--r--mdk-stage1/dietlibc/include/rpc/xdr.h78
-rw-r--r--mdk-stage1/dietlibc/include/sched.h13
-rw-r--r--mdk-stage1/dietlibc/include/setjmp.h152
-rw-r--r--mdk-stage1/dietlibc/include/shadow.h8
-rw-r--r--mdk-stage1/dietlibc/include/signal.h487
-rw-r--r--mdk-stage1/dietlibc/include/stdint.h26
-rw-r--r--mdk-stage1/dietlibc/include/stdio.h106
-rw-r--r--mdk-stage1/dietlibc/include/stdlib.h75
-rw-r--r--mdk-stage1/dietlibc/include/string.h53
-rw-r--r--mdk-stage1/dietlibc/include/strings.h25
-rw-r--r--mdk-stage1/dietlibc/include/sys/cdefs.h35
-rw-r--r--mdk-stage1/dietlibc/include/sys/file.h11
-rw-r--r--mdk-stage1/dietlibc/include/sys/io.h47
-rw-r--r--mdk-stage1/dietlibc/include/sys/ioctl.h26
-rw-r--r--mdk-stage1/dietlibc/include/sys/ipc.h45
-rw-r--r--mdk-stage1/dietlibc/include/sys/kd.h179
-rw-r--r--mdk-stage1/dietlibc/include/sys/mman.h165
-rw-r--r--mdk-stage1/dietlibc/include/sys/mount.h73
-rw-r--r--mdk-stage1/dietlibc/include/sys/msg.h48
-rw-r--r--mdk-stage1/dietlibc/include/sys/mtio.h336
-rw-r--r--mdk-stage1/dietlibc/include/sys/param.h22
-rw-r--r--mdk-stage1/dietlibc/include/sys/poll.h40
-rw-r--r--mdk-stage1/dietlibc/include/sys/ptrace.h840
-rw-r--r--mdk-stage1/dietlibc/include/sys/reboot.h21
-rw-r--r--mdk-stage1/dietlibc/include/sys/resource.h53
-rw-r--r--mdk-stage1/dietlibc/include/sys/select.h22
-rw-r--r--mdk-stage1/dietlibc/include/sys/sem.h74
-rw-r--r--mdk-stage1/dietlibc/include/sys/sendfile.h8
-rw-r--r--mdk-stage1/dietlibc/include/sys/shm.h66
-rw-r--r--mdk-stage1/dietlibc/include/sys/socket.h492
-rw-r--r--mdk-stage1/dietlibc/include/sys/stat.h494
-rw-r--r--mdk-stage1/dietlibc/include/sys/sysinfo.h20
-rw-r--r--mdk-stage1/dietlibc/include/sys/syslog.h2
-rw-r--r--mdk-stage1/dietlibc/include/sys/time.h50
-rw-r--r--mdk-stage1/dietlibc/include/sys/times.h12
-rw-r--r--mdk-stage1/dietlibc/include/sys/types.h136
-rw-r--r--mdk-stage1/dietlibc/include/sys/uio.h2
-rw-r--r--mdk-stage1/dietlibc/include/sys/un.h7
-rw-r--r--mdk-stage1/dietlibc/include/sys/vfs.h26
-rw-r--r--mdk-stage1/dietlibc/include/sys/wait.h10
-rw-r--r--mdk-stage1/dietlibc/include/termios.h373
-rw-r--r--mdk-stage1/dietlibc/include/time.h20
-rw-r--r--mdk-stage1/dietlibc/include/unistd.h113
-rw-r--r--mdk-stage1/dietlibc/include/utmp.h23
-rw-r--r--mdk-stage1/dietlibc/lib/__dtostr.c190
-rw-r--r--mdk-stage1/dietlibc/lib/__fstat64.c7
-rw-r--r--mdk-stage1/dietlibc/lib/__getcwd.c1
-rw-r--r--mdk-stage1/dietlibc/lib/__isnan.c7
-rw-r--r--mdk-stage1/dietlibc/lib/__lltostr.c4
-rw-r--r--mdk-stage1/dietlibc/lib/__lstat64.c7
-rw-r--r--mdk-stage1/dietlibc/lib/__ltostr.c5
-rw-r--r--mdk-stage1/dietlibc/lib/__stat64.c7
-rw-r--r--mdk-stage1/dietlibc/lib/__stat64_cvt.c2
-rw-r--r--mdk-stage1/dietlibc/lib/__xmknod.c6
-rw-r--r--mdk-stage1/dietlibc/lib/_brk.c13
-rw-r--r--mdk-stage1/dietlibc/lib/abort.c10
-rw-r--r--mdk-stage1/dietlibc/lib/abs.c10
-rw-r--r--mdk-stage1/dietlibc/lib/accept.c8
-rw-r--r--mdk-stage1/dietlibc/lib/alarm.c47
-rw-r--r--mdk-stage1/dietlibc/lib/alloc.c372
-rw-r--r--mdk-stage1/dietlibc/lib/assert_fail.c11
-rw-r--r--mdk-stage1/dietlibc/lib/atexit.c32
-rw-r--r--mdk-stage1/dietlibc/lib/atoi.c21
-rw-r--r--mdk-stage1/dietlibc/lib/atol.c25
-rw-r--r--mdk-stage1/dietlibc/lib/bind.c11
-rw-r--r--mdk-stage1/dietlibc/lib/bsearch.c30
-rw-r--r--mdk-stage1/dietlibc/lib/cfmakeraw.c3
-rw-r--r--mdk-stage1/dietlibc/lib/closedir.c3
-rw-r--r--mdk-stage1/dietlibc/lib/connect.c7
-rw-r--r--mdk-stage1/dietlibc/lib/creat.c4
-rw-r--r--mdk-stage1/dietlibc/lib/errlist.c132
-rw-r--r--mdk-stage1/dietlibc/lib/errno_location.c2
-rw-r--r--mdk-stage1/dietlibc/lib/exec_lib.c7
-rw-r--r--mdk-stage1/dietlibc/lib/execl.c3
-rw-r--r--mdk-stage1/dietlibc/lib/execlp.c6
-rw-r--r--mdk-stage1/dietlibc/lib/execv.c4
-rw-r--r--mdk-stage1/dietlibc/lib/execvp.c23
-rw-r--r--mdk-stage1/dietlibc/lib/ftw.c77
-rw-r--r--mdk-stage1/dietlibc/lib/getdomainname.c3
-rw-r--r--mdk-stage1/dietlibc/lib/getenv.c3
-rw-r--r--mdk-stage1/dietlibc/lib/gethostname.c3
-rw-r--r--mdk-stage1/dietlibc/lib/getopt.c155
-rw-r--r--mdk-stage1/dietlibc/lib/getpeername.c13
-rw-r--r--mdk-stage1/dietlibc/lib/getservent.c137
-rw-r--r--mdk-stage1/dietlibc/lib/getsockname.c11
-rw-r--r--mdk-stage1/dietlibc/lib/getsockopt.c11
-rw-r--r--mdk-stage1/dietlibc/lib/htonl.c5
-rw-r--r--mdk-stage1/dietlibc/lib/htons.c5
-rw-r--r--mdk-stage1/dietlibc/lib/if_indextoname.c3
-rw-r--r--mdk-stage1/dietlibc/lib/if_nametoindex.c5
-rw-r--r--mdk-stage1/dietlibc/lib/isalnum.c8
-rw-r--r--mdk-stage1/dietlibc/lib/isalpha.c7
-rw-r--r--mdk-stage1/dietlibc/lib/isascii.c6
-rw-r--r--mdk-stage1/dietlibc/lib/isatty.c8
-rw-r--r--mdk-stage1/dietlibc/lib/isblank.c4
-rw-r--r--mdk-stage1/dietlibc/lib/iscntrl.c7
-rw-r--r--mdk-stage1/dietlibc/lib/isdigit.c7
-rw-r--r--mdk-stage1/dietlibc/lib/isgraph.c7
-rw-r--r--mdk-stage1/dietlibc/lib/islower.c7
-rw-r--r--mdk-stage1/dietlibc/lib/isprint.c7
-rw-r--r--mdk-stage1/dietlibc/lib/ispunct.c8
-rw-r--r--mdk-stage1/dietlibc/lib/isspace.c7
-rw-r--r--mdk-stage1/dietlibc/lib/isupper.c8
-rw-r--r--mdk-stage1/dietlibc/lib/isxdigit.c9
-rw-r--r--mdk-stage1/dietlibc/lib/listen.c11
-rw-r--r--mdk-stage1/dietlibc/lib/lockf.c1
-rw-r--r--mdk-stage1/dietlibc/lib/longjmp.c57
-rw-r--r--mdk-stage1/dietlibc/lib/lseek64.c10
-rw-r--r--mdk-stage1/dietlibc/lib/memccmp.c17
-rw-r--r--mdk-stage1/dietlibc/lib/memccpy.c1
-rw-r--r--mdk-stage1/dietlibc/lib/memchr.c12
-rw-r--r--mdk-stage1/dietlibc/lib/memcmp.c2
-rw-r--r--mdk-stage1/dietlibc/lib/memcpy.c2
-rw-r--r--mdk-stage1/dietlibc/lib/memmove.c1
-rw-r--r--mdk-stage1/dietlibc/lib/memset.c4
-rw-r--r--mdk-stage1/dietlibc/lib/mkfifo.c4
-rw-r--r--mdk-stage1/dietlibc/lib/msgctl.c3
-rw-r--r--mdk-stage1/dietlibc/lib/msgget.c3
-rw-r--r--mdk-stage1/dietlibc/lib/msgrcv.c8
-rw-r--r--mdk-stage1/dietlibc/lib/msgsnd.c3
-rw-r--r--mdk-stage1/dietlibc/lib/nop.c7
-rw-r--r--mdk-stage1/dietlibc/lib/open64.c9
-rw-r--r--mdk-stage1/dietlibc/lib/opendir.c26
-rw-r--r--mdk-stage1/dietlibc/lib/perror.c32
-rw-r--r--mdk-stage1/dietlibc/lib/pread.c1
-rw-r--r--mdk-stage1/dietlibc/lib/pread64.c3
-rw-r--r--mdk-stage1/dietlibc/lib/putenv.c19
-rw-r--r--mdk-stage1/dietlibc/lib/puts.c12
-rw-r--r--mdk-stage1/dietlibc/lib/qsort.c22
-rw-r--r--mdk-stage1/dietlibc/lib/raise.c3
-rw-r--r--mdk-stage1/dietlibc/lib/rand.c7
-rw-r--r--mdk-stage1/dietlibc/lib/random.c9
-rw-r--r--mdk-stage1/dietlibc/lib/readdir.c2
-rw-r--r--mdk-stage1/dietlibc/lib/reboot.c6
-rw-r--r--mdk-stage1/dietlibc/lib/recv.c8
-rw-r--r--mdk-stage1/dietlibc/lib/recvfrom.c8
-rw-r--r--mdk-stage1/dietlibc/lib/recvmsg.c8
-rw-r--r--mdk-stage1/dietlibc/lib/remove.c2
-rw-r--r--mdk-stage1/dietlibc/lib/sbrk.c11
-rw-r--r--mdk-stage1/dietlibc/lib/semctl.c13
-rw-r--r--mdk-stage1/dietlibc/lib/semget.c3
-rw-r--r--mdk-stage1/dietlibc/lib/semop.c3
-rw-r--r--mdk-stage1/dietlibc/lib/send.c8
-rw-r--r--mdk-stage1/dietlibc/lib/sendmsg.c8
-rw-r--r--mdk-stage1/dietlibc/lib/sendto.c10
-rw-r--r--mdk-stage1/dietlibc/lib/set_errno.c9
-rw-r--r--mdk-stage1/dietlibc/lib/setsockopt.c11
-rw-r--r--mdk-stage1/dietlibc/lib/shmat.c5
-rw-r--r--mdk-stage1/dietlibc/lib/shmctl.c3
-rw-r--r--mdk-stage1/dietlibc/lib/shmdt.c3
-rw-r--r--mdk-stage1/dietlibc/lib/shmget.c3
-rw-r--r--mdk-stage1/dietlibc/lib/shutdown.c8
-rw-r--r--mdk-stage1/dietlibc/lib/sigaddset.c28
-rw-r--r--mdk-stage1/dietlibc/lib/sigdelset.c28
-rw-r--r--mdk-stage1/dietlibc/lib/sigemptyset.c12
-rw-r--r--mdk-stage1/dietlibc/lib/sigfillset.c16
-rw-r--r--mdk-stage1/dietlibc/lib/sigismember.c29
-rw-r--r--mdk-stage1/dietlibc/lib/sigjmp.c35
-rw-r--r--mdk-stage1/dietlibc/lib/sleep.c2
-rw-r--r--mdk-stage1/dietlibc/lib/snprintf.c3
-rw-r--r--mdk-stage1/dietlibc/lib/socket.c11
-rw-r--r--mdk-stage1/dietlibc/lib/speed.c67
-rw-r--r--mdk-stage1/dietlibc/lib/sprintf.c10
-rw-r--r--mdk-stage1/dietlibc/lib/sscanf.c3
-rw-r--r--mdk-stage1/dietlibc/lib/strcasecmp.c29
-rw-r--r--mdk-stage1/dietlibc/lib/strchr.c1
-rw-r--r--mdk-stage1/dietlibc/lib/strcmp.c2
-rw-r--r--mdk-stage1/dietlibc/lib/strcpy.c7
-rw-r--r--mdk-stage1/dietlibc/lib/strerror.c22
-rw-r--r--mdk-stage1/dietlibc/lib/strlen.c2
-rw-r--r--mdk-stage1/dietlibc/lib/strncasecmp.c34
-rw-r--r--mdk-stage1/dietlibc/lib/strncat.c7
-rw-r--r--mdk-stage1/dietlibc/lib/strncmp.c13
-rw-r--r--mdk-stage1/dietlibc/lib/strncpy.c9
-rw-r--r--mdk-stage1/dietlibc/lib/strsep.c4
-rw-r--r--mdk-stage1/dietlibc/lib/strstr.c8
-rw-r--r--mdk-stage1/dietlibc/lib/strtod.c104
-rw-r--r--mdk-stage1/dietlibc/lib/strtok.c2
-rw-r--r--mdk-stage1/dietlibc/lib/strtol.c17
-rw-r--r--mdk-stage1/dietlibc/lib/strtoll.c5
-rw-r--r--mdk-stage1/dietlibc/lib/strtoul.c32
-rw-r--r--mdk-stage1/dietlibc/lib/strtoull.c1
-rw-r--r--mdk-stage1/dietlibc/lib/sys_siglist.c209
-rw-r--r--mdk-stage1/dietlibc/lib/tcdrain.c1
-rw-r--r--mdk-stage1/dietlibc/lib/tcflush.c24
-rw-r--r--mdk-stage1/dietlibc/lib/tcgetpgrp.c7
-rw-r--r--mdk-stage1/dietlibc/lib/tcsetattr.c46
-rw-r--r--mdk-stage1/dietlibc/lib/tcsetpgrp.c1
-rw-r--r--mdk-stage1/dietlibc/lib/tolower.c6
-rw-r--r--mdk-stage1/dietlibc/lib/toupper.c6
-rw-r--r--mdk-stage1/dietlibc/lib/ttyname.c21
-rw-r--r--mdk-stage1/dietlibc/lib/usleep.c6
-rw-r--r--mdk-stage1/dietlibc/lib/vfork.c6
-rw-r--r--mdk-stage1/dietlibc/lib/vfprintf.c19
-rw-r--r--mdk-stage1/dietlibc/lib/vprintf.c14
-rw-r--r--mdk-stage1/dietlibc/lib/vsnprintf.c255
-rw-r--r--mdk-stage1/dietlibc/lib/vsprintf.c10
-rw-r--r--mdk-stage1/dietlibc/lib/vsscanf.c311
-rw-r--r--mdk-stage1/dietlibc/libcruft/dnscruft.c132
-rw-r--r--mdk-stage1/dietlibc/libcruft/dnscruft2.c264
-rw-r--r--mdk-stage1/dietlibc/libcruft/entlib.c153
-rw-r--r--mdk-stage1/dietlibc/libcruft/entlib.h44
-rw-r--r--mdk-stage1/dietlibc/libcruft/getgrgid.c13
-rw-r--r--mdk-stage1/dietlibc/libcruft/getgrnam.c13
-rw-r--r--mdk-stage1/dietlibc/libcruft/gethostbyaddr.c37
-rw-r--r--mdk-stage1/dietlibc/libcruft/gethostbyaddr_r.c67
-rw-r--r--mdk-stage1/dietlibc/libcruft/gethostbyname.c39
-rw-r--r--mdk-stage1/dietlibc/libcruft/gethostbyname2.c40
-rw-r--r--mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c35
-rw-r--r--mdk-stage1/dietlibc/libcruft/gethostbyname_r.c54
-rw-r--r--mdk-stage1/dietlibc/libcruft/getlogin.c3
-rw-r--r--mdk-stage1/dietlibc/libcruft/getpagesize.c1
-rw-r--r--mdk-stage1/dietlibc/libcruft/getpass.c24
-rw-r--r--mdk-stage1/dietlibc/libcruft/getpwnam.c15
-rw-r--r--mdk-stage1/dietlibc/libcruft/getpwuid.c12
-rw-r--r--mdk-stage1/dietlibc/libcruft/getspnam.c15
-rw-r--r--mdk-stage1/dietlibc/libcruft/grent.c54
-rw-r--r--mdk-stage1/dietlibc/libcruft/herrno_location.c9
-rw-r--r--mdk-stage1/dietlibc/libcruft/inet_aton.c2
-rw-r--r--mdk-stage1/dietlibc/libcruft/inet_ntoa.c2
-rw-r--r--mdk-stage1/dietlibc/libcruft/inet_ntop.c12
-rw-r--r--mdk-stage1/dietlibc/libcruft/inet_pton.c17
-rw-r--r--mdk-stage1/dietlibc/libcruft/initgroups.c3
-rw-r--r--mdk-stage1/dietlibc/libcruft/mkstemp.c14
-rw-r--r--mdk-stage1/dietlibc/libcruft/pwent.c43
-rw-r--r--mdk-stage1/dietlibc/libcruft/res_init.c6
-rw-r--r--mdk-stage1/dietlibc/libcruft/spent.c45
-rw-r--r--mdk-stage1/dietlibc/libcrypt/crypt.c31
-rw-r--r--mdk-stage1/dietlibc/libdl/Makefile32
-rw-r--r--mdk-stage1/dietlibc/libdl/README82
-rw-r--r--mdk-stage1/dietlibc/libdl/_dl_int.h138
-rw-r--r--mdk-stage1/dietlibc/libdl/_dl_jump.S53
-rw-r--r--mdk-stage1/dietlibc/libdl/_dl_open.c228
-rw-r--r--mdk-stage1/dietlibc/libdl/_dl_search.c81
-rw-r--r--mdk-stage1/dietlibc/libdl/dlclose.c40
-rw-r--r--mdk-stage1/dietlibc/libdl/dlerror.c57
-rw-r--r--mdk-stage1/dietlibc/libdl/dlopen.c31
-rw-r--r--mdk-stage1/dietlibc/libdl/dlsym.c93
-rw-r--r--mdk-stage1/dietlibc/libdl/elf_hash.c12
-rw-r--r--mdk-stage1/dietlibc/liblatin1/latin1-iscntrl.c3
-rw-r--r--mdk-stage1/dietlibc/liblatin1/latin1-isgraph.c5
-rw-r--r--mdk-stage1/dietlibc/liblatin1/latin1-islower.c3
-rw-r--r--mdk-stage1/dietlibc/liblatin1/latin1-isprint.c4
-rw-r--r--mdk-stage1/dietlibc/liblatin1/latin1-isupper.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/CHANGES6
-rw-r--r--mdk-stage1/dietlibc/libpthread/Makefile7
-rw-r--r--mdk-stage1/dietlibc/libpthread/README10
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_atfork.c2
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_attr_init.c1
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_attr_setdetachstate.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_attr_setinheritsched.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_attr_setschedparam.c5
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_attr_setschedpolicy.c5
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_attr_setscope.c5
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_attr_setstacksize.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_cancel.c6
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_cond_broadcast.c9
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_cond_destroy.c4
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_cond_init.c1
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_cond_signal.c2
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_cond_timedwait.c51
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_cond_wait.c26
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_create.c27
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_detach.c11
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_join.c21
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_key_create.c7
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_key_delete.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_mutex_destroy.c5
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_mutex_init.c2
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_mutex_lock.c21
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_mutex_trylock.c9
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_mutex_unlock.c9
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_mutexattr_setkind_np.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_setcancelstate.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_setcanceltype.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_setspecific.c3
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_spinlock.c12
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_sys_alloc.c18
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_sys_fcntl.c1
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_sys_logging.c2
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_sys_open.c1
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_sys_tcdrain.c2
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_sys_waitpid.c2
-rw-r--r--mdk-stage1/dietlibc/libpthread/pthread_testcancel.c2
-rw-r--r--mdk-stage1/dietlibc/libpthread/thread_internal.c344
-rw-r--r--mdk-stage1/dietlibc/libpthread/thread_internal.h23
-rw-r--r--mdk-stage1/dietlibc/libpthread/thread_key.c41
-rw-r--r--mdk-stage1/dietlibc/libregex/rx.c128
-rw-r--r--mdk-stage1/dietlibc/librpc/auth_none.c12
-rw-r--r--mdk-stage1/dietlibc/librpc/auth_unix.c17
-rw-r--r--mdk-stage1/dietlibc/librpc/authunix_prot.c2
-rw-r--r--mdk-stage1/dietlibc/librpc/bindresvport.c4
-rw-r--r--mdk-stage1/dietlibc/librpc/clnt_generic.c10
-rw-r--r--mdk-stage1/dietlibc/librpc/clnt_raw.c17
-rw-r--r--mdk-stage1/dietlibc/librpc/clnt_simple.c10
-rw-r--r--mdk-stage1/dietlibc/librpc/clnt_tcp.c51
-rw-r--r--mdk-stage1/dietlibc/librpc/clnt_udp.c51
-rw-r--r--mdk-stage1/dietlibc/librpc/get_myaddress.c2
-rw-r--r--mdk-stage1/dietlibc/librpc/getrpcent.c9
-rw-r--r--mdk-stage1/dietlibc/librpc/getrpcport.c6
-rw-r--r--mdk-stage1/dietlibc/librpc/pmap_clnt.c17
-rw-r--r--mdk-stage1/dietlibc/librpc/pmap_getmaps.c5
-rw-r--r--mdk-stage1/dietlibc/librpc/pmap_getport.c24
-rw-r--r--mdk-stage1/dietlibc/librpc/pmap_prot2.c4
-rw-r--r--mdk-stage1/dietlibc/librpc/pmap_rmt.c111
-rw-r--r--mdk-stage1/dietlibc/librpc/rpc_callmsg.c12
-rw-r--r--mdk-stage1/dietlibc/librpc/rpc_prot.c4
-rw-r--r--mdk-stage1/dietlibc/librpc/svc.c39
-rw-r--r--mdk-stage1/dietlibc/librpc/svc_auth_unix.c6
-rw-r--r--mdk-stage1/dietlibc/librpc/svc_raw.c6
-rw-r--r--mdk-stage1/dietlibc/librpc/svc_run.c2
-rw-r--r--mdk-stage1/dietlibc/librpc/svc_simple.c6
-rw-r--r--mdk-stage1/dietlibc/librpc/svc_tcp.c58
-rw-r--r--mdk-stage1/dietlibc/librpc/svc_udp.c86
-rw-r--r--mdk-stage1/dietlibc/librpc/xdr.c116
-rw-r--r--mdk-stage1/dietlibc/librpc/xdr_array.c38
-rw-r--r--mdk-stage1/dietlibc/librpc/xdr_mem.c134
-rw-r--r--mdk-stage1/dietlibc/librpc/xdr_rec.c233
-rw-r--r--mdk-stage1/dietlibc/librpc/xdr_reference.c14
-rw-r--r--mdk-stage1/dietlibc/librpc/xdr_stdio.c28
-rw-r--r--mdk-stage1/dietlibc/libshell/fnmatch.c34
-rw-r--r--mdk-stage1/dietlibc/libshell/glob.c84
-rw-r--r--mdk-stage1/dietlibc/libshell/realpath.c18
-rw-r--r--mdk-stage1/dietlibc/libstdio/fclose.c8
-rw-r--r--mdk-stage1/dietlibc/libstdio/fdglue.c34
-rw-r--r--mdk-stage1/dietlibc/libstdio/fdopen.c18
-rw-r--r--mdk-stage1/dietlibc/libstdio/feof.c2
-rw-r--r--mdk-stage1/dietlibc/libstdio/fflush.c34
-rw-r--r--mdk-stage1/dietlibc/libstdio/fgetc.c40
-rw-r--r--mdk-stage1/dietlibc/libstdio/fgets.c4
-rw-r--r--mdk-stage1/dietlibc/libstdio/fopen.c8
-rw-r--r--mdk-stage1/dietlibc/libstdio/fprintf.c18
-rw-r--r--mdk-stage1/dietlibc/libstdio/fputc.c19
-rw-r--r--mdk-stage1/dietlibc/libstdio/fread.c55
-rw-r--r--mdk-stage1/dietlibc/libstdio/fseek.c7
-rw-r--r--mdk-stage1/dietlibc/libstdio/ftell.c2
-rw-r--r--mdk-stage1/dietlibc/libstdio/fwrite.c28
-rw-r--r--mdk-stage1/dietlibc/libstdio/printf.c20
-rw-r--r--mdk-stage1/dietlibc/libstdio/setvbuf.c32
-rw-r--r--mdk-stage1/dietlibc/libstdio/stderr.c25
-rw-r--r--mdk-stage1/dietlibc/libstdio/stdin.c26
-rw-r--r--mdk-stage1/dietlibc/libstdio/stdout.c25
-rw-r--r--mdk-stage1/dietlibc/libstdio/ungetc.c7
-rw-r--r--mdk-stage1/dietlibc/libugly/asctime_r.c2
-rw-r--r--mdk-stage1/dietlibc/libugly/asprintf.c9
-rw-r--r--mdk-stage1/dietlibc/libugly/daemon.c35
-rw-r--r--mdk-stage1/dietlibc/libugly/getmntent.c11
-rw-r--r--mdk-stage1/dietlibc/libugly/getprotoent.c130
-rw-r--r--mdk-stage1/dietlibc/libugly/gmtime_r.c6
-rw-r--r--mdk-stage1/dietlibc/libugly/isleap.c2
-rw-r--r--mdk-stage1/dietlibc/libugly/localtime_r.c8
-rw-r--r--mdk-stage1/dietlibc/libugly/logging.c38
-rw-r--r--mdk-stage1/dietlibc/libugly/mktime.c68
-rw-r--r--mdk-stage1/dietlibc/libugly/popen.c28
-rw-r--r--mdk-stage1/dietlibc/libugly/setenv.c12
-rw-r--r--mdk-stage1/dietlibc/libugly/strftime.c284
-rw-r--r--mdk-stage1/dietlibc/libugly/strsignal.c92
-rw-r--r--mdk-stage1/dietlibc/libugly/system.c36
-rw-r--r--mdk-stage1/dietlibc/libugly/time_table_spd.c5
-rw-r--r--mdk-stage1/dietlibc/libugly/tzfile.c37
-rw-r--r--mdk-stage1/dietlibc/ppc/__testandset.S9
-rw-r--r--mdk-stage1/dietlibc/ppc/mmap.c11
-rw-r--r--mdk-stage1/dietlibc/ppc/start.S32
-rw-r--r--mdk-stage1/dietlibc/ppc/unified.S37
-rw-r--r--mdk-stage1/dietlibc/sparc/Makefile.add1
-rw-r--r--mdk-stage1/dietlibc/sparc/__longjmp.S1
-rw-r--r--mdk-stage1/dietlibc/sparc/clone.S5
-rw-r--r--mdk-stage1/dietlibc/sparc/fork.S2
-rw-r--r--mdk-stage1/dietlibc/sparc/mmap.c4
-rw-r--r--mdk-stage1/dietlibc/sparc/pipe.S2
-rw-r--r--mdk-stage1/dietlibc/sparc/setjmp.S28
-rw-r--r--mdk-stage1/dietlibc/sparc/shmat.c2
-rw-r--r--mdk-stage1/dietlibc/sparc/start.S58
-rw-r--r--mdk-stage1/dietlibc/sparc/udiv.S102
-rw-r--r--mdk-stage1/dietlibc/sparc/umul.S6
-rw-r--r--mdk-stage1/dietlibc/sparc/unified.S10
-rw-r--r--mdk-stage1/dietlibc/sparc/urem.S102
-rw-r--r--mdk-stage1/dietlibc/start.h14
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/_llseek.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/_newselect.c6
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/access.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/chdir.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/chmod.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/chown.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/chroot.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/clone.c1
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/close.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/dup.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/dup2.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/execve.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/exit.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/fchdir.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/fchmod.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/fchown.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/fcntl.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/flock.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/fork.c6
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/fsync.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/ftruncate.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getcwd.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getdents.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getegid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/geteuid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getgid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getgroups.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getpgid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getpid.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getppid.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getpriority.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getresgid.c8
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getresuid.c8
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getrlimit.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getrusage.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getsid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/gettimeofday.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/getuid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/ioctl.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/kill.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/lchown.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/link.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/lseek.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/mkdir.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/mknod.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/mount.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/mprotect.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/mremap.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/munmap.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/nanosleep.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/open.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/pipe.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/poll.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/read.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/readlink.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/reboot.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/rename.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/rmdir.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setdomainname.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setgid.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setgroups.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/sethostname.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setitimer.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setpgid.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setpriority.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setregid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setresgid.c8
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setresuid.c8
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setreuid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setrlimit.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setsid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/setuid.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/sigaction.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/signal.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/sigpending.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/sigprocmask.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/sigsuspend.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/socketcall.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/swapoff.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/swapon.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/symlink.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/sync.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/syslog.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/time.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/truncate.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/umask.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/umount.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/uname.c5
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/unlink.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/utime.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/vhangup.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/wait4.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/waitpid.c4
-rw-r--r--mdk-stage1/dietlibc/syscalls.c/write.c3
-rw-r--r--mdk-stage1/dietlibc/syscalls.h151
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/__pread.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/_llseek.S4
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/exit.S3
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/fstat64.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/getdents64.S1
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/getresuid.S4
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/ioperm.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/ipc.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/llseek.S6
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/lstat64.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/nice.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/pause.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/ptrace.s3
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/pwrite.S3
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/sendfile.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/setresgid.S4
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/setresuid.S4
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/sigaction.S3
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/signal.S3
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/sigpending.S3
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/sigprocmask.S3
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/sigsuspend.S3
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/socketcall.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/stat64.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/stime.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/syslog.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/time.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/umount2.S2
-rw-r--r--mdk-stage1/dietlibc/syscalls.s/waitpid.S2
-rw-r--r--mdk-stage1/disk.c176
-rw-r--r--mdk-stage1/disk.h1
-rw-r--r--mdk-stage1/dns.c13
-rw-r--r--mdk-stage1/doc/README6
-rw-r--r--mdk-stage1/frontend.h6
-rw-r--r--mdk-stage1/init-libc-headers.h1
-rw-r--r--mdk-stage1/init.c13
-rw-r--r--mdk-stage1/insmod-busybox/Config.h13
-rw-r--r--mdk-stage1/insmod-busybox/Makefile38
-rw-r--r--mdk-stage1/insmod-busybox/README8
-rw-r--r--mdk-stage1/insmod-busybox/busybox.h10
-rw-r--r--mdk-stage1/insmod-busybox/insmod.c1789
-rw-r--r--mdk-stage1/insmod-modutils/Makefile24
-rw-r--r--mdk-stage1/insmod-modutils/include/config.h3
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_alpha.h1
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_arm.h1
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_i386.h1
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_m68k.h1
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_mips.h1
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_ppc.h1
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_s390.h5
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_sparc.h1
-rw-r--r--mdk-stage1/insmod-modutils/include/elf_sparc64.h1
-rw-r--r--mdk-stage1/insmod-modutils/include/kallsyms.h8
-rw-r--r--mdk-stage1/insmod-modutils/include/kerneld.h2
-rw-r--r--mdk-stage1/insmod-modutils/include/module.h17
-rw-r--r--mdk-stage1/insmod-modutils/include/obj.h39
-rw-r--r--mdk-stage1/insmod-modutils/include/util.h8
-rw-r--r--mdk-stage1/insmod-modutils/include/version.h2
-rw-r--r--mdk-stage1/insmod-modutils/insmod.c255
-rw-r--r--mdk-stage1/insmod-modutils/obj/Makefile11
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_alpha.c49
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_arm.c22
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_common.c41
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_hppa.c74
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_hppa64.c60
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_i386.c14
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_ia64.c79
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_kallsyms.c6
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_load.c29
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_m68k.c2
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_mips.c22
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_ppc.c35
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_reloc.c46
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_s390.c181
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_sparc.c2
-rw-r--r--mdk-stage1/insmod-modutils/obj/obj_sparc64.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/Makefile8
-rw-r--r--mdk-stage1/insmod-modutils/util/alias.h80
-rw-r--r--mdk-stage1/insmod-modutils/util/arch64.c16
-rw-r--r--mdk-stage1/insmod-modutils/util/config.c29
-rw-r--r--mdk-stage1/insmod-modutils/util/logger.c49
-rw-r--r--mdk-stage1/insmod-modutils/util/snap_shot.c4
-rw-r--r--mdk-stage1/insmod-modutils/util/sys_cm.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/sys_dm.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/sys_gks.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/sys_nim.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/sys_oim.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/sys_qm.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/xmalloc.c4
-rw-r--r--mdk-stage1/insmod-modutils/util/xrealloc.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/xstrcat.c2
-rw-r--r--mdk-stage1/insmod-modutils/util/xstrdup.c4
-rw-r--r--mdk-stage1/insmod-modutils/util/xsystem.c2
-rw-r--r--mdk-stage1/log.c7
-rw-r--r--mdk-stage1/mar/Makefile19
-rw-r--r--mdk-stage1/minilibc.c76
-rw-r--r--mdk-stage1/minilibc.h26
-rw-r--r--mdk-stage1/modules.c19
-rw-r--r--mdk-stage1/mount.c24
-rw-r--r--mdk-stage1/network.c17
-rw-r--r--mdk-stage1/newt-frontend.c2
-rw-r--r--mdk-stage1/newt/Makefile16
-rw-r--r--mdk-stage1/newt/form.c1
-rwxr-xr-xmdk-stage1/pci-resource/update-pci-ids.pl42
-rw-r--r--mdk-stage1/pcmcia_/Makefile17
-rw-r--r--mdk-stage1/pcmcia_/cardmgr.c6
-rwxr-xr-xmdk-stage1/pcmcia_/merge_from_pcitable6
-rw-r--r--mdk-stage1/pcmcia_/probe.c9
-rw-r--r--mdk-stage1/ppp/include/net/ppp_defs.h2
-rw-r--r--mdk-stage1/ppp/pppd/Makefile26
-rw-r--r--mdk-stage1/ppp/pppd/sys-linux.c2
-rw-r--r--mdk-stage1/ppp/pppd/utils.c2
-rw-r--r--mdk-stage1/probing.c129
-rw-r--r--mdk-stage1/rescue-gui.c18
-rw-r--r--mdk-stage1/rp-pppoe/src/Makefile25
-rw-r--r--mdk-stage1/slang/Makefile16
-rw-r--r--mdk-stage1/stage1.c10
-rw-r--r--mdk-stage1/stage1.h4
-rw-r--r--mdk-stage1/stdio-frontend.c7
-rw-r--r--mdk-stage1/tools.c2
-rw-r--r--mdk-stage1/url.c4
-rwxr-xr-xmdk-stage1/usb-resource/update-usb-ids.pl3
-rw-r--r--perl-install/list.sparc74
-rw-r--r--perl-install/modules.pm4
-rw-r--r--perl-install/share/compssList1665
-rw-r--r--perl-install/share/logo-mandrake.pngbin10985 -> 13292 bytes
-rw-r--r--perl-install/share/po/br.po12831
684 files changed, 16316 insertions, 22849 deletions
diff --git a/Makefile b/Makefile
index 7d252daa1..2bbe88e06 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ ARCH := $(patsubst i%86,i386,$(shell uname -m))
ARCH := $(patsubst sparc%,sparc,$(ARCH))
ifeq (i386,$(ARCH))
- BOOT_IMG = cdrom.img hd.img network.img usb.img blank.img pcmcia.img other.img
+ BOOT_IMG = cdrom.img hd.img hdcdrom_usb.img network.img network_gigabit_usb.img blank.img pcmcia.img
endif
ifeq (sparc,$(ARCH))
BOOT_IMG = cdrom.img hd.img network.img live.img tftp.img tftprd.img
@@ -19,9 +19,15 @@ endif
ifeq (ia64,$(ARCH))
BOOT_IMG = all.img
endif
+ifeq (x86_64,$(ARCH))
+ BOOT_IMG = cdrom.img hd.img hdcdrom_usb.img network.img network_gigabit.img network_usb.img blank.img
+endif
FBOOT_IMG = $(BOOT_IMG:%=images/%)
-FBOOT_RDZ = $(FBOOT_IMG:%.img=%.rdz) images/all.rdz
+FBOOT_RDZ = $(FBOOT_IMG:%.img=%.rdz)
+ifneq (all.img,$(findstring all.img,$(BOOT_IMG)))
+FBOOT_RDZ += images/all.rdz
+endif
.PHONY: dirs install
@@ -65,6 +71,11 @@ install_only:
cp -f images/cdrom-changedisk.img $(ROOTDEST)/images
endif
+ ifeq (x86_64,$(ARCH))
+ rm -rf $(ROOTDEST)/isolinux
+ cp -af isolinux $(ROOTDEST)
+ endif
+
install live_update $(ROOTDEST)/live_update
make -C perl-install full_stage2
make -C perl-install/share/advertising install
@@ -101,9 +112,7 @@ upload_only:
upload misc make_mdkinst_stage2 ;\
upload misc packdrake ;\
upload misc packdrake.pm ;\
- upload misc rpmtools.pm ;\
upload misc auto ;\
- upload '' live_update ;\
upload images MD5SUM ;\
upload images *.img* ;\
upload images/alternatives '' ;\
diff --git a/kernel/Makefile b/kernel/Makefile
index 90fad04b6..a821d3939 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -4,7 +4,7 @@ all.modules: ../mdk-stage1/mar/mar update_kernel list_modules.pm
`../tools/specific_arch ./update_kernel`
../mdk-stage1/mar/mar:
- make -C `dirname $@`
+ make -C `dirname $@` mar
clean:
rm -rf *~ modules.description all.modules all.modules64
diff --git a/kernel/check_mar.pl b/kernel/check_mar.pl
index d29e65088..aedbfdfe7 100755
--- a/kernel/check_mar.pl
+++ b/kernel/check_mar.pl
@@ -7,13 +7,13 @@ my $mar = '../mdk-stage1/mar/mar';
my %sanity_check = (
hd => [
- if_(arch() !~ /x86_64/, 'aic7xxx'),
- qw(sym53c8xx initio),
- if_(arch() !~ /ppc/, 'advansys'),
+ qw(sym53c8xx),
+ if_(arch() !~ /x86_64/, 'initio'),
+ if_(arch() !~ /ppc|x86_64/, 'advansys'),
],
network => [
qw(3c59x eepro100 tulip via-rhine ne2k-pci 8139too),
- if_(arch() !~ /ppc|x86_64/, 'e100'),
+ if_(arch() !~ /ppc/, 'e100'),
if_(arch() !~ /ppc|ia64/, 'tlan'),
],
);
@@ -22,7 +22,7 @@ my $main_version = chomp_(cat_("all.kernels/.main"));
foreach (keys %sanity_check) {
my $marfile = "all.modules/$main_version/${_}_modules.mar";
- -e $mar or die "ERROR: missing $marfile\n";
+ -e $marfile or die "ERROR: missing $marfile\n";
my @l = map { /(\S+)\.o/ } `$mar -l $marfile`;
my @pbs = difference2($sanity_check{$_}, \@l);
diff --git a/kernel/list_modules.pm b/kernel/list_modules.pm
index b1ce99e3f..4488a9cfe 100644
--- a/kernel/list_modules.pm
+++ b/kernel/list_modules.pm
@@ -14,26 +14,34 @@ our %l = (
network =>
{
main => [
- if_(arch() =~ /ppc/, qw(mace bmac gmac)),
- if_(arch() =~ /^sparc/, qw(myri_sbus sunbmac sunhme sunqe)),
- if_(arch() !~ /alpha/ && arch() !~ /sparc/,
- qw(3c501 3c503 3c505 3c507 3c509 3c515), # 3c90x
- qw(82596 abyss ac3200 acenic aironet4500_card at1700 atp com20020-pci),
- qw(cs89x0 de600 de620 r8169),
- qw(defxx orinoco_plx), # most unused
- qw(depca dgrs dmfe e100 e1000 e2100 eepro eepro100 eexpress epic100 eth16i),
+ if_(arch() =~ /ppc/, qw(mace bmac gmac airport)),
+ if_(arch() =~ /^sparc/, qw(sunbmac sunhme sunqe)),
+ if_(arch() !~ /alpha|sparc/,
+ qw(3c501 3c503 3c505 3c507 3c509 3c515 3c90x),
+ qw(82596 abyss ac3200 acenic aironet4500_card at1700 atp com20020-pci),
+ qw(cs89x0 de600 de620),
+ qw(acx100_pci defxx orinoco_plx), # most unused
+ qw(depca dgrs dmfe e100 e2100 eepro eepro100 eexpress epic100 eth16i),
qw(ewrk3 hamachi hp hp-plus hp100 ibmtr),
- qw(lance natsemi ne ne2k-pci ni5010 ni52 ni65 nvnet olympic pcnet32 plip rcpci), #old_tulip
- qw(sb1000 sis900 sk98lin smc-ultra smc9194 starfire tg3 tlan tmspci tulip via-rhine), #sktr
- qw(wd winbond-840 yellowfin ns83820),
+ qw(lance natsemi ne ne2k-pci ni5010 ni52 ni65 nvnet olympic pcnet32 plip rcpci),
+ qw(sb1000 sis900 smc-ultra smc9194 starfire tlan tmspci tulip via-rhine),
+ qw(wd winbond-840),
+ qw(fealnx 3c990 3c990fx bcm4400),
+ qw(skfp tc35815 lanstreamer farsync sdladrv orinoco_pci prism2_plx),
qw(iph5526), #- fibre channel
),
- qw(3c59x 8139too sundance dl2k), #rtl8139
+ qw(3c59x 8139too 8139cp sundance), #rtl8139
+
],
+
+ gigabit => [
+ qw(dl2k myri_sbus yellowfin ns83820 r8169 tg3 e1000 sk98lin),
+ qw(bcm5820 bcm5700), #- encrypted
+ ],
+
raw => [
- qw(8390 mii),
- qw(ppp_generic ppp_async slhc aironet4500_core),
+ qw(ppp_generic ppp_async),
],
pcmcia => [
qw(3c574_cs 3c589_cs airo airo_cs aironet4500_cs axnet_cs fmvj18x_cs),
@@ -41,7 +49,7 @@ our %l = (
qw(xirc2ps_cs xircom_cb xircom_tulip_cb),
],
usb => [
- qw(pegasus kaweth usbnet catc CDCEther),
+ qw(catc CDCEther kaweth pegasus rtl8150 usbnet usbvnet_rfmd),
],
isdn => [
qw(b1pci c4 hisax hisax_fcpcipnp hysdn t1pci tpam),
@@ -56,19 +64,19 @@ our %l = (
if_(arch() =~ /^sparc/, qw(qlogicpti)),
if_(arch() !~ /alpha/ && arch() !~ /sparc/,
qw(3w-xxxx AM53C974 BusLogic NCR53c406a a100u2w advansys aha152x aha1542 aha1740),
- qw(atp870u dc395x_trm dtc fdomain g_NCR5380 in2000 initio pas16 pci2220i psi240i),
+ qw(atp870u dc395x_trm dtc g_NCR5380 in2000 initio pas16 pci2220i psi240i fdomain),
qw(qla1280 qla2x00 qlogicfas qlogicfc),
- qw(seagate sim710 sym53c416 t128 tmscsim u14-34f ultrastor wd7000),
- qw(eata eata_pio eata_dma),
+ qw(seagate wd7000 sim710 sym53c416 t128 tmscsim u14-34f ultrastor),
+ qw(eata eata_pio eata_dma mptscsih nsp32),
),
'53c7,8xx',
- qw(aic7xxx pci2000 qlogicisp sym53c8xx), # ncr53c8xx
+ qw(aic7xxx aic7xxx_old aic79xx pci2000 qlogicisp sym53c8xx lpfcdd), # ncr53c8xx
],
hardware_raid => [
if_(arch() =~ /^sparc/, qw(pluto)),
if_(arch() !~ /alpha/ && arch() !~ /sparc/,
- qw(DAC960 dpt_i2o megaraid aacraid ataraid cciss cpqarray gdth i2o_block),
- qw(qla2200 qla2300 cpqfc),
+ qw(DAC960 dpt_i2o megaraid aacraid cciss cpqarray gdth i2o_block),
+ qw(cpqfc qla2200 qla2300 ataraid hptraid silraid pdcraid pdc-ultra),
qw(ips ppa imm),
),
],
@@ -86,7 +94,7 @@ our %l = (
usb => [ qw(usbcore usb-uhci usb-ohci ehci-hcd usbkbd keybdev input) ],
firewire => [ qw(ohci1394 ieee1394) ],
pcmcia => [
- if_(arch() !~ /^sparc/, qw(pcmcia_core tcic ds i82365 yenta_socket)), # cb_enabler
+ if_(arch() !~ /^sparc/, qw(pcmcia_core tcic ds i82365 i82092 yenta_socket)), # cb_enabler
],
#serial_cs
#ftl_cs 3c575_cb apa1480_cb epic_cb serial_cb tulip_cb iflash2+_mtd iflash2_mtd
@@ -99,7 +107,7 @@ our %l = (
cdrom => [ qw(isofs) ],
loopback => [ qw(isofs loop) ],
local => [
- if_(arch() =~ /^i.86/, qw(vfat fat)),
+ if_(arch() =~ /^i.86|x86_64/, qw(vfat fat)),
if_(arch() =~ /^ppc/, qw(hfs)),
qw(reiserfs),
],
@@ -111,19 +119,19 @@ our %l = (
multimedia =>
{
sound => [
- if_(arch() =~ /ppc/, qw(dmasound_awacs)),
+ if_(arch() =~ /ppc/, qw(dmasound_pmac)),
if_(arch() !~ /^sparc/,
- qw(ad1816 ad1848 awe_wave audigy cmpci cs46xx cs4232 cs4281 emu10k1 es1370 es1371 esssolo1),
- qw(gus i810_audio mad16 maestro maestro3 mpu401 msnd_pinnacle opl3 opl3sa opl3sa2 nm256_audio),
- qw(pas2 rme96xx sb sgalaxy sam9407 sonicvibes sscape trident via82cxxx_audio wavefront ymfpci),
- qw(snd-ali5451 snd-als100 snd-als4000 snd-azt2320 snd-cmi8330 snd-cmipci snd-cs46xx snd-dt0197h),
- qw(snd-cs4281 snd-emu10k1),
- qw(snd-ad1816a snd-ad1848 snd-cs4232 snd-gusclassic snd-gusextreme snd-gusmax snd-interwave),
- qw(snd-mpu401 snd-opl3sa2 snd-opl3sa2 snd-opti93x snd-rme9652 snd-sb8 snd-sbawe),
+ qw(ad1816 ad1848 ad1889 ali5455 awe_wave audigy cmpci cs46xx cs4232 cs4281 emu10k1 es1370 es1371 esssolo1 forte),
+ qw(gus i810_audio ice1712 kahlua mad16 maestro maestro3 mpu401 msnd_pinnacle nvaudio opl3 opl3sa opl3sa2 nm256_audio),
+ qw(pas2 pss rme96xx sb sgalaxy sam9407 sonicvibes sscape trident via82cxxx_audio wavefront ymfpci),
+ qw(snd-ali5451 snd-als100 snd-als4000 snd-azt2320 snd-azt3328 snd-cmi8330 snd-cmipci),
+ qw(snd-cs4231 snd-cs4232 snd-cs4236 snd-cs46xx snd-dt0197h snd-cs4281 snd-emu10k1),
+ qw(snd-ad1816a snd-ad1848 snd-gusclassic snd-gusextreme snd-gusmax snd-interwave),
+ qw(snd-mpu401 snd-opti93x snd-rme9652 snd-sb8 snd-sbawe),
qw(snd-ens1370 snd-ens1371 snd-es18xx snd-es968 snd-es1938 snd-es1968 snd-es1688),
- qw(snd-fm801 snd-hdsp snd-ice1712 snd-intel8x0 snd-korg1212 snd-maestro3),
+ qw(snd-fm801 snd-hdsp snd-ice1712 snd-ice1724 snd-intel8x0 snd-korg1212 snd-maestro3),
qw(snd-nm256 snd-rme96 snd-rme32 snd-opl3sa2 snd-sb16 snd-sgalaxy snd-sonicvibes),
- qw(snd-trident snd-usb-audio snd-via686 snd-via8233 snd-wavefront snd-ymfpci),
+ qw(snd-trident audio snd-via82xx snd-vx222 snd-wavefront snd-ymfpci),
),
],
tv => [ qw(bttv cpia_usb ibmcam mod_quickcam ov511 ov518_decomp ultracam usbvideo cyber2000fb saa7134) ],
@@ -143,6 +151,7 @@ our %l = (
qw(busmouse msbusmouse logibusmouse serial qpmouse atixlmouse),
],
char => [
+ if_(arch() =~ /ia64/, qw(efivars)),
qw(amd768_rng applicom n_r3964 nvram pc110pad ppdev),
qw(mxser moxa isicom wdt_pci epca synclink istallion sonypi i810-tco sx), #- what are these???
],
@@ -152,7 +161,7 @@ our %l = (
qw(btaudio),
#- these need checking
- qw(pcilynx sktr rrunner gmac meye 3c559 buz paep),
+ qw(pcilynx sktr rrunner meye 3c559 buz paep),
],
},
);
diff --git a/kernel/modules.pl b/kernel/modules.pl
index 6e8f04307..e06157368 100644
--- a/kernel/modules.pl
+++ b/kernel/modules.pl
@@ -10,111 +10,170 @@ BEGIN {
use MDK::Common;
use list_modules;
-
-my @skip_big_modules_on_stage1 = (
-qw(
-olympic
-sk98lin acenic
-3c90x
-ns83820
-aironet4500_card aironet4500_core com20020-pci hamachi starfire winbond-840
-
-dc395x_trm
-BusLogic seagate fdomain g_NCR5380
-)
+#- seldom used modules
+#- we don't bother making a special floppy for those
+my %modules_only_for_all_img = (
+
+ 'network/main' => [
+ qw(olympic acenic),
+ qw(aironet4500_card com20020-pci hamachi starfire winbond-840),
+ qw(fealnx 3c990 3c990fx prism2_plx dgrs),
+
+ # token ring
+ qw(tmspci ibmtr abyss),
+
+ qw(3c501 3c503 3c505 3c507 3c515), # unused, hopefully?
+ qw(eepro 82596 de620 depca ewrk3 cs89x0),
+
+ if_(arch() =~ /x86_64/, qw(orinoco_plx)), # don't support laptop for now
+ if_(arch() =~ /x86_64/, qw(hp100 epic100)), # old (nico)
+ if_(arch() =~ /alpha|ppc/, qw(sb1000)),
+ qw(iph5526),
+
+ qw(ac3200 at1700 atp ni5010 ni52 ni65), #- unused from Jeff
+
+ qw(ewrk3 hamachi ibmtr),
+ qw(ne ni5010 ni52 ni65 nvnet olympic rcpci),
+ qw(skfp tc35815 lanstreamer farsync sdladrv orinoco_pci prism2_plx fealnx 3c990 3c990fx bcm4400),
+
+ qw(acx100_pci eth16i e2100 3c509 orinoco_plx wd eexpress),
+ ],
+
+ 'network/gigabit' => [
+
+ ],
+
+ 'bus/pcmcia' => [
+ if_(arch() =~ /x86_64/, qw(pcmcia_core ds tcic yenta_socket)), # don't support laptop for now
+ if_(arch() =~ /x86_64/, qw(i82092 i82365)), # doco says "older laptops"
+
+ qw(pcmcia_core ds tcic yenta_socket), # don't support laptop for now
+ qw(i82092 i82365), # doco says "older laptops"
+ ],
+
+ 'disk/scsi' => [
+ # ISA cards:
+ qw(NCR53c406a aha152x psi240i qlogicfas qlogicfc wd7000 sim710 t128 ultrastor), '53c7,8xx',
+ qw(qla2x00 in2000 pas16 a100u2w seagate g_NCR5380),
+ if_(arch() =~ /x86_64/, qw(53c7,8xx nsp32 initio advansys atp870u)), #- old
+ qw(AM53C974), # deprecated by tmscsim
+ qw(u14-34f), #- duplicate from ultrastor.o
+ #- still used, keeping them: qw(aha1542 sym53c416),
+
+ qw(dc395x_trm mptscsih BusLogic fdomain),
+ qw(pci2220i eata eata_pio eata_dma),
+ 'aic7xxx_old',
+ 'lpfcdd',
+ qw(seagate wd7000 sim710 sym53c416 t128 tmscsim u14-34f ultrastor),
+ qw(eata eata_pio eata_dma nsp32),
+ qw(AM53C974 BusLogic NCR53c406a aha152x aha1542 aha1740 qlogicisp),
+ '53c7,8xx',
+ ],
+
+ 'disk/hardware_raid' => [
+ if_(arch() =~ /x86_64/, qw(ataraid)), #- old
+ qw(i2o_block qla2200 qla2300 cpqfc DAC960 gdth pdc-ultra),
+ ],
);
-my @skip_modules_on_stage1 = (
- qw(sktr tmspci ibmtr abyss), # alt token ring
- qw(old_tulip rtl8139),
- if_(arch() =~ /alpha|ppc/, qw(sb1000)),
- qw(
- tg3 r8169
- apa1480_cb
- imm ppa plip
- 3w-xxxx pci2220i qla2x00 i2o_block
- eata_pio eata_dma
- qla2200 qla2300
- iph5526
- ),
- 'AM53C974', # deprecated by tmscsim
- qw(ac3200 at1700 atp ni5010 ni52 ni65), #- unused from Jeff
- "u14-34f", #- duplicate from ultrastor.o
+#- modules that will only be available in stage2
+#- those modules are NOT in all.img, network.img...
+#- there should only be modules that can't be used on stage1
+#- completly unused modules should be removed directly from the kernel
+#- (and so be removed from stage2 too)
+my %modules_removed_from_stage1 = (
+ 'network/main' => [
+ 'plip'
+ ],
+
+ 'disk/hardware_raid' => [
+ qw(imm ppa),
+ qw(ataraid hptraid silraid pdcraid), # ad-hoc raid which is unsupported in stage1 anyway
+ ],
);
+my @modules_always_on_stage1 = qw(floppy);
+
+
+sub flatten_and_check {
+ my ($h) = @_;
+ map {
+ my $category = $_;
+ my @l = @{$h->{$category}};
+ if (my @bad = difference2(\@l, [ category2modules($category) ])) {
+ foreach (@bad) {
+ if (my $cat = module2category($_)) {
+ warn "ERROR in modules.pl: module $_ is in category $cat, not in $category\n";
+ } else {
+ warn "ERROR in modules.pl: unknown module $_\n";
+ }
+ }
+ exit 1;
+ }
+ @l;
+ } keys %$h;
+}
+
+my @modules_only_for_all_img = flatten_and_check(\%modules_only_for_all_img);
+my @modules_removed_from_stage1 = flatten_and_check(\%modules_removed_from_stage1);
+
+
my %images = (
+ network_gigabit
+ => 'fs/network network/raw network/gigabit',
+ network_usb
+ => 'fs/network network/raw bus/usb network/usb',
+ network_gigabit_usb
+ => 'fs/network network/raw bus/usb network/gigabit|usb',
network => 'fs/network network/raw bus/pcmcia network/main',
hd => 'disk/raw fs/local|loopback disk/scsi|hardware_raid',
- other => 'disk/scsi|hardware_raid network/main ONLY_BIG fs/cdrom disk/cdrom|raw fs/network network/raw',
+ hdcdrom_usb
+ => 'disk/cdrom|raw fs/local|loopback|cdrom bus/usb disk/usb bus/firewire disk/firewire',
pcmcia => 'fs/cdrom disk/cdrom|raw|pcmcia bus/pcmcia fs/network network/pcmcia|raw',
cdrom => 'fs/cdrom disk/cdrom|raw|scsi',
- usb => 'fs/cdrom disk/cdrom|raw bus/usb disk/usb fs/network network/usb|raw bus/firewire disk/firewire',
- all => 'fs/cdrom disk/cdrom|raw bus/usb disk/usb|scsi fs/loopback|local bus/pcmcia disk/pcmcia|hardware_raid fs/network network/main|pcmcia|usb|raw bus/firewire disk/firewire',
+ all => 'fs/cdrom disk/cdrom|raw bus/usb disk/usb|scsi fs/loopback|local bus/pcmcia disk/pcmcia|hardware_raid fs/network network/main|pcmcia|usb|raw|gigabit bus/firewire disk/firewire',
);
+load_dependencies(glob("all.modules/2.4*/modules.dep"));
+
my $verbose = "@ARGV" =~ /-v/;
images() if "@ARGV" =~ /images/;
check() if "@ARGV" =~ /check/;
pci_modules4stage1($1) if "@ARGV" =~ /pci_modules4stage1:(.*)/;
sub images {
- load_dependencies('modules.dep');
-
while (my ($image, $l) = each %images) {
- my @modules;
+ my @modules = @modules_always_on_stage1;
foreach (split(' ', $l)) {
- if (/ONLY_BIG/) {
- @modules = intersection(\@modules, \@skip_big_modules_on_stage1);
- next;
- }
push @modules, category2modules($_);
}
+
+ @modules = difference2(\@modules, \@modules_removed_from_stage1);
if ($image !~ /all/) {
- @modules = difference2(\@modules, \@skip_modules_on_stage1);
- }
- if ($image !~ /other|all/) {
- @modules = difference2(\@modules, \@skip_big_modules_on_stage1)
+ @modules = difference2(\@modules, \@modules_only_for_all_img);
}
- @modules = map { dependencies_closure($_) } @modules;
+ @modules = uniq(map { dependencies_closure($_) } @modules);
printf qq(%s_modules="%s"\n), $image, join(" ", map { "$_.o" } @modules);
}
}
sub pci_modules4stage1 {
- print "$_\n" foreach difference2([ category2modules($_[0]) ], \@skip_modules_on_stage1);
+ print "$_\n" foreach uniq(map { dependencies_closure($_) } difference2([ category2modules($_[0]) ], \@modules_removed_from_stage1));
}
sub check {
my $error;
my %listed;
- my %big_modules_categories;
while (my ($t1, $l) = each %list_modules::l) {
while (my ($t2, $l) = each %$l) {
ref $l or die "bad $l in $t1/$t2";
foreach (@$l) {
$listed{$_} = 1;
- push @{$big_modules_categories{$t1}{$t2}}, $_ if member($_, @skip_modules_on_stage1);
}
}
}
- # remove accepted categories for other.img
- delete $big_modules_categories{disk}{hardware_raid};
- delete $big_modules_categories{disk}{scsi};
- delete $big_modules_categories{network}{main};
-
- if (map { %$_ } values %big_modules_categories) {
- my @l = map { "$_/" . join('|', sort keys %{$big_modules_categories{$_}}) } sort keys %big_modules_categories;
- print STDERR "WEIRD CATEGORIES USED FOR other.img: ", join(" ", @l), "\n";
- if ($verbose) {
- while (my ($t1, $t2s) = each %big_modules_categories) {
- print "$t1/$_ used for other.img: ", join(" ", @{$t2s->{$_}}), "\n" foreach keys %$t2s;
- }
- }
- $error = 1;
- }
-
my %module2category;
my %deprecated_modules = %listed;
my $not_listed = sub {
@@ -144,16 +203,19 @@ sub check {
my $pcitable = read_pcitable("/usr/share/ldetect-lst/pcitable");
my $usbtable = read_pcitable("/usr/share/ldetect-lst/usbtable");
- my @l = uniq grep { !/:/ && $_ ne 'unknown' } map { $_->[0] } values %$pcitable;
- if (my @l = difference2(\@l, [ keys %listed ])) {
+ my @l1 = uniq grep { !/:/ && $_ ne 'unknown' } map { $_->[0] } values %$pcitable;
+ if (my @l = difference2(\@l1, [ keys %listed ])) {
my %not_listed;
push @{$not_listed{$module2category{$_}}}, $_ foreach @l;
+ if (my $l = delete $not_listed{''}) {
+ print "bad/old pcitable modules : ", join(" ", @$l), "\n";
+ }
print STDERR "PCITABLE MODULES NOT LISTED $_: ", join(" ", @{$not_listed{$_}}), "\n" foreach sort keys %not_listed;
#$error = 1;
}
- my @l = uniq grep { !/:/ && $_ ne 'unknown' } map { $_->[0] } values %$usbtable;
- if (my @l = difference2(\@l, [ keys %listed ])) {
+ my @l2 = uniq grep { !/:/ && $_ ne 'unknown' } map { $_->[0] } values %$usbtable;
+ if (my @l = difference2(\@l2, [ keys %listed ])) {
my %not_listed;
push @{$not_listed{$module2category{$_}}}, $_ foreach @l;
if ($verbose) {
diff --git a/kernel/update_kernel b/kernel/update_kernel
index 9cea09e7d..ddb7483dc 100755
--- a/kernel/update_kernel
+++ b/kernel/update_kernel
@@ -1,11 +1,20 @@
#!/bin/bash
ALL_KERNELS="all.kernels"
+RPMS=/export/Mandrake/RPMS
+
+ARCH=`uname -m | sed -e 's/i.86/i386/' -e 's/sparc.*/sparc/'`
+
# move stuff to this new "kernel" directory
if [ ! -d all.kernels ]; then
+ if [ -d ../all.kernels ]; then
mv ../all.kernels .
rm -rf ../all.modules
+ else
+ # make sure "all.kernels" directory exists
+ mkdir all.kernels
+ fi
fi
function create_marfile() {
@@ -24,12 +33,18 @@ function create_modules() {
perl -pi -e 's/((plip|ppa|imm): parport)/$1 parport_pc/' modules.dep
/sbin/modinfo -f '%{filename} %{description}\n' *.o | perl -lne 'print "$1\t$2" if /(.*?)\.o "(.*)"/' > modules.description
+}
+
+function create_modules_mar() {
+ echo -n "stripping $kern: "
+ $GIBASEDIR/kernel/strip_modules *.o 2>/dev/null
+ echo "done"
echo -n "packdrake $kern: "
ls *.o | packdrake -b9s "modules.cz" 400000
echo "done"
mv modules.cz ../modules.cz-$kern
- for i in network cdrom hd usb other pcmcia all; do
+ for i in network network_gigabit_usb network_gigabit network_usb cdrom hd hdcdrom_usb pcmcia all; do
modules_var="${i}_modules"
eval "create_marfile ${i}_modules.mar \$$modules_var"
done
@@ -38,13 +53,21 @@ function create_modules() {
[ -e $ALL_KERNELS/.main ] && main=$(cat $ALL_KERNELS/.main)
-rpm=$(rpm -qp --qf '%{name}' /RPMS/kernel-BOOT-*.rpm | perl -pe 's/kernel-BOOT-(.*)\.(.*)/$1-${2}BOOT/')
+if [ "$ARCH" == "ia64" ] || [ "$ARCH" == "ppc" ]; then
+ rpm=$(rpm -qp --qf '%{name}' $RPMS/kernel-[0-9]*.rpm | perl -pe 's/kernel-((\.?[0-9]+){3})\.(.*)/$1-${3}/')
+else
+ rpm=$(rpm -qp --qf '%{name}' $RPMS/kernel-BOOT-*.rpm | perl -pe 's/kernel-BOOT-((\.?[0-9]+){3})\.(.*)/$1-${3}BOOT/')
+fi
if [ -n "$rpm" -a ! -e $ALL_KERNELS/$rpm ]; then
[ -n "$main" ] && rm -rf $ALL_KERNELS/$main
cd $ALL_KERNELS
rm -rf $rpm ; mkdir $rpm
cd $rpm
- rpm2cpio /RPMS/kernel-BOOT-*.rpm | cpio -id
+ if [ "$ARCH" == "ia64" ] || [ "$ARCH" == "ppc" ]; then
+ rpm2cpio $RPMS/kernel-[0-9]*.rpm | cpio -id
+ else
+ rpm2cpio $RPMS/kernel-BOOT-*.rpm | cpio -id
+ fi
find -type f -name "*.o.gz" | xargs gunzip
cd ../..
@@ -61,21 +84,12 @@ fi
cd ..
}
-ARCH=`uname -m | sed -e 's/i.86/i386/' -e 's/sparc.*/sparc/'`
-
-eval `perl modules.pl images`
if [ "$ARCH" == "i386" ]; then
for i in $ALL_KERNELS/*/boot/vmlinuz*; do
#disable any existing resolution!!!
/usr/sbin/rdev -v $i 65535 #788 #785
done
-else
- if [ "$ARCH" == "ppc" ]; then
- cp -f "$KERNEL_BOOT_PATH"/boot/vmlinux .
- else
- cp -f "$KERNEL_BOOT_PATH"/boot/vmlinux.gz .
- fi
fi
@@ -87,14 +101,28 @@ for i in $ALL_KERNELS/*; do
(
mkdir all.modules/$kern
cd all.modules/$kern
+
+ create_modules ../../$i $kern
+ ) || exit 1
+done
+cp -f all.modules/$main/modules.description .
+
+l=`perl modules.pl images` || exit 1
+eval $l
+
+for i in $ALL_KERNELS/*; do
+ kern=`basename $i`
+ (
+ cd all.modules/$kern
+
if [ "$kern" = "$main" ]; then
- create_modules ../../$i $kern
+ create_modules_mar ../../$i $kern
else
echo "$kern ($main)"
- create_modules ../../$i $kern 2>/dev/null
+ create_modules_mar ../../$i $kern 2>/dev/null
fi
) || exit 1
done
-cp -f all.modules/$main/modules.description .
+
./check_mar.pl
diff --git a/make_boot_img b/make_boot_img
index 269be0e5a..61586e7e6 100755
--- a/make_boot_img
+++ b/make_boot_img
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-@ARGV >= 2 or die "usage: $0 <image> all|other|cdrom|hd|network|usb|blank|pcmcia|live|tftp|tftprd\n";
+@ARGV >= 2 or die "usage: $0 <image> all|cdrom|hd|hdcdrom_usb|network|network_gigabit_usb|network_gigabit|network_usb|blank|pcmcia|live|tftp|tftprd\n";
use Config;
use MDK::Common;
@@ -14,7 +14,9 @@ my ($arch) = $Config{archname} =~ /(.*?)-/;
rename 'all.kernels', 'kernel/all.kernels';
rename 'all.modules', 'kernel/all.modules';
-$default_append = "ramdisk_size=32000 root=/dev/ram3";
+$default_append = "ramdisk_size=128000 root=/dev/ram3";
+# full acpi support for amd64, enough acpi support for x86 ht, no acpi for others
+$default_acpi = ($arch =~ /i.86/ ? "acpi=ht" : ($arch =~ /x86_64/ ? "acpi=off" : "acpi=off"));
$default_vga = "vga=788";
$instdir = "mdk-stage1";
@@ -34,16 +36,18 @@ _ "$sudo mkdir ${mnt}2" unless -e "${mnt}2";
$install = $ {{
all => "stage1-full",
- other => "stage1-full",
blank => "stage1-full",
live => "stage1-full",
tftp => "stage1-full",
tftprd => "stage1-full",
pcmcia => "stage1-full",
network => "stage1-network",
- usb => "stage1-usb",
+ network_gigabit => "stage1-network",
+ network_usb => "stage1-network-usb",
+ network_gigabit_usb => "stage1-network-usb",
cdrom => "stage1-cdrom",
hd => "stage1-disk",
+ hdcdrom_usb => "stage1-medias-usb",
live64 => "stage1-full",
tftp64 => "stage1-full",
tftprd64 => "stage1-full",
@@ -56,7 +60,7 @@ $install = $ {{
mkdir "images";
chomp($main = `cat kernel/all.kernels/.main`);
-if ($img =~ /blank|other|pcmcia/) {
+if ($img =~ /blank|pcmcia/) {
@kernels = $main;
} else {
@kernels = map { m|kernel/all.kernels/(.*)| } glob('kernel/all.kernels/*');
@@ -72,13 +76,17 @@ foreach (@kernels) {
rename("$img-$main", "$img");
}
}
+if ($arch =~ /x86_64/ && $img =~ /all/) {
+ # isolinux is supposed to work on all those new hardware
+ isolinux($main, @kernels);
+}
if ($arch =~ /i.86/ && $img =~ /all/) {
isolinux($main, @kernels);
my ($img, $img_sav) = ("images/cdrom.img-$main", 'images/cdrom.img-sav');
rename($img, $img_sav);
$type = 'cdrom';
- boot_img_i386($mnt, $img, "kernel/all.kernels/$main/boot/vmlinu*", sub { $_[0] =~ s/\bautomatic=\S+\b//; "$_[0] changedisk" });
+ $::{"boot_img_$arch"}->($mnt, $img, "kernel/all.kernels/$main/boot/vmlinu*", sub { $_[0] =~ s/\bautomatic=\S+\b//; "$_[0] changedisk" });
rename($img, 'images/cdrom-changedisk.img');
rename($img_sav, $img);
}
@@ -102,10 +110,11 @@ sub initrd {
_ "$sudo mount -t ext2 $tmp $mnt -o loop";
_ "$sudo tar xjC $mnt -f $tar";
+ symlinkf "/tmp/stage2/lib64", "$mnt/lib64" if ($arch =~ /x86_64/);
install_stripped("$instdir/init", "$mnt/sbin");
install_stripped("$instdir/$install", "$mnt/sbin/stage1");
- if ($type eq "network" || $type eq "usb" || $type eq "all" || $type eq "other" || $type eq "blank") {
+ if (member($type, qw(network network_gigabit_usb all blank))) {
install_stripped("$instdir/ppp/pppd-bin", "$mnt/sbin/pppd");
install_stripped("$instdir/rp-pppoe/pppoe-bin", "$mnt/sbin/pppoe");
_ "$sudo mknod $mnt/dev/ppp c 108 0";
@@ -113,7 +122,7 @@ sub initrd {
_ "$sudo mknod $mnt/dev/ttyp0 c 3 0";
}
- if (member($type, qw(pcmcia all network)) && $arch !~ /ppc/ && $arch !~ /ia64/) {
+ if (member($type, qw(pcmcia all network)) && $arch !~ /ppc|ia64|x86_64/) {
_ "$sudo cp -a /etc/pcmcia $mnt/etc";
_ "cp $mnt/etc/pcmcia/config /tmp/pcmcia_config_tmp";
_ "tools/patch_pcmcia_config.pl /tmp/pcmcia_config_tmp kernel/all.modules/$main/modules.dep";
@@ -121,8 +130,10 @@ sub initrd {
}
my ($ext) = $img =~ /rdz-(.*)/ or die "bad initrd name ($img)";
$modz = "kernel/all.modules$I/$ext";
- _ "$sudo cp -f $modz/${ltype}_modules.mar $mnt/modules/modules$I.mar" if $type !~ /blank/;
- _ "$sudo cp -f $modz/modules.dep $mnt/modules/";
+ if ($type !~ /blank/) {
+ _ "$sudo cp -f $modz/${ltype}_modules.mar $mnt/modules/modules$I.mar" ;
+ _ "$sudo cp -f $modz/modules.dep $mnt/modules/";
+ }
_ "$sudo umount $mnt";
@@ -152,9 +163,10 @@ sub entries_append {
rescue => "rescue rw",
);
my @entries = (
- (map { $_->[0] => "$automatic $_->[1]" } group_by2(@simple_entries)),
- if_(member($type, "cdrom", "all"), oem => "automatic=method:cdrom $default_vga rescue oem rw"),
- if_($type eq "all", all => "pcmcia $default_vga"),
+ (map { $_->[0] => "$automatic $default_acpi $_->[1]" } group_by2(@simple_entries)),
+ acpi => "$automatic $default_vga",
+ if_(member($type, "cdrom", "all"), oem => "automatic=method:cdrom $default_vga $default_acpi rescue oem rw",),
+ if_($type eq "all", all => "pcmcia $default_vga $default_acpi"),
);
map { [ $_->[0], "$default_append $_->[1]" ] }
@@ -182,9 +194,10 @@ sub boot_img_i386 {
my $rdz = $img; $rdz =~ s/\.img/.rdz/;
initrd("${mnt}2", $rdz) if !-e $rdz;
- eval { _ "cp -f $rdz $mnt/$type.rdz" };
+ my $short_type = substr($type, 0, 8);
+ eval { _ "cp -f $rdz $mnt/$short_type.rdz" };
if ($@) {
- unlink "$mnt/$type.rdz";
+ unlink "$mnt/$short_type.rdz";
my $avail = (split ' ', `df $mnt`)[-3];
my $s = int((-s $rdz) / 1024);
die sprintf("not enough room for $rdz: need %dKB (available %dKB < needed %dKB)\n", $s - $avail, $avail, $s);
@@ -203,13 +216,16 @@ F3 boot.msg
my $args = $args_callback ? $args_callback->($_->[1]) : $_->[1];
"label $_->[0]
kernel vmlinuz
- append initrd=$type.rdz $args
+ append initrd=$short_type.rdz $args
" } entries_append($type));
_ "sync";
_ "df $mnt";
}
+# alias to x86 variant, slightly bigger with images though
+sub boot_img_x86_64 { &boot_img_i386 }
+
sub boot_img_alpha {
my ($mnt, $img) = @_;
@@ -303,44 +319,44 @@ image[sun4c,sun4d,sun4m]=/$boot/vmlinux
label=linux
alias=install
initrd=/$boot/live.rdz
- append=\"ramdisk_size=32000 root=/dev/ram3\"
+ append=\"ramdisk_size=128000 root=/dev/ram3\"
image[sun4c,sun4d,sun4m]=/$boot/vmlinux
label=text
initrd=/$boot/live.rdz
- append=\"ramdisk_size=32000 text root=/dev/ram3\"
+ append=\"ramdisk_size=128000 text root=/dev/ram3\"
image[sun4c,sun4d,sun4m]=/$boot/vmlinux
label=expert
initrd=/$boot/live.rdz
- append=\"ramdisk_size=32000 expert root=/dev/ram3\"
+ append=\"ramdisk_size=128000 expert root=/dev/ram3\"
image[sun4c,sun4d,sun4m]=/$boot/vmlinux
label=ks
initrd=/$boot/live.rdz
- append=\"ramdisk_size=32000 ks root=/dev/ram3\"
+ append=\"ramdisk_size=128000 ks root=/dev/ram3\"
image[sun4c,sun4d,sun4m]=/$boot/vmlinux
label=rescue
initrd=/$boot/live.rdz
- append=\"ramdisk_size=32000 rescue rw root=/dev/ram3\"
+ append=\"ramdisk_size=128000 rescue rw root=/dev/ram3\"
image[sun4u]=/$boot/vmlinux64
label=linux
alias=install
initrd=/$boot/live64.rdz
- append=\"ramdisk_size=32000 root=/dev/ram3\"
+ append=\"ramdisk_size=128000 root=/dev/ram3\"
image[sun4u]=/$boot/vmlinux64
label=text
initrd=/$boot/live64.rdz
- append=\"ramdisk_size=32000 text root=/dev/ram3\"
+ append=\"ramdisk_size=128000 text root=/dev/ram3\"
image[sun4u]=/$boot/vmlinux64
label=expert
initrd=/$boot/live64.rdz
- append=\"ramdisk_size=32000 expert root=/dev/ram3\"
+ append=\"ramdisk_size=128000 expert root=/dev/ram3\"
image[sun4u]=/$boot/vmlinux64
label=ks
initrd=/$boot/live64.rdz
- append=\"ramdisk_size=32000 ks root=/dev/ram3\"
+ append=\"ramdisk_size=128000 ks root=/dev/ram3\"
image[sun4u]=/$boot/vmlinux64
label=rescue
initrd=/$boot/live64.rdz
- append=\"ramdisk_size=32000 rescue rw root=/dev/ram3\"
+ append=\"ramdisk_size=128000 rescue rw root=/dev/ram3\"
");
output("$dir/$boot/README", "
@@ -388,7 +404,7 @@ message=/boot.msg
image=/vmlinux$I.gz
label=linux
initrd=/$type.rdz
- append=\"ramdisk_size=32000 $ltype root=/dev/ram3\"
+ append=\"ramdisk_size=128000 $ltype root=/dev/ram3\"
");
_ "genromfs -d $dir -f /dev/ram -A 2048,/.. -a 512 -V \'DrakX boot disk\'";
_ "$sudo mount -t romfs /dev/ram $mnt";
@@ -402,83 +418,204 @@ image=/vmlinux$I.gz
}
sub boot_img_ppc {
- my ($mnt, $img, $kern, $modz) = @_;
- my $dir = "/export";
- my $boot = "boot"; #- non-absolute pathname only!
- my ($extension) = $modz =~ /.*\/([^\/]+)/;
- _ "mkdir -p $dir/$boot";
- _ "cp -f $kern $dir/$boot/vmlinux";
- _ "cp -f images/all.rdz$extension $dir/boot/all.gz";
- _ "cp -f tools/ppc/yaboot $dir/boot/yaboot";
+ my (@kernels) = @_;
+ #- hack to produce directly into /export the needed file for cdrom boot.
+ my $dir = "/export";
+ my $boot = "boot"; #- non-absolute pathname only!
+ _ "rm -rf $dir/$boot"; mkdir "$dir/$boot", 0777;
+ foreach (glob("kernel/all.kernels/*")) {
+ my $ext = basename($_);
+ if ($ext =~ /2.4/) {
+ _ "cp $_/boot/vmlinux $dir/$boot/vmlinux";
+ _ "cp images/all.rdz-$ext $dir/$boot/all.gz";
+ }
+ if ($ext =~ /2.2/) {
+ _ "cp $_/boot/vmlinux $dir/$boot/vmlinux-2.2";
+ _ "cp images/all.rdz-$ext $dir/$boot/all-2.2.gz";
+ }
+ }
+ _ "cp -f /usr/lib/yaboot/yaboot $dir/$boot/yaboot";
+ output("$dir/$boot/ofboot.b", "<CHRP-BOOT>
+<COMPATIBLE>
+MacRISC
+</COMPATIBLE>
+<DESCRIPTION>
+Mandrake Linux PPC bootloader
+</DESCRIPTION>
+<BOOT-SCRIPT>
+\" screen\" output
+dev screen
+\" \"(0000000000aa00aa0000aaaaaa0000aa00aaaa5500aaaaaa)\" drop 0 8 set-colors
+\" \"(5555555555ff55ff5555ffffff5555ff55ffffff55ffffff)\" drop 8 8 set-colors
+device-end
+3 to foreground-color
+0 to background-color
+\" \"(0C)\" fb8-write drop
+\" Booting Mandrake Linux PPC...\" fb8-write drop 100 ms
+boot cd:2,\\\\yaboot
+</BOOT-SCRIPT>
+<OS-BADGE-ICONS>
+1010
+000000000000F8FEACF6000000000000
+0000000000F5FFFFFEFEF50000000000
+00000000002BFAFEFAFCF70000000000
+0000000000F65D5857812B0000000000
+0000000000F5350B2F88560000000000
+0000000000F6335708F8FE0000000000
+00000000005600F600F5FD8100000000
+00000000F9F8000000F5FAFFF8000000
+000000008100F5F50000F6FEFE000000
+000000F8F700F500F50000FCFFF70000
+00000088F70000F50000F5FCFF2B0000
+0000002F582A00F5000008ADE02C0000
+00090B0A35A62B0000002D3B350A0000
+000A0A0B0B3BF60000505E0B0A0B0A00
+002E350B0B2F87FAFCF45F0B2E090000
+00000007335FF82BF72B575907000000
+000000000000ACFFFF81000000000000
+000000000081FFFFFFFF810000000000
+0000000000FBFFFFFFFFAC0000000000
+000000000081DFDFDFFFFB0000000000
+000000000081DD5F83FFFD0000000000
+000000000081DDDF5EACFF0000000000
+0000000000FDF981F981FFFF00000000
+00000000FFACF9F9F981FFFFAC000000
+00000000FFF98181F9F981FFFF000000
+000000ACACF981F981F9F9FFFFAC0000
+000000FFACF9F981F9F981FFFFFB0000
+00000083DFFBF981F9F95EFFFFFC0000
+005F5F5FDDFFFBF9F9F983DDDD5F0000
+005F5F5F5FDD81F9F9E7DF5F5F5F5F00
+0083DD5F5F83FFFFFFFFDF5F835F0000
+000000FBDDDFACFBACFBDFDFFB000000
+000000000000FFFFFFFF000000000000
+0000000000FFFFFFFFFFFF0000000000
+0000000000FFFFFFFFFFFF0000000000
+0000000000FFFFFFFFFFFF0000000000
+0000000000FFFFFFFFFFFF0000000000
+0000000000FFFFFFFFFFFF0000000000
+0000000000FFFFFFFFFFFFFF00000000
+00000000FFFFFFFFFFFFFFFFFF000000
+00000000FFFFFFFFFFFFFFFFFF000000
+000000FFFFFFFFFFFFFFFFFFFFFF0000
+000000FFFFFFFFFFFFFFFFFFFFFF0000
+000000FFFFFFFFFFFFFFFFFFFFFF0000
+00FFFFFFFFFFFFFFFFFFFFFFFFFF0000
+00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+00FFFFFFFFFFFFFFFFFFFFFFFFFF0000
+000000FFFFFFFFFFFFFFFFFFFF000000
+</OS-BADGE-ICONS>
+</CHRP-BOOT>
+");
+
output("$dir/$boot/yaboot.conf", "
init-message = \"\\nWelcome to Mandrake Linux PPC!\\nHit <TAB> for boot options.\\n\\n\"
timeout = 150
-default = install-novideo
+default = install-gui
+message=cd:,\\\\\\\\yaboot.msg
image = cd:,\\\\\\\\vmlinux
- label = install-novideo
+ label = install-gui
root = /dev/ram3
initrd = cd:,\\\\\\\\all.gz
- initrd-size = 32000
- append = \" video=ofonly\"
-
-image = cd:,\\\\\\\\vmlinux
- label = install-atyfb
+ initrd-size = 34000
+
+image = cd:,\\\\\\\\vmlinux-2.2
+ label = install-gui-2.2
root = /dev/ram3
- initrd = cd:,\\\\\\\\all.gz
- initrd-size = 32000
- append = \" video=atyfb:vmode:17\"
-
+ initrd = cd:,\\\\\\\\all-2.2.gz
+ initrd-size = 34000
+
image = cd:,\\\\\\\\vmlinux
- label = install-aty128fb
+ label = install-text
root = /dev/ram3
initrd = cd:,\\\\\\\\all.gz
- initrd-size = 32000
- append = \" video=aty128fb:vmode:17\"
+ initrd-size = 34000
+ append = \" text video=ofonly\"
+
+image = cd:,\\\\\\\\vmlinux-2.2
+ label = install-text-2.2
+ root = /dev/ram3
+ initrd = cd:,\\\\\\\\all-2.2.gz
+ initrd-size = 34000
+ append = \" text video=ofonly\"
image = cd:,\\\\\\\\vmlinux
- label = install-text
+ label = install-gui-old
root = /dev/ram3
initrd = cd:,\\\\\\\\all.gz
- initrd-size = 32000
- append = \" text video=ofonly\"
+ initrd-size = 34000
+ append = \" gui-old video=ofonly\"
+
+image = cd:,\\\\\\\\vmlinux-2.2
+ label = install-gui-old-2.2
+ root = /dev/ram3
+ initrd = cd:,\\\\\\\\all-2.2.gz
+ initrd-size = 34000
+ append = \" gui-old video=ofonly\"
image = enet:0,vmlinux
label = install-net
root = /dev/ram3
initrd = enet:0,all.gz
- initrd-size = 32000
+ initrd-size = 34000
append = \" video=ofonly\"
+image = enet:0,vmlinux-2.2
+ label = install-net-2.2
+ root = /dev/ram3
+ initrd = enet:0,all-2.2.gz
+ initrd-size = 34000
+ append = \" video=ofonly\"
+
image = enet:0,vmlinux
label = install-net-text
root = /dev/ram3
initrd = enet:0,all.gz
- initrd-size = 32000
+ initrd-size = 34000
append = \" text video=ofonly\"
+image = enet:0,vmlinux-2.2
+ label = install-net-text-2.2
+ root = /dev/ram3
+ initrd = enet:0,all-2.2.gz
+ initrd-size = 34000
+ append = \" text video=ofonly\"
+
image = cd:,\\\\\\\\vmlinux
label = rescue
root = /dev/ram3
initrd = cd:,\\\\\\\\all.gz
- initrd-size = 32000
+ initrd-size = 34000
append = \" rescue video=ofonly\"
image = enet:0,vmlinux
label = rescue-net
root = /dev/ram3
initrd = enet:0,all.gz
- initrd-size = 32000
+ initrd-size = 34000
append = \" rescue video=ofonly\"
");
- #- seem to need 2 yaboot.conf, one in the root, and one in boot
- _ "cp -f $dir/boot/yaboot.conf $dir/yaboot.conf";
- output("$dir/$boot/README", "
-To Build a Bootable CD-ROM, do:
-cd /tools/ppc
-./mkINSTALLCD /export ppc-cd.img
+ output("$dir/$boot/yaboot.msg", "
+Thanks for choosing Mandrake Linux PPC. The following is a short
+explanation of the various options for booting the install CD.
+
+All options ending with \"2.2\" will use the 2.2.20-9mdkBOOT kernel.
+The default syntax with no suffix uses the 2.4.18-4mdkBOOT kernel.
+The default if you just hit enter is \"install-gui\".
+
+install-gui: uses XFree86 fbdev mode
+install-text: text based install
+install-gui-old: old Xpmac gui
+install-net: allows you to use a minimal boot CD,
+ pulling the rest of the install from
+ a network server
+install-net-text: text mode network install
+rescue: boots the rescue image
+rescue-net: boots the rescue image from a network server
+
");
}
@@ -497,7 +634,10 @@ sub isolinux {
}
if (-e "isolinux-graphic.bmp") {
#- change here for newer picture isolinux-graphic.bmp and newer parameters.
- _ "lilo-bmp2mdk mode:0x103 progress:425,173,16,8,64+2 clear:600,800,64+2 pos:0,0 <isolinux-graphic.bmp >isolinux/boot.msg";
+ #- for old style pictures (9.1 and previous)
+ _ "lilo-bmp2mdk mode:0x103 progress:425,173,16,7,64+21 clear:600,800,64+59 pos:0,0 <isolinux-graphic.bmp >isolinux/boot.msg";
+ #- for current 9.2 pictures.
+ #_ "lilo-bmp2mdk mode:0x103 progress:371,144,4,8,64+60 clear:600,800,64+127 pos:0,0 <isolinux-graphic.bmp >isolinux/boot.msg";
}
_ "cp /usr/lib/syslinux/isolinux.bin isolinux/isolinux.bin";
output "isolinux/isolinux.cfg", "
@@ -516,7 +656,7 @@ F2 advanced.msg
. join('', map_index {
"label alt$::i
kernel alt$::i/vmlinuz
- append initrd=alt$::i/all.rdz $default_append $default_vga
+ append initrd=alt$::i/all.rdz $default_append $default_acpi $default_vga
" } @kernels);
output "isolinux/help.msg", (-e "isolinux/boot.msg" && pack "C*", 0x0E, 0x80, 0x03, 0x00) .
diff --git a/mdk-stage1/.cvsignore b/mdk-stage1/.cvsignore
deleted file mode 100644
index a96a43de4..000000000
--- a/mdk-stage1/.cvsignore
+++ /dev/null
@@ -1,12 +0,0 @@
-init
-stage1-full
-stage1-cdrom
-stage1-disk
-stage1-network
-debug.log
-.depend
-*.rdz*
-mkinitrd_helper.tar.bz2
-hack_*
-stage1-usb
-rescue-gui
diff --git a/mdk-stage1/Makefile b/mdk-stage1/Makefile
index 81378031d..f865c2991 100644
--- a/mdk-stage1/Makefile
+++ b/mdk-stage1/Makefile
@@ -33,6 +33,10 @@
# init with glibc
# stage1 with glibc
#
+ # x86-64
+ # init with minilibc
+ # stage1 with dietlibc
+ #
#*****************************************************************************
@@ -53,6 +57,10 @@ ifeq (i386, $(ARCH))
INITSRC = minilibc.c init.c
INIT_DEFS = -DINIT_HEADERS=\"minilibc.h\" -fno-builtin
else
+ifeq (x86_64, $(ARCH))
+INITSRC = minilibc.c init.c
+INIT_DEFS = -DINIT_HEADERS=\"minilibc.h\" -fno-builtin
+else
INITSRC = init.c
ifeq (ia64, $(ARCH))
INIT_DEFS = -DINIT_HEADERS=\"init-libc-headers.h\" $(GLIBC_INCLUDES)
@@ -60,33 +68,33 @@ else
INIT_DEFS = -DINIT_HEADERS=\"init-libc-headers.h\" $(DIETLIBC_INCLUDES)
endif
endif
+endif
INITOBJS = $(subst .c,.o,$(INITSRC))
#- frontends
NEWT_FRONTEND_SRC = newt-frontend.c
-GLIBC_NEWT_FRONTEND_LIBS = newt/libnewt.a slang/libslang.a
-DIETLIBC_NEWT_FRONTEND_LIBS = $(subst .a,-DIET.a,$(GLIBC_NEWT_FRONTEND_LIBS))
+NEWT_FRONTEND_LIBS = newt/libnewt.a slang/libslang.a
STDIO_FRONTEND_SRC = stdio-frontend.c
-GLIBC_STDIO_FRONTEND_LIBS =
-DIETLIBC_STDIO_FRONTEND_LIBS =
+STDIO_FRONTEND_LIBS =
+STDIO_FRONTEND_LIBS =
FRONTEND_OBJS = $(subst .c,.o,$($(F)_FRONTEND_SRC))
-FRONTEND_LINK = $(FRONTEND_OBJS) $($(L)_$(F)_FRONTEND_LIBS)
+FRONTEND_LINK = $(FRONTEND_OBJS) $($(F)_FRONTEND_LIBS)
+INSMOD = insmod-modutils
ifeq (i386, $(ARCH))
INSMOD = insmod-busybox
-else
-INSMOD = insmod-modutils
+endif
+ifeq (x86_64, $(ARCH))
+INSMOD = insmod-busybox
endif
-GLIBC_STAGE1_OWN_LIBS = $(INSMOD)/libinsmod.a mar/libmar.a bzlib/libbzlib.a
-DIETLIBC_STAGE1_OWN_LIBS = $(subst .a,-DIET.a,$(GLIBC_STAGE1_OWN_LIBS))
-STAGE1_OWN_LIBS = $($(L)_STAGE1_OWN_LIBS)
+STAGE1_OWN_LIBS = $(INSMOD)/libinsmod.a mar/libmar.a bzlib/libbzlib.a
ifeq (DIETLIBC, $(L))
@@ -94,8 +102,12 @@ STAGE1_NETWORK_LIBS = $(top_dir)/dietlibc/bin-$(ARCH)/librpc.a
endif
ifeq (GLIBC, $(L))
+ifeq (x86_64, $(ARCH))
+STAGE1_NETWORK_LIBS = /usr/lib64/libresolv.a
+else
STAGE1_NETWORK_LIBS = /usr/lib/libresolv.a
endif
+endif
#- stage1 itself
STAGE1SRC = stage1.c log.c tools.c modules.c probing.c mount.c automatic.c frontend-common.c
@@ -117,19 +129,27 @@ STAGE1OBJS-DISK = $(subst .c,-DISK.o,$(STAGE1SRC) $(DISKSRC))
DISK_DEFS = -DDISABLE_CDROM -DDISABLE_NETWORK
+STAGE1OBJS-MEDIAS-USB = $(subst .c,-MEDIAS-USB.o,$(STAGE1SRC) $(CDROMSRC) $(DISKSRC))
+
+MEDIAS-USB_DEFS = -DDISABLE_NETWORK
+
+
STAGE1OBJS-NETWORK = $(subst .c,-NETWORK.o,$(STAGE1SRC) $(NETWORKSRC))
+STAGE1OBJS-NETWORK-USB = $(subst .c,-NETWORK-USB.o,$(STAGE1SRC) $(NETWORKSRC))
NETWORK_DEFS = -DDISABLE_CDROM -DDISABLE_DISK
-STAGE1OBJS-USB = $(subst .c,-USB.o,$(STAGE1SRC) $(CDROMSRC) $(DISKSRC) $(NETWORKSRC))
-
STAGE1OBJS-FULL = $(subst .c,-FULL.o,$(STAGE1SRC) $(CDROMSRC) $(DISKSRC) $(NETWORKSRC))
ifeq (i386, $(ARCH))
LDFLAGS_INIT = -static -nostdlib /usr/lib/crt1.o
else
+ifeq (x86_64, $(ARCH))
+LDFLAGS_INIT = -static -nostdlib /usr/lib64/crt1.o
+INIT_LIBC = $(GLIBC_LIBC)
+else
ifeq (ia64, $(ARCH))
LDFLAGS_INIT = $(GLIBC_LDFLAGS_STAGE1)
INIT_LIBC = $(GLIBC_LIBC)
@@ -138,31 +158,38 @@ LDFLAGS_INIT = $(DIETLIBC_LDFLAGS_STAGE1)
INIT_LIBC = $(DIETLIBC_LIBC)
endif
endif
+endif
BINS = init stage1-full
ifeq (i386, $(ARCH))
-BINS += stage1-cdrom stage1-disk stage1-network stage1-usb
+BINS += stage1-cdrom stage1-disk stage1-network stage1-network-usb stage1-medias-usb
+endif
+ifeq (x86_64, $(ARCH))
+BINS += stage1-cdrom stage1-disk stage1-network stage1-network-usb stage1-medias-usb
endif
-ifneq (ia64, $(ARCH))
+ifeq (i386, $(ARCH))
+DIRS = dietlibc
+endif
+ifeq (ppc, $(ARCH))
+DIRS = dietlibc
+endif
+ifeq (x86_64, $(ARCH))
DIRS = dietlibc
endif
DIRS += mar pci-resource usb-resource bzlib $(INSMOD) slang newt ppp/pppd rp-pppoe/src
-ifeq (i386,$(ARCH))
+ifeq (i386, $(ARCH))
DIRS += pcmcia_
endif
ifeq (i386,$(ARCH))
-GLIBC_PCMCIA_LIB = pcmcia_/libpcmcia.a
-DIETLIBC_PCMCIA_LIB = $(subst .a,-DIET.a,$(GLIBC_PCMCIA_LIB))
-PCMCIA_LIB = $($(L)_PCMCIA_LIB)
+PCMCIA_LIB = pcmcia_/libpcmcia.a
PCMCIA_DEFS = -DENABLE_PCMCIA
endif
-
USB_DEFS_GEN = -DENABLE_USB
USB_DEFS = -DENABLE_USB -DDISABLE_PCIADAPTERS
@@ -178,23 +205,27 @@ init: $(INITOBJS) $(INIT_LIBC)
$(STRIPCMD) $@
stage1-cdrom: $(STAGE1OBJS-CDROM) $(STAGE1_OWN_LIBS) $(FRONTEND_LINK) $(STAGE1_LIBC)
- $(CC) $(LDFLAGS_STAGE1) -o $@ $^
+ $(DIET) $(CC) $(LDFLAGS_STAGE1) -o $@ $^
$(STRIPCMD) $@
stage1-disk: $(STAGE1OBJS-DISK) $(STAGE1_OWN_LIBS) $(FRONTEND_LINK) $(STAGE1_LIBC)
- $(CC) $(LDFLAGS_STAGE1) -o $@ $^
+ $(DIET) $(CC) $(LDFLAGS_STAGE1) -o $@ $^
+ $(STRIPCMD) $@
+
+stage1-medias-usb: $(STAGE1OBJS-MEDIAS-USB) $(STAGE1_OWN_LIBS) $(FRONTEND_LINK) $(STAGE1_LIBC)
+ $(DIET) $(CC) $(LDFLAGS_STAGE1) -o $@ $^
$(STRIPCMD) $@
stage1-network: $(STAGE1OBJS-NETWORK) $(STAGE1_OWN_LIBS) $(STAGE1_NETWORK_LIBS) $(FRONTEND_LINK) $(PCMCIA_LIB) $(STAGE1_LIBC)
- $(CC) $(LDFLAGS_STAGE1) -o $@ $^
+ $(DIET) $(CC) $(LDFLAGS_STAGE1) -o $@ $^
$(STRIPCMD) $@
-stage1-usb: $(STAGE1OBJS-USB) $(STAGE1_OWN_LIBS) $(STAGE1_NETWORK_LIBS) $(FRONTEND_LINK) $(STAGE1_LIBC)
- $(CC) $(LDFLAGS_STAGE1) -o $@ $^
+stage1-network-usb: $(STAGE1OBJS-NETWORK-USB) $(STAGE1_OWN_LIBS) $(STAGE1_NETWORK_LIBS) $(FRONTEND_LINK) $(PCMCIA_LIB) $(STAGE1_LIBC)
+ $(DIET) $(CC) $(LDFLAGS_STAGE1) -o $@ $^
$(STRIPCMD) $@
stage1-full: $(STAGE1OBJS-FULL) $(STAGE1_OWN_LIBS) $(STAGE1_NETWORK_LIBS) $(FRONTEND_LINK) $(PCMCIA_LIB) $(STAGE1_LIBC)
- $(CC) $(LDFLAGS_STAGE1) -o $@ $^
+ $(DIET) $(CC) $(LDFLAGS_STAGE1) -o $@ $^
$(STRIPCMD) $@
@@ -202,22 +233,25 @@ $(INITOBJS): %.o: %.c
$(COMPILE) $(INIT_DEFS) -c $<
$(STAGE1OBJS-CDROM): %-CDROM.o: %.c
- $(COMPILE) $(INCLUDES) $(CDROM_DEFS) -c $< -o $@
+ $(DIET) $(COMPILE) $(INCLUDES) $(CDROM_DEFS) -c $< -o $@
$(STAGE1OBJS-DISK): %-DISK.o: %.c
- $(COMPILE) $(INCLUDES) $(DISK_DEFS) -c $< -o $@
+ $(DIET) $(COMPILE) $(INCLUDES) $(DISK_DEFS) -c $< -o $@
+
+$(STAGE1OBJS-MEDIAS-USB): %-MEDIAS-USB.o: %.c
+ $(DIET) $(COMPILE) $(INCLUDES) $(MEDIAS-USB_DEFS) $(USB_DEFS_GEN) -c $< -o $@
$(STAGE1OBJS-NETWORK): %-NETWORK.o: %.c
- $(COMPILE) $(INCLUDES) $(NETWORK_DEFS) $(PCMCIA_DEFS) -c $< -o $@
+ $(DIET) $(COMPILE) $(INCLUDES) $(NETWORK_DEFS) $(PCMCIA_DEFS) -c $< -o $@
-$(STAGE1OBJS-USB): %-USB.o: %.c
- $(COMPILE) $(INCLUDES) $(USB_DEFS) -c $< -o $@
+$(STAGE1OBJS-NETWORK-USB): %-NETWORK-USB.o: %.c
+ $(DIET) $(COMPILE) $(INCLUDES) $(NETWORK_DEFS) $(USB_DEFS_GEN) -c $< -o $@
$(STAGE1OBJS-FULL): %-FULL.o: %.c
- $(COMPILE) $(INCLUDES) $(USB_DEFS_GEN) $(PCMCIA_DEFS) -c $< -o $@
+ $(DIET) $(COMPILE) $(INCLUDES) $(USB_DEFS_GEN) $(PCMCIA_DEFS) -c $< -o $@
.c.o:
- $(COMPILE) $(INCLUDES) -c $<
+ $(DIET) $(COMPILE) $(INCLUDES) -c $<
clean:
@@ -236,7 +270,7 @@ tar-mkinitrd_helper: clean
rm -rf mkinitrd_helper-subdir
rescue-gui: rescue-gui.o frontend-common.o $(FRONTEND_LINK) $(STAGE1_LIBC)
- $(CC) $(LDFLAGS_STAGE1) -o $@ $^
+ $(DIET) $(CC) $(LDFLAGS_STAGE1) -o $@ $^
$(STRIPCMD) $@
@@ -252,9 +286,11 @@ endif
*-DISK.o: %-DISK.o: %.o
+*-MEDIAS-USB.o: %-MEDIAS-USB.o: %.o
+
*-NETWORK.o: %-NETWORK.o: %.o
-*-USB.o: %-USB.o: %.o
+*-NETWORK-USB.o: %-NETWORK-USB.o: %.o
*-FULL.o: %-FULL.o: %.o
diff --git a/mdk-stage1/Makefile.common b/mdk-stage1/Makefile.common
index 7506c1381..04c070fc2 100644
--- a/mdk-stage1/Makefile.common
+++ b/mdk-stage1/Makefile.common
@@ -32,13 +32,20 @@ endif
ifeq (ppc, $(ARCH))
L = GLIBC
endif
+ifeq (x86_64, $(ARCH))
+#L = GLIBC
+endif
+
+ifeq (DIETLIBC, $(L))
+DIET = $(top_dir)/dietlibc/bin-$(ARCH)/diet
+endif
#- flags used by all stuff
ifeq (ppc, $(ARCH))
-CFLAGS = -Os -pipe -Wall -fomit-frame-pointer
+CFLAGS = -Os -pipe -Wall -fomit-frame-pointer -fno-strict-aliasing
else
-CFLAGS = -Os -pipe -Wall -Werror -W -fomit-frame-pointer
+CFLAGS = -Os -pipe -Wall -Werror -W -fomit-frame-pointer -fno-strict-aliasing
endif
DIETLIBC_INCLUDES = -I$(top_dir)/dietlibc/include -I. -I$(top_dir)/bzlib
@@ -46,11 +53,11 @@ GLIBC_INCLUDES = -I. -I$(top_dir)/bzlib
INCLUDES = $($(L)_INCLUDES)
GLIBC_LDFLAGS_STAGE1 = -static
-DIETLIBC_LDFLAGS_STAGE1 = -nostdlib $(top_dir)/dietlibc/bin-$(ARCH)/start.o
+DIETLIBC_LDFLAGS_STAGE1 = -nostdlib
LDFLAGS_STAGE1 = $($(L)_LDFLAGS_STAGE1)
GLIBC_LIBC =
-DIETLIBC_LIBC = $(top_dir)/dietlibc/bin-$(ARCH)/dietlibc.a
+DIETLIBC_LIBC =
STAGE1_LIBC = $($(L)_LIBC)
STRIPCMD = strip -R .note -R .comment
diff --git a/mdk-stage1/automatic.h b/mdk-stage1/automatic.h
index c2ac0a73d..4b58c0ea8 100644
--- a/mdk-stage1/automatic.h
+++ b/mdk-stage1/automatic.h
@@ -24,6 +24,7 @@
#include "stage1.h"
void grab_automatic_params(char * line);
+char * get_auto_value(char * auto_param);
enum return_type ask_from_list_auto(char *msg, char ** elems, char ** choice, char * auto_param, char ** elems_auto);
enum return_type ask_from_list_comments_auto(char *msg, char ** elems, char ** elems_comments, char ** choice, char * auto_param, char ** elems_auto);
diff --git a/mdk-stage1/bzlib/Makefile b/mdk-stage1/bzlib/Makefile
index 03a2c254b..8e4bba791 100644
--- a/mdk-stage1/bzlib/Makefile
+++ b/mdk-stage1/bzlib/Makefile
@@ -29,27 +29,14 @@ INCS =
TARGETS = $(LIBNAME).a
-ifeq (DIETLIBC, $(L))
-TARGETS += $(LIBNAME)-DIET.a
-endif
-
all: $(TARGETS)
clean:
rm -f *.o *.a
-OBJS-DIET = $(subst .o,-DIET.o,$(OBJS))
-
$(LIBNAME).a: $(OBJS)
ar -cru $@ $^
ranlib $@
-$(LIBNAME)-DIET.a: $(OBJS-DIET)
- ar -cru $@ $^
- ranlib $@
-
$(OBJS): %.o: %.c
- $(CC) $(CFLAGS) $(DEFS) $(INCS) $(GLIBC_INCLUDES) -c $< -o $@
-
-$(OBJS-DIET): %-DIET.o: %.c
- $(CC) $(CFLAGS) $(DEFS) $(INCS) $(DIETLIBC_INCLUDES) -c $< -o $@
+ $(DIET) $(CC) $(CFLAGS) $(DEFS) $(INCS) $(INCLUDES) -c $< -o $@
diff --git a/mdk-stage1/config-stage1.h b/mdk-stage1/config-stage1.h
index 3af38a446..823694df2 100644
--- a/mdk-stage1/config-stage1.h
+++ b/mdk-stage1/config-stage1.h
@@ -19,7 +19,7 @@
/* If we have more than that amount of memory (in Mbytes), we assume we can load the second stage as a ramdisk */
-#define MEM_LIMIT_RAMDISK 52
+#define MEM_LIMIT_RAMDISK 68
/* If we have more than that amount of memory (in Mbytes), we assume we can load the rescue as a ramdisk */
#define MEM_LIMIT_RESCUE 40
diff --git a/mdk-stage1/dhcp.c b/mdk-stage1/dhcp.c
index 32c7a932b..de91adae0 100644
--- a/mdk-stage1/dhcp.c
+++ b/mdk-stage1/dhcp.c
@@ -211,7 +211,7 @@ static void parse_reply(struct bootp_request * breq, struct interface_info * int
unsigned char * chptr;
unsigned char option, length;
- if (breq->bootfile && strlen(breq->bootfile) > 0)
+ if (breq->bootfile && strlen(breq->bootfile) > 0 && IS_NETAUTO)
stage2_kickstart = strdup(breq->bootfile);
memcpy(&intf->ip, &breq->yiaddr, 4);
@@ -257,13 +257,6 @@ static void parse_reply(struct bootp_request * breq, struct interface_info * int
log_message("got gateway %s", inet_ntoa(gateway));
break;
- case BOOTP_OPTION_HOSTNAME:
- memcpy(tmp_str, chptr, length);
- tmp_str[length] = '\0';
- hostname = strdup(tmp_str);
- log_message("got hostname %s", hostname);
- break;
-
}
chptr += length;
@@ -347,7 +340,7 @@ static unsigned long currticks(void)
#define BACKOFF_LIMIT 7
#define TICKS_PER_SEC 18
-#define MAX_ARP_RETRIES 4
+#define MAX_ARP_RETRIES 7
static void rfc951_sleep(int exp)
{
diff --git a/mdk-stage1/dietlibc/.cvsignore b/mdk-stage1/dietlibc/.cvsignore
index 7c88cb004..f0be42e21 100644
--- a/mdk-stage1/dietlibc/.cvsignore
+++ b/mdk-stage1/dietlibc/.cvsignore
@@ -10,3 +10,19 @@ bin-i386
bin-mips
bin-ppc
bin-sparc
+bin-mipsel
+bin-parisc
+bin-s390
+bin-sparc64
+pic-alpha
+pic-arm
+pic-i386
+pic-mips
+pic-ppc
+pic-sparc
+pic-mipsel
+pic-parisc
+pic-s390
+pic-sparc64
+bin-ia64
+bin-x86_64
diff --git a/mdk-stage1/dietlibc/AUTHOR b/mdk-stage1/dietlibc/AUTHOR
index 6d8ab1a05..3f6a44e6d 100644
--- a/mdk-stage1/dietlibc/AUTHOR
+++ b/mdk-stage1/dietlibc/AUTHOR
@@ -1 +1,3 @@
Felix von Leitner <felix-dietlibc@fefe.de>
+
+Please see the file THANKS for additional authors and contributors.
diff --git a/mdk-stage1/dietlibc/Makefile b/mdk-stage1/dietlibc/Makefile
index b6e7b2783..0fe32e61b 100644
--- a/mdk-stage1/dietlibc/Makefile
+++ b/mdk-stage1/dietlibc/Makefile
@@ -1,13 +1,101 @@
-ARCH=$(shell uname -m | sed 's/i[4-9]86/i386/')
+INSTALL=install
+prefix?=/usr
+# Set the following to install to a different root
+#DESTDIR=/tmp/fefix
+# Use "make DEBUG=1" to compile a debug version.
+
+MYARCH:=$(shell uname -m | sed -e 's/i[4-9]86/i386/' -e 's/armv[3-6][lb]/arm/' -e 's/ppc64/ppc/')
+
+# This extra-ugly cruft is here so make will not run uname and sed each
+# time it looks at $(OBJDIR). This alone sped up running make when
+# nothing has to be done from 1 sec to 0.12 sec on a 900 MHz Athlon.
+# We don't use ARCH:=$(MYARCH) so we can detect unknown architectures.
+ifeq ($(MYARCH),i386)
+ARCH=i386
+else
+ifeq ($(MYARCH),mips)
+ARCH=mips
+else
+ifeq ($(MYARCH),alpha)
+ARCH=alpha
+else
+ifeq ($(MYARCH),ppc)
+ARCH=ppc
+else
+ifeq ($(MYARCH),arm)
+ARCH=arm
+else
+ifeq ($(MYARCH),sparc)
+ARCH=sparc
+else
+ifeq ($(MYARCH),sparc64)
+ARCH=sparc64
+else
+ifeq ($(MYARCH),s390)
+ARCH=s390
+else
+ifeq ($(MYARCH),mipsel)
+ARCH=mipsel
+else
+ifeq ($(MYARCH),parisc)
+ARCH=parisc
+else
+ifeq ($(MYARCH),parisc64)
+ARCH=parisc
+MYARCH=parisc
+else
+ifeq ($(MYARCH),x86_64)
+ARCH=x86_64
+else
+ifeq ($(MYARCH),ia64)
+ARCH=ia64
+else
+$(error unknown architecture, please fix Makefile)
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+endif
+
+# ARCH=$(MYARCH)
+
+LIBDIR=${prefix}/lib
+ifeq ($(ARCH),x86_64)
+LIBDIR=${prefix}/lib64
+endif
+BINDIR=${prefix}/bin
+MAN1DIR=${prefix}/share/man/man1
+INSTALLHOME=$(LIBDIR)/dietlibc
OBJDIR=bin-$(ARCH)
+ILIBDIR=$(INSTALLHOME)/lib-$(ARCH)
-all: $(OBJDIR) $(OBJDIR)/start.o $(OBJDIR)/dietlibc.a $(OBJDIR)/liblatin1.a $(OBJDIR)/librpc.a $(OBJDIR)/diet
+HOME=$(shell pwd)
-CFLAGS=-pipe
+WHAT= $(OBJDIR) $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o $(OBJDIR)/dyn_stop.o \
+ $(OBJDIR)/dietlibc.a $(OBJDIR)/liblatin1.a \
+ $(OBJDIR)/libcompat.a $(OBJDIR)/libm.a \
+ $(OBJDIR)/librpc.a $(OBJDIR)/libpthread.a \
+ $(OBJDIR)/diet $(OBJDIR)/diet-i
+
+all: $(WHAT)
+
+profiling: $(OBJDIR)/libgmon.a $(OBJDIR)/pstart.o
+
+CFLAGS=-pipe -nostdinc
CROSS=
-VPATH=lib:libstdio:libugly:libcruft:libcrypt:libshell:liblatin1:librpc:libregex:syscalls.c
+CC=gcc
+
+VPATH=lib:libstdio:libugly:libcruft:libcrypt:libshell:liblatin1:libcompat:libdl:librpc:libregex:libm:profiling
SYSCALLOBJ=$(patsubst syscalls.s/%.S,$(OBJDIR)/%.o,$(wildcard syscalls.s/*.S))
@@ -17,13 +105,23 @@ LIBSTDIOOBJ=$(patsubst libstdio/%.c,$(OBJDIR)/%.o,$(wildcard libstdio/*.c))
LIBCRUFTOBJ=$(patsubst libcruft/%.c,$(OBJDIR)/%.o,$(wildcard libcruft/*.c))
LIBCRYPTOBJ=$(patsubst libcrypt/%.c,$(OBJDIR)/%.o,$(wildcard libcrypt/*.c))
LIBSHELLOBJ=$(patsubst libshell/%.c,$(OBJDIR)/%.o,$(wildcard libshell/*.c))
+LIBCOMPATOBJ=$(patsubst libcompat/%.c,$(OBJDIR)/%.o,$(wildcard libcompat/*.c)) $(OBJDIR)/syscall.o
+LIBMATH=$(patsubst libm/%.c,%.o,$(wildcard libm/*.c))
LIBRPCOBJ=$(patsubst librpc/%.c,$(OBJDIR)/%.o,$(wildcard librpc/*.c))
LIBREGEXOBJ=$(patsubst libregex/%.c,$(OBJDIR)/%.o,$(wildcard libregex/*.c))
+LIBDLOBJ=$(patsubst libdl/%.c,$(OBJDIR)/%.o,$(wildcard libdl/*.c)) $(OBJDIR)/_dl_jump.o
+
+LIBPTHREAD_OBJS=$(patsubst libpthread/%.c,$(OBJDIR)/%.o,$(shell ./threadsafe.sh)) $(OBJDIR)/__testandset.o
+
+LIBGMON_OBJS=$(OBJDIR)/__mcount.o $(OBJDIR)/monitor.o $(OBJDIR)/profil.o
+
include $(ARCH)/Makefile.add
-ifeq ($(CFLAGS),-pipe)
+LIBMATHOBJ=$(patsubst %,$(OBJDIR)/%,$(LIBMATH))
+
+ifeq ($(CFLAGS),-pipe -nostdinc)
CFLAGS+=-O -fomit-frame-pointer
endif
@@ -31,28 +129,39 @@ ifneq ($(DEBUG),)
CFLAGS = -g
COMMENT = :
endif
-CFLAGS += -Wall -Wno-switch
+CFLAGS += -Wall -W -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-switch -Wredundant-decls -Wno-unused
PWD=$(shell pwd)
.SUFFIXES:
.SUFFIXES: .S .c
-$(OBJDIR):
+# added real dynamic dietlibc.so
+PICODIR = pic-$(ARCH)
+
+$(OBJDIR) $(PICODIR):
mkdir $@
% :: %,v
-$(OBJDIR)/%.o: %.S
+$(OBJDIR)/pstart.o: start.S
+ $(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -DPROFILING -c $< -o $@
+
+$(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h
$(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -c $< -o $@
+$(OBJDIR)/pthread_%.o: libpthread/pthread_%.c
+ $(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -c $< -o $@
+ $(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@
+
$(OBJDIR)/%.o: %.c
$(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -c $< -o $@
- $(COMMENT) $(CROSS)strip -x -R .comment -R .note $@
+ $(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@
-DIETLIBC_OBJ = $(SYSCALLOBJ) $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \
+DIETLIBC_OBJ = $(OBJDIR)/unified.o \
+$(SYSCALLOBJ) $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \
$(LIBCRUFTOBJ) $(LIBCRYPTOBJ) $(LIBSHELLOBJ) $(LIBREGEXOBJ) \
-$(OBJDIR)/__longjmp.o $(OBJDIR)/setjmp.o $(OBJDIR)/unified.o \
+$(OBJDIR)/__longjmp.o $(OBJDIR)/setjmp.o \
$(OBJDIR)/mmap.o $(OBJDIR)/clone.o
$(OBJDIR)/dietlibc.a: $(DIETLIBC_OBJ) $(OBJDIR)/start.o
@@ -65,67 +174,179 @@ LIBLATIN1_OBJS=$(patsubst liblatin1/%.c,$(OBJDIR)/%.o,$(wildcard liblatin1/*.c))
$(OBJDIR)/liblatin1.a: $(LIBLATIN1_OBJS)
$(CROSS)ar cru $@ $^
+$(OBJDIR)/libgmon.a: $(LIBGMON_OBJS)
+ $(CROSS)ar cru $@ $^
+
+$(OBJDIR)/libpthread.a: $(LIBPTHREAD_OBJS) dietfeatures.h
+ $(CROSS)ar cru $@ $(LIBPTHREAD_OBJS)
+
+$(OBJDIR)/libcompat.a: $(LIBCOMPATOBJ)
+ $(CROSS)ar cru $@ $(LIBCOMPATOBJ)
+
+$(OBJDIR)/libm.a: $(LIBMATHOBJ)
+ $(CROSS)ar cru $@ $(LIBMATHOBJ)
+
$(OBJDIR)/libdietc.so: $(OBJDIR)/dietlibc.a
$(CROSS)ld -whole-archive -shared -o $@ $^
+dyn: dyn_lib
+
+# added dynamic linker
+$(OBJDIR)/libdl.a: $(LIBDLOBJ)
+ $(CROSS)ar cru $@ $(LIBDLOBJ)
+
+dyn_lib: $(PICODIR) $(PICODIR)/libc.so $(PICODIR)/dstart.o \
+ $(PICODIR)/dyn_so_start.o $(PICODIR)/dyn_start.o $(PICODIR)/dyn_stop.o \
+ $(PICODIR)/libpthread.so $(PICODIR)/libdl.so $(PICODIR)/libcompat.so \
+ $(PICODIR)/diet-dyn $(PICODIR)/diet-dyn-i
+
+$(PICODIR)/%.o: %.S $(ARCH)/syscalls.h
+ $(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
+
+$(PICODIR)/pthread_%.o: libpthread/pthread_%.c
+ $(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
+ $(COMMENT) $(CROSS)strip -x -R .comment -R .note $@
+
+$(PICODIR)/%.o: %.c
+ $(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
+ $(COMMENT) $(CROSS)strip -x -R .comment -R .note $@
+
+$(PICODIR)/dstart.o: start.S
+ $(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
+
+$(PICODIR)/dyn_so_start.o: dyn_start.c
+ $(CROSS)$(CC) -I. -Iinclude $(CFLAGS) -fPIC -D__DYN_LIB -D__DYN_LIB_SHARED -c $< -o $@
+ $(COMMENT) $(CROSS)strip -x -R .comment -R .note $@
+
+DYN_LIBC_PIC = $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \
+$(LIBCRUFTOBJ) $(LIBCRYPTOBJ) $(LIBSHELLOBJ) $(LIBREGEXOBJ)
+
+DYN_LIBC_OBJ = $(PICODIR)/dyn_syscalls.o $(PICODIR)/errlist.o \
+ $(patsubst $(OBJDIR)/%.o,$(PICODIR)/%.o,$(DYN_LIBC_PIC))
+
+DYN_PTHREAD_OBJS = $(patsubst $(OBJDIR)/%.o,$(PICODIR)/%.o,$(LIBPTHREAD_OBJS))
+
+DYN_LIBDL_OBJS = $(patsubst $(OBJDIR)/%.o,$(PICODIR)/%.o,$(LIBDLOBJ))
+
+DYN_LIBCOMPAT_OBJS = $(patsubst $(OBJDIR)/%.o,$(PICODIR)/%.o,$(LIBCOMPATOBJ))
+
+$(PICODIR)/libc.so: $(PICODIR) $(DYN_LIBC_OBJ)
+ $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBC_OBJ) -lgcc -Wl,-soname=libc.so
+
+$(PICODIR)/libpthread.so: $(DYN_PTHREAD_OBJS) dietfeatures.h
+ $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_PTHREAD_OBJS) -L$(PICODIR) -lc -Wl,-soname=libpthread.so
+
+$(PICODIR)/libdl.so: libdl/_dl_main.c dietfeatures.h
+ $(CROSS)$(CC) -D__OD_CLEAN_ROOM -DNODIETREF -fPIC -nostdlib -shared -o $@ $(CFLAGS) -I. -Iinclude libdl/_dl_main.c -Wl,-soname=libdl.so
+
+#$(PICODIR)/libdl.so: $(DYN_LIBDL_OBJS) dietfeatures.h
+# $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBDL_OBJS) -L$(PICODIR) -ldietc -Wl,-soname=libdl.so
+
+$(PICODIR)/libcompat.so: $(DYN_LIBCOMPAT_OBJS) dietfeatures.h
+ $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBCOMPAT_OBJS) -L$(PICODIR) -lc -Wl,-soname=libcompat.so
+
+
+
$(SYSCALLOBJ): syscalls.h
-$(OBJDIR)/diet: diet.c $(OBJDIR)/start.o $(OBJDIR)/dietlibc.a
- $(CROSS)$(CC) -Iinclude $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(PWD)\"
+VERSION=dietlibc-$(shell head -1 CHANGES|sed 's/://')
+CURNAME=$(notdir $(shell pwd))
+
+$(OBJDIR)/diet: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o
+ $(CROSS)$(CC) -Iinclude $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -DVERSION=\"$(VERSION)\" -lgcc
+ $(CROSS)strip -R .comment -R .note $@
+
+$(OBJDIR)/diet-i: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o
+ $(CROSS)$(CC) -Iinclude $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(INSTALLHOME)\" -DVERSION=\"$(VERSION)\" -DINSTALLVERSION -lgcc
$(CROSS)strip -R .comment -R .note $@
+$(PICODIR)/diet-dyn: $(PICODIR)/start.o $(PICODIR)/dyn_start.o diet.c
+ $(CROSS)$(CC) -Iinclude $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(HOME)/$(PICODIR)/libdl.so
+ $(CROSS)strip -R .command -R .note $@
+
+$(PICODIR)/diet-dyn-i: $(PICODIR)/start.o $(PICODIR)/dyn_start.o diet.c
+ $(CROSS)$(CC) -Iinclude $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(ILIBDIR)/libdl.so -DINSTALLVERSION
+ $(CROSS)strip -R .command -R .note $@
+
$(OBJDIR)/djb: $(OBJDIR)/compile $(OBJDIR)/load
$(OBJDIR)/compile:
- echo 'exec gcc $(CFLAGS) -I$(PWD)/$(OBJDIR)/include -c $${1+"$$@"}' > $@
+ echo 'exec' $(CC) '$(CFLAGS) -I$(PWD)/$(OBJDIR)/include -c $${1+"$$@"}' > $@
chmod 755 $@
$(OBJDIR)/load:
- echo 'main="$$1"; shift; exec gcc -nostdlib -o "$$main" $(PWD)/$(OBJDIR)/start.o "$$main".o $${1+"$$@"} $(PWD)/$(OBJDIR)/dietlibc.a -lgcc' > $@
+ echo 'main="$$1"; shift; exec' $(CC) '-nostdlib -o "$$main" $(PWD)/$(OBJDIR)/start.o "$$main".o $${1+"$$@"} $(PWD)/$(OBJDIR)/dietlibc.a -lgcc' > $@
chmod 755 $@
clean:
rm -f *.o *.a t t1 compile load exports mapfile libdietc.so
- rm -rf bin-*
+ rm -rf bin-* pic-*
+ $(MAKE) -C libdl clean
-tar: clean
- rm -f armv4l
- ln -sf arm armv4l
- cd ..; tar cvvf dietlibc.tar.bz2 dietlibc --use=bzip2 --exclude CVS
+tar: clean rename
+ cd ..; tar cvvf $(VERSION).tar.bz2 $(VERSION) --use=bzip2 --exclude CVS
+
+rename:
+ if test $(CURNAME) != $(VERSION); then cd .. && mv $(CURNAME) $(VERSION); fi
$(OBJDIR)/exports: $(OBJDIR)/dietlibc.a
nm -g $(OBJDIR)/dietlibc.a | grep -w T | awk '{ print $$3 }' | sort -u > $(OBJDIR)/exports
.PHONY: t t1
t:
- $(CROSS)$(CC) -g $(CFLAGS) -fno-builtin -nostdlib -Iinclude -o t t.c $(OBJDIR)/start.o $(OBJDIR)/dietlibc.a -lgcc -Wl,-Map,mapfile
+ $(CROSS)$(CC) -g $(CFLAGS) -fno-builtin -nostdlib -Iinclude -o t t.c $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o $(OBJDIR)/dietlibc.a -lgcc $(OBJDIR)/dyn_stop.o -Wl,-Map,mapfile
t1:
$(CROSS)$(CC) -g -o t1 t.c
-install: $(OBJDIR)/start.o $(OBJDIR)/dietlibc.a $(OBJDIR)/liblatin1.a $(OBJDIR)/diet
- cp $(OBJDIR)/start.o $(INSTALLPREFIX)$(prefix)/lib/dietstart.o
- cp $(OBJDIR)/dietlibc.a $(INSTALLPREFIX)$(prefix)/lib/libdietc.a
- cp $(OBJDIR)/liblatin1.a $(INSTALLPREFIX)$(prefix)/lib/libdietlatin1.a
- cp $(OBJDIR)/diet $(INSTALLPREFIX)$(prefix)/bin/diet
-
-.PHONY: sparc ppc mips arm alpha i386
-
-arm sparc ppc alpha i386:
- $(MAKE) ARCH=$@ CROSS=$@-linux- all t bin-$@/libdietc.so
-
-mips:
- $(MAKE) ARCH=$@ CROSS=$@-linux-gnu- all t bin-$@/libdietc.so
+install: $(OBJDIR)/start.o $(OBJDIR)/dietlibc.a $(OBJDIR)/librpc.a $(OBJDIR)/liblatin1.a $(OBJDIR)/libcompat.a $(OBJDIR)/diet-i
+ $(INSTALL) -d $(DESTDIR)$(ILIBDIR) $(DESTDIR)$(MAN1DIR) $(DESTDIR)$(BINDIR)
+ $(INSTALL) $(OBJDIR)/start.o $(DESTDIR)$(ILIBDIR)/start.o
+ $(INSTALL) -m 644 $(OBJDIR)/libm.a $(OBJDIR)/libpthread.a $(OBJDIR)/librpc.a \
+$(OBJDIR)/liblatin1.a $(OBJDIR)/libcompat.a $(DESTDIR)$(ILIBDIR)
+ $(INSTALL) -m 644 $(OBJDIR)/dietlibc.a $(DESTDIR)$(ILIBDIR)/libc.a
+ifeq ($(MYARCH),$(ARCH))
+ $(INSTALL) $(OBJDIR)/diet-i $(DESTDIR)$(BINDIR)/diet
+ -$(INSTALL) $(PICODIR)/diet-dyn-i $(DESTDIR)$(BINDIR)/diet-dyn
+endif
+ -$(INSTALL) $(OBJDIR)/pstart.o $(OBJDIR)/libgmon.a $(OBJDIR)/dyn_start.o $(OBJDIR)/dyn_stop.o $(DESTDIR)$(ILIBDIR)
+ -$(INSTALL) $(PICODIR)/libc.so $(DESTDIR)$(ILIBDIR)/libc.so
+ -$(INSTALL) $(PICODIR)/libpthread.so $(DESTDIR)$(ILIBDIR)/libpthread.so
+ -$(INSTALL) $(PICODIR)/libdl.so $(DESTDIR)$(ILIBDIR)/libdl.so
+ -$(INSTALL) $(PICODIR)/libcompat.so $(DESTDIR)$(ILIBDIR)/libcompat.so
+ -$(INSTALL) $(PICODIR)/dyn_start.o $(DESTDIR)$(ILIBDIR)/dyn_dstart.o
+ -$(INSTALL) $(PICODIR)/dyn_stop.o $(DESTDIR)$(ILIBDIR)/dyn_dstop.o
+ -$(INSTALL) $(PICODIR)/dstart.o $(PICODIR)/dyn_so_start.o $(DESTDIR)$(ILIBDIR)
+ $(INSTALL) -m 644 diet.1 $(DESTDIR)$(MAN1DIR)/diet.1
+ if test -f $(PICODIR)/libc.so -a ! -f $(DESTDIR)/etc/diet.ld.conf; then echo "$(ILIBDIR)" > $(DESTDIR)/etc/diet.ld.conf; fi
+ for i in `find include -name \*.h`; do install -m 644 -D $$i $(DESTDIR)$(INSTALLHOME)/$$i; done
+
+.PHONY: sparc ppc mips arm alpha i386 parisc mipsel powerpc s390 sparc64
+.PHONY: x86_64 ia64
+
+arm sparc ppc alpha i386 mips parisc s390 sparc64 x86_64 ia64:
+ $(MAKE) ARCH=$@ CROSS=$@-linux- all
+
+# Cross compile for little endian MIPS
+mipsel:
+ $(MAKE) ARCH=$@ CROSS=mips-linux- all
+
+mips-gnu:
+ $(MAKE) ARCH=$@ CROSS=$@-linux-gnu- all
+
+# Some people named their cross compiler toolchain powerpc-linux-gcc
+powerpc:
+ $(MAKE) ARCH=ppc CROSS=powerpc-linux- all
cross:
- $(MAKE) arm sparc ppc alpha i386 mips
+ $(MAKE) arm sparc ppc alpha i386 mips sparc64
# these depend on dietfeatures.h for large file backward compatibility
-$(OBJDIR)/__fstat64.o $(OBJDIR)/__lstat64.o $(OBJDIR)/__stat64.o: dietfeatures.h
+$(OBJDIR)/__fstat64.o $(OBJDIR)/__lstat64.o $(OBJDIR)/__stat64.o $(OBJDIR)/lseek64.o $(OBJDIR)/readdir64.o $(OBJDIR)/stat64.o $(OBJDIR)/lstat64.o $(OBJDIR)/fstat64.o $(OBJDIR)/truncate64.o $(OBJDIR)/__truncate64.o $(OBJDIR)/ftruncate64.o $(OBJDIR)/__ftruncate64.o $(PICODIR)/dyn_syscalls.o $(PICODIR)/__truncate64.o $(PICODIR)/__ftruncate64.o $(PICODIR)/__stat64.o $(PICODIR)/__lstat64.o $(PICODIR)/__fstat64.o: dietfeatures.h
# these depend on dietfeatures.h for thread support
-$(OBJDIR)/alloc.o $(OBJDIR)/perror.o $(OBJDIR)/logging.o $(OBJDIR)/unified.o: dietfeatures.h
+$(OBJDIR)/alloc.o $(OBJDIR)/perror.o $(OBJDIR)/logging.o $(OBJDIR)/unified.o $(OBJDIR)/clone.o $(OBJDIR)/set_errno.o: dietfeatures.h
# these depend on dietfeatures.h for linker warnings
$(OBJDIR)/assert_fail.o $(OBJDIR)/sprintf.o $(OBJDIR)/vsnprintf.o $(OBJDIR)/___div.o $(OBJDIR)/fflush.o $(OBJDIR)/setvbuf.o $(OBJDIR)/system.o $(OBJDIR)/sendfile.o $(OBJDIR)/setenv.o: dietfeatures.h
@@ -137,10 +358,56 @@ fclose.o $(OBJDIR)/fdglue.o $(OBJDIR)/fflush.o $(OBJDIR)/fgetc.o $(OBJDIR)/fputc
strcasecmp.o $(OBJDIR)/strcat.o $(OBJDIR)/strchr.o $(OBJDIR)/strcmp.o $(OBJDIR)/strcpy.o $(OBJDIR)/strlen.o $(OBJDIR)/strncasecmp.o $(OBJDIR)/strncat.o $(OBJDIR)/strrchr.o: dietfeatures.h
# these depend on dietfeatures.h for /proc
-$(OBJDIR)/tty.o: dietfeatures.h
-
-# these depend on dietfeatures.h for ungetc support ;-)
-$(OBJDIR)/ungetc.o: dietfeatures.h
+$(OBJDIR)/ttyname.o $(OBJDIR)/sysconf_cpus.o: dietfeatures.h
# these depend on dietfeatures.h for WANT_TZFILE_PARSER
-$(OBJDIR)/localtime_r.o: dietfeatures.h
+$(OBJDIR)/localtime_r.o $(OBJDIR)/strftime.o: dietfeatures.h
+
+# these depend on dietfeatures.h for WANT_SMALL_STDIO_BUFS
+$(LIBSTDIOOBJ): dietfeatures.h
+
+# these depend on dietfeatures.h for WANT_FULL_RESOLV_CONF
+$(OBJDIR)/dnscruft.o $(OBJDIR)/dnscruft2.o: dietfeatures.h
+
+# these depend on dietfeatures.h for WANT_THREAD_SAFE and errno
+$(LIBRPCOBJ) $(OBJDIR)/logging.o $(OBJDIR)/alloc.o $(OBJDIR)/cfsetospeed.o $(OBJDIR)/cfsetispeed.o \
+$(OBJDIR)/execl.o $(OBJDIR)/execlp.o $(OBJDIR)/execv.o $(OBJDIR)/execvp.o $(OBJDIR)/isatty.o \
+$(OBJDIR)/lockf.o $(OBJDIR)/perror.o $(OBJDIR)/remove.o $(OBJDIR)/set_errno.o $(OBJDIR)/sigemptyset.o \
+$(OBJDIR)/tcsetattr.o $(OBJDIR)/dnscruft2.o $(OBJDIR)/dnscruft.o $(OBJDIR)/entlib.o \
+$(OBJDIR)/gethostbyaddr.o $(OBJDIR)/gethostbyaddr_r.o $(OBJDIR)/gethostbyname.o \
+$(OBJDIR)/gethostbyname_r.o $(OBJDIR)/gethostbyname2.o $(OBJDIR)/gethostbyname2_r.o \
+$(OBJDIR)/inet_pton.o $(OBJDIR)/mkstemp.o $(OBJDIR)/mktemp.o $(OBJDIR)/tempnam.o \
+$(OBJDIR)/glob.o $(OBJDIR)/realpath.o $(OBJDIR)/fdglue.o $(OBJDIR)/fdglue2.o \
+$(OBJDIR)/getaddrinfo.o $(OBJDIR)/getnameinfo.o $(OBJDIR)/getprotoent.o \
+$(OBJDIR)/getservent.o $(OBJDIR)/iconv.o $(OBJDIR)/iconv_open.o \
+$(OBJDIR)/netent.o $(OBJDIR)/system.o $(OBJDIR)/stdin.o $(OBJDIR)/stdout.o \
+$(OBJDIR)/stderr.o: dietfeatures.h
+
+# these depend on dietfeatures.h for WANT_CRYPT_MD5
+$(OBJDIR)/crypt.o: dietfeatures.h
+
+# these depend on dietfeatures.h for WANT_FREAD_OPTIMIZATION
+$(OBJDIR)/fread.o $(OBJDIR)/fwrite.o: dietfeatures.h
+
+# these depend on dietfeatures.h for WANT_DYNAMIC
+$(OBJDIR)/start.o $(OBJDIR)/dyn_start.o $(OBJDIR)/dyn_stop.o: dietfeatures.h
+
+$(OBJDIR)/unified.o: dietuglyweaks.h
+
+$(OBJDIR)/adjtimex.o: include/sys/timex.h
+
+$(OBJDIR)/fgetc_unlocked.o $(OBJDIR)/fread.o $(OBJDIR)/ungetc.o: dietstdio.h
+
+# these depend on dietfeatures.h for WANT_LINKER_WARNINGS
+$(OBJDIR)/setlinebuf.o $(OBJDIR)/bzero.o $(OBJDIR)/setegid.o \
+$(OBJDIR)/seteuid.o: dietfeatures.h
+
+# these depend on dietfeatures.h for WANT_FULL_POSIX_COMPAT
+$(OBJDIR)/strncpy.o: dietfeatures.h
+$(OBJDIR)/strxfrm.o: dietfeatures.h
+
+# these depend on dietfeatures.h for WANT_INET_ADDR_DNS
+$(OBJDIR)/gethostbyname_r.o: dietfeatures.h
+
+
+# CFLAGS+=-W -Wshadow -Wid-clash-31 -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wwrite-strings
diff --git a/mdk-stage1/dietlibc/README b/mdk-stage1/dietlibc/README
index ce9838832..2a1fa332c 100644
--- a/mdk-stage1/dietlibc/README
+++ b/mdk-stage1/dietlibc/README
@@ -1,3 +1,8 @@
+ The system library is a challenge to all those using the computer to
+ write their own faster and better routines or to bow to the superior
+ strength and skill of a true master.
+ --http://www.inner.net/users/cmetz/program-like-a-klingon
+
diet libc to statically link programs that don't need all the bloat
from glibc.
@@ -7,10 +12,7 @@ To compile:
$ make
-make should compile the diet libc itself without warnings. In addition
-to the diet libc, the default make target includes t, which is a test
-program and probably contains code which produces warnings. You can
-safely ignore them.
+make should compile the diet libc itself.
When make is done, it will have created dietlibc.a in bin-i386 (or
bin-ppc, bin-alpha, bin-sparc, bin-ppc or bin-arm, depending on your
@@ -41,3 +43,7 @@ The embedded utils are small replacements for common utilities like mv,
chown, ls, and even a small tar that can extract tar files. The binary
repository contains a few utilities I linked against the diet libc, for
example gzip, bzip2 and fdisk.
+
+
+The license for the diet libc is the GNU General Public License, version
+2 (as included in the file COPYING).
diff --git a/mdk-stage1/dietlibc/alpha/Makefile.add b/mdk-stage1/dietlibc/alpha/Makefile.add
index 10ff0faef..68b10b43c 100644
--- a/mdk-stage1/dietlibc/alpha/Makefile.add
+++ b/mdk-stage1/dietlibc/alpha/Makefile.add
@@ -2,4 +2,4 @@
CFLAGS+=-Os -Iinclude -fomit-frame-pointer -fstrict-aliasing
VPATH:=alpha:syscalls.s:$(VPATH)
-LIBOBJ+=$(patsubst %,$(OBJDIR)/%,divq.o divl.o remq.o reml.o seteuid.o __time.o)
+LIBOBJ+=$(patsubst %,$(OBJDIR)/%,divq.o divl.o remq.o reml.o __time.o __alarm.o)
diff --git a/mdk-stage1/dietlibc/alpha/__longjmp.S b/mdk-stage1/dietlibc/alpha/__longjmp.S
index d86d76717..31e374d0f 100644
--- a/mdk-stage1/dietlibc/alpha/__longjmp.S
+++ b/mdk-stage1/dietlibc/alpha/__longjmp.S
@@ -1,11 +1,10 @@
-#ifdef __alpha__
-
#include <setjmp.h>
.text
.align 2
.global __longjmp
+.type __longjmp,@function
__longjmp:
mov $17, $0 /* a1 -> v0 */
@@ -18,7 +17,7 @@ __longjmp:
ldq $26, (JB_PC*8) ($16) /* ra */
ldq $fp, (JB_FP*8) ($16) /* fp */
- ldq $1, (JB_SP*8) ($16) /* sp */
+ ldq $sp, (JB_SP*8) ($16) /* sp */
ldt $f2, (JB_F2*8) ($16) /* f2 */
ldt $f3, (JB_F3*8) ($16) /* f3 */
@@ -30,9 +29,5 @@ __longjmp:
ldt $f9, (JB_F9*8) ($16) /* f9 */
cmoveq $0, 0x1, $0
- mov $1, $sp
ret $31, ($26), 1
-
-
-#endif
diff --git a/mdk-stage1/dietlibc/alpha/clone.S b/mdk-stage1/dietlibc/alpha/clone.S
index b7e32d707..28e61a8bc 100644
--- a/mdk-stage1/dietlibc/alpha/clone.S
+++ b/mdk-stage1/dietlibc/alpha/clone.S
@@ -1,5 +1,5 @@
#include "syscalls.h"
-#include <asm/errno.h>
+#include <errno.h>
.text
.align 2
diff --git a/mdk-stage1/dietlibc/alpha/setjmp.S b/mdk-stage1/dietlibc/alpha/setjmp.S
index 3768056be..04bfd3d94 100644
--- a/mdk-stage1/dietlibc/alpha/setjmp.S
+++ b/mdk-stage1/dietlibc/alpha/setjmp.S
@@ -1,15 +1,16 @@
#include <setjmp.h>
.text
+.weak setjmp
+.type setjmp,@function
+setjmp:
+.weak __setjmp
+.type __setjmp,@function
+__setjmp:
+ mov 0, $17
.global __sigsetjmp
+.type __sigsetjmp,@function
__sigsetjmp:
- ldgp $gp, 0($gp)
-
- mov $sp, $1
- lda $sp, -16($sp)
-
- stq $26, 0($sp) /* save ra */
-
stq $9, (JB_S0*8) ($16) /* s0 */
stq $10, (JB_S1*8) ($16) /* s1 */
stq $11, (JB_S2*8) ($16) /* s2 */
@@ -19,7 +20,7 @@ __sigsetjmp:
stq $26, (JB_PC*8) ($16) /* ra */
stq $fp, (JB_FP*8) ($16) /* fp */
- stq $1, (JB_SP*8) ($16) /* sp */
+ stq $sp, (JB_SP*8) ($16) /* sp */
stt $f2, (JB_F2*8) ($16) /* f2 */
stt $f3, (JB_F3*8) ($16) /* f3 */
@@ -30,17 +31,5 @@ __sigsetjmp:
stt $f8, (JB_F8*8) ($16) /* f8 */
stt $f9, (JB_F9*8) ($16) /* f9 */
- br $26, __sigjmp_save /* call __sigjmp_save */
+ br $31, __sigjmp_save /* jmp __sigjmp_save */
- ldq $26, 0($sp) /* restore ra */
-
- lda $sp, 16($sp)
- ret $31, ($26), 1 /* back to caller */
-
-.weak setjmp
-setjmp:
-.weak __setjmp
-__setjmp:
- ldgp $gp, 0($gp)
- mov 0, $17
- br __sigsetjmp
diff --git a/mdk-stage1/dietlibc/alpha/signal.S b/mdk-stage1/dietlibc/alpha/signal.S
deleted file mode 100644
index ceca0f02d..000000000
--- a/mdk-stage1/dietlibc/alpha/signal.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall(osf_signal,signal)
diff --git a/mdk-stage1/dietlibc/alpha/sigprocmask.S b/mdk-stage1/dietlibc/alpha/sigprocmask.S
deleted file mode 100644
index d9da836c2..000000000
--- a/mdk-stage1/dietlibc/alpha/sigprocmask.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall_weak(osf_sigprocmask,sigprocmask,__sigprocmask)
diff --git a/mdk-stage1/dietlibc/alpha/start.S b/mdk-stage1/dietlibc/alpha/start.S
index 00b8e950d..850ce2420 100644
--- a/mdk-stage1/dietlibc/alpha/start.S
+++ b/mdk-stage1/dietlibc/alpha/start.S
@@ -1,7 +1,3 @@
-#include "start.h"
-
-#ifdef __alpha__
-
.text
.align 2
.set noreorder
@@ -17,19 +13,21 @@ _start:
ldgp $gp, 0($gp)
/* prepare to call main */
- ldl $16, 0($sp) /* argc */
+ ldl $16, 0($sp) /* argc / a0 */
- lda $17, 8($sp) /* argv */
+ lda $17, 8($sp) /* argv / a1 */
- addq $16, 1, $18 /* argp */
+ addq $16, 1, $18 /* argp / a2 */
s8addq $18, $17, $18 /* (8*(argc+1))+argv -> argp */
stq $18, environ
- mov $0, $21 /* mov v0(dynload) to a5 */
-
+#ifdef WANT_DYNAMIC
+/* in v0 ($0) is the ld.so _fini pointer */
+ mov $0, $19 /* mov v0(dynload) to a3 */
+ jsr $26, dyn_start
+#else
jsr $26, main
+#endif
mov $0, $16
jsr $26, exit /* YES, CALL! for threads and atexit ! (+4 byte) */
-
-#endif
diff --git a/mdk-stage1/dietlibc/alpha/unified.S b/mdk-stage1/dietlibc/alpha/unified.S
index 02a1c9bcd..506bf7387 100644
--- a/mdk-stage1/dietlibc/alpha/unified.S
+++ b/mdk-stage1/dietlibc/alpha/unified.S
@@ -1,15 +1,25 @@
#include <dietfeatures.h>
+#include "syscalls.h"
+.weak exit
+exit:
+.global _exit
+_exit:
+ lda $0, __NR_exit
.global __unified_syscall
__unified_syscall:
callsys
bne $19, .Lerror
+
+/* here we go and "reuse" the return for weak-void functions */
+#include "dietuglyweaks.h"
+
ret $31, ($26), 0x01
.Lerror:
.global error_unified_syscall
error_unified_syscall:
-#ifdef WANT_THREAD_SAVE
+#ifdef WANT_THREAD_SAFE
lda $sp, -16($sp) /* alloc 2 qwords on stack */
stq $26, 0($sp) /* save ra to stack */
stq $0, 8($sp) /* save v0 to stack */
diff --git a/mdk-stage1/dietlibc/diet.c b/mdk-stage1/dietlibc/diet.c
index 1de6befc8..c3a053ac8 100644
--- a/mdk-stage1/dietlibc/diet.c
+++ b/mdk-stage1/dietlibc/diet.c
@@ -1,7 +1,11 @@
#include <string.h>
#include <unistd.h>
+#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
+#include <write12.h>
+
+#include "dietfeatures.h"
/* goal:
* when invoked as
@@ -15,90 +19,341 @@
* "sparc-linux-gcc -nostdlib -static -o t t.o /path/to/dietlibc/bin-sparc/start.o /path/to/dietlibc/bin-sparc/dietlibc.a"
*/
-void error(const char *message) {
- write(2,message,strlen(message));
+static void error(const char *message) {
+ __write2(message);
exit(1);
}
+static const char* Os[] = {
+ "i386","-Os","-mpreferred-stack-boundary=2",
+ "-malign-functions=0","-malign-jumps=0",
+ "-malign-loops=0","-fomit-frame-pointer",0,
+ "x86_64","-Os","-fno-omit-frame-pointer",0,
+ "sparc","-Os","-mcpu=supersparc",0,
+ "sparc64","-Os","-m64",0,
+ "alpha","-Os","-fomit-frame-pointer",0,
+ "arm","-Os","-fomit-frame-pointer",0,
+ "mips","-Os","-fomit-frame-pointer","-mno-abicalls","-G","8","-fno-pic",0,
+ "ppc","-Os","-fomit-frame-pointer","-mpowerpc-gpopt","-mpowerpc-gfxopt",0,
+ "s390","-Os","-fomit-frame-pointer",0,
+ "sh","-Os","-fomit-frame-pointer",0,
+ "ia64","-Os","-fno-omit-frame-pointer",0,
+ "x86_64","-Os","-fstrict-aliasing","-momit-leaf-frame-pointer","-mfance-math-387",0,
+ 0};
+
int main(int argc,char *argv[]) {
- int link=0;
+ int _link=0;
int compile=0;
+ int preprocess=0;
+ int verbose=0;
+ int profile=0;
char diethome[]=DIETHOME;
- char platform[1000]=DIETHOME "/bin-";
- char *nostdlib="-nostdlib";
- char *libgcc="-lgcc";
- char dashL[1000]="-L";
+ char platform[1000];
+#ifdef __DYN_LIB
+ int shared=0;
+#endif
+ char* shortplatform=0;
+#ifdef WANT_SAFEGUARD
+ char safeguard1[]="-include";
+ char safeguard2[]=DIETHOME "/include/dietref.h";
+#endif
+ const char *nostdlib="-nostdlib";
+ const char *libgcc="-lgcc";
+ char dashL[1000];
+ char dashstatic[]="-static";
int i;
+ int mangleopts=0;
+ char manglebuf[1024];
+
+#ifdef INSTALLVERSION
+ strcpy(platform,DIETHOME "/lib-");
+#else
+#ifndef __DYN_LIB
+ strcpy(platform,DIETHOME "/bin-");
+#else
+ strcpy(platform,DIETHOME "/pic-");
+#endif
+#endif
+ strcpy(dashL,"-L");
if (argc<2) {
- error("usage: diet [gcc command line]\n"
- "e.g. diet gcc -c t.c\n"
+usage:
+ if (verbose) {
+ __write2(
+#ifdef __DYN_LIB
+ "dyn-"
+#endif
+ "diet version " VERSION
+#ifndef INSTALLVERSION
+ " (non-install version in source tree)"
+#endif
+ "\n\n");
+ }
+ error("usage: diet [-v] [-Os] gcc command line\n"
+ "e.g. diet -Os gcc -c t.c\n"
"or diet sparc-linux-gcc -o foo foo.c bar.o\n");
}
+ if (!strcmp(argv[1],"-v")) {
+ ++argv; --argc;
+ verbose=1;
+ }
+ if (argv[1] && !strcmp(argv[1],"-Os")) {
+ ++argv; --argc;
+ mangleopts=1;
+ }
+ if (!argv[1]) goto usage;
{
char *tmp=strchr(argv[1],0)-2;
- char *tmp2;
+ char *tmp2,*tmp3;
char *cc=argv[1];
if (tmp<cc) goto donttouch;
- if ((tmp2=strchr(cc,'-'))) { /* cross compiling? */
+ if ((tmp2=strstr(cc,"linux-"))) { /* cross compiling? */
int len=strlen(platform);
+ --tmp2;
+ tmp3=strchr(cc,'-');
+ if (tmp3<tmp2) tmp2=tmp3;
if (tmp2-cc>90) error("platform name too long!\n");
- memmove(platform+len,argv[1],tmp2-cc);
+ shortplatform=platform+len;
+ memmove(shortplatform,argv[1],(size_t)(tmp2-cc));
platform[tmp2-cc+len]=0;
-/* printf("found platform %s\n",platform); */
+ if (shortplatform[0]=='i' && shortplatform[2]=='8' && shortplatform[3]=='6') shortplatform[1]='3';
} else {
#ifdef __sparc__
- strcat(platform,"sparc");
+#ifdef __arch64__
+ shortplatform="sparc64";
+#else
+ shortplatform="sparc";
#endif
-#ifdef __ppc__
- strcat(platform,"ppc");
+#endif
+#ifdef __powerpc__
+ shortplatform="ppc";
#endif
#ifdef __i386__
- strcat(platform,"i386");
+ shortplatform="i386";
#endif
#ifdef __alpha__
- strcat(platform,"alpha");
+ shortplatform="alpha";
#endif
#ifdef __arm__
- strcat(platform,"arm");
+ shortplatform="arm";
#endif
#ifdef __mips__
- strcat(platform,"mips");
+ shortplatform="mips";
+#endif
+#ifdef __s390__
+ shortplatform="s390";
+#endif
+#ifdef __sh__
+ shortplatform="sh";
+#endif
+#ifdef __hppa__
+ shortplatform="parisc";
+#endif
+#ifdef __x86_64__
+ shortplatform="x86_64";
+#endif
+#ifdef __ia64__
+ shortplatform="ia64";
#endif
+ {
+ char *tmp=platform+strlen(platform);
+ strcpy(tmp,shortplatform);
+ shortplatform=tmp;
+ }
+ }
+ /* MIPS needs special handling. If argv contains -EL, change
+ * platform name to mipsel */
+ if (!strcmp(shortplatform,"mips")) {
+ int i;
+ for (i=1; i<argc; ++i)
+ if (!strcmp(argv[i],"-EL"))
+ strcpy(shortplatform,"mipsel");
}
strcat(dashL,platform);
if (!strcmp(tmp,"cc")) {
char **newargv;
char **dest;
char *a,*b,*c;
+#ifdef WANT_DYNAMIC
+ char *d,*e,*f;
+#endif
/* we need to add -I... if the command line contains -c, -S or -E */
- for (i=2; i<argc; ++i)
- if (!strcmp(argv[i],"-c") || !strcmp(argv[i],"-S") || !strcmp(argv[i],"-E"))
+ for (i=2; i<argc; ++i) {
+ if (argv[i][0]=='-' && argv[i][1]=='M')
+ goto pp;
+ if (!strcmp(argv[i],"-pg"))
+ profile=1;
+ if (!strcmp(argv[i],"-c") || !strcmp(argv[i],"-S"))
compile=1;
+ if (!strcmp(argv[i],"-E"))
+pp:
+ preprocess=compile=1;
+ }
/* we need to add -nostdlib if we are not compiling*/
- link=!compile;
+ _link=!compile;
+#ifdef __DYN_LIB
+ if (_link) {
+ for (i=2; i<argc; ++i)
+ if (!strcmp(argv[i],"-shared")) {
+ shared=1;
+ _link=0;
+ }
+ }
+#endif
#if 0
for (i=2; i<argc; ++i)
if (!strcmp(argv[i],"-o"))
- if (!compile) link=1;
+ if (!compile) _link=1;
#endif
- newargv=alloca(sizeof(char*)*(argc+6));
+ newargv=alloca(sizeof(char*)*(argc+100));
a=alloca(strlen(diethome)+20);
b=alloca(strlen(platform)+20);
c=alloca(strlen(platform)+20);
strcpy(a,"-I"); strcat(a,diethome); strcat(a,"/include");
- strcpy(b,platform); strcat(b,"/start.o");
+#ifndef __DYN_LIB
+ strcpy(b,platform);
+ if (profile) strcat(b,"/pstart.o"); else strcat(b,"/start.o");
+#ifdef INSTALLVERSION
+ strcpy(c,platform); strcat(c,"/libc.a");
+#else
strcpy(c,platform); strcat(c,"/dietlibc.a");
+#endif
+#else
+ strcpy(b,platform); strcat(b,"/dstart.o");
+ strcpy(c,"-lc");
+#endif
+
+#ifdef WANT_DYNAMIC
+ d=alloca(strlen(platform)+20);
+ e=alloca(strlen(platform)+20);
+#ifdef __DYN_LIB
+ strcpy(d,platform);
+ strcpy(e,platform);
+ if (shared)
+ strcat(d,"/dyn_so_start.o");
+#ifdef INSTALLVERSION
+ else
+ strcat(d,"/dyn_dstart.o");
+ strcat(e,"/dyn_dstop.o");
+#else
+ else
+ strcat(d,"/dyn_start.o");
+ strcat(e,"/dyn_stop.o");
+#endif
+#else
+ strcpy(d,platform); strcat(d,"/dyn_start.o");
+ strcpy(e,platform); strcat(e,"/dyn_stop.o");
+#endif
+#endif
dest=newargv;
*dest++=argv[1];
- if (link) { *dest++=nostdlib; *dest++=dashL; }
- if (compile || link) *dest++=a;
- for (i=2; i<argc; ++i)
+#ifndef __DYN_LIB
+ if (_link) { *dest++=(char*)nostdlib; *dest++=dashstatic; *dest++=dashL; }
+#else
+ /* avoid R_*_COPY relocations */
+ *dest++="-fPIC";
+ if (_link || shared) { *dest++=(char*)nostdlib; *dest++=dashL; }
+#endif
+#ifdef WANT_SAFEGUARD
+ if (compile && !preprocess) {
+ *dest++=safeguard1;
+ *dest++=safeguard2;
+ }
+#endif
+ if (_link) { *dest++=b; }
+#ifdef WANT_DYNAMIC
+ if (_link) { *dest++=d; }
+#endif
+ for (i=2; i<argc; ++i) {
+ if (mangleopts)
+ if (argv[i][0]=='-' && (argv[i][1]=='O' || argv[i][1]=='f' || argv[i][1]=='m')) {
+ if (strcmp(argv[i],"-fpic") && strcmp(argv[i],"-fno-pic"))
+ continue;
+ }
*dest++=argv[i];
- if (link) { *dest++=b; *dest++=c; *dest++=libgcc; }
+ }
+#ifndef __DYN_LIB
+ if (compile || _link) *dest++=a;
+#else
+ if (compile || _link || shared) *dest++=a;
+#endif
+ *dest++="-D__dietlibc__";
+ if (mangleopts) {
+ const char **o=Os;
+
+ {
+ int fd;
+ char* tmp=getenv("HOME");
+ if (tmp) {
+ if (strlen(tmp)+strlen(cc)<900) {
+ strcpy(manglebuf,tmp);
+ strcat(manglebuf,"/.diet/");
+ strcat(manglebuf,cc);
+ if ((fd=open(manglebuf,O_RDONLY))>=0) {
+ int len=read(fd,manglebuf,1023);
+ if (len>0) {
+ int i;
+ manglebuf[len]=0;
+ *dest++=manglebuf;
+ for (i=1; i<len; ++i) {
+ if (manglebuf[i]==' ' || manglebuf[i]=='\n') {
+ manglebuf[i]=0;
+ if (i+1<len)
+ *dest++=manglebuf+i+1;
+ }
+ }
+ goto incorporated;
+ }
+ }
+ }
+ }
+ }
+ for (o=Os;*o;++o) {
+ if (!strcmp(*o,shortplatform)) {
+ ++o;
+ while (*o) {
+ *dest++=(char*)*o;
+ ++o;
+ }
+ break;
+ } else
+ while (*o) ++o;
+ }
+ }
+incorporated:
+ if (_link) {
+ if (profile) *dest++="-lgmon";
+ if (!strcmp(shortplatform,"sparc") || !strcmp(shortplatform,"sparc64")) {
+ *dest++=(char*)libgcc; *dest++=c;
+ } else {
+ *dest++=c; *dest++=(char*)libgcc;
+ }
+ }
+#ifdef WANT_DYNAMIC
+ if (_link) { *dest++=e; }
+#endif
+#ifdef __DYN_LIB
+ if (shared){ *dest++=c; }
+ f=alloca(strlen(platform)+100);
+ if (_link) {
+ strcpy(f,"-Wl,-dynamic-linker=");
+ strcat(f,platform);
+// strcat(f,"/diet-linux.so");
+ strcat(f,"/libdl.so");
+ *dest++=f;
+ }
+#endif
*dest=0;
+ if (verbose) {
+ int i;
+ for (i=0; newargv[i]; i++) {
+ __write2(newargv[i]);
+ __write2(" ");
+ }
+ __write2("\n");
+ }
execvp(newargv[0],newargv);
goto error;
} else if (!strcmp(tmp,"ld")) {
@@ -107,6 +362,6 @@ int main(int argc,char *argv[]) {
donttouch:
execvp(argv[1],argv+1);
error:
- error("execvp failed!\n");
+ error("execvp() failed!\n");
return 1;
}
diff --git a/mdk-stage1/dietlibc/dietdirent.h b/mdk-stage1/dietlibc/dietdirent.h
index d732cf7dc..dbd7206a6 100644
--- a/mdk-stage1/dietlibc/dietdirent.h
+++ b/mdk-stage1/dietlibc/dietdirent.h
@@ -1,6 +1,8 @@
+#include <sys/shm.h>
+
struct __dirstream {
int fd;
- char buf[1024];
+ char buf[PAGE_SIZE-(sizeof (int)*3)];
unsigned int num;
unsigned int cur;
}; /* stream data from opendir() */
diff --git a/mdk-stage1/dietlibc/dietfeatures.h b/mdk-stage1/dietlibc/dietfeatures.h
index e1de38577..a7b84d5b9 100644
--- a/mdk-stage1/dietlibc/dietfeatures.h
+++ b/mdk-stage1/dietlibc/dietfeatures.h
@@ -3,40 +3,106 @@
/* feel free to comment some of these out to reduce code size */
-//#define WANT_FLOATING_POINT_IN_PRINTF
-//#define WANT_FLOATING_POINT_IN_SCANF
+/* #define WANT_FLOATING_POINT_IN_PRINTF */
+/* #define WANT_FLOATING_POINT_IN_SCANF */
#define WANT_CHARACTER_CLASSES_IN_SCANF
#define WANT_NULL_PRINTF
+/* #define WANT_LONGLONG_PRINTF */
+/* #define WANT_LONGLONG_SCANF */
-#define SLASH_PROC_OK
+/* 128 or 2048 bytes buffer size? */
+/* #define WANT_SMALL_STDIO_BUFS */
+
+/* want fread to read() directly if size of data is larger than buffer?
+ * This costs a few bytes but is worth it if the application is already
+ * buffering. */
+#define WANT_FREAD_OPTIMIZATION
-// #define WANT_BUFFERED_STDIO
+/* this is only for meaningful for ttyname and sysconf_cpus so far */
+#define SLASH_PROC_OK
/* use errno_location instead of errno */
-// #define WANT_THREAD_SAFE
+/* #define WANT_THREAD_SAFE */
-/* make the startcode, etc. dynamic aware */
-/* #undef WANT_DYNAMIC */
+/* make the startcode, etc. dynamic aware ({con,de}structors) */
+/* #define WANT_DYNAMIC */
/* do you want smaller or faster string routines? */
/* #define WANT_FASTER_STRING_ROUTINES */
-/* do you want ungetc? makes fgetc more complex */
-#define WANT_UNGETC
+/* define this to have strncpy zero-fill and not just zero-terminate the
+ * string */
+/* #define WANT_FULL_POSIX_COMPAT */
-// #define WANT_LINKER_WARNINGS
+/* read the comment in lib/strncat.c for an explanation */
+/* #define WANT_NON_COMPLIANT_STRNCAT */
+
+/* #define WANT_LINKER_WARNINGS */
/* you need to define this if you want to run your programs with large
- * file support on kernel 2.2 or 2.4 */
-// #define WANT_LARGEFILE_BACKCOMPAT
+ * file support on kernel 2.2 or 2.0 */
+/* #define WANT_LARGEFILE_BACKCOMPAT */
/* do you want localtime(3) to read /etc/localtime?
* Needed for daylight saving time etc. */
-// #define WANT_TZFILE_PARSER
+/* #define WANT_TZFILE_PARSER */
+
+/* do you want the DNS routines to parse and use "domain" and "search"
+ * lines from /etc/resolv.conf? Normally not used on boot floppies and
+ * embedded environments. */
+#define WANT_FULL_RESOLV_CONF
+
+/* do you want IPv6 transport support in the DNS resolver? */
+/* #define WANT_IPV6_DNS */
+
+/* do you want gethostbyname and friends to consult /etc/hosts? */
+#define WANT_ETC_HOSTS
+
+/* do you want gethostbyname to understand dotted decimal IP numbers
+ * directly and not try to resolve them? */
+#define WANT_INET_ADDR_DNS
+
+/* do you want math functions high precision rather than fast/small? */
+/* #define WANT_HIGH_PRECISION_MATH */
+
+/* do you want support for matherr? */
+/* #define WANT_MATHERR */
+
+/* do you want crypt(3) to use MD5 if the salt starts with "$1$"? */
+/* #define WANT_CRYPT_MD5 */
+
+/* do you want diet to include a safeguard dependency to make linking
+ * against glibc fail? This may fail with older binutils. */
+#define WANT_SAFEGUARD
+
+/* dy you want that malloc(0) return a pointer to a "zero-length" object
+ * that is realloc-able; means realloc(..,size) gives a NEW object (like a
+ * call to malloc(size)).
+ * WARNING: this violates C99 */
+/* #define WANT_MALLOC_ZERO */
+
/* stop uncommenting here ;-) */
#ifndef WANT_FASTER_STRING_ROUTINES
#define WANT_SMALL_STRING_ROUTINES
#endif
+#ifdef WANT_THREAD_SAFE
+#ifndef __ASSEMBLER__
+#define errno (*__errno_location())
+#define _REENTRANT
+#endif
+#endif
+
+#ifdef __DYN_LIB
+/* with shared libraries you MUST have a dynamic aware startcode */
+#ifndef WANT_DYNAMIC
+#define WANT_DYNAMIC
+#endif
+/* saveguard crashes with shared objects ... */
+#ifdef WANT_SAFEGUARD
+#undef WANT_SAFEGUARD
+#endif
+#endif
+
#endif
diff --git a/mdk-stage1/dietlibc/dietstdarg.h b/mdk-stage1/dietlibc/dietstdarg.h
deleted file mode 100644
index 827671b22..000000000
--- a/mdk-stage1/dietlibc/dietstdarg.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdarg.h>
-
-/* this assumes that va_copy() will be a macro, it is on gcc */
-#ifndef va_copy
-# ifdef __va_copy
-# define va_copy(x, y) __va_copy(x, y)
-# else
-/* assume copying it works... */
-# define va_copy(x, y) x = y
-# endif
-#endif
-
diff --git a/mdk-stage1/dietlibc/dietstdio.h b/mdk-stage1/dietlibc/dietstdio.h
index a1cbeba83..2e0e93601 100644
--- a/mdk-stage1/dietlibc/dietstdio.h
+++ b/mdk-stage1/dietlibc/dietstdio.h
@@ -1,81 +1,77 @@
-/* diet stdio -- no buffering ;-} */
+/* diet stdio */
-#include "dietfeatures.h"
+#include <sys/cdefs.h>
#include <sys/types.h>
-#ifdef WANT_THREAD_SAVE
+#include "dietfeatures.h"
+#ifdef WANT_THREAD_SAFE
#include <pthread.h>
#endif
+#include <stdarg.h>
+#ifdef WANT_SMALL_STDIO_BUFS
#define BUFSIZE 128
+#else
+#define BUFSIZE 2048
+#endif
-typedef struct __file {
+struct __stdio_file {
int fd;
int flags;
-#ifdef WANT_BUFFERED_STDIO
unsigned int bs; /* read: bytes in buffer */
unsigned int bm; /* position in buffer */
- char buf[BUFSIZE];
- struct __file *next; /* for fflush */
-#endif
+ unsigned int buflen; /* length of buf */
+ char *buf;
+ struct __stdio_file *next; /* for fflush */
pid_t popen_kludge;
-#ifdef WANT_UNGETC
- char ungetbuf;
+ unsigned char ungetbuf;
char ungotten;
-#endif
-#ifdef WANT_THREAD_SAVE
+#ifdef WANT_THREAD_SAFE
pthread_mutex_t m;
#endif
-} FILE;
-
-extern FILE *__stdio_root;
+};
#define ERRORINDICATOR 1
#define EOFINDICATOR 2
#define BUFINPUT 4
#define BUFLINEWISE 8
#define NOBUF 16
-#define UNSEEKABLE 32
+#define STATICBUF 32
+#define FDPIPE 64
#define _IONBF 0
#define _IOLBF 1
#define _IOFBF 2
+#include <stdio.h>
+
/* internal function to flush buffer.
* However, if next is BUFINPUT and the buffer is an input buffer, it
* will not be flushed. Vice versa for output */
extern int __fflush4(FILE *stream,int next);
+extern int __buffered_outs(const char *s,size_t len);
-FILE *fopen (const char *path, const char *mode);
-FILE *fdopen (int fildes, const char *mode);
-FILE *freopen (const char *path, const char *mode, FILE *stream);
-
-int fgetc(FILE *stream);
-char *fgets(char *s, int size, FILE *stream);
-int getc(FILE *stream);
-int getchar(void);
-char *gets(char *s);
-int ungetc(int c, FILE *stream);
+/* ..scanf */
+struct arg_scanf {
+ void *data;
+ int (*getch)(void*);
+ int (*putch)(int,void*);
+};
-int fputc(int c, FILE *stream);
-int fputs(const char *s, FILE *stream);
-int putc(int c, FILE *stream);
-int putchar(int c);
-int puts(const char *s);
+int __v_scanf(struct arg_scanf* fn, const unsigned char *format, va_list arg_ptr);
-long fseek( FILE *stream, long offset, int whence);
-long ftell( FILE *stream);
-void rewind( FILE *stream);
-int fgetpos( FILE *stream, fpos_t *pos);
-int fsetpos( FILE *stream, fpos_t *pos);
+struct arg_printf {
+ void *data;
+ int (*put)(void*,size_t,void*);
+};
-size_t fread( void *ptr, size_t size, size_t nmemb, FILE *stream);
+int __v_printf(struct arg_printf* fn, const unsigned char *format, va_list arg_ptr);
-size_t fwrite( const void *ptr, size_t size, size_t nmemb, FILE *stream);
-
-int fflush(FILE *stream);
-
-int fclose(FILE *stream);
+extern FILE *__stdio_root;
-extern FILE *stdout, *stderr, *stdin;
+int __fflush_stdin(void);
+int __fflush_stdout(void);
+int __fflush_stderr(void);
-#define EOF (int)(-1)
+FILE* __stdio_init_file(int fd,int closeonerror);
+int __stdio_parse_mode(const char *mode);
+void __stdio_flushall(void);
diff --git a/mdk-stage1/dietlibc/dirstream.h b/mdk-stage1/dietlibc/dirstream.h
deleted file mode 100644
index dc8fba79c..000000000
--- a/mdk-stage1/dietlibc/dirstream.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-/*
- * POSIX Standard: 5.1.2 Directory Operations <dirent.h>
- */
-
-#ifndef _DIRSTREAM_H
-
-#define _DIRSTREAM_H 1
-
-#include <sys/types.h>
-#include <dirent.h>
-#ifdef _POSIX_THREADS
-#include <pthread.h>
-#endif
-
-/* For now, syscall readdir () only supports one entry at a time. It
- * will be changed in the future.
-#define NUMENT 3
-*/
-#ifndef NUMENT
-#define NUMENT 1
-#endif
-
-#define SINGLE_READDIR 11
-#define MULTI_READDIR 12
-#define NEW_READDIR 13
-
-/* Directory stream type. */
-struct __dirstream {
- /* file descriptor */
- int dd_fd;
-
- /* offset of the next dir entry in buffer */
- off_t dd_nextloc;
-
- /* bytes of valid entries in buffer */
- size_t dd_size;
-
- /* -> directory buffer */
- struct dirent *dd_buf;
-
- /* we have to convert */
- struct dirent convbuf;
-
- /* offset of the next dir entry in directory. */
- off_t dd_nextoff;
-
- /* total size of buffer */
- size_t dd_max;
-
- enum {unknown, have_getdents, no_getdents} dd_getdents;
-
- /* lock */
-#ifdef _POSIX_THREADS
- pthread_mutex_t *dd_lock;
-#else
- void *dd_lock;
-#endif
-}; /* stream data from opendir() */
-
-#endif /* dirent.h */
diff --git a/mdk-stage1/dietlibc/i386/Makefile.add b/mdk-stage1/dietlibc/i386/Makefile.add
index b685cc360..83b18ae29 100644
--- a/mdk-stage1/dietlibc/i386/Makefile.add
+++ b/mdk-stage1/dietlibc/i386/Makefile.add
@@ -1,3 +1,8 @@
-CFLAGS+=-march=i386 -mcpu=i386 -Os -fomit-frame-pointer
+M:=$(shell ./findcflags.sh $(CC))
+LIBOBJ+=$(OBJDIR)/__ten.o $(OBJDIR)/md5asm.o $(OBJDIR)/mmap64.o
+LIBMATH+=acos.o asin.o atan.o atan2.o ceil.o cos.o exp.o exp10.o exp2.o expm1.o fabs.o floor.o hypot.o log.o log10.o log2.o sin.o sqrt.o tan.o copysign.o sincos.o __half.o ldexp.o pow.o ilogb.o cbrt.o log1p.o sqrtl.o fmod.o libm2.o
+#CFLAGS+=-march=i386 -Os -fomit-frame-pointer -malign-functions=0 -malign-jumps=0 -malign-loops=0 -mpreferred-stack-boundary=2
+CFLAGS+=$(M)
VPATH:=i386:syscalls.s:$(VPATH)
+LIBGMON_OBJS+=$(OBJDIR)/mcount.o
diff --git a/mdk-stage1/dietlibc/i386/__longjmp.S b/mdk-stage1/dietlibc/i386/__longjmp.S
index 098275037..a09191f0b 100644
--- a/mdk-stage1/dietlibc/i386/__longjmp.S
+++ b/mdk-stage1/dietlibc/i386/__longjmp.S
@@ -2,6 +2,7 @@
.text
.global __longjmp
+.type __longjmp,@function
__longjmp:
movl 4(%esp), %ecx /* User's jmp_buf in %ecx. */
movl 8(%esp), %eax /* Second argument is return value. */
diff --git a/mdk-stage1/dietlibc/i386/__testandset.S b/mdk-stage1/dietlibc/i386/__testandset.S
index af7b4d5a0..29b02d57a 100644
--- a/mdk-stage1/dietlibc/i386/__testandset.S
+++ b/mdk-stage1/dietlibc/i386/__testandset.S
@@ -1,5 +1,6 @@
.text
.global __testandset
+.type __testandset,@function
__testandset:
xorl %eax, %eax
movl 0x4(%esp),%edx
diff --git a/mdk-stage1/dietlibc/i386/clone.S b/mdk-stage1/dietlibc/i386/clone.S
index ac02eb468..ea43bc2e2 100644
--- a/mdk-stage1/dietlibc/i386/clone.S
+++ b/mdk-stage1/dietlibc/i386/clone.S
@@ -1,17 +1,21 @@
-#include <asm/unistd.h>
+#include "syscalls.h"
+#include <errno.h>
+#include "PIC.h"
.text
+.type clone,@function
.weak clone
clone:
+.type __clone,@function
.global __clone
__clone:
+ mov $-EINVAL, %eax
+
movl 4(%esp), %ecx /* have non null thread_funcion */
- testl %ecx, %ecx
- je .Lclone_error
+ jecxz .Lclone_error
movl 8(%esp), %ecx /* have non null child_stack pointer */
- testl %ecx, %ecx
- je .Lclone_error
+ jecxz .Lclone_error
/* put the parameter on thread stack */
subl $8, %ecx
@@ -31,9 +35,7 @@ __clone:
testl %eax, %eax
jl .Lclone_error
- je .Lstart_thread
- ret
-
+ jne .Lreturn
.Lstart_thread:
xorl %ebp,%ebp
call *%ebx
@@ -43,9 +45,16 @@ __clone:
.Lclone_error:
negl %eax
pushl %eax
+#ifdef PIC
+ pushl %ebx
+ PIC_INIT
+ call __errno_location@PLT
+ popl %ebx
+#else
call __errno_location
+#endif
popl %ecx
movl %ecx, (%eax)
- xorl %eax, %eax
- decl %eax
+ orl $-1, %eax
+.Lreturn:
ret
diff --git a/mdk-stage1/dietlibc/i386/setjmp.S b/mdk-stage1/dietlibc/i386/setjmp.S
index 9bfecf565..09b266c61 100644
--- a/mdk-stage1/dietlibc/i386/setjmp.S
+++ b/mdk-stage1/dietlibc/i386/setjmp.S
@@ -1,61 +1,40 @@
#include <setjmp.h>
-/* setjmp for i386.
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-.section .rodata
.text
.weak setjmp
+.type setjmp,@function
setjmp:
.globl __setjmp
+.type __setjmp,@function
__setjmp:
- popl %eax /* Pop return address. */
- popl %ecx /* Pop jmp_buf. */
- pushl $0 /* Push zero argument. */
- pushl %ecx /* Push jmp_buf. */
- pushl %eax /* Push back return address. */
+ popl %eax
+ popl %ecx
+ pushl $0
+ pushl %ecx
+ pushl %eax
.globl __sigsetjmp
+.type __sigsetjmp,@function
__sigsetjmp:
- movl 4(%esp), %eax /* User's jmp_buf in %eax. */
+ movl 4(%esp), %eax
+
/* Save registers. */
movl %ebx, (JB_BX*4)(%eax)
movl %esi, (JB_SI*4)(%eax)
movl %edi, (JB_DI*4)(%eax)
movl %ebp, (JB_BP*4)(%eax)
- leal 4(%esp), %ecx /* Save SP as it will be after we return. */
- movl %ecx, (JB_SP*4)(%eax)
+ leal 4(%esp), %edx /* Save SP as it will be after we return. */
movl 0(%esp), %ecx /* Save PC we are returning to now. */
+ movl %edx, (JB_SP*4)(%eax)
movl %ecx, (JB_PC*4)(%eax)
/* Make a tail call to __sigjmp_save; it takes the same args. */
#ifdef PIC
- /* We cannot use the PLT, because it requires that %ebx be set, but
- we can't save and restore our caller's value. Instead, we do an
- indirect jump through the GOT, using for the temporary register
- %ecx, which is call-clobbered. */
- call L(here)
-L(here):
- popl %ecx
- addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ecx
- movl C_SYMBOL_NAME(__sigjmp_save@GOT)(%ecx), %ecx
- jmp *%ecx
+ call 1f
+ addl $_GLOBAL_OFFSET_TABLE_, %ecx
+ jmp *__sigjmp_save@GOT(%ecx)
+1: movl (%esp), %ecx
+ ret
#else
jmp __sigjmp_save
#endif
diff --git a/mdk-stage1/dietlibc/i386/start.S b/mdk-stage1/dietlibc/i386/start.S
index 167bb779c..1a825fc2a 100644
--- a/mdk-stage1/dietlibc/i386/start.S
+++ b/mdk-stage1/dietlibc/i386/start.S
@@ -1,42 +1,51 @@
-#include "start.h"
+#include "dietfeatures.h"
+#include "PIC.h"
-#ifdef __i386__
.text
-.globl _start
+.global _start
_start:
-#if 0
- popl %ecx
- movl %esp, %esi
- leal 4(%esp,%ecx,4),%eax
+#if 1
+ popl %ecx /* %ecx = argc */
+ movl %esp,%esi /* %esi = argv */
+ pushl %ecx
#else
- movl (%esp),%ecx /* %ecx = argc */
- leal 4(%esp),%esi /* %esi = argv */
-
- leal 4(%esi,%ecx,4),%eax /* eax = 4*ecx+4 = envp */
+ movl (%esp),%ecx /* %ecx = argc */
+ leal 4(%esp),%esi /* %esi = argv */
#endif
- pushl %eax
- pushl %esi
- pushl %ecx
- movl %eax,environ
+ leal 4(%esi,%ecx,4),%eax /* %eax = envp = (4*ecx)+%esi+4 */
#ifdef WANT_DYNAMIC
-/* in %edx we have the dynamic _fini ( register this if non null ) */
- test %edx, %edx
- je .Linit
+/* in %edx we have the ld.so dynamic _fini ( register this if non null ) */
push %edx
- call atexit
- pop %edx
-.Linit:
- call _init
- push $_fini
- call atexit
- pop %edx
#endif
- call main
- pushl %eax
- call exit
-.Lfefe:
- .size _start,.Lfefe-_start
+ pushl %eax
+ pushl %esi
+ pushl %ecx
+ PIC_INIT /* non-PIC: this is an empty line */
+ PUT_VAR %eax, environ, %ecx /* non-PIC: movl %eax,environ */
+
+#ifdef PROFILING
+ pushl $_etext
+ pushl $.text
+ call monitor
+ addl $0x8, %esp
+#endif
+
+#ifdef WANT_DYNAMIC
+ call _dyn_start
+#else
+ call main
+#endif
+
+#ifdef PROFILING
+ pushl %eax
+ call _stop_monitor
+ popl %eax
#endif
+ pushl %eax
+ call exit
+ hlt /* die now ! will ya ... */
+.Lstart:
+ .size _start,.Lstart-_start
diff --git a/mdk-stage1/dietlibc/i386/unified.S b/mdk-stage1/dietlibc/i386/unified.S
index f182bdb4b..989bf37b5 100644
--- a/mdk-stage1/dietlibc/i386/unified.S
+++ b/mdk-stage1/dietlibc/i386/unified.S
@@ -1,13 +1,33 @@
+
#include <dietfeatures.h>
.text
+.global __unified_syscall_256
+.type __unified_syscall_256,@function
+__unified_syscall_256:
+ movzwl %ax,%eax
+ jmp .L1
+.L2:
+.size __unified_syscall_256,.L2-__unified_syscall_256
+.weak exit
+exit:
+.global _exit
+.type _exit,@function
+_exit:
+ movb $1,%al
.global __unified_syscall
+.type __unified_syscall,@function
__unified_syscall:
+.size _exit,__unified_syscall-_exit
movzbl %al, %eax
+.L1:
push %edi
push %esi
push %ebx
movl %esp,%edi
+ /* we use movl instead of pop because otherwise a signal would
+ destroy the stack frame and crash the program, although it
+ would save a few bytes. */
movl 0x10(%edi),%ebx
movl 0x14(%edi),%ecx
movl 0x18(%edi),%edx
@@ -16,19 +36,24 @@ __unified_syscall:
int $0x80
cmp $-124,%eax
jbe .Lnoerror
-#ifdef WANT_THREAD_SAVE
+ neg %eax
+#ifdef WANT_THREAD_SAFE
movl %eax,%ebx
call __errno_location
- neg %ebx
movl %ebx,(%eax)
+ orl $-1,%eax
#else
- neg %eax
mov %eax,errno
+ sbb %eax,%eax # eax = eax - eax - CY = -1
#endif
- xor %eax,%eax
- dec %eax
.Lnoerror:
pop %ebx
pop %esi
pop %edi
+
+/* here we go and "reuse" the return for weak-void functions */
+#include "dietuglyweaks.h"
+
ret
+.L3:
+.size __unified_syscall,.L3-__unified_syscall
diff --git a/mdk-stage1/dietlibc/include/alloca.h b/mdk-stage1/dietlibc/include/alloca.h
index e69de29bb..41f92354f 100644
--- a/mdk-stage1/dietlibc/include/alloca.h
+++ b/mdk-stage1/dietlibc/include/alloca.h
@@ -0,0 +1,13 @@
+#ifndef _ALLOCA_H
+#define _ALLOCA_H
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#ifdef __GNUC__
+#define alloca(x) __builtin_alloca(x)
+#else
+void *alloca(size_t size) __THROW;
+#endif
+
+#endif
diff --git a/mdk-stage1/dietlibc/include/arpa/inet.h b/mdk-stage1/dietlibc/include/arpa/inet.h
index 6d5a6dc35..bb278d399 100644
--- a/mdk-stage1/dietlibc/include/arpa/inet.h
+++ b/mdk-stage1/dietlibc/include/arpa/inet.h
@@ -9,6 +9,7 @@ int inet_aton(const char *cp, struct in_addr *inp) __THROW;
unsigned long int inet_addr(const char *cp) __THROW;
unsigned long int inet_network(const char *cp) __THROW;
char *inet_ntoa(struct in_addr in) __THROW;
+char *inet_ntoa_r(struct in_addr in,char* buf) __THROW;
struct in_addr inet_makeaddr(int net, int host) __THROW;
unsigned long int inet_lnaof(struct in_addr in) __THROW;
unsigned long int inet_netof(struct in_addr in) __THROW;
diff --git a/mdk-stage1/dietlibc/include/arpa/nameser.h b/mdk-stage1/dietlibc/include/arpa/nameser.h
index 1ee048d66..9327006b0 100644
--- a/mdk-stage1/dietlibc/include/arpa/nameser.h
+++ b/mdk-stage1/dietlibc/include/arpa/nameser.h
@@ -89,6 +89,42 @@ typedef enum __ns_class {
ns_c_max = 65536
} ns_class;
+/*
+ * Currently defined opcodes.
+ */
+typedef enum __ns_opcode {
+ ns_o_query = 0, /* Standard query. */
+ ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */
+ ns_o_status = 2, /* Name server status query (unsupported). */
+ /* Opcode 3 is undefined/reserved. */
+ ns_o_notify = 4, /* Zone change notification. */
+ ns_o_update = 5, /* Zone update message. */
+ ns_o_max = 6
+} ns_opcode;
+
+/*
+ * Currently defined response codes.
+ */
+typedef enum __ns_rcode {
+ ns_r_noerror = 0, /* No error occurred. */
+ ns_r_formerr = 1, /* Format error. */
+ ns_r_servfail = 2, /* Server failure. */
+ ns_r_nxdomain = 3, /* Name error. */
+ ns_r_notimpl = 4, /* Unimplemented. */
+ ns_r_refused = 5, /* Operation refused. */
+ /* these are for BIND_UPDATE */
+ ns_r_yxdomain = 6, /* Name exists */
+ ns_r_yxrrset = 7, /* RRset exists */
+ ns_r_nxrrset = 8, /* RRset does not exist */
+ ns_r_notauth = 9, /* Not authoritative for zone */
+ ns_r_notzone = 10, /* Zone of record different from zone section */
+ ns_r_max = 11,
+ /* The following are TSIG extended errors */
+ ns_r_badsig = 16,
+ ns_r_badkey = 17,
+ ns_r_badtime = 18
+} ns_rcode;
+
typedef struct {
unsigned id :16; /* query identification number */
#if BYTE_ORDER == BIG_ENDIAN
diff --git a/mdk-stage1/dietlibc/include/assert.h b/mdk-stage1/dietlibc/include/assert.h
index bb573d0f2..a8ce3ce87 100644
--- a/mdk-stage1/dietlibc/include/assert.h
+++ b/mdk-stage1/dietlibc/include/assert.h
@@ -4,24 +4,35 @@
#include <sys/cdefs.h>
/* This prints an "Assertion failed" message and aborts. */
-extern void __assert_fail (__const char *__assertion, __const char *__file,
- unsigned int __line, __const char *__function)
+extern void __assert_fail (const char *__assertion, const char *__file,
+ unsigned int __line, const char *__function)
__THROW __attribute__ ((__noreturn__));
#ifdef __PRETTY_FUNCTION__
#define __ASSERT_FUNCTION __PRETTY_FUNCTION__
#else
-#define __ASSERT_FUNCTION __func__
+# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+# define __ASSERT_FUNCTION __func__
+# else
+# define __ASSERT_FUNCTION ((const char *) 0)
+# endif
#endif
#undef assert
#ifdef NDEBUG
#define assert(expr)
#else
+#ifdef expect
+# define assert(expr) \
+ ((void) (expect((long)(expr),0) ? 0 : \
+ (__assert_fail (#expr, \
+ __FILE__, __LINE__, __ASSERT_FUNCTION), 0)))
+#else
# define assert(expr) \
((void) ((expr) ? 0 : \
(__assert_fail (#expr, \
__FILE__, __LINE__, __ASSERT_FUNCTION), 0)))
#endif
+#endif
#endif
diff --git a/mdk-stage1/dietlibc/include/daemon.h b/mdk-stage1/dietlibc/include/daemon.h
index 9049f367d..e2413d42b 100644
--- a/mdk-stage1/dietlibc/include/daemon.h
+++ b/mdk-stage1/dietlibc/include/daemon.h
@@ -1,6 +1,6 @@
#ifndef _DAEMON_H
#define _DAEMON_H
-extern int daemon (int nochdir,int noclose);
+#include <unistd.h>
#endif
diff --git a/mdk-stage1/dietlibc/include/dirent.h b/mdk-stage1/dietlibc/include/dirent.h
index b0ad4f5ec..ad8b3a41a 100644
--- a/mdk-stage1/dietlibc/include/dirent.h
+++ b/mdk-stage1/dietlibc/include/dirent.h
@@ -3,15 +3,30 @@
#include <sys/cdefs.h>
#include <sys/types.h>
+#include <limits.h>
-#include <linux/dirent.h>
+struct dirent {
+ long d_ino;
+ off_t d_off;
+ unsigned short d_reclen;
+ char d_name[256]; /* We must not include limits.h! */
+};
+
+#ifndef __STRICT_ANSI__
+struct dirent64 {
+ uint64_t d_ino;
+ int64_t d_off;
+ unsigned short d_reclen;
+ unsigned char d_type;
+ char d_name[256];
+};
+#endif
#define d_fileno d_ino /* Backwards compatibility. */
#undef _DIRENT_HAVE_D_NAMLEN
#define _DIRENT_HAVE_D_RECLEN
#define _DIRENT_HAVE_D_OFF
-#define _DIRENT_HAVE_D_TYPE
typedef struct __dirstream DIR;
@@ -23,4 +38,27 @@ void rewinddir (DIR *__dirp) __THROW;
void seekdir (DIR *__dirp, long int __pos) __THROW;
long int telldir (DIR *__dirp) __THROW;
+int scandir(const char *dir, struct dirent ***namelist,
+ int (*selection)(const struct dirent *),
+ int (*compar)(const struct dirent **, const struct dirent **)) __THROW;
+int scandir64(const char *dir, struct dirent64 ***namelist,
+ int (*selection)(const struct dirent64 *),
+ int (*compar)(const struct dirent64 **, const struct dirent64 **)) __THROW;
+
+int alphasort(const struct dirent **a, const struct dirent **b) __THROW __attribute__((const));
+int alphasort64(const struct dirent64 **a, const struct dirent64 **b) __THROW __attribute__((const));
+
+#define MAXNAMLEN NAME_MAX
+
+#ifdef _BSD_SOURCE
+extern int dirfd(DIR *dirp) __THROW;
+#endif
+
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+#define dirent dirent64
+#define readdir readdir64
+#define scandir scandir64
+#define alphasort alphasort64
+#endif
+
#endif
diff --git a/mdk-stage1/dietlibc/include/dlfcn.h b/mdk-stage1/dietlibc/include/dlfcn.h
index b96f8f615..0ddcafdba 100644
--- a/mdk-stage1/dietlibc/include/dlfcn.h
+++ b/mdk-stage1/dietlibc/include/dlfcn.h
@@ -7,6 +7,9 @@
#define RTLD_LOCAL 0x00000
#define RTLD_GLOBAL 0x10000
+#define RTLD_DEFAULT ((void*)1)
+#define RTLD_NEXT ((void*)2)
+
void *dlopen (const char *filename, int flag);
const char *dlerror(void);
void *dlsym(void *handle, char *symbol);
diff --git a/mdk-stage1/dietlibc/include/elf.h b/mdk-stage1/dietlibc/include/elf.h
index be09dbee4..7b198bad3 100644
--- a/mdk-stage1/dietlibc/include/elf.h
+++ b/mdk-stage1/dietlibc/include/elf.h
@@ -1 +1,780 @@
-#include <linux/elf.h>
+#ifndef _ELF_H
+#define _ELF_H
+
+#include <inttypes.h>
+
+/* 32-bit ELF base types. */
+typedef uint32_t Elf32_Addr;
+typedef uint16_t Elf32_Half;
+typedef uint32_t Elf32_Off;
+typedef int32_t Elf32_Sword;
+typedef uint32_t Elf32_Word;
+
+/* 64-bit ELF base types. */
+typedef uint64_t Elf64_Addr;
+typedef uint16_t Elf64_Half;
+typedef int16_t Elf64_SHalf;
+typedef uint64_t Elf64_Off;
+typedef int32_t Elf64_Sword;
+typedef uint32_t Elf64_Word;
+typedef uint64_t Elf64_Xword;
+typedef int64_t Elf64_Sxword;
+
+/* These constants are for the segment types stored in the image headers */
+#define PT_NULL 0
+#define PT_LOAD 1
+#define PT_DYNAMIC 2
+#define PT_INTERP 3
+#define PT_NOTE 4
+#define PT_SHLIB 5
+#define PT_PHDR 6
+#define PT_LOPROC 0x70000000
+#define PT_HIPROC 0x7fffffff
+#define PT_MIPS_REGINFO 0x70000000
+
+/* Flags in the e_flags field of the header */
+#define EF_MIPS_NOREORDER 0x00000001
+#define EF_MIPS_PIC 0x00000002
+#define EF_MIPS_CPIC 0x00000004
+#define EF_MIPS_ARCH 0xf0000000
+
+/* These constants define the different elf file types */
+#define ET_NONE 0
+#define ET_REL 1
+#define ET_EXEC 2
+#define ET_DYN 3
+#define ET_CORE 4
+#define ET_LOPROC 0xff00
+#define ET_HIPROC 0xffff
+
+/* These constants define the various ELF target machines */
+#define EM_NONE 0
+#define EM_M32 1
+#define EM_SPARC 2
+#define EM_386 3
+#define EM_68K 4
+#define EM_88K 5
+#define EM_486 6 /* Perhaps disused */
+#define EM_860 7
+
+#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
+#define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */
+
+#define EM_PARISC 15 /* HPPA */
+#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
+#define EM_PPC 20 /* PowerPC */
+#define EM_S390 22 /* IBM S/390 */
+
+#define EM_ARM 40 /* ARM */
+#define EM_SH 42 /* SuperH */
+#define EM_SPARCV9 43 /* SPARC v9 64-bit */
+#define EM_IA_64 50 /* HP/Intel IA-64 */
+#define EM_X86_64 62 /* AMD x86-64 */
+#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */
+
+/*
+ * This is an interim value that we will use until the committee comes
+ * up with a final number.
+ */
+#define EM_ALPHA 0x9026
+
+/*
+ * This is the old interim value for S/390 architecture
+ */
+#define EM_S390_OLD 0xA390
+
+/* This is the info that is needed to parse the dynamic section of the file */
+#define DT_NULL 0
+#define DT_NEEDED 1
+#define DT_PLTRELSZ 2
+#define DT_PLTGOT 3
+#define DT_HASH 4
+#define DT_STRTAB 5
+#define DT_SYMTAB 6
+#define DT_RELA 7
+#define DT_RELASZ 8
+#define DT_RELAENT 9
+#define DT_STRSZ 10
+#define DT_SYMENT 11
+#define DT_INIT 12
+#define DT_FINI 13
+#define DT_SONAME 14
+#define DT_RPATH 15
+#define DT_SYMBOLIC 16
+#define DT_REL 17
+#define DT_RELSZ 18
+#define DT_RELENT 19
+#define DT_PLTREL 20
+#define DT_DEBUG 21
+#define DT_TEXTREL 22
+#define DT_JMPREL 23
+#define DT_NUM 24
+#define DT_LOPROC 0x70000000
+#define DT_HIPROC 0x7fffffff
+#define DT_MIPS_RLD_VERSION 0x70000001
+#define DT_MIPS_TIME_STAMP 0x70000002
+#define DT_MIPS_ICHECKSUM 0x70000003
+#define DT_MIPS_IVERSION 0x70000004
+#define DT_MIPS_FLAGS 0x70000005
+ #define RHF_NONE 0
+ #define RHF_HARDWAY 1
+ #define RHF_NOTPOT 2
+#define DT_MIPS_BASE_ADDRESS 0x70000006
+#define DT_MIPS_CONFLICT 0x70000008
+#define DT_MIPS_LIBLIST 0x70000009
+#define DT_MIPS_LOCAL_GOTNO 0x7000000a
+#define DT_MIPS_CONFLICTNO 0x7000000b
+#define DT_MIPS_LIBLISTNO 0x70000010
+#define DT_MIPS_SYMTABNO 0x70000011
+#define DT_MIPS_UNREFEXTNO 0x70000012
+#define DT_MIPS_GOTSYM 0x70000013
+#define DT_MIPS_HIPAGENO 0x70000014
+#define DT_MIPS_RLD_MAP 0x70000016
+
+/* This info is needed when parsing the symbol table */
+#define STB_LOCAL 0
+#define STB_GLOBAL 1
+#define STB_WEAK 2
+
+#define STT_NOTYPE 0
+#define STT_OBJECT 1
+#define STT_FUNC 2
+#define STT_SECTION 3
+#define STT_FILE 4
+
+#define ELF32_ST_BIND(x) ((x) >> 4)
+#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf)
+
+#define ELF64_ST_BIND(val) ELF32_ST_BIND (val)
+#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
+
+/* Symbolic values for the entries in the auxiliary table
+ put on the initial stack */
+#define AT_NULL 0 /* end of vector */
+#define AT_IGNORE 1 /* entry should be ignored */
+#define AT_EXECFD 2 /* file descriptor of program */
+#define AT_PHDR 3 /* program headers for program */
+#define AT_PHENT 4 /* size of program header entry */
+#define AT_PHNUM 5 /* number of program headers */
+#define AT_PAGESZ 6 /* system page size */
+#define AT_BASE 7 /* base address of interpreter */
+#define AT_FLAGS 8 /* flags */
+#define AT_ENTRY 9 /* entry point of program */
+#define AT_NOTELF 10 /* program is not ELF */
+#define AT_UID 11 /* real uid */
+#define AT_EUID 12 /* effective uid */
+#define AT_GID 13 /* real gid */
+#define AT_EGID 14 /* effective gid */
+#define AT_PLATFORM 15 /* string identifying CPU for optimizations */
+#define AT_HWCAP 16 /* arch dependent hints at CPU capabilities */
+#define AT_CLKTCK 17 /* frequency at which times() increments */
+
+typedef struct dynamic{
+ Elf32_Sword d_tag;
+ union{
+ Elf32_Sword d_val;
+ Elf32_Addr d_ptr;
+ } d_un;
+} Elf32_Dyn;
+
+typedef struct {
+ Elf64_Sxword d_tag; /* entry tag value */
+ union {
+ Elf64_Xword d_val;
+ Elf64_Addr d_ptr;
+ } d_un;
+} Elf64_Dyn;
+
+/* The following are used with relocations */
+#define ELF32_R_SYM(x) ((x) >> 8)
+#define ELF32_R_TYPE(x) ((x) & 0xff)
+
+#define ELF64_R_SYM(x) ((x) >> 32)
+#define ELF64_R_TYPE(x) ((x) & 0xffffffff)
+
+#define R_386_NONE 0
+#define R_386_32 1
+#define R_386_PC32 2
+#define R_386_GOT32 3
+#define R_386_PLT32 4
+#define R_386_COPY 5
+#define R_386_GLOB_DAT 6
+#define R_386_JMP_SLOT 7
+#define R_386_RELATIVE 8
+#define R_386_GOTOFF 9
+#define R_386_GOTPC 10
+#define R_386_NUM 11
+
+#define R_MIPS_NONE 0
+#define R_MIPS_16 1
+#define R_MIPS_32 2
+#define R_MIPS_REL32 3
+#define R_MIPS_26 4
+#define R_MIPS_HI16 5
+#define R_MIPS_LO16 6
+#define R_MIPS_GPREL16 7
+#define R_MIPS_LITERAL 8
+#define R_MIPS_GOT16 9
+#define R_MIPS_PC16 10
+#define R_MIPS_CALL16 11
+#define R_MIPS_GPREL32 12
+/* The remaining relocs are defined on Irix, although they are not
+ in the MIPS ELF ABI. */
+#define R_MIPS_UNUSED1 13
+#define R_MIPS_UNUSED2 14
+#define R_MIPS_UNUSED3 15
+#define R_MIPS_SHIFT5 16
+#define R_MIPS_SHIFT6 17
+#define R_MIPS_64 18
+#define R_MIPS_GOT_DISP 19
+#define R_MIPS_GOT_PAGE 20
+#define R_MIPS_GOT_OFST 21
+/*
+ * The following two relocation types are specified in the MIPS ABI
+ * conformance guide version 1.2 but not yet in the psABI.
+ */
+#define R_MIPS_GOTHI16 22
+#define R_MIPS_GOTLO16 23
+#define R_MIPS_SUB 24
+#define R_MIPS_INSERT_A 25
+#define R_MIPS_INSERT_B 26
+#define R_MIPS_DELETE 27
+#define R_MIPS_HIGHER 28
+#define R_MIPS_HIGHEST 29
+/*
+ * The following two relocation types are specified in the MIPS ABI
+ * conformance guide version 1.2 but not yet in the psABI.
+ */
+#define R_MIPS_CALLHI16 30
+#define R_MIPS_CALLLO16 31
+/*
+ * This range is reserved for vendor specific relocations.
+ */
+#define R_MIPS_LOVENDOR 100
+#define R_MIPS_HIVENDOR 127
+
+
+/*
+ * Sparc ELF relocation types
+ */
+#define R_SPARC_NONE 0
+#define R_SPARC_8 1
+#define R_SPARC_16 2
+#define R_SPARC_32 3
+#define R_SPARC_DISP8 4
+#define R_SPARC_DISP16 5
+#define R_SPARC_DISP32 6
+#define R_SPARC_WDISP30 7
+#define R_SPARC_WDISP22 8
+#define R_SPARC_HI22 9
+#define R_SPARC_22 10
+#define R_SPARC_13 11
+#define R_SPARC_LO10 12
+#define R_SPARC_GOT10 13
+#define R_SPARC_GOT13 14
+#define R_SPARC_GOT22 15
+#define R_SPARC_PC10 16
+#define R_SPARC_PC22 17
+#define R_SPARC_WPLT30 18
+#define R_SPARC_COPY 19
+#define R_SPARC_GLOB_DAT 20
+#define R_SPARC_JMP_SLOT 21
+#define R_SPARC_RELATIVE 22
+#define R_SPARC_UA32 23
+#define R_SPARC_PLT32 24
+#define R_SPARC_HIPLT22 25
+#define R_SPARC_LOPLT10 26
+#define R_SPARC_PCPLT32 27
+#define R_SPARC_PCPLT22 28
+#define R_SPARC_PCPLT10 29
+#define R_SPARC_10 30
+#define R_SPARC_11 31
+#define R_SPARC_WDISP16 40
+#define R_SPARC_WDISP19 41
+#define R_SPARC_7 43
+#define R_SPARC_5 44
+#define R_SPARC_6 45
+
+/* Bits present in AT_HWCAP, primarily for Sparc32. */
+
+#define HWCAP_SPARC_FLUSH 1 /* CPU supports flush instruction. */
+#define HWCAP_SPARC_STBAR 2
+#define HWCAP_SPARC_SWAP 4
+#define HWCAP_SPARC_MULDIV 8
+#define HWCAP_SPARC_V9 16
+#define HWCAP_SPARC_ULTRA3 32
+
+/*
+ * 68k ELF relocation types
+ */
+#define R_68K_NONE 0
+#define R_68K_32 1
+#define R_68K_16 2
+#define R_68K_8 3
+#define R_68K_PC32 4
+#define R_68K_PC16 5
+#define R_68K_PC8 6
+#define R_68K_GOT32 7
+#define R_68K_GOT16 8
+#define R_68K_GOT8 9
+#define R_68K_GOT32O 10
+#define R_68K_GOT16O 11
+#define R_68K_GOT8O 12
+#define R_68K_PLT32 13
+#define R_68K_PLT16 14
+#define R_68K_PLT8 15
+#define R_68K_PLT32O 16
+#define R_68K_PLT16O 17
+#define R_68K_PLT8O 18
+#define R_68K_COPY 19
+#define R_68K_GLOB_DAT 20
+#define R_68K_JMP_SLOT 21
+#define R_68K_RELATIVE 22
+
+/*
+ * Alpha ELF relocation types
+ */
+#define R_ALPHA_NONE 0 /* No reloc */
+#define R_ALPHA_REFLONG 1 /* Direct 32 bit */
+#define R_ALPHA_REFQUAD 2 /* Direct 64 bit */
+#define R_ALPHA_GPREL32 3 /* GP relative 32 bit */
+#define R_ALPHA_LITERAL 4 /* GP relative 16 bit w/optimization */
+#define R_ALPHA_LITUSE 5 /* Optimization hint for LITERAL */
+#define R_ALPHA_GPDISP 6 /* Add displacement to GP */
+#define R_ALPHA_BRADDR 7 /* PC+4 relative 23 bit shifted */
+#define R_ALPHA_HINT 8 /* PC+4 relative 16 bit shifted */
+#define R_ALPHA_SREL16 9 /* PC relative 16 bit */
+#define R_ALPHA_SREL32 10 /* PC relative 32 bit */
+#define R_ALPHA_SREL64 11 /* PC relative 64 bit */
+#define R_ALPHA_OP_PUSH 12 /* OP stack push */
+#define R_ALPHA_OP_STORE 13 /* OP stack pop and store */
+#define R_ALPHA_OP_PSUB 14 /* OP stack subtract */
+#define R_ALPHA_OP_PRSHIFT 15 /* OP stack right shift */
+#define R_ALPHA_GPVALUE 16
+#define R_ALPHA_GPRELHIGH 17
+#define R_ALPHA_GPRELLOW 18
+#define R_ALPHA_IMMED_GP_16 19
+#define R_ALPHA_IMMED_GP_HI32 20
+#define R_ALPHA_IMMED_SCN_HI32 21
+#define R_ALPHA_IMMED_BR_HI32 22
+#define R_ALPHA_IMMED_LO32 23
+#define R_ALPHA_COPY 24 /* Copy symbol at runtime */
+#define R_ALPHA_GLOB_DAT 25 /* Create GOT entry */
+#define R_ALPHA_JMP_SLOT 26 /* Create PLT entry */
+#define R_ALPHA_RELATIVE 27 /* Adjust by program base */
+
+/* Legal values for e_flags field of Elf64_Ehdr. */
+
+#define EF_ALPHA_32BIT 1 /* All addresses are below 2GB */
+
+/*
+ * PowerPC
+ */
+
+/* Values for Elf32/64_Ehdr.e_flags. */
+#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */
+
+/* Cygnus local bits below */
+#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/
+#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib flag */
+
+/* PowerPC relocations defined by the ABIs */
+#define R_PPC_NONE 0
+#define R_PPC_ADDR32 1 /* 32bit absolute address */
+#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */
+#define R_PPC_ADDR16 3 /* 16bit absolute address */
+#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */
+#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */
+#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */
+#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */
+#define R_PPC_ADDR14_BRTAKEN 8
+#define R_PPC_ADDR14_BRNTAKEN 9
+#define R_PPC_REL24 10 /* PC relative 26 bit */
+#define R_PPC_REL14 11 /* PC relative 16 bit */
+#define R_PPC_REL14_BRTAKEN 12
+#define R_PPC_REL14_BRNTAKEN 13
+#define R_PPC_GOT16 14
+#define R_PPC_GOT16_LO 15
+#define R_PPC_GOT16_HI 16
+#define R_PPC_GOT16_HA 17
+#define R_PPC_PLTREL24 18
+#define R_PPC_COPY 19
+#define R_PPC_GLOB_DAT 20
+#define R_PPC_JMP_SLOT 21
+#define R_PPC_RELATIVE 22
+#define R_PPC_LOCAL24PC 23
+#define R_PPC_UADDR32 24
+#define R_PPC_UADDR16 25
+#define R_PPC_REL32 26
+#define R_PPC_PLT32 27
+#define R_PPC_PLTREL32 28
+#define R_PPC_PLT16_LO 29
+#define R_PPC_PLT16_HI 30
+#define R_PPC_PLT16_HA 31
+#define R_PPC_SDAREL16 32
+#define R_PPC_SECTOFF 33
+#define R_PPC_SECTOFF_LO 34
+#define R_PPC_SECTOFF_HI 35
+#define R_PPC_SECTOFF_HA 36
+/* Keep this the last entry. */
+#define R_PPC_NUM 37
+
+/* The remaining relocs are from the Embedded ELF ABI, and are not
+ in the SVR4 ELF ABI. */
+#define R_PPC_EMB_NADDR32 101
+#define R_PPC_EMB_NADDR16 102
+#define R_PPC_EMB_NADDR16_LO 103
+#define R_PPC_EMB_NADDR16_HI 104
+#define R_PPC_EMB_NADDR16_HA 105
+#define R_PPC_EMB_SDAI16 106
+#define R_PPC_EMB_SDA2I16 107
+#define R_PPC_EMB_SDA2REL 108
+#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */
+#define R_PPC_EMB_MRKREF 110
+#define R_PPC_EMB_RELSEC16 111
+#define R_PPC_EMB_RELST_LO 112
+#define R_PPC_EMB_RELST_HI 113
+#define R_PPC_EMB_RELST_HA 114
+#define R_PPC_EMB_BIT_FLD 115
+#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */
+
+/* Diab tool relocations. */
+#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */
+#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */
+#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */
+#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */
+#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */
+#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */
+
+/* This is a phony reloc to handle any old fashioned TOC16 references
+ that may still be in object files. */
+#define R_PPC_TOC16 255
+
+/*
+ * ARM ELF relocation types
+ */
+#define R_ARM_NONE 0 /* No reloc */
+#define R_ARM_PC24 1 /* PC relative 26 bit branch */
+#define R_ARM_ABS32 2 /* Direct 32 bit */
+#define R_ARM_REL32 3 /* PC relative 32 bit */
+#define R_ARM_PC13 4
+#define R_ARM_ABS16 5 /* Direct 16 bit */
+#define R_ARM_ABS12 6 /* Direct 12 bit */
+#define R_ARM_THM_ABS5 7
+#define R_ARM_ABS8 8 /* Direct 8 bit */
+#define R_ARM_SBREL32 9
+#define R_ARM_THM_PC22 10
+#define R_ARM_THM_PC8 11
+#define R_ARM_AMP_VCALL9 12
+#define R_ARM_SWI24 13
+#define R_ARM_THM_SWI8 14
+#define R_ARM_XPC25 15
+#define R_ARM_THM_XPC22 16
+#define R_ARM_COPY 20 /* Copy symbol at runtime */
+#define R_ARM_GLOB_DAT 21 /* Create GOT entry */
+#define R_ARM_JUMP_SLOT 22 /* Create PLT entry */
+#define R_ARM_RELATIVE 23 /* Adjust by program base */
+#define R_ARM_GOTOFF 24 /* 32 bit offset to GOT */
+#define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */
+#define R_ARM_GOT32 26 /* 32 bit GOT entry */
+#define R_ARM_PLT32 27 /* 32 bit PLT address */
+#define R_ARM_GNU_VTENTRY 100
+#define R_ARM_GNU_VTINHERIT 101
+#define R_ARM_THM_PC11 102 /* thumb unconditional branch */
+#define R_ARM_THM_PC9 103 /* thumb conditional branch */
+#define R_ARM_RXPC25 249
+#define R_ARM_RSBREL32 250
+#define R_ARM_THM_RPC22 251
+#define R_ARM_RREL32 252
+#define R_ARM_RABS22 253
+#define R_ARM_RPC24 254
+#define R_ARM_RBASE 255
+/* Keep this the last entry. */
+#define R_ARM_NUM 256
+
+/* Processor specific flags for the ELF header e_flags field. */
+#define EF_ARM_RELEXEC 0x01
+#define EF_ARM_HASENTRY 0x02
+#define EF_ARM_INTERWORK 0x04
+#define EF_ARM_APCS_26 0x08
+#define EF_ARM_APCS_FLOAT 0x10
+#define EF_ARM_PIC 0x20
+#define EF_ALIGN8 0x40 /* 8-bit structure alignment is in use */
+#define EF_NEW_ABI 0x80
+#define EF_OLD_ABI 0x100
+
+/* Additional symbol types for Thumb */
+#define STT_ARM_TFUNC 0xd
+
+/* AMD x86-64 relocations. */
+#define R_X86_64_NONE 0 /* No reloc */
+#define R_X86_64_64 1 /* Direct 64 bit */
+#define R_X86_64_PC32 2 /* PC relative 32 bit signed */
+#define R_X86_64_GOT32 3 /* 32 bit GOT entry */
+#define R_X86_64_PLT32 4 /* 32 bit PLT address */
+#define R_X86_64_COPY 5 /* Copy symbol at runtime */
+#define R_X86_64_GLOB_DAT 6 /* Create GOT entry */
+#define R_X86_64_JUMP_SLOT 7 /* Create PLT entry */
+#define R_X86_64_RELATIVE 8 /* Adjust by program base */
+#define R_X86_64_GOTPCREL 9 /* 32 bit signed PC relative
+ offset to GOT */
+#define R_X86_64_32 10 /* Direct 32 bit zero extended */
+#define R_X86_64_32S 11 /* Direct 32 bit sign extended */
+#define R_X86_64_16 12 /* Direct 16 bit zero extended */
+#define R_X86_64_PC16 13 /* 16 bit sign extended pc relative */
+#define R_X86_64_8 14 /* Direct 8 bit sign extended */
+#define R_X86_64_PC8 15 /* 8 bit sign extended pc relative */
+#define R_X86_64_DTPMOD64 16 /* ID of module containing symbol */
+#define R_X86_64_DTPOFF64 17 /* Offset in module's TLS block */
+#define R_X86_64_TPOFF64 18 /* Offset in initial TLS block */
+#define R_X86_64_TLSGD 19 /* 32 bit signed PC relative offset
+ to two GOT entries for GD symbol */
+#define R_X86_64_TLSLD 20 /* 32 bit signed PC relative offset
+ to two GOT entries for LD symbol */
+#define R_X86_64_DTPOFF32 21 /* Offset in TLS block */
+#define R_X86_64_GOTTPOFF 22 /* 32 bit signed PC relative offset
+ to GOT entry for IE symbol */
+#define R_X86_64_TPOFF32 23 /* Offset in initial TLS block */
+
+#define R_X86_64_NUM 24
+
+typedef struct elf32_rel {
+ Elf32_Addr r_offset;
+ Elf32_Word r_info;
+} Elf32_Rel;
+
+typedef struct elf64_rel {
+ Elf64_Addr r_offset; /* Location at which to apply the action */
+ Elf64_Xword r_info; /* index and type of relocation */
+} Elf64_Rel;
+
+typedef struct elf32_rela{
+ Elf32_Addr r_offset;
+ Elf32_Word r_info;
+ Elf32_Sword r_addend;
+} Elf32_Rela;
+
+typedef struct elf64_rela {
+ Elf64_Addr r_offset; /* Location at which to apply the action */
+ Elf64_Xword r_info; /* index and type of relocation */
+ Elf64_Sxword r_addend; /* Constant addend used to compute value */
+} Elf64_Rela;
+
+typedef struct elf32_sym{
+ Elf32_Word st_name;
+ Elf32_Addr st_value;
+ Elf32_Word st_size;
+ unsigned char st_info;
+ unsigned char st_other;
+ Elf32_Half st_shndx;
+} Elf32_Sym;
+
+typedef struct elf64_sym {
+ Elf64_Word st_name; /* Symbol name, index in string tbl */
+ unsigned char st_info; /* Type and binding attributes */
+ unsigned char st_other; /* No defined meaning, 0 */
+ Elf64_Half st_shndx; /* Associated section index */
+ Elf64_Addr st_value; /* Value of the symbol */
+ Elf64_Xword st_size; /* Associated symbol size */
+} Elf64_Sym;
+
+
+#define EI_NIDENT 16
+
+typedef struct elf32_hdr{
+ unsigned char e_ident[EI_NIDENT];
+ Elf32_Half e_type;
+ Elf32_Half e_machine;
+ Elf32_Word e_version;
+ Elf32_Addr e_entry; /* Entry point */
+ Elf32_Off e_phoff;
+ Elf32_Off e_shoff;
+ Elf32_Word e_flags;
+ Elf32_Half e_ehsize;
+ Elf32_Half e_phentsize;
+ Elf32_Half e_phnum;
+ Elf32_Half e_shentsize;
+ Elf32_Half e_shnum;
+ Elf32_Half e_shstrndx;
+} Elf32_Ehdr;
+
+typedef struct elf64_hdr {
+ unsigned char e_ident[16]; /* ELF "magic number" */
+ Elf64_Half e_type;
+ Elf64_Half e_machine;
+ Elf64_Word e_version;
+ Elf64_Addr e_entry; /* Entry point virtual address */
+ Elf64_Off e_phoff; /* Program header table file offset */
+ Elf64_Off e_shoff; /* Section header table file offset */
+ Elf64_Word e_flags;
+ Elf64_Half e_ehsize;
+ Elf64_Half e_phentsize;
+ Elf64_Half e_phnum;
+ Elf64_Half e_shentsize;
+ Elf64_Half e_shnum;
+ Elf64_Half e_shstrndx;
+} Elf64_Ehdr;
+
+/* These constants define the permissions on sections in the program
+ header, p_flags. */
+#define PF_R 0x4
+#define PF_W 0x2
+#define PF_X 0x1
+
+typedef struct elf32_phdr{
+ Elf32_Word p_type;
+ Elf32_Off p_offset;
+ Elf32_Addr p_vaddr;
+ Elf32_Addr p_paddr;
+ Elf32_Word p_filesz;
+ Elf32_Word p_memsz;
+ Elf32_Word p_flags;
+ Elf32_Word p_align;
+} Elf32_Phdr;
+
+typedef struct elf64_phdr {
+ Elf64_Word p_type;
+ Elf64_Word p_flags;
+ Elf64_Off p_offset; /* Segment file offset */
+ Elf64_Addr p_vaddr; /* Segment virtual address */
+ Elf64_Addr p_paddr; /* Segment physical address */
+ Elf64_Xword p_filesz; /* Segment size in file */
+ Elf64_Xword p_memsz; /* Segment size in memory */
+ Elf64_Xword p_align; /* Segment alignment, file & memory */
+} Elf64_Phdr;
+
+/* sh_type */
+#define SHT_NULL 0
+#define SHT_PROGBITS 1
+#define SHT_SYMTAB 2
+#define SHT_STRTAB 3
+#define SHT_RELA 4
+#define SHT_HASH 5
+#define SHT_DYNAMIC 6
+#define SHT_NOTE 7
+#define SHT_NOBITS 8
+#define SHT_REL 9
+#define SHT_SHLIB 10
+#define SHT_DYNSYM 11
+#define SHT_NUM 12
+#define SHT_LOPROC 0x70000000
+#define SHT_HIPROC 0x7fffffff
+#define SHT_LOUSER 0x80000000
+#define SHT_HIUSER 0xffffffff
+#define SHT_MIPS_LIST 0x70000000
+#define SHT_MIPS_CONFLICT 0x70000002
+#define SHT_MIPS_GPTAB 0x70000003
+#define SHT_MIPS_UCODE 0x70000004
+
+/* sh_flags */
+#define SHF_WRITE 0x1
+#define SHF_ALLOC 0x2
+#define SHF_EXECINSTR 0x4
+#define SHF_MASKPROC 0xf0000000
+#define SHF_MIPS_GPREL 0x10000000
+#define SHF_ALPHA_GPREL 0x10000000
+
+/* special section indexes */
+#define SHN_UNDEF 0
+#define SHN_LORESERVE 0xff00
+#define SHN_LOPROC 0xff00
+#define SHN_HIPROC 0xff1f
+#define SHN_ABS 0xfff1
+#define SHN_COMMON 0xfff2
+#define SHN_HIRESERVE 0xffff
+#define SHN_MIPS_ACCOMON 0xff00
+
+typedef struct {
+ Elf32_Word sh_name;
+ Elf32_Word sh_type;
+ Elf32_Word sh_flags;
+ Elf32_Addr sh_addr;
+ Elf32_Off sh_offset;
+ Elf32_Word sh_size;
+ Elf32_Word sh_link;
+ Elf32_Word sh_info;
+ Elf32_Word sh_addralign;
+ Elf32_Word sh_entsize;
+} Elf32_Shdr;
+
+typedef struct elf64_shdr {
+ Elf64_Word sh_name; /* Section name, index in string tbl */
+ Elf64_Word sh_type; /* Type of section */
+ Elf64_Xword sh_flags; /* Miscellaneous section attributes */
+ Elf64_Addr sh_addr; /* Section virtual addr at execution */
+ Elf64_Off sh_offset; /* Section file offset */
+ Elf64_Xword sh_size; /* Size of section in bytes */
+ Elf64_Word sh_link; /* Index of another section */
+ Elf64_Word sh_info; /* Additional section information */
+ Elf64_Xword sh_addralign; /* Section alignment */
+ Elf64_Xword sh_entsize; /* Entry size if section holds table */
+} Elf64_Shdr;
+
+#define EI_MAG0 0 /* e_ident[] indexes */
+#define EI_MAG1 1
+#define EI_MAG2 2
+#define EI_MAG3 3
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
+#define EI_PAD 7
+
+#define ELFMAG0 0x7f /* EI_MAG */
+#define ELFMAG1 'E'
+#define ELFMAG2 'L'
+#define ELFMAG3 'F'
+#define ELFMAG "\177ELF"
+#define SELFMAG 4
+
+#define ELFCLASSNONE 0 /* EI_CLASS */
+#define ELFCLASS32 1
+#define ELFCLASS64 2
+#define ELFCLASSNUM 3
+
+#define ELFDATANONE 0 /* e_ident[EI_DATA] */
+#define ELFDATA2LSB 1
+#define ELFDATA2MSB 2
+
+#define EV_NONE 0 /* e_version, EI_VERSION */
+#define EV_CURRENT 1
+#define EV_NUM 2
+
+/* Notes used in ET_CORE */
+#define NT_PRSTATUS 1
+#define NT_PRFPREG 2
+#define NT_PRPSINFO 3
+#define NT_TASKSTRUCT 4
+#define NT_PRFPXREG 20
+
+/* Note header in a PT_NOTE section */
+typedef struct elf32_note {
+ Elf32_Word n_namesz; /* Name size */
+ Elf32_Word n_descsz; /* Content size */
+ Elf32_Word n_type; /* Content type */
+} Elf32_Nhdr;
+
+/* Note header in a PT_NOTE section */
+typedef struct elf64_note {
+ Elf64_Word n_namesz; /* Name size */
+ Elf64_Word n_descsz; /* Content size */
+ Elf64_Word n_type; /* Content type */
+} Elf64_Nhdr;
+
+#if ELF_CLASS == ELFCLASS32
+
+extern Elf32_Dyn _DYNAMIC [];
+#define elfhdr elf32_hdr
+#define elf_phdr elf32_phdr
+#define elf_note elf32_note
+
+#else
+
+extern Elf64_Dyn _DYNAMIC [];
+#define elfhdr elf64_hdr
+#define elf_phdr elf64_phdr
+#define elf_note elf64_note
+
+#endif
+
+
+#endif
diff --git a/mdk-stage1/dietlibc/include/endian.h b/mdk-stage1/dietlibc/include/endian.h
index 463c24fff..93b1f2948 100644
--- a/mdk-stage1/dietlibc/include/endian.h
+++ b/mdk-stage1/dietlibc/include/endian.h
@@ -4,35 +4,42 @@
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN 4321
-#ifdef __i386__
-#define __BYTE_ORDER __LITTLE_ENDIAN
-#define __FLOAT_WORD_ORDER __BYTE_ORDER
+#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__)
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
#endif
#ifdef __sparc__
-#define __BYTE_ORDER __BIG_ENDIAN
-#define __FLOAT_WORD_ORDER __BYTE_ORDER
+#define __BYTE_ORDER __BIG_ENDIAN
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
+#endif
+
+#ifdef __hppa__
+/* I hope this is correct...? */
+#define __BYTE_ORDER __BIG_ENDIAN
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
#endif
#ifdef __mips__
#ifdef __MIPSEB__
-#define __BIG_ENDIAN__
+#define __BYTE_ORDER __BIG_ENDIAN
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
#endif
#endif
#ifndef __BYTE_ORDER
#ifdef __BIG_ENDIAN__
-#define __BYTE_ORDER __BIG_ENDIAN
-#define __FLOAT_WORD_ORDER __BYTE_ORDER
+#define __BYTE_ORDER __BIG_ENDIAN
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
#else
-#define __BYTE_ORDER __LITTLE_ENDIAN
-#define __FLOAT_WORD_ORDER __BYTE_ORDER
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#define __FLOAT_WORD_ORDER __BYTE_ORDER
#endif
#endif
-#define LITTLE_ENDIAN __LITTLE_ENDIAN
-#define BIG_ENDIAN __BIG_ENDIAN
-#define BYTE_ORDER __BYTE_ORDER
+#define LITTLE_ENDIAN __LITTLE_ENDIAN
+#define BIG_ENDIAN __BIG_ENDIAN
+#define BYTE_ORDER __BYTE_ORDER
#if __BYTE_ORDER == __LITTLE_ENDIAN
# define __LONG_LONG_PAIR(HI, LO) LO, HI
@@ -40,4 +47,16 @@
# define __LONG_LONG_PAIR(HI, LO) HI, LO
#endif
+#if defined(__alpha__) || defined(__mips64) || defined(__sparc_v9__) || defined(__x86_64__) || defined(__ia64__)
+#define __WORDSIZE 64
+#endif
+
+#if defined(__sparc__) && (__arch64__)
+#define __WORDSIZE 64
+#endif
+
+#ifndef __WORDSIZE
+#define __WORDSIZE 32
+#endif
+
#endif
diff --git a/mdk-stage1/dietlibc/include/errno.h b/mdk-stage1/dietlibc/include/errno.h
index d1c68f39c..12aa394da 100644
--- a/mdk-stage1/dietlibc/include/errno.h
+++ b/mdk-stage1/dietlibc/include/errno.h
@@ -1,11 +1,546 @@
#ifndef _ERRNO_H
-#define _ERRNO_H
+#define _ERRNO_H
-extern int errno;
+#if defined(__alpha__)
+
+#define EPERM 1 /* Operation not permitted */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+#define EINTR 4 /* Interrupted system call */
+#define EIO 5 /* I/O error */
+#define ENXIO 6 /* No such device or address */
+#define E2BIG 7 /* Arg list too long */
+#define ENOEXEC 8 /* Exec format error */
+#define EBADF 9 /* Bad file number */
+#define ECHILD 10 /* No child processes */
+#define EDEADLK 11 /* Resource deadlock would occur */
+#define ENOMEM 12 /* Out of memory */
+#define EACCES 13 /* Permission denied */
+#define EFAULT 14 /* Bad address */
+#define ENOTBLK 15 /* Block device required */
+#define EBUSY 16 /* Device or resource busy */
+#define EEXIST 17 /* File exists */
+#define EXDEV 18 /* Cross-device link */
+#define ENODEV 19 /* No such device */
+#define ENOTDIR 20 /* Not a directory */
+#define EISDIR 21 /* Is a directory */
+#define EINVAL 22 /* Invalid argument */
+#define ENFILE 23 /* File table overflow */
+#define EMFILE 24 /* Too many open files */
+#define ENOTTY 25 /* Not a typewriter */
+#define ETXTBSY 26 /* Text file busy */
+#define EFBIG 27 /* File too large */
+#define ENOSPC 28 /* No space left on device */
+#define ESPIPE 29 /* Illegal seek */
+#define EROFS 30 /* Read-only file system */
+#define EMLINK 31 /* Too many links */
+#define EPIPE 32 /* Broken pipe */
+#define EDOM 33 /* Math argument out of domain of func */
+#define ERANGE 34 /* Math result not representable */
+#define EAGAIN 35 /* Try again */
+#define EWOULDBLOCK EAGAIN /* Operation would block */
+#define EINPROGRESS 36 /* Operation now in progress */
+#define EALREADY 37 /* Operation already in progress */
+#define ENOTSOCK 38 /* Socket operation on non-socket */
+#define EDESTADDRREQ 39 /* Destination address required */
+#define EMSGSIZE 40 /* Message too long */
+#define EPROTOTYPE 41 /* Protocol wrong type for socket */
+#define ENOPROTOOPT 42 /* Protocol not available */
+#define EPROTONOSUPPORT 43 /* Protocol not supported */
+#define ESOCKTNOSUPPORT 44 /* Socket type not supported */
+#define EOPNOTSUPP 45 /* Operation not supported on transport endpoint */
+#define ENOTSUP EOPNOTSUPP/* Operation not supported on transport endpoint */
+#define EPFNOSUPPORT 46 /* Protocol family not supported */
+#define EAFNOSUPPORT 47 /* Address family not supported by protocol */
+#define EADDRINUSE 48 /* Address already in use */
+#define EADDRNOTAVAIL 49 /* Cannot assign requested address */
+#define ENETDOWN 50 /* Network is down */
+#define ENETUNREACH 51 /* Network is unreachable */
+#define ENETRESET 52 /* Network dropped connection because of reset */
+#define ECONNABORTED 53 /* Software caused connection abort */
+#define ECONNRESET 54 /* Connection reset by peer */
+#define ENOBUFS 55 /* No buffer space available */
+#define EISCONN 56 /* Transport endpoint is already connected */
+#define ENOTCONN 57 /* Transport endpoint is not connected */
+#define ESHUTDOWN 58 /* Cannot send after transport endpoint shutdown */
+#define ETOOMANYREFS 59 /* Too many references: cannot splice */
+#define ETIMEDOUT 60 /* Connection timed out */
+#define ECONNREFUSED 61 /* Connection refused */
+#define ELOOP 62 /* Too many symbolic links encountered */
+#define ENAMETOOLONG 63 /* File name too long */
+#define EHOSTDOWN 64 /* Host is down */
+#define EHOSTUNREACH 65 /* No route to host */
+#define ENOTEMPTY 66 /* Directory not empty */
+#define EUSERS 68 /* Too many users */
+#define EDQUOT 69 /* Quota exceeded */
+#define ESTALE 70 /* Stale NFS file handle */
+#define EREMOTE 71 /* Object is remote */
+#define ENOLCK 77 /* No record locks available */
+#define ENOSYS 78 /* Function not implemented */
+#define ENOMSG 80 /* No message of desired type */
+#define EIDRM 81 /* Identifier removed */
+#define ENOSR 82 /* Out of streams resources */
+#define ETIME 83 /* Timer expired */
+#define EBADMSG 84 /* Not a data message */
+#define EPROTO 85 /* Protocol error */
+#define ENODATA 86 /* No data available */
+#define ENOSTR 87 /* Device not a stream */
+#define ENOPKG 92 /* Package not installed */
+#define EILSEQ 116 /* Illegal byte sequence */
+/* The following are just random noise.. */
+#define ECHRNG 88 /* Channel number out of range */
+#define EL2NSYNC 89 /* Level 2 not synchronized */
+#define EL3HLT 90 /* Level 3 halted */
+#define EL3RST 91 /* Level 3 reset */
+#define ELNRNG 93 /* Link number out of range */
+#define EUNATCH 94 /* Protocol driver not attached */
+#define ENOCSI 95 /* No CSI structure available */
+#define EL2HLT 96 /* Level 2 halted */
+#define EBADE 97 /* Invalid exchange */
+#define EBADR 98 /* Invalid request descriptor */
+#define EXFULL 99 /* Exchange full */
+#define ENOANO 100 /* No anode */
+#define EBADRQC 101 /* Invalid request code */
+#define EBADSLT 102 /* Invalid slot */
+#define EDEADLOCK EDEADLK
+#define EBFONT 104 /* Bad font file format */
+#define ENONET 105 /* Machine is not on the network */
+#define ENOLINK 106 /* Link has been severed */
+#define EADV 107 /* Advertise error */
+#define ESRMNT 108 /* Srmount error */
+#define ECOMM 109 /* Communication error on send */
+#define EMULTIHOP 110 /* Multihop attempted */
+#define EDOTDOT 111 /* RFS specific error */
+#define EOVERFLOW 112 /* Value too large for defined data type */
+#define ENOTUNIQ 113 /* Name not unique on network */
+#define EBADFD 114 /* File descriptor in bad state */
+#define EREMCHG 115 /* Remote address changed */
+#define EUCLEAN 117 /* Structure needs cleaning */
+#define ENOTNAM 118 /* Not a XENIX named type file */
+#define ENAVAIL 119 /* No XENIX semaphores available */
+#define EISNAM 120 /* Is a named type file */
+#define EREMOTEIO 121 /* Remote I/O error */
+#define ELIBACC 122 /* Can not access a needed shared library */
+#define ELIBBAD 123 /* Accessing a corrupted shared library */
+#define ELIBSCN 124 /* .lib section in a.out corrupted */
+#define ELIBMAX 125 /* Attempting to link in too many shared libraries */
+#define ELIBEXEC 126 /* Cannot exec a shared library directly */
+#define ERESTART 127 /* Interrupted system call should be restarted */
+#define ESTRPIPE 128 /* Streams pipe error */
+#define ENOMEDIUM 129 /* No medium found */
+#define EMEDIUMTYPE 130 /* Wrong medium type */
+
+#elif defined(__mips__)
+
+#define EPERM 1 /* Operation not permitted */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+#define EINTR 4 /* Interrupted system call */
+#define EIO 5 /* I/O error */
+#define ENXIO 6 /* No such device or address */
+#define E2BIG 7 /* Arg list too long */
+#define ENOEXEC 8 /* Exec format error */
+#define EBADF 9 /* Bad file number */
+#define ECHILD 10 /* No child processes */
+#define EAGAIN 11 /* Try again */
+#define ENOMEM 12 /* Out of memory */
+#define EACCES 13 /* Permission denied */
+#define EFAULT 14 /* Bad address */
+#define ENOTBLK 15 /* Block device required */
+#define EBUSY 16 /* Device or resource busy */
+#define EEXIST 17 /* File exists */
+#define EXDEV 18 /* Cross-device link */
+#define ENODEV 19 /* No such device */
+#define ENOTDIR 20 /* Not a directory */
+#define EISDIR 21 /* Is a directory */
+#define EINVAL 22 /* Invalid argument */
+#define ENFILE 23 /* File table overflow */
+#define EMFILE 24 /* Too many open files */
+#define ENOTTY 25 /* Not a typewriter */
+#define ETXTBSY 26 /* Text file busy */
+#define EFBIG 27 /* File too large */
+#define ENOSPC 28 /* No space left on device */
+#define ESPIPE 29 /* Illegal seek */
+#define EROFS 30 /* Read-only file system */
+#define EMLINK 31 /* Too many links */
+#define EPIPE 32 /* Broken pipe */
+#define EDOM 33 /* Math argument out of domain of func */
+#define ERANGE 34 /* Math result not representable */
+#define ENOMSG 35 /* No message of desired type */
+#define EIDRM 36 /* Identifier removed */
+#define ECHRNG 37 /* Channel number out of range */
+#define EL2NSYNC 38 /* Level 2 not synchronized */
+#define EL3HLT 39 /* Level 3 halted */
+#define EL3RST 40 /* Level 3 reset */
+#define ELNRNG 41 /* Link number out of range */
+#define EUNATCH 42 /* Protocol driver not attached */
+#define ENOCSI 43 /* No CSI structure available */
+#define EL2HLT 44 /* Level 2 halted */
+#define EDEADLK 45 /* Resource deadlock would occur */
+#define ENOLCK 46 /* No record locks available */
+#define EBADE 50 /* Invalid exchange */
+#define EBADR 51 /* Invalid request descriptor */
+#define EXFULL 52 /* Exchange full */
+#define ENOANO 53 /* No anode */
+#define EBADRQC 54 /* Invalid request code */
+#define EBADSLT 55 /* Invalid slot */
+#define EDEADLOCK 56 /* File locking deadlock error */
+#define EBFONT 59 /* Bad font file format */
+#define ENOSTR 60 /* Device not a stream */
+#define ENODATA 61 /* No data available */
+#define ETIME 62 /* Timer expired */
+#define ENOSR 63 /* Out of streams resources */
+#define ENONET 64 /* Machine is not on the network */
+#define ENOPKG 65 /* Package not installed */
+#define EREMOTE 66 /* Object is remote */
+#define ENOLINK 67 /* Link has been severed */
+#define EADV 68 /* Advertise error */
+#define ESRMNT 69 /* Srmount error */
+#define ECOMM 70 /* Communication error on send */
+#define EPROTO 71 /* Protocol error */
+#define EDOTDOT 73 /* RFS specific error */
+#define EMULTIHOP 74 /* Multihop attempted */
+#define EBADMSG 77 /* Not a data message */
+#define ENAMETOOLONG 78 /* File name too long */
+#define EOVERFLOW 79 /* Value too large for defined data type */
+#define ENOTUNIQ 80 /* Name not unique on network */
+#define EBADFD 81 /* File descriptor in bad state */
+#define EREMCHG 82 /* Remote address changed */
+#define ELIBACC 83 /* Can not access a needed shared library */
+#define ELIBBAD 84 /* Accessing a corrupted shared library */
+#define ELIBSCN 85 /* .lib section in a.out corrupted */
+#define ELIBMAX 86 /* Attempting to link in too many shared libraries */
+#define ELIBEXEC 87 /* Cannot exec a shared library directly */
+#define EILSEQ 88 /* Illegal byte sequence */
+#define ENOSYS 89 /* Function not implemented */
+#define ELOOP 90 /* Too many symbolic links encountered */
+#define ERESTART 91 /* Interrupted system call should be restarted */
+#define ESTRPIPE 92 /* Streams pipe error */
+#define ENOTEMPTY 93 /* Directory not empty */
+#define EUSERS 94 /* Too many users */
+#define ENOTSOCK 95 /* Socket operation on non-socket */
+#define EDESTADDRREQ 96 /* Destination address required */
+#define EMSGSIZE 97 /* Message too long */
+#define EPROTOTYPE 98 /* Protocol wrong type for socket */
+#define ENOPROTOOPT 99 /* Protocol not available */
+#define EPROTONOSUPPORT 120 /* Protocol not supported */
+#define ESOCKTNOSUPPORT 121 /* Socket type not supported */
+#define EOPNOTSUPP 122 /* Operation not supported on transport endpoint */
+#define ENOTSUP EOPNOTSUPP/* Operation not supported on transport endpoint */
+#define EPFNOSUPPORT 123 /* Protocol family not supported */
+#define EAFNOSUPPORT 124 /* Address family not supported by protocol */
+#define EADDRINUSE 125 /* Address already in use */
+#define EADDRNOTAVAIL 126 /* Cannot assign requested address */
+#define ENETDOWN 127 /* Network is down */
+#define ENETUNREACH 128 /* Network is unreachable */
+#define ENETRESET 129 /* Network dropped connection because of reset */
+#define ECONNABORTED 130 /* Software caused connection abort */
+#define ECONNRESET 131 /* Connection reset by peer */
+#define ENOBUFS 132 /* No buffer space available */
+#define EISCONN 133 /* Transport endpoint is already connected */
+#define ENOTCONN 134 /* Transport endpoint is not connected */
+#define EUCLEAN 135 /* Structure needs cleaning */
+#define ENOTNAM 137 /* Not a XENIX named type file */
+#define ENAVAIL 138 /* No XENIX semaphores available */
+#define EISNAM 139 /* Is a named type file */
+#define EREMOTEIO 140 /* Remote I/O error */
+#define EINIT 141 /* Reserved */
+#define EREMDEV 142 /* Error 142 */
+#define ESHUTDOWN 143 /* Cannot send after transport endpoint shutdown */
+#define ETOOMANYREFS 144 /* Too many references: cannot splice */
+#define ETIMEDOUT 145 /* Connection timed out */
+#define ECONNREFUSED 146 /* Connection refused */
+#define EHOSTDOWN 147 /* Host is down */
+#define EHOSTUNREACH 148 /* No route to host */
+#define EWOULDBLOCK EAGAIN /* Operation would block */
+#define EALREADY 149 /* Operation already in progress */
+#define EINPROGRESS 150 /* Operation now in progress */
+#define ESTALE 151 /* Stale NFS file handle */
+#define ECANCELED 158 /* AIO operation canceled */
+#define ENOMEDIUM 159 /* No medium found */
+#define EMEDIUMTYPE 160 /* Wrong medium type */
+#define EDQUOT 1133 /* Quota exceeded */
+
+#elif defined(__sparc__)
+
+#define EPERM 1 /* Operation not permitted */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+#define EINTR 4 /* Interrupted system call */
+#define EIO 5 /* I/O error */
+#define ENXIO 6 /* No such device or address */
+#define E2BIG 7 /* Arg list too long */
+#define ENOEXEC 8 /* Exec format error */
+#define EBADF 9 /* Bad file number */
+#define ECHILD 10 /* No child processes */
+#define EAGAIN 11 /* Try again */
+#define ENOMEM 12 /* Out of memory */
+#define EACCES 13 /* Permission denied */
+#define EFAULT 14 /* Bad address */
+#define ENOTBLK 15 /* Block device required */
+#define EBUSY 16 /* Device or resource busy */
+#define EEXIST 17 /* File exists */
+#define EXDEV 18 /* Cross-device link */
+#define ENODEV 19 /* No such device */
+#define ENOTDIR 20 /* Not a directory */
+#define EISDIR 21 /* Is a directory */
+#define EINVAL 22 /* Invalid argument */
+#define ENFILE 23 /* File table overflow */
+#define EMFILE 24 /* Too many open files */
+#define ENOTTY 25 /* Not a typewriter */
+#define ETXTBSY 26 /* Text file busy */
+#define EFBIG 27 /* File too large */
+#define ENOSPC 28 /* No space left on device */
+#define ESPIPE 29 /* Illegal seek */
+#define EROFS 30 /* Read-only file system */
+#define EMLINK 31 /* Too many links */
+#define EPIPE 32 /* Broken pipe */
+#define EDOM 33 /* Math argument out of domain of func */
+#define ERANGE 34 /* Math result not representable */
+#define EWOULDBLOCK EAGAIN /* Operation would block */
+#define EINPROGRESS 36 /* Operation now in progress */
+#define EALREADY 37 /* Operation already in progress */
+#define ENOTSOCK 38 /* Socket operation on non-socket */
+#define EDESTADDRREQ 39 /* Destination address required */
+#define EMSGSIZE 40 /* Message too long */
+#define EPROTOTYPE 41 /* Protocol wrong type for socket */
+#define ENOPROTOOPT 42 /* Protocol not available */
+#define EPROTONOSUPPORT 43 /* Protocol not supported */
+#define ESOCKTNOSUPPORT 44 /* Socket type not supported */
+#define EOPNOTSUPP 45 /* Op not supported on transport endpoint */
+#define ENOTSUP EOPNOTSUPP/* Operation not supported on transport endpoint */
+#define EPFNOSUPPORT 46 /* Protocol family not supported */
+#define EAFNOSUPPORT 47 /* Address family not supported by protocol */
+#define EADDRINUSE 48 /* Address already in use */
+#define EADDRNOTAVAIL 49 /* Cannot assign requested address */
+#define ENETDOWN 50 /* Network is down */
+#define ENETUNREACH 51 /* Network is unreachable */
+#define ENETRESET 52 /* Net dropped connection because of reset */
+#define ECONNABORTED 53 /* Software caused connection abort */
+#define ECONNRESET 54 /* Connection reset by peer */
+#define ENOBUFS 55 /* No buffer space available */
+#define EISCONN 56 /* Transport endpoint is already connected */
+#define ENOTCONN 57 /* Transport endpoint is not connected */
+#define ESHUTDOWN 58 /* No send after transport endpoint shutdown */
+#define ETOOMANYREFS 59 /* Too many references: cannot splice */
+#define ETIMEDOUT 60 /* Connection timed out */
+#define ECONNREFUSED 61 /* Connection refused */
+#define ELOOP 62 /* Too many symbolic links encountered */
+#define ENAMETOOLONG 63 /* File name too long */
+#define EHOSTDOWN 64 /* Host is down */
+#define EHOSTUNREACH 65 /* No route to host */
+#define ENOTEMPTY 66 /* Directory not empty */
+#define EPROCLIM 67 /* SUNOS: Too many processes */
+#define EUSERS 68 /* Too many users */
+#define EDQUOT 69 /* Quota exceeded */
+#define ESTALE 70 /* Stale NFS file handle */
+#define EREMOTE 71 /* Object is remote */
+#define ENOSTR 72 /* Device not a stream */
+#define ETIME 73 /* Timer expired */
+#define ENOSR 74 /* Out of streams resources */
+#define ENOMSG 75 /* No message of desired type */
+#define EBADMSG 76 /* Not a data message */
+#define EIDRM 77 /* Identifier removed */
+#define EDEADLK 78 /* Resource deadlock would occur */
+#define ENOLCK 79 /* No record locks available */
+#define ENONET 80 /* Machine is not on the network */
+#define ERREMOTE 81 /* SunOS: Too many lvls of remote in path */
+#define ENOLINK 82 /* Link has been severed */
+#define EADV 83 /* Advertise error */
+#define ESRMNT 84 /* Srmount error */
+#define ECOMM 85 /* Communication error on send */
+#define EPROTO 86 /* Protocol error */
+#define EMULTIHOP 87 /* Multihop attempted */
+#define EDOTDOT 88 /* RFS specific error */
+#define EREMCHG 89 /* Remote address changed */
+#define ENOSYS 90 /* Function not implemented */
+#define ESTRPIPE 91 /* Streams pipe error */
+#define EOVERFLOW 92 /* Value too large for defined data type */
+#define EBADFD 93 /* File descriptor in bad state */
+#define ECHRNG 94 /* Channel number out of range */
+#define EL2NSYNC 95 /* Level 2 not synchronized */
+#define EL3HLT 96 /* Level 3 halted */
+#define EL3RST 97 /* Level 3 reset */
+#define ELNRNG 98 /* Link number out of range */
+#define EUNATCH 99 /* Protocol driver not attached */
+#define ENOCSI 100 /* No CSI structure available */
+#define EL2HLT 101 /* Level 2 halted */
+#define EBADE 102 /* Invalid exchange */
+#define EBADR 103 /* Invalid request descriptor */
+#define EXFULL 104 /* Exchange full */
+#define ENOANO 105 /* No anode */
+#define EBADRQC 106 /* Invalid request code */
+#define EBADSLT 107 /* Invalid slot */
+#define EDEADLOCK 108 /* File locking deadlock error */
+#define EBFONT 109 /* Bad font file format */
+#define ELIBEXEC 110 /* Cannot exec a shared library directly */
+#define ENODATA 111 /* No data available */
+#define ELIBBAD 112 /* Accessing a corrupted shared library */
+#define ENOPKG 113 /* Package not installed */
+#define ELIBACC 114 /* Can not access a needed shared library */
+#define ENOTUNIQ 115 /* Name not unique on network */
+#define ERESTART 116 /* Interrupted syscall should be restarted */
+#define EUCLEAN 117 /* Structure needs cleaning */
+#define ENOTNAM 118 /* Not a XENIX named type file */
+#define ENAVAIL 119 /* No XENIX semaphores available */
+#define EISNAM 120 /* Is a named type file */
+#define EREMOTEIO 121 /* Remote I/O error */
+#define EILSEQ 122 /* Illegal byte sequence */
+#define ELIBMAX 123 /* Atmpt to link in too many shared libs */
+#define ELIBSCN 124 /* .lib section in a.out corrupted */
+#define ENOMEDIUM 125 /* No medium found */
+#define EMEDIUMTYPE 126 /* Wrong medium type */
+
+#else
+
+/* i386, arm, ppc, x86_64, ia64 */
+
+#define EPERM 1 /* Operation not permitted */
+#define ENOENT 2 /* No such file or directory */
+#define ESRCH 3 /* No such process */
+#define EINTR 4 /* Interrupted system call */
+#define EIO 5 /* I/O error */
+#define ENXIO 6 /* No such device or address */
+#define E2BIG 7 /* Arg list too long */
+#define ENOEXEC 8 /* Exec format error */
+#define EBADF 9 /* Bad file number */
+#define ECHILD 10 /* No child processes */
+#define EAGAIN 11 /* Try again */
+#define ENOMEM 12 /* Out of memory */
+#define EACCES 13 /* Permission denied */
+#define EFAULT 14 /* Bad address */
+#define ENOTBLK 15 /* Block device required */
+#define EBUSY 16 /* Device or resource busy */
+#define EEXIST 17 /* File exists */
+#define EXDEV 18 /* Cross-device link */
+#define ENODEV 19 /* No such device */
+#define ENOTDIR 20 /* Not a directory */
+#define EISDIR 21 /* Is a directory */
+#define EINVAL 22 /* Invalid argument */
+#define ENFILE 23 /* File table overflow */
+#define EMFILE 24 /* Too many open files */
+#define ENOTTY 25 /* Not a typewriter */
+#define ETXTBSY 26 /* Text file busy */
+#define EFBIG 27 /* File too large */
+#define ENOSPC 28 /* No space left on device */
+#define ESPIPE 29 /* Illegal seek */
+#define EROFS 30 /* Read-only file system */
+#define EMLINK 31 /* Too many links */
+#define EPIPE 32 /* Broken pipe */
+#define EDOM 33 /* Math argument out of domain of func */
+#define ERANGE 34 /* Math result not representable */
+#define EDEADLK 35 /* Resource deadlock would occur */
+#define ENAMETOOLONG 36 /* File name too long */
+#define ENOLCK 37 /* No record locks available */
+#define ENOSYS 38 /* Function not implemented */
+#define ENOTEMPTY 39 /* Directory not empty */
+#define ELOOP 40 /* Too many symbolic links encountered */
+#define EWOULDBLOCK EAGAIN /* Operation would block */
+#define ENOMSG 42 /* No message of desired type */
+#define EIDRM 43 /* Identifier removed */
+#define ECHRNG 44 /* Channel number out of range */
+#define EL2NSYNC 45 /* Level 2 not synchronized */
+#define EL3HLT 46 /* Level 3 halted */
+#define EL3RST 47 /* Level 3 reset */
+#define ELNRNG 48 /* Link number out of range */
+#define EUNATCH 49 /* Protocol driver not attached */
+#define ENOCSI 50 /* No CSI structure available */
+#define EL2HLT 51 /* Level 2 halted */
+#define EBADE 52 /* Invalid exchange */
+#define EBADR 53 /* Invalid request descriptor */
+#define EXFULL 54 /* Exchange full */
+#define ENOANO 55 /* No anode */
+#define EBADRQC 56 /* Invalid request code */
+#define EBADSLT 57 /* Invalid slot */
+#define EDEADLOCK EDEADLK
+#define EBFONT 59 /* Bad font file format */
+#define ENOSTR 60 /* Device not a stream */
+#define ENODATA 61 /* No data available */
+#define ETIME 62 /* Timer expired */
+#define ENOSR 63 /* Out of streams resources */
+#define ENONET 64 /* Machine is not on the network */
+#define ENOPKG 65 /* Package not installed */
+#define EREMOTE 66 /* Object is remote */
+#define ENOLINK 67 /* Link has been severed */
+#define EADV 68 /* Advertise error */
+#define ESRMNT 69 /* Srmount error */
+#define ECOMM 70 /* Communication error on send */
+#define EPROTO 71 /* Protocol error */
+#define EMULTIHOP 72 /* Multihop attempted */
+#define EDOTDOT 73 /* RFS specific error */
+#define EBADMSG 74 /* Not a data message */
+#define EOVERFLOW 75 /* Value too large for defined data type */
+#define ENOTUNIQ 76 /* Name not unique on network */
+#define EBADFD 77 /* File descriptor in bad state */
+#define EREMCHG 78 /* Remote address changed */
+#define ELIBACC 79 /* Can not access a needed shared library */
+#define ELIBBAD 80 /* Accessing a corrupted shared library */
+#define ELIBSCN 81 /* .lib section in a.out corrupted */
+#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
+#define ELIBEXEC 83 /* Cannot exec a shared library directly */
+#define EILSEQ 84 /* Illegal byte sequence */
+#define ERESTART 85 /* Interrupted system call should be restarted */
+#define ESTRPIPE 86 /* Streams pipe error */
+#define EUSERS 87 /* Too many users */
+#define ENOTSOCK 88 /* Socket operation on non-socket */
+#define EDESTADDRREQ 89 /* Destination address required */
+#define EMSGSIZE 90 /* Message too long */
+#define EPROTOTYPE 91 /* Protocol wrong type for socket */
+#define ENOPROTOOPT 92 /* Protocol not available */
+#define EPROTONOSUPPORT 93 /* Protocol not supported */
+#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
+#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
+#define ENOTSUP EOPNOTSUPP/* Operation not supported on transport endpoint */
+#define EPFNOSUPPORT 96 /* Protocol family not supported */
+#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
+#define EADDRINUSE 98 /* Address already in use */
+#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
+#define ENETDOWN 100 /* Network is down */
+#define ENETUNREACH 101 /* Network is unreachable */
+#define ENETRESET 102 /* Network dropped connection because of reset */
+#define ECONNABORTED 103 /* Software caused connection abort */
+#define ECONNRESET 104 /* Connection reset by peer */
+#define ENOBUFS 105 /* No buffer space available */
+#define EISCONN 106 /* Transport endpoint is already connected */
+#define ENOTCONN 107 /* Transport endpoint is not connected */
+#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
+#define ETOOMANYREFS 109 /* Too many references: cannot splice */
+#define ETIMEDOUT 110 /* Connection timed out */
+#define ECONNREFUSED 111 /* Connection refused */
+#define EHOSTDOWN 112 /* Host is down */
+#define EHOSTUNREACH 113 /* No route to host */
+#define EALREADY 114 /* Operation already in progress */
+#define EINPROGRESS 115 /* Operation now in progress */
+#define ESTALE 116 /* Stale NFS file handle */
+#define EUCLEAN 117 /* Structure needs cleaning */
+#define ENOTNAM 118 /* Not a XENIX named type file */
+#define ENAVAIL 119 /* No XENIX semaphores available */
+#define EISNAM 120 /* Is a named type file */
+#define EREMOTEIO 121 /* Remote I/O error */
+#define EDQUOT 122 /* Quota exceeded */
+#define ENOMEDIUM 123 /* No medium found */
+#define EMEDIUMTYPE 124 /* Wrong medium type */
+#endif
-#include <linux/errno.h>
+#define __SYS_NERR ((EMEDIUMTYPE) + 1)
+
+#ifndef __ASSEMBLER__
+
+#ifndef _REENTRANT
+extern int errno;
+#else
+#define errno (*__errno_location())
+#endif
extern int *__errno_location(void);
-extern void __set_errno(int error);
+
+#define __set_errno(x) errno=(x)
+
+#ifdef _BSD_SOURCE
+extern const char *const sys_errlist[];
+extern int sys_nerr;
+#endif
+
+#endif
#endif
diff --git a/mdk-stage1/dietlibc/include/fcntl.h b/mdk-stage1/dietlibc/include/fcntl.h
index b792502c1..33f58d82a 100644
--- a/mdk-stage1/dietlibc/include/fcntl.h
+++ b/mdk-stage1/dietlibc/include/fcntl.h
@@ -6,13 +6,549 @@
#include <sys/types.h>
#include <unistd.h>
-#include <asm/fcntl.h>
+#define F_LINUX_SPECIFIC_BASE 1024
+
+#if defined(__i386__) || defined(__s390__) || defined(__x86_64__) || defined(__ia64__)
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+#define O_ACCMODE 0003
+#define O_RDONLY 00
+#define O_WRONLY 01
+#define O_RDWR 02
+#define O_CREAT 0100 /* not fcntl */
+#define O_EXCL 0200 /* not fcntl */
+#define O_NOCTTY 0400 /* not fcntl */
+#define O_TRUNC 01000 /* not fcntl */
+#define O_APPEND 02000
+#define O_NONBLOCK 04000
+#define O_NDELAY O_NONBLOCK
+#define O_SYNC 010000
+#define FASYNC 020000 /* fcntl, for BSD compatibility */
+#define O_DIRECT 040000 /* direct disk access hint - currently ignored */
+#define O_LARGEFILE 0100000
+#define O_DIRECTORY 0200000 /* must be a directory */
+#define O_NOFOLLOW 0400000 /* don't follow links */
+
+#define F_DUPFD 0 /* dup */
+#define F_GETFD 1 /* get close_on_exec */
+#define F_SETFD 2 /* set/clear close_on_exec */
+#define F_GETFL 3 /* get file->f_flags */
+#define F_SETFL 4 /* set file->f_flags */
+#define F_GETLK 5
+#define F_SETLK 6
+#define F_SETLKW 7
+#define F_SETOWN 8 /* for sockets. */
+#define F_GETOWN 9 /* for sockets. */
+#define F_SETSIG 10 /* for sockets. */
+#define F_GETSIG 11 /* for sockets. */
+
+#define F_GETLK64 12 /* using 'struct flock64' */
+#define F_SETLK64 13
+#define F_SETLKW64 14
+
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#define F_RDLCK 0
+#define F_WRLCK 1
+#define F_UNLCK 2
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK 4 /* or 3 */
+#define F_SHLCK 8 /* or 4 */
+
+/* for leases */
+#define F_INPROGRESS 16
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH 1 /* shared lock */
+#define LOCK_EX 2 /* exclusive lock */
+#define LOCK_NB 4 /* or'd with one of the above to prevent
+ blocking */
+#define LOCK_UN 8 /* remove lock */
+
+#define LOCK_MAND 32 /* This is a mandatory flock */
+#define LOCK_READ 64 /* ... Which allows concurrent read operations */
+#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
+#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
+
+struct flock {
+ short l_type;
+ short l_whence;
+ off_t l_start;
+ off_t l_len;
+ pid_t l_pid;
+};
+
+struct flock64 {
+ short l_type;
+ short l_whence;
+ loff_t l_start;
+ loff_t l_len;
+ pid_t l_pid;
+};
+
+#elif defined(__alpha__)
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+#define O_ACCMODE 0003
+#define O_RDONLY 00
+#define O_WRONLY 01
+#define O_RDWR 02
+#define O_CREAT 01000 /* not fcntl */
+#define O_TRUNC 02000 /* not fcntl */
+#define O_EXCL 04000 /* not fcntl */
+#define O_NOCTTY 010000 /* not fcntl */
+
+#define O_NONBLOCK 00004
+#define O_APPEND 00010
+#define O_NDELAY O_NONBLOCK
+#define O_SYNC 040000
+#define FASYNC 020000 /* fcntl, for BSD compatibility */
+#define O_DIRECT 040000 /* direct disk access - should check with OSF/1 */
+#define O_DIRECTORY 0100000 /* must be a directory */
+#define O_NOFOLLOW 0200000 /* don't follow links */
+#define O_LARGEFILE 0400000 /* will be set by the kernel on every open */
+
+#define F_DUPFD 0 /* dup */
+#define F_GETFD 1 /* get close_on_exec */
+#define F_SETFD 2 /* set/clear close_on_exec */
+#define F_GETFL 3 /* get file->f_flags */
+#define F_SETFL 4 /* set file->f_flags */
+#define F_GETLK 7
+#define F_SETLK 8
+#define F_SETLKW 9
+
+#define F_SETOWN 5 /* for sockets. */
+#define F_GETOWN 6 /* for sockets. */
+#define F_SETSIG 10 /* for sockets. */
+#define F_GETSIG 11 /* for sockets. */
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#define F_RDLCK 1
+#define F_WRLCK 2
+#define F_UNLCK 8
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK 16 /* or 3 */
+#define F_SHLCK 32 /* or 4 */
+
+#define F_INPROGRESS 64
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH 1 /* shared lock */
+#define LOCK_EX 2 /* exclusive lock */
+#define LOCK_NB 4 /* or'd with one of the above to prevent
+ blocking */
+#define LOCK_UN 8 /* remove lock */
+#define LOCK_MAND 32 /* This is a mandatory flock */
+#define LOCK_READ 64 /* ... Which allows concurrent read operations */
+#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
+#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
+
+struct flock {
+ short l_type;
+ short l_whence;
+ off_t l_start;
+ off_t l_len;
+ pid_t l_pid;
+};
+
+#elif defined(__mips__)
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+#define O_ACCMODE 0x0003
+#define O_RDONLY 0x0000
+#define O_WRONLY 0x0001
+#define O_RDWR 0x0002
+#define O_APPEND 0x0008
+#define O_SYNC 0x0010
+#define O_NONBLOCK 0x0080
+#define O_CREAT 0x0100 /* not fcntl */
+#define O_TRUNC 0x0200 /* not fcntl */
+#define O_EXCL 0x0400 /* not fcntl */
+#define O_NOCTTY 0x0800 /* not fcntl */
+#define FASYNC 0x1000 /* fcntl, for BSD compatibility */
+#define O_LARGEFILE 0x2000 /* allow large file opens - currently ignored */
+#define O_DIRECT 0x8000 /* direct disk access hint - currently ignored */
+#define O_DIRECTORY 0x10000 /* must be a directory */
+#define O_NOFOLLOW 0x20000 /* don't follow links */
+
+#define O_NDELAY O_NONBLOCK
+
+#define F_DUPFD 0 /* dup */
+#define F_GETFD 1 /* get close_on_exec */
+#define F_SETFD 2 /* set/clear close_on_exec */
+#define F_GETFL 3 /* get file->f_flags */
+#define F_SETFL 4 /* set file->f_flags */
+#define F_GETLK 14
+#define F_SETLK 6
+#define F_SETLKW 7
+
+#define F_SETOWN 24 /* for sockets. */
+#define F_GETOWN 23 /* for sockets. */
+#define F_SETSIG 10 /* for sockets. */
+#define F_GETSIG 11 /* for sockets. */
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#define F_RDLCK 0
+#define F_WRLCK 1
+#define F_UNLCK 2
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK 4 /* or 3 */
+#define F_SHLCK 8 /* or 4 */
+
+/* for leases */
+#define F_INPROGRESS 16
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH 1 /* shared lock */
+#define LOCK_EX 2 /* exclusive lock */
+#define LOCK_NB 4 /* or'd with one of the above to prevent XXXXXXXXXXXXXXXXXX
+ blocking */
+#define LOCK_UN 8 /* remove lock */
+
+#define LOCK_MAND 32 /* This is a mandatory flock */
+#define LOCK_READ 64 /* ... Which allows concurrent read operations */
+#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
+#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
+
+typedef struct flock {
+ short l_type;
+ short l_whence;
+ off_t l_start;
+ off_t l_len;
+ long l_sysid; /* XXXXXXXXXXXXXXXXXXXXXXXXX */
+ pid_t l_pid;
+ long pad[4]; /* ZZZZZZZZZZZZZZZZZZZZZZZZZZ */
+} flock_t;
+
+#elif defined(__sparc__)
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+#define O_RDONLY 0x0000
+#define O_WRONLY 0x0001
+#define O_RDWR 0x0002
+#define O_ACCMODE 0x0003
+#define O_APPEND 0x0008
+#define FASYNC 0x0040 /* fcntl, for BSD compatibility */
+#define O_CREAT 0x0200 /* not fcntl */
+#define O_TRUNC 0x0400 /* not fcntl */
+#define O_EXCL 0x0800 /* not fcntl */
+#define O_SYNC 0x2000
+#define O_NONBLOCK 0x4000
+#define O_NDELAY (0x0004 | O_NONBLOCK)
+#define O_NOCTTY 0x8000 /* not fcntl */
+#define O_DIRECTORY 0x10000 /* must be a directory */
+#define O_NOFOLLOW 0x20000 /* don't follow links */
+#define O_LARGEFILE 0x40000
+
+#define F_DUPFD 0 /* dup */
+#define F_GETFD 1 /* get close_on_exec */
+#define F_SETFD 2 /* set/clear close_on_exec */
+#define F_GETFL 3 /* get file->f_flags */
+#define F_SETFL 4 /* set file->f_flags */
+#define F_GETOWN 5 /* for sockets. */
+#define F_SETOWN 6 /* for sockets. */
+#define F_GETLK 7
+#define F_SETLK 8
+#define F_SETLKW 9
+#define F_SETSIG 10 /* for sockets. */
+#define F_GETSIG 11 /* for sockets. */
+
+#define F_GETLK64 12 /* using 'struct flock64' */
+#define F_SETLK64 13
+#define F_SETLKW64 14
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#define F_RDLCK 1
+#define F_WRLCK 2
+#define F_UNLCK 3
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK 4 /* or 3 */
+#define F_SHLCK 8 /* or 4 */
+
+/* for leases */
+#define F_INPROGRESS 16
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH 1 /* shared lock */
+#define LOCK_EX 2 /* exclusive lock */
+#define LOCK_NB 4 /* or'd with one of the above to prevent
+ blocking */
+#define LOCK_UN 8 /* remove lock */
+
+#define LOCK_MAND 32 /* This is a mandatory flock */
+#define LOCK_READ 64 /* ... Which allows concurrent read operations */
+#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
+#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
+
+struct flock {
+ short l_type;
+ short l_whence;
+ off_t l_start;
+ off_t l_len;
+ pid_t l_pid;
+ short __unused;
+};
+
+#ifdef __arch64__
+#define flock64 flock
+#else
+struct flock64 {
+ short l_type;
+ short l_whence;
+ loff_t l_start;
+ loff_t l_len;
+ pid_t l_pid;
+ short __unused;
+};
+#endif
+
+#elif defined(__powerpc__)
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+#define O_ACCMODE 0003
+#define O_RDONLY 00
+#define O_WRONLY 01
+#define O_RDWR 02
+#define O_CREAT 0100 /* not fcntl */
+#define O_EXCL 0200 /* not fcntl */
+#define O_NOCTTY 0400 /* not fcntl */
+#define O_TRUNC 01000 /* not fcntl */
+#define O_APPEND 02000
+#define O_NONBLOCK 04000
+#define O_NDELAY O_NONBLOCK
+#define O_SYNC 010000
+#define FASYNC 020000 /* fcntl, for BSD compatibility */
+#define O_DIRECTORY 040000 /* must be a directory */
+#define O_NOFOLLOW 0100000 /* don't follow links */
+#define O_LARGEFILE 0200000
+#define O_DIRECT 0400000 /* direct disk access hint - currently ignored */
+
+#define F_DUPFD 0 /* dup */
+#define F_GETFD 1 /* get close_on_exec */
+#define F_SETFD 2 /* set/clear close_on_exec */
+#define F_GETFL 3 /* get file->f_flags */
+#define F_SETFL 4 /* set file->f_flags */
+#define F_GETLK 5
+#define F_SETLK 6
+#define F_SETLKW 7
+
+#define F_SETOWN 8 /* for sockets. */
+#define F_GETOWN 9 /* for sockets. */
+#define F_SETSIG 10 /* for sockets. */
+#define F_GETSIG 11 /* for sockets. */
+
+#define F_GETLK64 12 /* using 'struct flock64' */
+#define F_SETLK64 13
+#define F_SETLKW64 14
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#define F_RDLCK 0
+#define F_WRLCK 1
+#define F_UNLCK 2
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK 4 /* or 3 */
+#define F_SHLCK 8 /* or 4 */
+
+/* for leases */
+#define F_INPROGRESS 16
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH 1 /* shared lock */
+#define LOCK_EX 2 /* exclusive lock */
+#define LOCK_NB 4 /* or'd with one of the above to prevent
+ blocking */
+#define LOCK_UN 8 /* remove lock */
+
+#define LOCK_MAND 32 /* This is a mandatory flock */
+#define LOCK_READ 64 /* ... Which allows concurrent read operations */
+#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
+#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
+
+struct flock {
+ short l_type;
+ short l_whence;
+ off_t l_start;
+ off_t l_len;
+ pid_t l_pid;
+};
+
+struct flock64 {
+ short l_type;
+ short l_whence;
+ loff_t l_start;
+ loff_t l_len;
+ pid_t l_pid;
+};
+
+#elif defined (__arm__)
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+#define O_ACCMODE 0003
+#define O_RDONLY 00
+#define O_WRONLY 01
+#define O_RDWR 02
+#define O_CREAT 0100 /* not fcntl */
+#define O_EXCL 0200 /* not fcntl */
+#define O_NOCTTY 0400 /* not fcntl */
+#define O_TRUNC 01000 /* not fcntl */
+#define O_APPEND 02000
+#define O_NONBLOCK 04000
+#define O_NDELAY O_NONBLOCK
+#define O_SYNC 010000
+#define FASYNC 020000 /* fcntl, for BSD compatibility */
+#define O_DIRECTORY 040000 /* must be a directory */
+#define O_NOFOLLOW 0100000 /* don't follow links */
+#define O_DIRECT 0200000 /* direct disk access hint - currently ignored */
+#define O_LARGEFILE 0400000
+
+#define F_DUPFD 0 /* dup */
+#define F_GETFD 1 /* get close_on_exec */
+#define F_SETFD 2 /* set/clear close_on_exec */
+#define F_GETFL 3 /* get file->f_flags */
+#define F_SETFL 4 /* set file->f_flags */
+#define F_GETLK 5
+#define F_SETLK 6
+#define F_SETLKW 7
+
+#define F_SETOWN 8 /* for sockets. */
+#define F_GETOWN 9 /* for sockets. */
+#define F_SETSIG 10 /* for sockets. */
+#define F_GETSIG 11 /* for sockets. */
+
+#define F_GETLK64 12 /* using 'struct flock64' */
+#define F_SETLK64 13
+#define F_SETLKW64 14
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#define F_RDLCK 0
+#define F_WRLCK 1
+#define F_UNLCK 2
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK 4 /* or 3 */
+#define F_SHLCK 8 /* or 4 */
+
+/* for leases */
+#define F_INPROGRESS 16
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH 1 /* shared lock */
+#define LOCK_EX 2 /* exclusive lock */
+#define LOCK_NB 4 /* or'd with one of the above to prevent
+ blocking */
+#define LOCK_UN 8 /* remove lock */
+
+#define LOCK_MAND 32 /* This is a mandatory flock */
+#define LOCK_READ 64 /* ... Which allows concurrent read operations */
+#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
+#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
+
+struct flock {
+ short l_type;
+ short l_whence;
+ off_t l_start;
+ off_t l_len;
+ pid_t l_pid;
+};
+
+struct flock64 {
+ short l_type;
+ short l_whence;
+ loff_t l_start;
+ loff_t l_len;
+ pid_t l_pid;
+};
+
+#elif defined(__hppa__)
+
+/* Copied from bits/fcntl.h */
+
+#define O_RDONLY 00000000
+#define O_WRONLY 00000001
+#define O_RDWR 00000002
+#define O_ACCMODE 00000003
+#define O_APPEND 00000010
+#define O_BLKSEEK 00000100 /* HPUX only */
+#define O_CREAT 00000400 /* not fcntl */
+#define O_TRUNC 00001000 /* not fcntl */
+#define O_EXCL 00002000 /* not fcntl */
+#define O_ASYNC 00020000
+#define O_SYNC 00100000
+#define O_NONBLOCK 00200004 /* HPUX has separate NDELAY & NONBLOCK */
+#define O_NDELAY O_NONBLOCK
+#define O_NOCTTY 00400000 /* not fcntl */
+#define O_DIRECTORY 00010000
+
+#define F_DUPFD 0 /* Duplicate file descriptor. */
+#define F_GETFD 1 /* Get file descriptor flags. */
+#define F_SETFD 2 /* Set file descriptor flags. */
+#define F_GETFL 3 /* Get file status flags. */
+#define F_SETFL 4 /* Set file status flags. */
+#define F_GETLK 5 /* Get record locking info. */
+#define F_SETLK 6 /* Set record locking info (non-blocking). */
+#define F_SETLKW 7 /* Set record locking info (blocking). */
+
+#define F_GETLK64 8 /* Get record locking info. */
+#define F_SETLK64 9 /* Set record locking info (non-blocking). */
+#define F_SETLKW64 10 /* Set record locking info (blocking). */
+
+#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+#define F_RDLCK 1 /* Read lock. */
+#define F_WRLCK 2 /* Write lock. */
+#define F_UNLCK 3 /* Remove lock. */
+
+#define F_EXLCK 4 /* or 3 */
+#define F_SHLCK 8 /* or 4 */
+
+struct flock
+{
+ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
+ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
+ off_t l_start; /* Offset where the lock begins. */
+ off_t l_len; /* Size of the locked area; zero means until EOF. */
+ pid_t l_pid; /* Process holding the lock. */
+};
+
+struct flock64
+{
+ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
+ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
+ off64_t l_start; /* Offset where the lock begins. */
+ off64_t l_len; /* Size of the locked area; zero means until EOF. */
+ pid_t l_pid; /* Process holding the lock. */
+};
+
+#endif
extern int fcntl (int __fd, int __cmd, ...) __THROW;
-extern int open (const char *__file, int __oflag, ...) __THROW;
-extern int open64 (const char *__file, int __oflag, ...) __THROW;
-extern int creat (const char *__file, mode_t __mode) __THROW;
-extern int creat64 (const char *__file, mode_t __mode) __THROW;
extern int lockf (int __fd, int __cmd, off_t __len) __THROW;
extern int lockf64 (int __fd, int __cmd, off64_t __len) __THROW;
@@ -21,4 +557,8 @@ extern int lockf64 (int __fd, int __cmd, off64_t __len) __THROW;
#define F_TLOCK 2 /* Test and lock a region for exclusive use. */
#define F_TEST 3 /* Test a region for other processes locks. */
+#if !defined(O_ASYNC) && defined(FASYNC)
+#define O_ASYNC FASYNC
+#endif
+
#endif
diff --git a/mdk-stage1/dietlibc/include/features.h b/mdk-stage1/dietlibc/include/features.h
index 5b0283f20..d2b92d15c 100644
--- a/mdk-stage1/dietlibc/include/features.h
+++ b/mdk-stage1/dietlibc/include/features.h
@@ -1,3 +1,8 @@
-#warning "someone included features.h, apparently someone is including glibc headers!"
+#ifndef _FEATURES_H
+#define _FEATURES_H
-#define __dietlibc__
+#ifndef __dietlibc__
+#error "not using the diet wrapper?!"
+#endif
+
+#endif
diff --git a/mdk-stage1/dietlibc/include/fnmatch.h b/mdk-stage1/dietlibc/include/fnmatch.h
index 762b43ff7..146e700bd 100644
--- a/mdk-stage1/dietlibc/include/fnmatch.h
+++ b/mdk-stage1/dietlibc/include/fnmatch.h
@@ -12,4 +12,6 @@ int fnmatch(const char *pattern, const char *string, int flags) __THROW;
#define FNM_LEADING_DIR 8
#define FNM_CASEFOLD 16
+#define FNM_NOMATCH 1
+
#endif
diff --git a/mdk-stage1/dietlibc/include/ftw.h b/mdk-stage1/dietlibc/include/ftw.h
index c888f0021..e0450518e 100644
--- a/mdk-stage1/dietlibc/include/ftw.h
+++ b/mdk-stage1/dietlibc/include/ftw.h
@@ -32,19 +32,19 @@ enum
# define FTW_SLN FTW_SLN
};
-typedef int (*__ftw_func_t) (__const char *__filename,
- __const struct stat *__status, int __flag) __THROW;
+typedef int (*__ftw_func_t) (const char *__filename,
+ const struct stat *__status, int __flag) __THROW;
-typedef int (*__nftw_func_t) (__const char *__filename,
- __const struct stat *__status, int __flag,
+typedef int (*__nftw_func_t) (const char *__filename,
+ const struct stat *__status, int __flag,
struct FTW *__info) __THROW;
#ifndef __NO_STAT64
-typedef int (*__ftw64_func_t) (__const char *__filename,
- __const struct stat64 *__status, int __flag) __THROW;
+typedef int (*__ftw64_func_t) (const char *__filename,
+ const struct stat64 *__status, int __flag) __THROW;
-typedef int (*__nftw64_func_t) (__const char *__filename,
- __const struct stat64 *__status,
+typedef int (*__nftw64_func_t) (const char *__filename,
+ const struct stat64 *__status,
int __flag, struct FTW *__info) __THROW;
#endif
diff --git a/mdk-stage1/dietlibc/include/getopt.h b/mdk-stage1/dietlibc/include/getopt.h
index ebfc5522d..db1592c52 100644
--- a/mdk-stage1/dietlibc/include/getopt.h
+++ b/mdk-stage1/dietlibc/include/getopt.h
@@ -1,12 +1,8 @@
#ifndef __GETOPT_H__
#define __GETOPT_H__
-extern int optind,opterr;
-extern char *optarg;
-int getopt(int argc, char *argv[], char *options);
+#include <unistd.h>
-/* the following was taken from GNU getopt, it's not actually supported
- * by the diet libc! */
extern int optopt;
struct option {
diff --git a/mdk-stage1/dietlibc/include/glob.h b/mdk-stage1/dietlibc/include/glob.h
index 80febbccf..bc8f779c9 100644
--- a/mdk-stage1/dietlibc/include/glob.h
+++ b/mdk-stage1/dietlibc/include/glob.h
@@ -1,6 +1,8 @@
#ifndef _GLOB_H
#define _GLOB_H
+#include <sys/cdefs.h>
+#include <sys/types.h>
typedef struct {
size_t gl_pathc; /* Count of paths matched so far */
diff --git a/mdk-stage1/dietlibc/include/grp.h b/mdk-stage1/dietlibc/include/grp.h
index 32bf49afc..08b153137 100644
--- a/mdk-stage1/dietlibc/include/grp.h
+++ b/mdk-stage1/dietlibc/include/grp.h
@@ -19,7 +19,17 @@ extern struct group *getgrent(void) __THROW;
extern void setgrent(void) __THROW;
extern void endgrent(void) __THROW;
+int getgrent_r(struct group *res, char *buf, size_t buflen,
+ struct group **res_sig) __THROW;
+int getgrnam_r(const char* name,
+ struct group *res, char *buf, size_t buflen,
+ struct group **res_sig) __THROW;
+int getgrgid_r(uid_t uid,
+ struct group *res, char *buf, size_t buflen,
+ struct group **res_sig) __THROW;
+
extern int setgroups(size_t n, const gid_t *groups) __THROW;
+extern int setgroups32(size_t n, const gid32_t *groups) __THROW;
extern int initgroups(const char *user, gid_t group) __THROW;
#endif
diff --git a/mdk-stage1/dietlibc/include/inttypes.h b/mdk-stage1/dietlibc/include/inttypes.h
index e69de29bb..32637f5f7 100644
--- a/mdk-stage1/dietlibc/include/inttypes.h
+++ b/mdk-stage1/dietlibc/include/inttypes.h
@@ -0,0 +1,247 @@
+#ifndef _INTTYPES_H
+#define _INTTYPES_H
+
+#include <sys/cdefs.h>
+#include <endian.h>
+
+# if __WORDSIZE == 64
+# define __PRI64_PREFIX "l"
+# define __PRIPTR_PREFIX "l"
+# else
+# define __PRI64_PREFIX "ll"
+# define __PRIPTR_PREFIX
+# endif
+
+/* Macros for printing format specifiers. */
+
+/* Decimal notation. */
+# define PRId8 "d"
+# define PRId16 "d"
+# define PRId32 "d"
+# define PRId64 __PRI64_PREFIX "d"
+
+# define PRIdLEAST8 "d"
+# define PRIdLEAST16 "d"
+# define PRIdLEAST32 "d"
+# define PRIdLEAST64 __PRI64_PREFIX "d"
+
+# define PRIdFAST8 "d"
+# define PRIdFAST16 "d"
+# define PRIdFAST32 "d"
+# define PRIdFAST64 __PRI64_PREFIX "d"
+
+
+# define PRIi8 "i"
+# define PRIi16 "i"
+# define PRIi32 "i"
+# define PRIi64 __PRI64_PREFIX "i"
+
+# define PRIiLEAST8 "i"
+# define PRIiLEAST16 "i"
+# define PRIiLEAST32 "i"
+# define PRIiLEAST64 __PRI64_PREFIX "i"
+
+# define PRIiFAST8 "i"
+# define PRIiFAST16 "i"
+# define PRIiFAST32 "i"
+# define PRIiFAST64 __PRI64_PREFIX "i"
+
+/* Octal notation. */
+# define PRIo8 "o"
+# define PRIo16 "o"
+# define PRIo32 "o"
+# define PRIo64 __PRI64_PREFIX "o"
+
+# define PRIoLEAST8 "o"
+# define PRIoLEAST16 "o"
+# define PRIoLEAST32 "o"
+# define PRIoLEAST64 __PRI64_PREFIX "o"
+
+# define PRIoFAST8 "o"
+# define PRIoFAST16 "o"
+# define PRIoFAST32 "o"
+# define PRIoFAST64 __PRI64_PREFIX "o"
+
+/* Unsigned integers. */
+# define PRIu8 "u"
+# define PRIu16 "u"
+# define PRIu32 "u"
+# define PRIu64 __PRI64_PREFIX "u"
+
+# define PRIuLEAST8 "u"
+# define PRIuLEAST16 "u"
+# define PRIuLEAST32 "u"
+# define PRIuLEAST64 __PRI64_PREFIX "u"
+
+# define PRIuFAST8 "u"
+# define PRIuFAST16 "u"
+# define PRIuFAST32 "u"
+# define PRIuFAST64 __PRI64_PREFIX "u"
+
+/* lowercase hexadecimal notation. */
+# define PRIx8 "x"
+# define PRIx16 "x"
+# define PRIx32 "x"
+# define PRIx64 __PRI64_PREFIX "x"
+
+# define PRIxLEAST8 "x"
+# define PRIxLEAST16 "x"
+# define PRIxLEAST32 "x"
+# define PRIxLEAST64 __PRI64_PREFIX "x"
+
+# define PRIxFAST8 "x"
+# define PRIxFAST16 "x"
+# define PRIxFAST32 "x"
+# define PRIxFAST64 __PRI64_PREFIX "x"
+
+/* UPPERCASE hexadecimal notation. */
+# define PRIX8 "X"
+# define PRIX16 "X"
+# define PRIX32 "X"
+# define PRIX64 __PRI64_PREFIX "X"
+
+# define PRIXLEAST8 "X"
+# define PRIXLEAST16 "X"
+# define PRIXLEAST32 "X"
+# define PRIXLEAST64 __PRI64_PREFIX "X"
+
+# define PRIXFAST8 "X"
+# define PRIXFAST16 "X"
+# define PRIXFAST32 "X"
+# define PRIXFAST64 __PRI64_PREFIX "X"
+
+
+/* Macros for printing `intmax_t' and `uintmax_t'. */
+# define PRIdMAX __PRI64_PREFIX "d"
+# define PRIiMAX __PRI64_PREFIX "i"
+# define PRIoMAX __PRI64_PREFIX "o"
+# define PRIuMAX __PRI64_PREFIX "u"
+# define PRIxMAX __PRI64_PREFIX "x"
+# define PRIXMAX __PRI64_PREFIX "X"
+
+
+/* Macros for printing `intptr_t' and `uintptr_t'. */
+# define PRIdPTR __PRIPTR_PREFIX "d"
+# define PRIiPTR __PRIPTR_PREFIX "i"
+# define PRIoPTR __PRIPTR_PREFIX "o"
+# define PRIuPTR __PRIPTR_PREFIX "u"
+# define PRIxPTR __PRIPTR_PREFIX "x"
+# define PRIXPTR __PRIPTR_PREFIX "X"
+
+
+/* Macros for scanning format specifiers. */
+
+/* Signed decimal notation. */
+# define SCNd8 "hhd"
+# define SCNd16 "hd"
+# define SCNd32 "d"
+# define SCNd64 __PRI64_PREFIX "d"
+
+# define SCNdLEAST8 "hhd"
+# define SCNdLEAST16 "hd"
+# define SCNdLEAST32 "d"
+# define SCNdLEAST64 __PRI64_PREFIX "d"
+
+# define SCNdFAST8 "hhd"
+# define SCNdFAST16 __PRIPTR_PREFIX "d"
+# define SCNdFAST32 __PRIPTR_PREFIX "d"
+# define SCNdFAST64 __PRI64_PREFIX "d"
+
+/* Signed decimal notation. */
+# define SCNi8 "hhi"
+# define SCNi16 "hi"
+# define SCNi32 "i"
+# define SCNi64 __PRI64_PREFIX "i"
+
+# define SCNiLEAST8 "hhi"
+# define SCNiLEAST16 "hi"
+# define SCNiLEAST32 "i"
+# define SCNiLEAST64 __PRI64_PREFIX "i"
+
+# define SCNiFAST8 "hhi"
+# define SCNiFAST16 __PRIPTR_PREFIX "i"
+# define SCNiFAST32 __PRIPTR_PREFIX "i"
+# define SCNiFAST64 __PRI64_PREFIX "i"
+
+/* Unsigned decimal notation. */
+# define SCNu8 "hhu"
+# define SCNu16 "hu"
+# define SCNu32 "u"
+# define SCNu64 __PRI64_PREFIX "u"
+
+# define SCNuLEAST8 "hhu"
+# define SCNuLEAST16 "hu"
+# define SCNuLEAST32 "u"
+# define SCNuLEAST64 __PRI64_PREFIX "u"
+
+# define SCNuFAST8 "hhu"
+# define SCNuFAST16 __PRIPTR_PREFIX "u"
+# define SCNuFAST32 __PRIPTR_PREFIX "u"
+# define SCNuFAST64 __PRI64_PREFIX "u"
+
+/* Octal notation. */
+# define SCNo8 "hho"
+# define SCNo16 "ho"
+# define SCNo32 "o"
+# define SCNo64 __PRI64_PREFIX "o"
+
+# define SCNoLEAST8 "hho"
+# define SCNoLEAST16 "ho"
+# define SCNoLEAST32 "o"
+# define SCNoLEAST64 __PRI64_PREFIX "o"
+
+# define SCNoFAST8 "hho"
+# define SCNoFAST16 __PRIPTR_PREFIX "o"
+# define SCNoFAST32 __PRIPTR_PREFIX "o"
+# define SCNoFAST64 __PRI64_PREFIX "o"
+
+/* Hexadecimal notation. */
+# define SCNx8 "hhx"
+# define SCNx16 "hx"
+# define SCNx32 "x"
+# define SCNx64 __PRI64_PREFIX "x"
+
+# define SCNxLEAST8 "hhx"
+# define SCNxLEAST16 "hx"
+# define SCNxLEAST32 "x"
+# define SCNxLEAST64 __PRI64_PREFIX "x"
+
+# define SCNxFAST8 "hhx"
+# define SCNxFAST16 __PRIPTR_PREFIX "x"
+# define SCNxFAST32 __PRIPTR_PREFIX "x"
+# define SCNxFAST64 __PRI64_PREFIX "x"
+
+
+/* Macros for scanning `intmax_t' and `uintmax_t'. */
+# define SCNdMAX __PRI64_PREFIX "d"
+# define SCNiMAX __PRI64_PREFIX "i"
+# define SCNoMAX __PRI64_PREFIX "o"
+# define SCNuMAX __PRI64_PREFIX "u"
+# define SCNxMAX __PRI64_PREFIX "x"
+
+/* Macros for scanning `intptr_t' and `uintptr_t'. */
+# define SCNdPTR __PRIPTR_PREFIX "d"
+# define SCNiPTR __PRIPTR_PREFIX "i"
+# define SCNoPTR __PRIPTR_PREFIX "o"
+# define SCNuPTR __PRIPTR_PREFIX "u"
+# define SCNxPTR __PRIPTR_PREFIX "x"
+
+typedef signed char int8_t;
+typedef signed short int16_t;
+typedef signed int int32_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+
+typedef signed long int intptr_t;
+typedef unsigned long int uintptr_t;
+
+#ifndef __STRICT_ANSI__
+__extension__ typedef signed long long int64_t;
+__extension__ typedef unsigned long long uint64_t;
+__extension__ typedef signed long long int intmax_t;
+__extension__ typedef unsigned long long int uintmax_t;
+#endif
+
+#endif
diff --git a/mdk-stage1/dietlibc/include/limits.h b/mdk-stage1/dietlibc/include/limits.h
index a333debfd..b5577a0bf 100644
--- a/mdk-stage1/dietlibc/include/limits.h
+++ b/mdk-stage1/dietlibc/include/limits.h
@@ -1,18 +1,7 @@
#ifndef _LIMITS_H
#define _LIMITS_H
-#include <linux/limits.h>
-
-#define __WORDSIZE 32
-
-#ifdef __alpha__
-#undef __WORDSIZE
-#define __WORDSIZE 64
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
+#include <endian.h>
#define CHAR_BIT 8
@@ -20,6 +9,18 @@
#define SCHAR_MAX 0x7f
#define UCHAR_MAX 0xff
+#ifdef __CHAR_UNSIGNED__
+#undef CHAR_MIN
+#define CHAR_MIN 0
+#undef CHAR_MAX
+#define CHAR_MAX UCHAR_MAX
+#else
+#undef CHAR_MIN
+#define CHAR_MIN SCHAR_MIN
+#undef CHAR_MAX
+#define CHAR_MAX SCHAR_MAX
+#endif
+
#define SHRT_MIN (-SHRT_MAX-1)
#define SHRT_MAX 0x7fff
#define USHRT_MAX 0xffff
@@ -43,6 +44,30 @@
/* Maximum value an `unsigned long long int' can hold. (Minimum is 0.) */
#define ULLONG_MAX 18446744073709551615ULL
-#define PASS_MAX 256
+#define SSIZE_MIN LONG_MIN
+#define SSIZE_MAX LONG_MAX
+
+#define PASS_MAX 256
+
+#define NR_OPEN 1024
+
+#define NGROUPS_MAX 32 /* supplemental group IDs are available */
+#define ARG_MAX 131072 /* # bytes of args + environ for exec() */
+#define CHILD_MAX 999 /* no limit :-) */
+#define OPEN_MAX 256 /* # open files a process may have */
+#define LINK_MAX 127 /* # links a file may have */
+#define MAX_CANON 255 /* size of the canonical input queue */
+#define MAX_INPUT 255 /* size of the type-ahead buffer */
+#define NAME_MAX 255 /* # chars in a file name */
+#define PATH_MAX 4095 /* # chars in a path name */
+#define PIPE_BUF 4096 /* # bytes in atomic write to a pipe */
+
+#define RTSIG_MAX 32
+
+#define LINE_MAX 2048
+
+/* mutt demanded these */
+#define _POSIX_PATH_MAX PATH_MAX
+#define MB_LEN_MAX 16
#endif
diff --git a/mdk-stage1/dietlibc/include/locale.h b/mdk-stage1/dietlibc/include/locale.h
index acbeec8c1..5cd002019 100644
--- a/mdk-stage1/dietlibc/include/locale.h
+++ b/mdk-stage1/dietlibc/include/locale.h
@@ -1,6 +1,84 @@
-#warning "there is no locale support for diet libc yet"
+#ifndef _LOCALE_H
+#define _LOCALE_H
-#define setlocale(a,b) 0
-#define bindtextdomain
-#define textdomain
+#include <sys/cdefs.h>
+enum {
+ LC_CTYPE = 0,
+ LC_NUMERIC = 1,
+ LC_TIME = 2,
+ LC_COLLATE = 3,
+ LC_MONETARY = 4,
+ LC_MESSAGES = 5,
+ LC_ALL = 6,
+ LC_PAPER = 7,
+ LC_NAME = 8,
+ LC_ADDRESS = 9,
+ LC_TELEPHONE = 10,
+ LC_MEASUREMENT = 11,
+ LC_IDENTIFICATION = 12
+};
+
+/* Structure giving information about numeric and monetary notation. */
+struct lconv {
+ /* Numeric (non-monetary) information. */
+ char *decimal_point;
+ char *thousands_sep;
+ /* Each element is the number of digits in each group;
+ elements with higher indices are farther left.
+ An element with value CHAR_MAX means that no further grouping is done.
+ An element with value 0 means that the previous element is used
+ for all groups farther left. */
+ char *grouping;
+
+ /* Monetary information. */
+
+ /* First three chars are a currency symbol from ISO 4217.
+ Fourth char is the separator. Fifth char is '\0'. */
+ char *int_curr_symbol;
+ char *currency_symbol; /* Local currency symbol. */
+ char *mon_decimal_point; /* Decimal point character. */
+ char *mon_thousands_sep; /* Thousands separator. */
+ char *mon_grouping; /* Like `grouping' element (above). */
+ char *positive_sign; /* Sign for positive values. */
+ char *negative_sign; /* Sign for negative values. */
+ char int_frac_digits; /* Int'l fractional digits. */
+ char frac_digits; /* Local fractional digits. */
+ /* 1 if currency_symbol precedes a positive value, 0 if succeeds. */
+ char p_cs_precedes;
+ /* 1 iff a space separates currency_symbol from a positive value. */
+ char p_sep_by_space;
+ /* 1 if currency_symbol precedes a negative value, 0 if succeeds. */
+ char n_cs_precedes;
+ /* 1 iff a space separates currency_symbol from a negative value. */
+ char n_sep_by_space;
+ /* Positive and negative sign positions:
+ 0 Parentheses surround the quantity and currency_symbol.
+ 1 The sign string precedes the quantity and currency_symbol.
+ 2 The sign string follows the quantity and currency_symbol.
+ 3 The sign string immediately precedes the currency_symbol.
+ 4 The sign string immediately follows the currency_symbol. */
+ char p_sign_posn;
+ char n_sign_posn;
+ /* 1 if int_curr_symbol precedes a positive value, 0 if succeeds. */
+ char int_p_cs_precedes;
+ /* 1 iff a space separates int_curr_symbol from a positive value. */
+ char int_p_sep_by_space;
+ /* 1 if int_curr_symbol precedes a negative value, 0 if succeeds. */
+ char int_n_cs_precedes;
+ /* 1 iff a space separates int_curr_symbol from a negative value. */
+ char int_n_sep_by_space;
+ /* Positive and negative sign positions:
+ 0 Parentheses surround the quantity and int_curr_symbol.
+ 1 The sign string precedes the quantity and int_curr_symbol.
+ 2 The sign string follows the quantity and int_curr_symbol.
+ 3 The sign string immediately precedes the int_curr_symbol.
+ 4 The sign string immediately follows the int_curr_symbol. */
+ char int_p_sign_posn;
+ char int_n_sign_posn;
+};
+
+char *setlocale (int category, const char *locale) __THROW;
+struct lconv *localeconv (void) __THROW;
+
+#endif
diff --git a/mdk-stage1/dietlibc/include/math.h b/mdk-stage1/dietlibc/include/math.h
index 2f4f2e33f..2cb545237 100644
--- a/mdk-stage1/dietlibc/include/math.h
+++ b/mdk-stage1/dietlibc/include/math.h
@@ -48,6 +48,7 @@ double acosh(double d) __THROW __attribute__((__const__));
double atanh(double d) __THROW __attribute__((__const__));
double exp(double d) __THROW __attribute__((__const__));
+double exp10(double d) __THROW __attribute__((__const__));
double log(double d) __THROW __attribute__((__const__));
double log10(double d) __THROW __attribute__((__const__));
@@ -57,5 +58,39 @@ double sqrt(double x) __THROW __attribute__((__const__));
double fabs(double x) __THROW __attribute__((__const__));
double fmod(double x, double y) __THROW __attribute__((__const__));
+double floor(double x) __attribute__((__const__));
+double ceil(double x) __attribute__((__const__));
+
+double expm1(double x) __THROW __attribute__((__const__));
+double hypot(double x, double y) __THROW __attribute__((__const__));
+double atan2(double x, double y) __THROW __attribute__((__const__));
+
+double copysign(double value, double sign) __attribute__((__const__));
+
+# define HUGE_VAL \
+ (__extension__ \
+ ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
+ { __l: 0x000000007ff00000ULL }).__d)
+
+#ifdef _GNU_SOURCE
+void sincos(double x, double* sinx, double* cosx);
+double ipow (double mant, int expo);
+#endif
+
+int isnan(double d) __attribute__((__const__));
+int isinf(double d) __attribute__((__const__));
+int finite(double d) __attribute__((__const__));
+
+double j0(double x);
+double j1(double x);
+double jn(int n, double x);
+double y0(double x);
+double y1(double x);
+double yn(int n, double x);
+double erf(double x);
+double erfc(double x);
+double lgamma(double x);
+
+double rint(double x);
#endif
diff --git a/mdk-stage1/dietlibc/include/net/if.h b/mdk-stage1/dietlibc/include/net/if.h
index 88f386f46..ac4737db3 100644
--- a/mdk-stage1/dietlibc/include/net/if.h
+++ b/mdk-stage1/dietlibc/include/net/if.h
@@ -2,10 +2,101 @@
#define _NET_IF_H
#include <sys/cdefs.h>
+#include <sys/socket.h>
-#include <linux/if.h>
+/* Standard interface flags. */
+#define IFF_UP 0x1 /* interface is up */
+#define IFF_BROADCAST 0x2 /* broadcast address valid */
+#define IFF_DEBUG 0x4 /* turn on debugging */
+#define IFF_LOOPBACK 0x8 /* is a loopback net */
+#define IFF_POINTOPOINT 0x10 /* interface is has p-p link */
+#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */
+#define IFF_RUNNING 0x40 /* resources allocated */
+#define IFF_NOARP 0x80 /* no ARP protocol */
+#define IFF_PROMISC 0x100 /* receive all packets */
+#define IFF_ALLMULTI 0x200 /* receive all multicast packets*/
+
+#define IFF_MASTER 0x400 /* master of a load balancer */
+#define IFF_SLAVE 0x800 /* slave of a load balancer */
+
+#define IFF_MULTICAST 0x1000 /* Supports multicast */
+
+#define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_MASTER|IFF_SLAVE|IFF_RUNNING)
+
+#define IFF_PORTSEL 0x2000 /* can set media type */
+#define IFF_AUTOMEDIA 0x4000 /* auto media select active */
+#define IFF_DYNAMIC 0x8000 /* dialup device with changing addresses*/
+
+struct ifmap {
+ unsigned long mem_start;
+ unsigned long mem_end;
+ unsigned short base_addr;
+ unsigned char irq;
+ unsigned char dma;
+ unsigned char port;
+ /* 3 bytes spare */
+};
+
+struct ifreq {
+#define IFHWADDRLEN 6
+#define IFNAMSIZ 16
+ union
+ {
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
+ } ifr_ifrn;
+ union {
+ struct sockaddr ifru_addr;
+ struct sockaddr ifru_dstaddr;
+ struct sockaddr ifru_broadaddr;
+ struct sockaddr ifru_netmask;
+ struct sockaddr ifru_hwaddr;
+ short ifru_flags;
+ int ifru_ivalue;
+ int ifru_mtu;
+ struct ifmap ifru_map;
+ char ifru_slave[IFNAMSIZ]; /* Just fits the size */
+ char ifru_newname[IFNAMSIZ];
+ char* ifru_data;
+ } ifr_ifru;
+};
+
+#define ifr_name ifr_ifrn.ifrn_name /* interface name */
+#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
+#define ifr_addr ifr_ifru.ifru_addr /* address */
+#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
+#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
+#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
+#define ifr_flags ifr_ifru.ifru_flags /* flags */
+#define ifr_metric ifr_ifru.ifru_ivalue /* metric */
+#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
+#define ifr_map ifr_ifru.ifru_map /* device map */
+#define ifr_slave ifr_ifru.ifru_slave /* slave device */
+#define ifr_data ifr_ifru.ifru_data /* for use by interface */
+#define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */
+#define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */
+#define ifr_qlen ifr_ifru.ifru_ivalue /* Queue length */
+#define ifr_newname ifr_ifru.ifru_newname /* New name */
+
+struct ifconf {
+ int ifc_len; /* size of buffer */
+ union {
+ char * ifcu_buf;
+ struct ifreq *ifcu_req;
+ } ifc_ifcu;
+};
+
+#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
+#define ifc_req ifc_ifcu.ifcu_req /* array of structures */
unsigned int if_nametoindex (const char *ifname) __THROW;
char *if_indextoname (unsigned int ifindex, char *ifname) __THROW;
+struct if_nameindex {
+ unsigned int if_index;
+ char *if_name;
+};
+
+struct if_nameindex* if_nameindex(void) __THROW;
+void if_freenameindex(struct if_nameindex* ptr) __THROW;
+
#endif
diff --git a/mdk-stage1/dietlibc/include/net/if_arp.h b/mdk-stage1/dietlibc/include/net/if_arp.h
index fe37a22dc..b1054066a 100644
--- a/mdk-stage1/dietlibc/include/net/if_arp.h
+++ b/mdk-stage1/dietlibc/include/net/if_arp.h
@@ -1,6 +1,113 @@
#ifndef _NET_IF_ARP_H
#define _NET_IF_ARP_H
-#include <linux/if_arp.h>
+#include <sys/socket.h>
+#define MAX_ADDR_LEN 7
+
+/* ARP protocol HARDWARE identifiers. */
+#define ARPHRD_NETROM 0 /* from KA9Q: NET/ROM pseudo */
+#define ARPHRD_ETHER 1 /* Ethernet 10Mbps */
+#define ARPHRD_EETHER 2 /* Experimental Ethernet */
+#define ARPHRD_AX25 3 /* AX.25 Level 2 */
+#define ARPHRD_PRONET 4 /* PROnet token ring */
+#define ARPHRD_CHAOS 5 /* Chaosnet */
+#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB */
+#define ARPHRD_ARCNET 7 /* ARCnet */
+#define ARPHRD_APPLETLK 8 /* APPLEtalk */
+#define ARPHRD_DLCI 15 /* Frame Relay DLCI */
+#define ARPHRD_ATM 19 /* ATM */
+#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id) */
+
+/* Dummy types for non ARP hardware */
+#define ARPHRD_SLIP 256
+#define ARPHRD_CSLIP 257
+#define ARPHRD_SLIP6 258
+#define ARPHRD_CSLIP6 259
+#define ARPHRD_RSRVD 260 /* Notional KISS type */
+#define ARPHRD_ADAPT 264
+#define ARPHRD_ROSE 270
+#define ARPHRD_X25 271 /* CCITT X.25 */
+#define ARPHRD_HWX25 272 /* Boards with X.25 in firmware */
+#define ARPHRD_PPP 512
+#define ARPHRD_CISCO 513 /* Cisco HDLC */
+#define ARPHRD_HDLC ARPHRD_CISCO
+#define ARPHRD_LAPB 516 /* LAPB */
+#define ARPHRD_DDCMP 517 /* Digital's DDCMP protocol */
+#define ARPHRD_RAWHDLC 518 /* Raw HDLC */
+
+#define ARPHRD_TUNNEL 768 /* IPIP tunnel */
+#define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel */
+#define ARPHRD_FRAD 770 /* Frame Relay Access Device */
+#define ARPHRD_SKIP 771 /* SKIP vif */
+#define ARPHRD_LOOPBACK 772 /* Loopback device */
+#define ARPHRD_LOCALTLK 773 /* Localtalk device */
+#define ARPHRD_FDDI 774 /* Fiber Distributed Data Interface */
+#define ARPHRD_BIF 775 /* AP1000 BIF */
+#define ARPHRD_SIT 776 /* sit0 device - IPv6-in-IPv4 */
+#define ARPHRD_IPDDP 777 /* IP over DDP tunneller */
+#define ARPHRD_IPGRE 778 /* GRE over IP */
+#define ARPHRD_PIMREG 779 /* PIMSM register interface */
+#define ARPHRD_HIPPI 780 /* High Performance Parallel Interface */
+#define ARPHRD_ASH 781 /* Nexus 64Mbps Ash */
+#define ARPHRD_ECONET 782 /* Acorn Econet */
+#define ARPHRD_IRDA 783 /* Linux-IrDA */
+/* ARP works differently on different FC media .. so */
+#define ARPHRD_FCPP 784 /* Point to point fibrechannel */
+#define ARPHRD_FCAL 785 /* Fibrechannel arbitrated loop */
+#define ARPHRD_FCPL 786 /* Fibrechannel public loop */
+#define ARPHRD_FCFABRIC 787 /* Fibrechannel fabric */
+ /* 787->799 reserved for fibrechannel media types */
+#define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR */
+#define ARPHRD_IEEE80211 801 /* IEEE 802.11 */
+
+#define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */
+
+/* ARP protocol opcodes. */
+#define ARPOP_REQUEST 1 /* ARP request */
+#define ARPOP_REPLY 2 /* ARP reply */
+#define ARPOP_RREQUEST 3 /* RARP request */
+#define ARPOP_RREPLY 4 /* RARP reply */
+#define ARPOP_InREQUEST 8 /* InARP request */
+#define ARPOP_InREPLY 9 /* InARP reply */
+#define ARPOP_NAK 10 /* (ATM)ARP NAK */
+
+
+/* ARP ioctl request. */
+struct arpreq {
+ struct sockaddr arp_pa; /* protocol address */
+ struct sockaddr arp_ha; /* hardware address */
+ int arp_flags; /* flags */
+ struct sockaddr arp_netmask; /* netmask (only for proxy arps) */
+ char arp_dev[16];
+};
+
+struct arpreq_old {
+ struct sockaddr arp_pa; /* protocol address */
+ struct sockaddr arp_ha; /* hardware address */
+ int arp_flags; /* flags */
+ struct sockaddr arp_netmask; /* netmask (only for proxy arps) */
+};
+
+/* ARP Flag values. */
+#define ATF_COM 0x02 /* completed entry (ha valid) */
+#define ATF_PERM 0x04 /* permanent entry */
+#define ATF_PUBL 0x08 /* publish entry */
+#define ATF_USETRAILERS 0x10 /* has requested trailers */
+#define ATF_NETMASK 0x20 /* want to use a netmask (only
+ for proxy entries) */
+#define ATF_DONTPUB 0x40 /* don't answer this addresses */
+
+/*
+ * This structure defines an ethernet arp header.
+ */
+
+struct arphdr
+{
+ unsigned short ar_hrd; /* format of hardware address */
+ unsigned short ar_pro; /* format of protocol address */
+ unsigned char ar_hln; /* length of hardware address */
+ unsigned char ar_pln; /* length of protocol address */
+ unsigned short ar_op; /* ARP opcode (command) */
+};
#endif
diff --git a/mdk-stage1/dietlibc/include/net/route.h b/mdk-stage1/dietlibc/include/net/route.h
index 5e5db7b1a..383bb8370 100644
--- a/mdk-stage1/dietlibc/include/net/route.h
+++ b/mdk-stage1/dietlibc/include/net/route.h
@@ -1,6 +1,52 @@
-#ifndef _NET_IF_ROUTE_H
-#define _NET_IF_ROUTE_H
+#ifndef _NET_ROUTE_H
+#define _NET_ROUTE_H
-#include <linux/route.h>
+#include <inttypes.h>
+#include <netinet/in.h>
+
+/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
+struct rtentry {
+ unsigned long rt_pad1;
+ struct sockaddr rt_dst; /* target address */
+ struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */
+ struct sockaddr rt_genmask; /* target network mask (IP) */
+ unsigned short rt_flags;
+ short rt_pad2;
+ unsigned long rt_pad3;
+ void *rt_pad4;
+ short rt_metric; /* +1 for binary compatibility! */
+ char *rt_dev; /* forcing the device at add */
+ unsigned long rt_mtu; /* per route MTU/Window */
+#ifndef __KERNEL__
+#define rt_mss rt_mtu /* Compatibility :-( */
+#endif
+ unsigned long rt_window; /* Window clamping */
+ unsigned short rt_irtt; /* Initial RTT */
+};
+
+#define RTF_UP 0x0001 /* route usable */
+#define RTF_GATEWAY 0x0002 /* destination is a gateway */
+#define RTF_HOST 0x0004 /* host entry (net otherwise) */
+#define RTF_REINSTATE 0x0008 /* reinstate route after tmout */
+#define RTF_DYNAMIC 0x0010 /* created dyn. (by redirect) */
+#define RTF_MODIFIED 0x0020 /* modified dyn. (by redirect) */
+#define RTF_MTU 0x0040 /* specific MTU for this route */
+#define RTF_MSS RTF_MTU /* Compatibility :-( */
+#define RTF_WINDOW 0x0080 /* per route window clamping */
+#define RTF_IRTT 0x0100 /* Initial round trip time */
+#define RTF_REJECT 0x0200 /* Reject route */
+
+struct in6_rtmsg {
+ struct in6_addr rtmsg_dst;
+ struct in6_addr rtmsg_src;
+ struct in6_addr rtmsg_gateway;
+ uint32_t rtmsg_type;
+ uint16_t rtmsg_dst_len;
+ uint16_t rtmsg_src_len;
+ uint32_t rtmsg_metric;
+ unsigned long int rtmsg_info;
+ uint32_t rtmsg_flags;
+ int rtmsg_ifindex;
+};
#endif
diff --git a/mdk-stage1/dietlibc/include/netdb.h b/mdk-stage1/dietlibc/include/netdb.h
index e90ea81ac..be64f659f 100644
--- a/mdk-stage1/dietlibc/include/netdb.h
+++ b/mdk-stage1/dietlibc/include/netdb.h
@@ -13,8 +13,7 @@
#define _PATH_SERVICES "/etc/services"
/* Description of data base entry for a single service. */
-struct servent
-{
+struct servent {
char *s_name; /* Official service name. */
char **s_aliases; /* Alias list. */
int s_port; /* Port number. */
@@ -22,14 +21,24 @@ struct servent
};
extern void endservent (void) __THROW;
-extern struct servent *getservent (void) __THROW;
+extern void setservent(int stayopen) __THROW;
+
+extern int getservent_r(struct servent *res, char *buf, size_t buflen,
+ struct servent **res_sig) __THROW;
+extern int getservbyname_r(const char* name,const char* proto,
+ struct servent *res, char *buf, size_t buflen,
+ struct servent **res_sig) __THROW;
+extern int getservbyport_r(int port,const char* proto,
+ struct servent *res, char *buf, size_t buflen,
+ struct servent **res_sig) __THROW;
+
+extern struct servent *getservent(void) __THROW;
extern struct servent *getservbyname (const char *__name,
const char *__proto) __THROW;
extern struct servent *getservbyport (int __port, const char *__proto)
__THROW;
-struct hostent
-{
+struct hostent {
char *h_name; /* Official name of host. */
char **h_aliases; /* Alias list. */
int h_addrtype; /* Host address type. */
@@ -40,6 +49,7 @@ struct hostent
extern void endhostent (void) __THROW;
extern struct hostent *gethostent (void) __THROW;
+extern struct hostent *gethostent_r (char* buf,int len) __THROW;
extern struct hostent *gethostbyaddr (const void *__addr, socklen_t __len,
int __type) __THROW;
extern struct hostent *gethostbyname (const char *__name) __THROW;
@@ -55,11 +65,16 @@ extern int gethostbyname_r(const char* NAME, struct hostent* RESULT_BUF,char* BU
#define TRY_AGAIN 2
#define NO_RECOVERY 3
#define NO_ADDRESS 4
+#define NO_DATA 5
extern int gethostbyaddr_r(const char* addr, size_t length, int format,
struct hostent* result, char *buf, size_t buflen,
struct hostent **RESULT, int *h_errnop) __THROW;
+int gethostbyname2_r(const char* name, int AF, struct hostent* result,
+ char *buf, size_t buflen,
+ struct hostent **RESULT, int *h_errnop) __THROW;
+
struct protoent {
char *p_name; /* official protocol name */
char **p_aliases; /* alias list */
@@ -72,19 +87,38 @@ struct protoent *getprotobynumber(int proto) __THROW;
void setprotoent(int stayopen) __THROW;
void endprotoent(void) __THROW;
+int getprotoent_r(struct protoent *res, char *buf, size_t buflen,
+ struct protoent **res_sig) __THROW;
+int getprotobyname_r(const char* name,
+ struct protoent *res, char *buf, size_t buflen,
+ struct protoent **res_sig) __THROW;
+int getprotobynumber_r(int proto,
+ struct protoent *res, char *buf, size_t buflen,
+ struct protoent **res_sig) __THROW;
+
-/* Description of data base entry for a single network. NOTE: here a
- poor assumption is made. The network number is expected to fit
- into an unsigned long int variable. */
-struct netent
-{
- char *n_name; /* Official name of network. */
- char **n_aliases; /* Alias list. */
- int n_addrtype; /* Net address type. */
- uint32_t n_net; /* Network number. */
+void sethostent(int stayopen) __THROW;
+
+/* dummy */
+extern int h_errno;
+
+struct netent {
+ char *n_name; /* official network name */
+ char **n_aliases; /* alias list */
+ int n_addrtype; /* net address type */
+ unsigned long int n_net; /* network number */
};
-extern struct netent *getnetbyname (__const char *__name) __THROW;
+struct netent *getnetbyaddr(unsigned long net, int type) __THROW;
+void endnetent(void) __THROW;
+void setnetent(int stayopen) __THROW;
+struct netent *getnetbyname(const char *name) __THROW;
+struct netent *getnetent(void) __THROW;
+
+extern const char *hstrerror (int err_num) __THROW;
+void herror(const char *s) __THROW;
+#define NI_MAXHOST 1025
+#define NI_MAXSERV 32
#endif
diff --git a/mdk-stage1/dietlibc/include/netinet/in.h b/mdk-stage1/dietlibc/include/netinet/in.h
index 0569c8289..9f98cc050 100644
--- a/mdk-stage1/dietlibc/include/netinet/in.h
+++ b/mdk-stage1/dietlibc/include/netinet/in.h
@@ -1,9 +1,404 @@
#ifndef _NETINET_IN_H
#define _NETINET_IN_H
-#include <linux/in.h>
-#include <linux/in6.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <endian.h>
+
+/* Standard well-defined IP protocols. */
+enum {
+ IPPROTO_IP = 0, /* Dummy protocol for TCP */
+#define IPPROTO_IP IPPROTO_IP
+ IPPROTO_ICMP = 1, /* Internet Control Message Protocol */
+#define IPPROTO_ICMP IPPROTO_ICMP
+ IPPROTO_IGMP = 2, /* Internet Group Management Protocol */
+#define IPPROTO_IGMP IPPROTO_IGMP
+ IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94) */
+#define IPPROTO_IPIP IPPROTO_IPIP
+ IPPROTO_TCP = 6, /* Transmission Control Protocol */
+#define IPPROTO_TCP IPPROTO_TCP
+ IPPROTO_EGP = 8, /* Exterior Gateway Protocol */
+#define IPPROTO_EGP IPPROTO_EGP
+ IPPROTO_PUP = 12, /* PUP protocol */
+#define IPPROTO_PUP IPPROTO_PUP
+ IPPROTO_UDP = 17, /* User Datagram Protocol */
+#define IPPROTO_UDP IPPROTO_UDP
+ IPPROTO_IDP = 22, /* XNS IDP protocol */
+#define IPPROTO_IDP IPPROTO_IDP
+ IPPROTO_RSVP = 46, /* RSVP protocol */
+#define IPPROTO_RSVP IPPROTO_RSVP
+ IPPROTO_GRE = 47, /* Cisco GRE tunnels (rfc 1701,1702) */
+#define IPPROTO_GRE IPPROTO_GRE
+ IPPROTO_IPV6 = 41, /* IPv6-in-IPv4 tunnelling */
+#define IPPROTO_IPV6 IPPROTO_IPV6
+ IPPROTO_PIM = 103, /* Protocol Independent Multicast */
+#define IPPROTO_PIM IPPROTO_PIM
+ IPPROTO_ESP = 50, /* Encapsulation Security Payload protocol */
+#define IPPROTO_ESP IPPROTO_ESP
+ IPPROTO_AH = 51, /* Authentication Header protocol */
+#define IPPROTO_AH IPPROTO_AH
+ IPPROTO_COMP = 108, /* Compression Header protocol */
+#define IPPROTO_COMP IPPROTO_COMP
+ IPPROTO_RAW = 255, /* Raw IP packets */
+#define IPPROTO_RAW IPPROTO_RAW
+ IPPROTO_MAX
+};
+
+#define IP_TOS 1
+#define IP_TTL 2
+#define IP_HDRINCL 3
+#define IP_OPTIONS 4
+#define IP_ROUTER_ALERT 5
+#define IP_RECVOPTS 6
+#define IP_RETOPTS 7
+#define IP_PKTINFO 8
+#define IP_PKTOPTIONS 9
+#define IP_MTU_DISCOVER 10
+#define IP_RECVERR 11
+#define IP_RECVTTL 12
+#define IP_RECVTOS 13
+#define IP_MTU 14
+#define IP_FREEBIND 15
+
+/* BSD compatibility */
+#define IP_RECVRETOPTS IP_RETOPTS
+
+/* IP_MTU_DISCOVER values */
+#define IP_PMTUDISC_DONT 0 /* Never send DF frames */
+#define IP_PMTUDISC_WANT 1 /* Use per route hints */
+#define IP_PMTUDISC_DO 2 /* Always DF */
+
+#define IP_MULTICAST_IF 32
+#define IP_MULTICAST_TTL 33
+#define IP_MULTICAST_LOOP 34
+#define IP_ADD_MEMBERSHIP 35
+#define IP_DROP_MEMBERSHIP 36
+
+/* These need to appear somewhere around here */
+#define IP_DEFAULT_MULTICAST_TTL 1
+#define IP_DEFAULT_MULTICAST_LOOP 1
+
+#define IN6ADDR_ANY_INIT {{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}}
+#define IN6ADDR_LOOPBACK_INIT {{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }}}
+extern const struct in6_addr in6addr_any;
+extern const struct in6_addr in6addr_loopback;
+
+typedef uint16_t in_port_t;
+typedef uint32_t in_addr_t;
+
+struct in_addr {
+ in_addr_t s_addr;
+};
+
+struct ip_mreq {
+ struct in_addr imr_multiaddr; /* IP multicast address of group */
+ struct in_addr imr_interface; /* local IP address of interface */
+};
+
+struct ip_mreqn {
+ struct in_addr imr_multiaddr; /* IP multicast address of group */
+ struct in_addr imr_address; /* local IP address of interface */
+ int imr_ifindex; /* Interface index */
+};
+
+struct in_pktinfo {
+ int ipi_ifindex;
+ struct in_addr ipi_spec_dst;
+ struct in_addr ipi_addr;
+};
+
+/* Structure describing an Internet (IP) socket address. */
+#define __SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */
+struct sockaddr_in {
+ sa_family_t sin_family; /* Address family */
+ in_port_t sin_port; /* Port number */
+ struct in_addr sin_addr; /* Internet address */
+ /* Pad to size of `struct sockaddr'. */
+ unsigned char sin_zero[__SOCK_SIZE__ - sizeof(short int) -
+ sizeof(unsigned short int) - sizeof(struct in_addr)];
+};
+
+
+/*
+ * Definitions of the bits in an Internet address integer.
+ * On subnets, host and network parts are found according
+ * to the subnet mask, not these masks.
+ */
+#define IN_CLASSA(a) ((((long int) (a)) & 0x80000000) == 0)
+#define IN_CLASSA_NET 0xff000000
+#define IN_CLASSA_NSHIFT 24
+#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET)
+#define IN_CLASSA_MAX 128
+
+#define IN_CLASSB(a) ((((long int) (a)) & 0xc0000000) == 0x80000000)
+#define IN_CLASSB_NET 0xffff0000
+#define IN_CLASSB_NSHIFT 16
+#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET)
+#define IN_CLASSB_MAX 65536
+
+#define IN_CLASSC(a) ((((long int) (a)) & 0xe0000000) == 0xc0000000)
+#define IN_CLASSC_NET 0xffffff00
+#define IN_CLASSC_NSHIFT 8
+#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET)
+
+#define IN_CLASSD(a) ((((long int) (a)) & 0xf0000000) == 0xe0000000)
+#define IN_MULTICAST(a) IN_CLASSD(a)
+#define IN_MULTICAST_NET 0xF0000000
+
+#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000)
+#define IN_BADCLASS(a) IN_EXPERIMENTAL((a))
+
+/* Address to accept any incoming messages. */
+#define INADDR_ANY ((unsigned long int) 0x00000000)
+
+/* Address to send to all hosts. */
+#define INADDR_BROADCAST ((unsigned long int) 0xffffffff)
+
+/* Address indicating an error return. */
+#define INADDR_NONE ((unsigned long int) 0xffffffff)
+
+/* Network number for local host loopback. */
+#define IN_LOOPBACKNET 127
+
+/* Address to loopback in software to local host. */
+#define INADDR_LOOPBACK 0x7f000001 /* 127.0.0.1 */
+#define IN_LOOPBACK(a) ((((long int) (a)) & 0xff000000) == 0x7f000000)
+
+/* Defines for Multicast INADDR */
+#define INADDR_UNSPEC_GROUP 0xe0000000U /* 224.0.0.0 */
+#define INADDR_ALLHOSTS_GROUP 0xe0000001U /* 224.0.0.1 */
+#define INADDR_ALLRTRS_GROUP 0xe0000002U /* 224.0.0.2 */
+#define INADDR_MAX_LOCAL_GROUP 0xe00000ffU /* 224.0.0.255 */
+
+struct in6_addr {
+ union {
+ uint8_t u6_addr8[16];
+ uint16_t u6_addr16[8];
+ uint32_t u6_addr32[4];
+ } in6_u;
+#define s6_addr in6_u.u6_addr8
+#define s6_addr16 in6_u.u6_addr16
+#define s6_addr32 in6_u.u6_addr32
+};
+
+struct sockaddr_in6 {
+ unsigned short int sin6_family; /* AF_INET6 */
+ uint16_t sin6_port; /* Transport layer port # */
+ uint32_t sin6_flowinfo; /* IPv6 flow information */
+ struct in6_addr sin6_addr; /* IPv6 address */
+ uint32_t sin6_scope_id; /* scope id (new in RFC2553) */
+};
+
+struct sockaddr_in_pad {
+ sa_family_t sin_family; /* Address family */
+ in_port_t sin_port; /* Port number */
+ struct in_addr sin_addr; /* Internet address */
+ /* Pad to size of `struct sockaddr_in6'. */
+ unsigned char sin_zero[sizeof(struct sockaddr_in6) - sizeof(short int) -
+ sizeof(unsigned short int) - sizeof(struct in_addr)];
+};
+
+struct ipv6_mreq {
+ /* IPv6 multicast address of group */
+ struct in6_addr ipv6mr_multiaddr;
+ /* local IPv6 address of interface */
+ int ipv6mr_interface;
+};
+
+struct in6_flowlabel_req {
+ struct in6_addr flr_dst;
+ uint32_t flr_label;
+ uint8_t flr_action;
+ uint8_t flr_share;
+ uint16_t flr_flags;
+ uint16_t flr_expires;
+ uint16_t flr_linger;
+ uint32_t __flr_pad;
+ /* Options in format of IPV6_PKTOPTIONS */
+};
+
+#define IPV6_FL_A_GET 0
+#define IPV6_FL_A_PUT 1
+#define IPV6_FL_A_RENEW 2
+
+#define IPV6_FL_F_CREATE 1
+#define IPV6_FL_F_EXCL 2
+
+#define IPV6_FL_S_NONE 0
+#define IPV6_FL_S_EXCL 1
+#define IPV6_FL_S_PROCESS 2
+#define IPV6_FL_S_USER 3
+#define IPV6_FL_S_ANY 255
+
+#define IPV6_FLOWINFO_FLOWLABEL 0x000fffff
+#define IPV6_FLOWINFO_PRIORITY 0x0ff00000
+
+/*
+ * IPV6 extension headers
+ */
+#define IPPROTO_HOPOPTS 0 /* IPv6 hop-by-hop options */
+#define IPPROTO_ROUTING 43 /* IPv6 routing header */
+#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */
+#define IPPROTO_ICMPV6 58 /* ICMPv6 */
+#define IPPROTO_NONE 59 /* IPv6 no next header */
+#define IPPROTO_DSTOPTS 60 /* IPv6 destination options */
+
+/* IPv6 TLV options. */
+#define IPV6_TLV_PAD0 0
+#define IPV6_TLV_PADN 1
+#define IPV6_TLV_ROUTERALERT 5
+#define IPV6_TLV_JUMBO 194
+
+/* IPV6 socket options. */
+#define IPV6_ADDRFORM 1
+#define IPV6_PKTINFO 2
+#define IPV6_HOPOPTS 3
+#define IPV6_DSTOPTS 4
+#define IPV6_RTHDR 5
+#define IPV6_PKTOPTIONS 6
+#define IPV6_CHECKSUM 7
+#define IPV6_HOPLIMIT 8
+#define IPV6_NEXTHOP 9
+#define IPV6_AUTHHDR 10
+#define IPV6_FLOWINFO 11
+
+#define IPV6_UNICAST_HOPS 16
+#define IPV6_MULTICAST_IF 17
+#define IPV6_MULTICAST_HOPS 18
+#define IPV6_MULTICAST_LOOP 19
+#define IPV6_ADD_MEMBERSHIP 20
+#define IPV6_DROP_MEMBERSHIP 21
+#define IPV6_ROUTER_ALERT 22
+#define IPV6_MTU_DISCOVER 23
+#define IPV6_MTU 24
+#define IPV6_RECVERR 25
+
+/* IPV6_MTU_DISCOVER values */
+#define IPV6_PMTUDISC_DONT 0
+#define IPV6_PMTUDISC_WANT 1
+#define IPV6_PMTUDISC_DO 2
+
+/* Flowlabel */
+#define IPV6_FLOWLABEL_MGR 32
+#define IPV6_FLOWINFO_SEND 33
+
+#define IPV6_MIN_MTU 1280
+
+struct in6_pktinfo {
+ struct in6_addr ipi6_addr;
+ int ipi6_ifindex;
+};
+
+struct in6_ifreq {
+ struct in6_addr ifr6_addr;
+ uint32_t ifr6_prefixlen;
+ int ifr6_ifindex;
+};
+
+#define IPV6_SRCRT_STRICT 0x01 /* this hop must be a neighbor */
+#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 Routing Header */
+
+/* routing header */
+struct ipv6_rt_hdr {
+ uint8_t nexthdr;
+ uint8_t hdrlen;
+ uint8_t type;
+ uint8_t segments_left;
+ /* type specific data, variable length field */
+};
+
+struct ipv6_opt_hdr {
+ uint8_t nexthdr;
+ uint8_t hdrlen;
+ /* TLV encoded option data follows. */
+};
+
+#define ipv6_destopt_hdr ipv6_opt_hdr
+#define ipv6_hopopt_hdr ipv6_opt_hdr
+
+/* routing header type 0 (used in cmsghdr struct) */
+
+#ifndef __STRICT_ANSI__
+struct rt0_hdr {
+ struct ipv6_rt_hdr rt_hdr;
+ uint32_t bitmap; /* strict/loose bit map */
+ struct in6_addr addr[0];
+#define rt0_type rt_hdr.type;
+};
+#endif
+
+struct ipv6hdr {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int flow_lbl:20,
+ priority:8,
+ version:4;
+#else
+ unsigned int version:4,
+ priority:8,
+ flow_lbl:20;
+#endif
+
+ uint16_t payload_len;
+ uint8_t nexthdr;
+ uint8_t hop_limit;
+
+ struct in6_addr saddr;
+ struct in6_addr daddr;
+};
+/* fnord */
#define IPPORT_RESERVED 1024
+#define INET6_ADDRSTRLEN 46
+
+#undef htonl
+#undef htons
+#undef ntohl
+#undef ntohs
+uint32_t htonl(uint32_t hostlong);
+uint16_t htons(uint16_t hostshort);
+uint32_t ntohl(uint32_t netlong);
+uint16_t ntohs(uint16_t netshort);
+
+#define IN6_IS_ADDR_UNSPECIFIED(a) \
+ (((__const uint32_t *) (a))[0] == 0 \
+ && ((__const uint32_t *) (a))[1] == 0 \
+ && ((__const uint32_t *) (a))[2] == 0 \
+ && ((__const uint32_t *) (a))[3] == 0)
+
+#define IN6_IS_ADDR_LOOPBACK(a) \
+ (((__const uint32_t *) (a))[0] == 0 \
+ && ((__const uint32_t *) (a))[1] == 0 \
+ && ((__const uint32_t *) (a))[2] == 0 \
+ && ((__const uint32_t *) (a))[3] == htonl (1))
+
+#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff)
+
+#define IN6_IS_ADDR_LINKLOCAL(a) \
+ ((((__const uint32_t *) (a))[0] & htonl (0xffc00000)) \
+ == htonl (0xfe800000))
+
+#define IN6_IS_ADDR_SITELOCAL(a) \
+ ((((__const uint32_t *) (a))[0] & htonl (0xffc00000)) \
+ == htonl (0xfec00000))
+
+#define IN6_IS_ADDR_V4MAPPED(a) \
+ ((((__const uint32_t *) (a))[0] == 0) \
+ && (((__const uint32_t *) (a))[1] == 0) \
+ && (((__const uint32_t *) (a))[2] == htonl (0xffff)))
+
+#define IN6_IS_ADDR_V4COMPAT(a) \
+ ((((__const uint32_t *) (a))[0] == 0) \
+ && (((__const uint32_t *) (a))[1] == 0) \
+ && (((__const uint32_t *) (a))[2] == 0) \
+ && (ntohl (((__const uint32_t *) (a))[3]) > 1))
+
+#define IN6_ARE_ADDR_EQUAL(a,b) \
+ ((((__const uint32_t *) (a))[0] == ((__const uint32_t *) (b))[0]) \
+ && (((__const uint32_t *) (a))[1] == ((__const uint32_t *) (b))[1]) \
+ && (((__const uint32_t *) (a))[2] == ((__const uint32_t *) (b))[2]) \
+ && (((__const uint32_t *) (a))[3] == ((__const uint32_t *) (b))[3]))
+
+/* old legacy bullshit */
+int bindresvport(int sd, struct sockaddr_in* sin);
#endif
diff --git a/mdk-stage1/dietlibc/include/netinet/ip.h b/mdk-stage1/dietlibc/include/netinet/ip.h
index 35bf9cc42..4ebf21706 100644
--- a/mdk-stage1/dietlibc/include/netinet/ip.h
+++ b/mdk-stage1/dietlibc/include/netinet/ip.h
@@ -1,6 +1,121 @@
#ifndef _NETINET_IP_H
#define _NETINET_IP_H
-#include <linux/ip.h>
+#include <inttypes.h>
+#include <endian.h>
+#include <netinet/in.h>
+
+#define IPVERSION 4 /* IP version number */
+#define IP_MAXPACKET 65535 /* maximum packet size */
+
+#define IPTOS_TOS_MASK 0x1E
+#define IPTOS_TOS(tos) ((tos)&IPTOS_TOS_MASK)
+#define IPTOS_LOWDELAY 0x10
+#define IPTOS_THROUGHPUT 0x08
+#define IPTOS_RELIABILITY 0x04
+#define IPTOS_MINCOST 0x02
+#define IPTOS_LOWCOST IPTOS_MINCOST
+
+#define IPTOS_PREC_MASK 0xE0
+#define IPTOS_PREC(tos) ((tos)&IPTOS_PREC_MASK)
+#define IPTOS_PREC_NETCONTROL 0xe0
+#define IPTOS_PREC_INTERNETCONTROL 0xc0
+#define IPTOS_PREC_CRITIC_ECP 0xa0
+#define IPTOS_PREC_FLASHOVERRIDE 0x80
+#define IPTOS_PREC_FLASH 0x60
+#define IPTOS_PREC_IMMEDIATE 0x40
+#define IPTOS_PREC_PRIORITY 0x20
+#define IPTOS_PREC_ROUTINE 0x00
+
+
+/* IP options */
+#define IPOPT_COPY 0x80
+#define IPOPT_CLASS_MASK 0x60
+#define IPOPT_NUMBER_MASK 0x1f
+
+#define IPOPT_COPIED(o) ((o)&IPOPT_COPY)
+#define IPOPT_CLASS(o) ((o)&IPOPT_CLASS_MASK)
+#define IPOPT_NUMBER(o) ((o)&IPOPT_NUMBER_MASK)
+
+#define IPOPT_CONTROL 0x00
+#define IPOPT_RESERVED1 0x20
+#define IPOPT_MEASUREMENT 0x40
+#define IPOPT_RESERVED2 0x60
+
+#define IPOPT_END (0 |IPOPT_CONTROL)
+#define IPOPT_NOOP (1 |IPOPT_CONTROL)
+#define IPOPT_SEC (2 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_LSRR (3 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT)
+#define IPOPT_RR (7 |IPOPT_CONTROL)
+#define IPOPT_SID (8 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_SSRR (9 |IPOPT_CONTROL|IPOPT_COPY)
+#define IPOPT_RA (20|IPOPT_CONTROL|IPOPT_COPY)
+
+#define IPVERSION 4
+#define MAXTTL 255
+#define IPDEFTTL 64
+
+/* struct timestamp, struct route and MAX_ROUTES are removed.
+
+ REASONS: it is clear that nobody used them because:
+ - MAX_ROUTES value was wrong.
+ - "struct route" was wrong.
+ - "struct timestamp" had fatally misaligned bitfields and was completely unusable.
+ */
+
+#define IPOPT_OPTVAL 0
+#define IPOPT_OLEN 1
+#define IPOPT_OFFSET 2
+#define IPOPT_MINOFF 4
+#define MAX_IPOPTLEN 40
+#define IPOPT_NOP IPOPT_NOOP
+#define IPOPT_EOL IPOPT_END
+#define IPOPT_TS IPOPT_TIMESTAMP
+
+#define IPOPT_TS_TSONLY 0 /* timestamps only */
+#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
+#define IPOPT_TS_PRESPEC 3 /* specified modules only */
+
+struct iphdr { /* size 20/0x14 */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int ihl:4, version:4; /* offset 0; version=ip version (4) */
+#else
+ unsigned int version:4, ihl:4; /* offset 0; ihl=ip header length, measured in words (5) */
+#endif
+ unsigned char tos; /* offset 1 */
+ unsigned short tot_len; /* offset 2; total bytes in packet in network byte order */
+ unsigned short id; /* offset 4 */
+ unsigned short frag_off; /* offset 6 */
+ unsigned char ttl; /* offset 8 */
+ unsigned char protocol; /* offset 9; 1=ICMP, 6=TCP, 17=UDP (see netinet/in.h) */
+ unsigned short check; /* offset 10/0xa */
+ unsigned int saddr; /* offset 12/0xc */
+ unsigned int daddr; /* offset 16/0x10 */
+ /*The options start here. */
+};
+
+struct ip {
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int ip_hl:4; /* header length */
+ unsigned int ip_v:4; /* version */
+#endif
+#if __BYTE_ORDER == __BIG_ENDIAN
+ unsigned int ip_v:4; /* version */
+ unsigned int ip_hl:4; /* header length */
+#endif
+ unsigned char ip_tos; /* type of service */
+ unsigned short ip_len; /* total length */
+ unsigned short ip_id; /* identification */
+ unsigned short ip_off; /* fragment offset field */
+#define IP_RF 0x8000 /* reserved fragment flag */
+#define IP_DF 0x4000 /* dont fragment flag */
+#define IP_MF 0x2000 /* more fragments flag */
+#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
+ unsigned char ip_ttl; /* time to live */
+ unsigned char ip_p; /* protocol */
+ unsigned short ip_sum; /* checksum */
+ struct in_addr ip_src, ip_dst; /* source and dest address */
+};
#endif
diff --git a/mdk-stage1/dietlibc/include/paths.h b/mdk-stage1/dietlibc/include/paths.h
index 0e36bb10e..9073d267a 100644
--- a/mdk-stage1/dietlibc/include/paths.h
+++ b/mdk-stage1/dietlibc/include/paths.h
@@ -13,4 +13,11 @@
#define _PATH_GROUP "/etc/group"
#define _PATH_SHADOW "/etc/shadow"
+#define _PATH_SHELLS "/etc/shells"
+
+#define _PATH_VARRUN "/var/run/"
+
+/* puke */
+#define _PATH_MAILDIR "/var/mail"
+
#endif
diff --git a/mdk-stage1/dietlibc/include/pthread.h b/mdk-stage1/dietlibc/include/pthread.h
index e922ab28b..e243c0281 100644
--- a/mdk-stage1/dietlibc/include/pthread.h
+++ b/mdk-stage1/dietlibc/include/pthread.h
@@ -5,9 +5,6 @@
#include <signal.h>
#include <setjmp.h>
-/* arg... kernel haeder... */
-#define ENOTSUP 524 /* Operation is not supported */
-
#define PTHREAD_STACK_SIZE 16384
#define PTHREAD_THREADS_MAX 128
@@ -19,9 +16,16 @@
#define PTHREAD_DESTRUCTOR_ITERATIONS 10
typedef struct _pthread_descr_struct *_pthread_descr;
-typedef unsigned long int pthread_t;
+typedef int pthread_t;
/* Fast locks */
+#ifdef __parisc__
+#define PTHREAD_SPIN_LOCKED 0
+#define PTHREAD_SPIN_UNLOCKED 1
+#else
+#define PTHREAD_SPIN_LOCKED 1
+#define PTHREAD_SPIN_UNLOCKED 0
+#endif
struct _pthread_fastlock {
int __spinlock;
};
@@ -49,18 +53,24 @@ enum
};
#define PTHREAD_MUTEX_INITIALIZER \
-{{0}, 0, PTHREAD_MUTEX_FAST_NP, 0}
+{{PTHREAD_SPIN_UNLOCKED}, 0, PTHREAD_MUTEX_FAST_NP, 0}
#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
-{{0}, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0}
+{{PTHREAD_SPIN_UNLOCKED}, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0}
#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
-{{0}, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0}
+{{PTHREAD_SPIN_UNLOCKED}, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0}
typedef struct {
int __mutexkind;
} pthread_mutexattr_t;
+int pthread_mutexattr_init(pthread_mutexattr_t *attr);
+int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
+
+int pthread_mutexattr_getkind_np(const pthread_mutexattr_t *attr, int *kind);
+int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind);
+
int pthread_mutex_init(pthread_mutex_t *mutex,
const pthread_mutexattr_t *mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
@@ -77,7 +87,7 @@ typedef struct {
} pthread_cond_t;
#define PTHREAD_COND_INITIALIZER \
-{{0},0}
+{{PTHREAD_SPIN_UNLOCKED},0}
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);
int pthread_cond_destroy(pthread_cond_t *cond);
@@ -164,9 +174,14 @@ int pthread_attr_getstackaddr(pthread_attr_t *attr, void **stack);
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
+int pthread_setschedparam(pthread_t target_thread, int policy,
+ const struct sched_param *param);
+int pthread_getschedparam(pthread_t target_thread, int *policy,
+ struct sched_param *param);
+
/* ONCE */
typedef int pthread_once_t;
-#define PTHREAD_ONCE_INIT 0
+#define PTHREAD_ONCE_INIT PTHREAD_SPIN_UNLOCKED
int __pthread_once(pthread_once_t* once_control, void (*init_routine)(void));
int pthread_once(pthread_once_t* once_control, void (*init_routine)(void));
@@ -210,7 +225,7 @@ pid_t pthread_atfork(void (*prepare)(void), void (*parent)(void),
void (*child)(void));
/* THREADS */
-int pthread_create (pthread_t *__thread,
+int pthread_create (pthread_t *__threadarg,
const pthread_attr_t *__attr,
void *(*__start_routine) (void *),
void *__arg);
@@ -224,4 +239,6 @@ int pthread_detach (pthread_t __th);
pthread_t pthread_self (void);
int pthread_equal (pthread_t __thread1, pthread_t __thread2);
+int pthread_sigmask(int how, const sigset_t*newset, sigset_t *oldset);
+
#endif
diff --git a/mdk-stage1/dietlibc/include/pwd.h b/mdk-stage1/dietlibc/include/pwd.h
index e6fb5d0be..8901a2d7f 100644
--- a/mdk-stage1/dietlibc/include/pwd.h
+++ b/mdk-stage1/dietlibc/include/pwd.h
@@ -3,6 +3,7 @@
#include <sys/cdefs.h>
#include <sys/types.h>
+#include <stdio.h>
struct passwd {
char *pw_name; /* Username. */
@@ -14,11 +15,21 @@ struct passwd {
char *pw_shell; /* Shell program. */
};
-extern struct passwd *getpwuid (uid_t __uid) __THROW;
-extern struct passwd *getpwnam (const char *__name) __THROW;
+extern struct passwd *getpwuid (uid_t uid) __THROW;
+extern struct passwd *getpwnam (const char *name) __THROW;
extern struct passwd *getpwent(void) __THROW;
extern void setpwent(void) __THROW;
extern void endpwent(void) __THROW;
+extern int putpwent(const struct passwd *p, FILE *stream) __THROW;
+
+int getpwent_r(struct passwd *res, char *buf, size_t buflen,
+ struct passwd **res_sig) __THROW;
+int getpwnam_r(const char* name,
+ struct passwd *res, char *buf, size_t buflen,
+ struct passwd **res_sig) __THROW;
+int getpwuid_r(uid_t uid,
+ struct passwd *res, char *buf, size_t buflen,
+ struct passwd **res_sig) __THROW;
#endif
diff --git a/mdk-stage1/dietlibc/include/regex.h b/mdk-stage1/dietlibc/include/regex.h
index be609d9db..abc9ab57b 100644
--- a/mdk-stage1/dietlibc/include/regex.h
+++ b/mdk-stage1/dietlibc/include/regex.h
@@ -38,6 +38,7 @@ typedef struct __regex_t {
int brackets,cflags;
regmatch_t *l;
} regex_t;
+#define re_nsub r.pieces
int regcomp(regex_t *preg, const char *regex, int cflags) __THROW;
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags) __THROW;
@@ -61,7 +62,10 @@ enum __regex_errors {
REG_BADPAT, /* Invalid use of pattern operators such as group or list. */
REG_ESIZE, /* Compiled regular expression requires a pattern buffer
larger than 64Kb. This is not defined by POSIX.2. */
- REG_ESPACE, /* regcomp ran out of space */
+ REG_ESPACE /* regcomp ran out of space */
};
+char * re_comp(char * regex);
+int re_exec(char * string);
+
#endif
diff --git a/mdk-stage1/dietlibc/include/resolv.h b/mdk-stage1/dietlibc/include/resolv.h
index 4e90799c2..dae226582 100644
--- a/mdk-stage1/dietlibc/include/resolv.h
+++ b/mdk-stage1/dietlibc/include/resolv.h
@@ -1 +1,124 @@
-void res_init(void);
+#ifndef _RESOLV_H
+#define _RESOLV_H
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <netinet/in.h>
+
+#ifndef _PATH_RESCONF
+#define _PATH_RESCONF "/etc/resolv.conf"
+#endif
+
+/*
+ * Global defines and variables for resolver stub.
+ */
+#define MAXNS 8 /* max # name servers we'll track */
+#define MAXDFLSRCH 3 /* # default domain levels to try */
+#define MAXDNSRCH 6 /* max # domains in search path */
+#define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */
+
+#define RES_TIMEOUT 5 /* min. seconds between retries */
+#define MAXRESOLVSORT 10 /* number of net to sort on */
+#define RES_MAXNDOTS 15 /* should reflect bit field size */
+
+struct res_state {
+ int retrans; /* retransmission time interval */
+ int retry; /* number of times to retransmit */
+ unsigned long options; /* option flags - see below. */
+ int nscount; /* number of name servers */
+ struct sockaddr_in_pad
+ nsaddr_list[MAXNS]; /* address of name server */
+#define nsaddr nsaddr_list[0] /* for backward compatibility */
+ unsigned short id; /* current message id */
+ char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */
+ char defdname[256]; /* default domain (deprecated) */
+ unsigned long pfcode; /* RES_PRF_ flags - see below. */
+ unsigned ndots:4; /* threshold for initial abs. query */
+ unsigned nsort:4; /* number of elements in sort_list[] */
+ char unused[3];
+ struct {
+ struct in_addr addr;
+ uint32_t mask;
+ } sort_list[MAXRESOLVSORT];
+ char pad[72]; /* on an i386 this means 512b total */
+};
+
+/*
+ * Resolver options (keep these in synch with res_debug.c, please)
+ */
+#define RES_INIT 0x00000001 /* address initialized */
+#define RES_DEBUG 0x00000002 /* print debug messages */
+#define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/
+#define RES_USEVC 0x00000008 /* use virtual circuit */
+#define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */
+#define RES_IGNTC 0x00000020 /* ignore trucation errors */
+#define RES_RECURSE 0x00000040 /* recursion desired */
+#define RES_DEFNAMES 0x00000080 /* use default domain name */
+#define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */
+#define RES_DNSRCH 0x00000200 /* search up local domain tree */
+#define RES_INSECURE1 0x00000400 /* type 1 security disabled */
+#define RES_INSECURE2 0x00000800 /* type 2 security disabled */
+#define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */
+#define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */
+
+#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
+
+/*
+ * Resolver "pfcode" values. Used by dig.
+ */
+#define RES_PRF_STATS 0x00000001
+/* 0x00000002 */
+#define RES_PRF_CLASS 0x00000004
+#define RES_PRF_CMD 0x00000008
+#define RES_PRF_QUES 0x00000010
+#define RES_PRF_ANS 0x00000020
+#define RES_PRF_AUTH 0x00000040
+#define RES_PRF_ADD 0x00000080
+#define RES_PRF_HEAD1 0x00000100
+#define RES_PRF_HEAD2 0x00000200
+#define RES_PRF_TTLID 0x00000400
+#define RES_PRF_HEADX 0x00000800
+#define RES_PRF_QUERY 0x00001000
+#define RES_PRF_REPLY 0x00002000
+#define RES_PRF_INIT 0x00004000
+/* 0x00008000 */
+
+struct res_sym {
+ int number; /* Identifying number, like T_MX */
+ char * name; /* Its symbolic name, like "MX" */
+ char * humanname; /* Its fun name, like "mail exchanger" */
+};
+
+extern struct res_state _res;
+extern const struct res_sym __p_class_syms[];
+extern const struct res_sym __p_type_syms[];
+
+int res_init(void) __THROW;
+
+int res_query(const char *dname, int class, int type,
+ unsigned char *answer, int anslen) __THROW;
+
+int res_search(const char *dname, int class, int type,
+ unsigned char *answer, int anslen) __THROW;
+
+int res_querydomain(const char *name, const char *domain,
+ int class, int type, unsigned char *answer,
+ int anslen) __THROW;
+
+int res_mkquery(int op, const char *dname, int class,
+ int type, char *data, int datalen, const unsigned char* newrr,
+ char *buf, int buflen) __THROW;
+
+int res_send(const char *msg, int msglen, char *answer,
+ int anslen) __THROW;
+
+int dn_comp(unsigned char *msg, unsigned char *comp_dn,
+ int length, unsigned char **dnptrs, unsigned char *exp_dn,
+ unsigned char **lastdnptr) __THROW;
+
+int dn_expand(unsigned char *msg, unsigned char *eomorig,
+ unsigned char *comp_dn, unsigned char *exp_dn,
+ int length) __THROW;
+
+#endif
diff --git a/mdk-stage1/dietlibc/include/rpc/auth.h b/mdk-stage1/dietlibc/include/rpc/auth.h
index 4aa7d21ce..6e0ae0675 100644
--- a/mdk-stage1/dietlibc/include/rpc/auth.h
+++ b/mdk-stage1/dietlibc/include/rpc/auth.h
@@ -42,6 +42,7 @@
#define _RPC_AUTH_H 1
#include <sys/cdefs.h>
+#include <sys/socket.h>
#include <rpc/xdr.h>
__BEGIN_DECLS
@@ -71,8 +72,8 @@ enum auth_stat {
union des_block {
struct {
- u_int32_t high;
- u_int32_t low;
+ uint32_t high;
+ uint32_t low;
} key;
char c[8];
};
@@ -84,8 +85,8 @@ extern bool_t xdr_des_block (XDR *__xdrs, des_block *__blkp) __THROW;
*/
struct opaque_auth {
enum_t oa_flavor; /* flavor of auth */
- caddr_t oa_base; /* address of more auth stuff */
- u_int oa_length; /* not to exceed MAX_AUTH_BYTES */
+ char* oa_base; /* address of more auth stuff */
+ unsigned int oa_length; /* not to exceed MAX_AUTH_BYTES */
};
/*
@@ -104,7 +105,7 @@ struct AUTH {
int (*ah_refresh) (AUTH *); /* refresh credentials */
void (*ah_destroy) (AUTH *); /* destroy this structure */
} *ah_ops;
- caddr_t ah_private;
+ char* ah_private;
};
@@ -162,10 +163,10 @@ extern AUTH *authunix_create (char *__machname,uid_t __uid, gid_t __gid,
int __len, gid_t *__aup_gids) __THROW;
extern AUTH *authunix_create_default (void) __THROW;
extern AUTH *authnone_create (void) __THROW;
-extern AUTH *authdes_create (const char *__servername, u_int __window,
+extern AUTH *authdes_create (const char *__servername, unsigned int __window,
struct sockaddr *__syncaddr, des_block *__ckey)
__THROW;
-extern AUTH *authdes_pk_create (const char *, netobj *, u_int,
+extern AUTH *authdes_pk_create (const char *, netobj *, unsigned int,
struct sockaddr *, des_block *) __THROW;
@@ -183,11 +184,11 @@ extern AUTH *authdes_pk_create (const char *, netobj *, u_int,
*
*/
extern int getnetname (char *) __THROW;
-extern int host2netname (char *, __const char *, __const char *) __THROW;
-extern int user2netname (char *, __const uid_t, __const char *) __THROW;
-extern int netname2user (__const char *, uid_t *, gid_t *, int *, gid_t *)
+extern int host2netname (char *, const char *, const char *) __THROW;
+extern int user2netname (char *, const uid_t, const char *) __THROW;
+extern int netname2user (const char *, uid_t *, gid_t *, int *, gid_t *)
__THROW;
-extern int netname2host (__const char *, char *, __const int) __THROW;
+extern int netname2host (const char *, char *, const int) __THROW;
/*
*
diff --git a/mdk-stage1/dietlibc/include/rpc/auth_des.h b/mdk-stage1/dietlibc/include/rpc/auth_des.h
index 198b299e7..8accd3779 100644
--- a/mdk-stage1/dietlibc/include/rpc/auth_des.h
+++ b/mdk-stage1/dietlibc/include/rpc/auth_des.h
@@ -86,22 +86,22 @@ struct authdes_verf
#define adv_nickname adv_int_u
/* Map a des credential into a unix cred. */
-extern int authdes_getucred (__const struct authdes_cred * __adc,
+extern int authdes_getucred (const struct authdes_cred * __adc,
uid_t * __uid, gid_t * __gid,
short *__grouplen, gid_t * __groups) __THROW;
/* Get the public key for NAME and place it in KEY. NAME can only be
up to MAXNETNAMELEN bytes long and the destination buffer KEY should
have HEXKEYBYTES + 1 bytes long to fit all characters from the key. */
-extern int getpublickey (__const char *__name, char *__key) __THROW;
+extern int getpublickey (const char *__name, char *__key) __THROW;
/* Get the secret key for NAME and place it in KEY. PASSWD is used to
decrypt the encrypted key stored in the database. NAME can only be
up to MAXNETNAMELEN bytes long and the destination buffer KEY
should have HEXKEYBYTES + 1 bytes long to fit all characters from
the key. */
-extern int getsecretkey (__const char *__name, char *__key,
- __const char *__passwd) __THROW;
+extern int getsecretkey (const char *__name, char *__key,
+ const char *__passwd) __THROW;
extern int rtime (struct sockaddr_in *__addrp, struct rpc_timeval *__timep,
struct rpc_timeval *__timeout) __THROW;
diff --git a/mdk-stage1/dietlibc/include/rpc/auth_unix.h b/mdk-stage1/dietlibc/include/rpc/auth_unix.h
index 7a1bfa9f0..9dd8142f1 100644
--- a/mdk-stage1/dietlibc/include/rpc/auth_unix.h
+++ b/mdk-stage1/dietlibc/include/rpc/auth_unix.h
@@ -64,11 +64,11 @@ __BEGIN_DECLS
*/
struct authunix_parms
{
- u_long aup_time;
+ unsigned long aup_time;
char *aup_machname;
uid_t aup_uid;
gid_t aup_gid;
- u_int aup_len;
+ unsigned int aup_len;
gid_t *aup_gids;
};
diff --git a/mdk-stage1/dietlibc/include/rpc/clnt.h b/mdk-stage1/dietlibc/include/rpc/clnt.h
index 60b0fafdf..9b100556c 100644
--- a/mdk-stage1/dietlibc/include/rpc/clnt.h
+++ b/mdk-stage1/dietlibc/include/rpc/clnt.h
@@ -109,8 +109,8 @@ struct rpc_err {
int RE_errno; /* related system error */
enum auth_stat RE_why; /* why the auth error occurred */
struct {
- u_long low; /* lowest verion supported */
- u_long high; /* highest verion supported */
+ unsigned long low; /* lowest verion supported */
+ unsigned long high; /* highest verion supported */
} RE_vers;
struct { /* maybe meaningful if RPC_FAILED */
long s1;
@@ -133,19 +133,19 @@ typedef struct CLIENT CLIENT;
struct CLIENT {
AUTH *cl_auth; /* authenticator */
struct clnt_ops {
- enum clnt_stat (*cl_call) (CLIENT *, u_long, xdrproc_t, caddr_t, xdrproc_t,
- caddr_t, struct timeval);
+ enum clnt_stat (*cl_call) (CLIENT *, unsigned long, xdrproc_t, char*, xdrproc_t,
+ char*, struct timeval);
/* call remote procedure */
void (*cl_abort) (void); /* abort a call */
void (*cl_geterr) (CLIENT *, struct rpc_err *);
/* get specific error code */
- bool_t (*cl_freeres) (CLIENT *, xdrproc_t, caddr_t);
+ bool_t (*cl_freeres) (CLIENT *, xdrproc_t, char*);
/* frees results */
void (*cl_destroy) (CLIENT *); /* destroy this structure */
bool_t (*cl_control) (CLIENT *, int, char *);
/* the ioctl() of rpc */
} *cl_ops;
- caddr_t cl_private; /* private stuff */
+ char* cl_private; /* private stuff */
};
@@ -160,11 +160,11 @@ struct CLIENT {
* enum clnt_stat
* CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
* CLIENT *rh;
- * u_long proc;
+ * unsigned long proc;
* xdrproc_t xargs;
- * caddr_t argsp;
+ * char* argsp;
* xdrproc_t xres;
- * caddr_t resp;
+ * char* resp;
* struct timeval timeout;
*/
#define CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs) \
@@ -194,7 +194,7 @@ struct CLIENT {
* CLNT_FREERES(rh, xres, resp);
* CLIENT *rh;
* xdrproc_t xres;
- * caddr_t resp;
+ * char* resp;
*/
#define CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
#define clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
@@ -203,7 +203,7 @@ struct CLIENT {
* bool_t
* CLNT_CONTROL(cl, request, info)
* CLIENT *cl;
- * u_int request;
+ * unsigned int request;
* char *info;
*/
#define CLNT_CONTROL(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
@@ -253,16 +253,16 @@ struct CLIENT {
* and network administration.
*/
-#define RPCTEST_PROGRAM ((u_long)1)
-#define RPCTEST_VERSION ((u_long)1)
-#define RPCTEST_NULL_PROC ((u_long)2)
-#define RPCTEST_NULL_BATCH_PROC ((u_long)3)
+#define RPCTEST_PROGRAM ((unsigned long)1)
+#define RPCTEST_VERSION ((unsigned long)1)
+#define RPCTEST_NULL_PROC ((unsigned long)2)
+#define RPCTEST_NULL_BATCH_PROC ((unsigned long)3)
/*
* By convention, procedure 0 takes null arguments and returns them
*/
-#define NULLPROC ((u_long)0)
+#define NULLPROC ((unsigned long)0)
/*
* Below are the client handle creation routines for the various
@@ -274,10 +274,10 @@ struct CLIENT {
* Memory based rpc (for speed check and testing)
* CLIENT *
* clntraw_create(prog, vers)
- * u_long prog;
- * u_long vers;
+ * unsigned long prog;
+ * unsigned long vers;
*/
-extern CLIENT *clntraw_create (__const u_long __prog, __const u_long __vers)
+extern CLIENT *clntraw_create (const unsigned long __prog, const unsigned long __vers)
__THROW;
@@ -287,12 +287,12 @@ extern CLIENT *clntraw_create (__const u_long __prog, __const u_long __vers)
* CLIENT *
* clnt_create(host, prog, vers, prot)
* char *host; -- hostname
- * u_long prog; -- program number
+ * unsigned long prog; -- program number
* u_ong vers; -- version number
* char *prot; -- protocol
*/
-extern CLIENT *clnt_create (__const char *__host, __const u_long __prog,
- __const u_long __vers, __const char *__prot)
+extern CLIENT *clnt_create (const char *__host, const unsigned long __prog,
+ const unsigned long __vers, const char *__prot)
__THROW;
@@ -301,23 +301,23 @@ extern CLIENT *clnt_create (__const char *__host, __const u_long __prog,
* CLIENT *
* clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
* struct sockaddr_in *raddr;
- * u_long prog;
- * u_long version;
+ * unsigned long prog;
+ * unsigned long version;
* register int *sockp;
- * u_int sendsz;
- * u_int recvsz;
+ * unsigned int sendsz;
+ * unsigned int recvsz;
*/
-extern CLIENT *clnttcp_create (struct sockaddr_in *__raddr, u_long __prog,
- u_long __version, int *__sockp, u_int __sendsz,
- u_int __recvsz) __THROW;
+extern CLIENT *clnttcp_create (struct sockaddr_in *__raddr, unsigned long __prog,
+ unsigned long __version, int *__sockp, unsigned int __sendsz,
+ unsigned int __recvsz) __THROW;
/*
* UDP based rpc.
* CLIENT *
* clntudp_create(raddr, program, version, wait, sockp)
* struct sockaddr_in *raddr;
- * u_long program;
- * u_long version;
+ * unsigned long program;
+ * unsigned long version;
* struct timeval wait_resend;
* int *sockp;
*
@@ -325,20 +325,20 @@ extern CLIENT *clnttcp_create (struct sockaddr_in *__raddr, u_long __prog,
* CLIENT *
* clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
* struct sockaddr_in *raddr;
- * u_long program;
- * u_long version;
+ * unsigned long program;
+ * unsigned long version;
* struct timeval wait_resend;
* int *sockp;
- * u_int sendsz;
- * u_int recvsz;
+ * unsigned int sendsz;
+ * unsigned int recvsz;
*/
-extern CLIENT *clntudp_create (struct sockaddr_in *__raddr, u_long __program,
- u_long __version, struct timeval __wait_resend,
+extern CLIENT *clntudp_create (struct sockaddr_in *__raddr, unsigned long __program,
+ unsigned long __version, struct timeval __wait_resend,
int *__sockp) __THROW;
extern CLIENT *clntudp_bufcreate (struct sockaddr_in *__raddr,
- u_long __program, u_long __version,
+ unsigned long __program, unsigned long __version,
struct timeval __wait_resend, int *__sockp,
- u_int __sendsz, u_int __recvsz) __THROW;
+ unsigned int __sendsz, unsigned int __recvsz) __THROW;
@@ -348,28 +348,28 @@ extern CLIENT *clntudp_bufcreate (struct sockaddr_in *__raddr,
* CLIENT *
* clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz)
* struct sockaddr_un *raddr;
- * u_long prog;
- * u_long version;
+ * unsigned long prog;
+ * unsigned long version;
* register int *sockp;
- * u_int sendsz;
- * u_int recvsz;
+ * unsigned int sendsz;
+ * unsigned int recvsz;
*/
-extern CLIENT *clntunix_create (struct sockaddr_un *__raddr, u_long __program,
- u_long __version, int *__sockp,
- u_int __sendsz, u_int __recvsz) __THROW;
+extern CLIENT *clntunix_create (struct sockaddr_un *__raddr, unsigned long __program,
+ unsigned long __version, int *__sockp,
+ unsigned int __sendsz, unsigned int __recvsz) __THROW;
-extern int callrpc (__const char *__host, __const u_long __prognum,
- __const u_long __versnum, __const u_long __procnum,
- __const xdrproc_t __inproc, __const char *__in,
- __const xdrproc_t __outproc, char *__out) __THROW;
+extern int callrpc (const char *__host, const unsigned long __prognum,
+ const unsigned long __versnum, const unsigned long __procnum,
+ const xdrproc_t __inproc, const char *__in,
+ const xdrproc_t __outproc, char *__out) __THROW;
extern int _rpc_dtablesize (void) __THROW;
/*
* Print why creation failed
*/
-extern void clnt_pcreateerror (__const char *__msg) __THROW; /* stderr */
-extern char *clnt_spcreateerror(__const char *__msg) __THROW; /* string */
+extern void clnt_pcreateerror (const char *__msg) __THROW; /* stderr */
+extern char *clnt_spcreateerror(const char *__msg) __THROW; /* string */
/*
* Like clnt_perror(), but is more verbose in its output
@@ -379,9 +379,9 @@ extern void clnt_perrno (enum clnt_stat __num) __THROW; /* stderr */
/*
* Print an English error message, given the client error code
*/
-extern void clnt_perror (CLIENT *__clnt, __const char *__msg) __THROW;
+extern void clnt_perror (CLIENT *__clnt, const char *__msg) __THROW;
/* stderr */
-extern char *clnt_sperror (CLIENT *__clnt, __const char *__msg) __THROW;
+extern char *clnt_sperror (CLIENT *__clnt, const char *__msg) __THROW;
/* string */
/*
@@ -404,8 +404,8 @@ extern char *clnt_sperrno (enum clnt_stat __num) __THROW; /* string */
/*
* get the port number on the host for the rpc program,version and proto
*/
-extern int getrpcport (__const char * __host, u_long __prognum,
- u_long __versnum, u_int proto) __THROW;
+extern int getrpcport (const char * __host, unsigned long __prognum,
+ unsigned long __versnum, unsigned int proto) __THROW;
/*
* get the local host's IP address without consulting
diff --git a/mdk-stage1/dietlibc/include/rpc/key_prot.h b/mdk-stage1/dietlibc/include/rpc/key_prot.h
index 3e2eb7208..c398b82f8 100644
--- a/mdk-stage1/dietlibc/include/rpc/key_prot.h
+++ b/mdk-stage1/dietlibc/include/rpc/key_prot.h
@@ -136,11 +136,11 @@ bool_t xdr_cryptkeyres();
#define MAXGIDS 16
struct unixcred {
- u_int uid;
- u_int gid;
+ unsigned int uid;
+ unsigned int gid;
struct {
- u_int gids_len;
- u_int *gids_val;
+ unsigned int gids_len;
+ unsigned int *gids_val;
} gids;
};
typedef struct unixcred unixcred;
@@ -205,61 +205,61 @@ bool_t xdr_key_netstres();
#endif
-#define KEY_PROG ((u_long)100029)
-#define KEY_VERS ((u_long)1)
+#define KEY_PROG ((unsigned long)100029)
+#define KEY_VERS ((unsigned long)1)
#ifdef __cplusplus
-#define KEY_SET ((u_long)1)
+#define KEY_SET ((unsigned long)1)
extern "C" keystatus * key_set_1(opaque *, CLIENT *);
extern "C" keystatus * key_set_1_svc(opaque *, struct svc_req *);
-#define KEY_ENCRYPT ((u_long)2)
+#define KEY_ENCRYPT ((unsigned long)2)
extern "C" cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
extern "C" cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
-#define KEY_DECRYPT ((u_long)3)
+#define KEY_DECRYPT ((unsigned long)3)
extern "C" cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
extern "C" cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
-#define KEY_GEN ((u_long)4)
+#define KEY_GEN ((unsigned long)4)
extern "C" des_block * key_gen_1(void *, CLIENT *);
extern "C" des_block * key_gen_1_svc(void *, struct svc_req *);
-#define KEY_GETCRED ((u_long)5)
+#define KEY_GETCRED ((unsigned long)5)
extern "C" getcredres * key_getcred_1(netnamestr *, CLIENT *);
extern "C" getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
#elif __STDC__
-#define KEY_SET ((u_long)1)
+#define KEY_SET ((unsigned long)1)
extern keystatus * key_set_1(opaque *, CLIENT *);
extern keystatus * key_set_1_svc(opaque *, struct svc_req *);
-#define KEY_ENCRYPT ((u_long)2)
+#define KEY_ENCRYPT ((unsigned long)2)
extern cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
extern cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
-#define KEY_DECRYPT ((u_long)3)
+#define KEY_DECRYPT ((unsigned long)3)
extern cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
extern cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
-#define KEY_GEN ((u_long)4)
+#define KEY_GEN ((unsigned long)4)
extern des_block * key_gen_1(void *, CLIENT *);
extern des_block * key_gen_1_svc(void *, struct svc_req *);
-#define KEY_GETCRED ((u_long)5)
+#define KEY_GETCRED ((unsigned long)5)
extern getcredres * key_getcred_1(netnamestr *, CLIENT *);
extern getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
#else /* Old Style C */
-#define KEY_SET ((u_long)1)
+#define KEY_SET ((unsigned long)1)
extern keystatus * key_set_1();
extern keystatus * key_set_1_svc();
-#define KEY_ENCRYPT ((u_long)2)
+#define KEY_ENCRYPT ((unsigned long)2)
extern cryptkeyres * key_encrypt_1();
extern cryptkeyres * key_encrypt_1_svc();
-#define KEY_DECRYPT ((u_long)3)
+#define KEY_DECRYPT ((unsigned long)3)
extern cryptkeyres * key_decrypt_1();
extern cryptkeyres * key_decrypt_1_svc();
-#define KEY_GEN ((u_long)4)
+#define KEY_GEN ((unsigned long)4)
extern des_block * key_gen_1();
extern des_block * key_gen_1_svc();
-#define KEY_GETCRED ((u_long)5)
+#define KEY_GETCRED ((unsigned long)5)
extern getcredres * key_getcred_1();
extern getcredres * key_getcred_1_svc();
#endif /* Old Style C */
-#define KEY_VERS2 ((u_long)2)
+#define KEY_VERS2 ((unsigned long)2)
#ifdef __cplusplus
extern "C" keystatus * key_set_2(opaque *, CLIENT *);
@@ -272,19 +272,19 @@ extern "C" des_block * key_gen_2(void *, CLIENT *);
extern "C" des_block * key_gen_2_svc(void *, struct svc_req *);
extern "C" getcredres * key_getcred_2(netnamestr *, CLIENT *);
extern "C" getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
-#define KEY_ENCRYPT_PK ((u_long)6)
+#define KEY_ENCRYPT_PK ((unsigned long)6)
extern "C" cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
extern "C" cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
-#define KEY_DECRYPT_PK ((u_long)7)
+#define KEY_DECRYPT_PK ((unsigned long)7)
extern "C" cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
extern "C" cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
-#define KEY_NET_PUT ((u_long)8)
+#define KEY_NET_PUT ((unsigned long)8)
extern "C" keystatus * key_net_put_2(key_netstarg *, CLIENT *);
extern "C" keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
-#define KEY_NET_GET ((u_long)9)
+#define KEY_NET_GET ((unsigned long)9)
extern "C" key_netstres * key_net_get_2(void *, CLIENT *);
extern "C" key_netstres * key_net_get_2_svc(void *, struct svc_req *);
-#define KEY_GET_CONV ((u_long)10)
+#define KEY_GET_CONV ((unsigned long)10)
extern "C" cryptkeyres * key_get_conv_2(opaque *, CLIENT *);
extern "C" cryptkeyres * key_get_conv_2_svc(opaque *, struct svc_req *);
@@ -299,19 +299,19 @@ extern des_block * key_gen_2(void *, CLIENT *);
extern des_block * key_gen_2_svc(void *, struct svc_req *);
extern getcredres * key_getcred_2(netnamestr *, CLIENT *);
extern getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
-#define KEY_ENCRYPT_PK ((u_long)6)
+#define KEY_ENCRYPT_PK ((unsigned long)6)
extern cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
extern cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
-#define KEY_DECRYPT_PK ((u_long)7)
+#define KEY_DECRYPT_PK ((unsigned long)7)
extern cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
extern cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
-#define KEY_NET_PUT ((u_long)8)
+#define KEY_NET_PUT ((unsigned long)8)
extern keystatus * key_net_put_2(key_netstarg *, CLIENT *);
extern keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
-#define KEY_NET_GET ((u_long)9)
+#define KEY_NET_GET ((unsigned long)9)
extern key_netstres * key_net_get_2(void *, CLIENT *);
extern key_netstres * key_net_get_2_svc(void *, struct svc_req *);
-#define KEY_GET_CONV ((u_long)10)
+#define KEY_GET_CONV ((unsigned long)10)
extern cryptkeyres * key_get_conv_2(opaque *, CLIENT *);
extern cryptkeyres * key_get_conv_2_svc(opaque *, struct svc_req *);
@@ -326,19 +326,19 @@ extern des_block * key_gen_2();
extern des_block * key_gen_2_svc();
extern getcredres * key_getcred_2();
extern getcredres * key_getcred_2_svc();
-#define KEY_ENCRYPT_PK ((u_long)6)
+#define KEY_ENCRYPT_PK ((unsigned long)6)
extern cryptkeyres * key_encrypt_pk_2();
extern cryptkeyres * key_encrypt_pk_2_svc();
-#define KEY_DECRYPT_PK ((u_long)7)
+#define KEY_DECRYPT_PK ((unsigned long)7)
extern cryptkeyres * key_decrypt_pk_2();
extern cryptkeyres * key_decrypt_pk_2_svc();
-#define KEY_NET_PUT ((u_long)8)
+#define KEY_NET_PUT ((unsigned long)8)
extern keystatus * key_net_put_2();
extern keystatus * key_net_put_2_svc();
-#define KEY_NET_GET ((u_long)9)
+#define KEY_NET_GET ((unsigned long)9)
extern key_netstres * key_net_get_2();
extern key_netstres * key_net_get_2_svc();
-#define KEY_GET_CONV ((u_long)10)
+#define KEY_GET_CONV ((unsigned long)10)
extern cryptkeyres * key_get_conv_2();
extern cryptkeyres * key_get_conv_2_svc();
#endif /* Old Style C */
diff --git a/mdk-stage1/dietlibc/include/rpc/netdb.h b/mdk-stage1/dietlibc/include/rpc/netdb.h
index da4bddfc4..a991d3a95 100644
--- a/mdk-stage1/dietlibc/include/rpc/netdb.h
+++ b/mdk-stage1/dietlibc/include/rpc/netdb.h
@@ -52,12 +52,12 @@ struct rpcent
extern void setrpcent (int __stayopen) __THROW;
extern void endrpcent (void) __THROW;
-extern struct rpcent *getrpcbyname (__const char *__name) __THROW;
+extern struct rpcent *getrpcbyname (const char *__name) __THROW;
extern struct rpcent *getrpcbynumber (int __number) __THROW;
extern struct rpcent *getrpcent (void) __THROW;
#ifdef __USE_MISC
-extern int getrpcbyname_r (__const char *__name, struct rpcent *__result_buf,
+extern int getrpcbyname_r (const char *__name, struct rpcent *__result_buf,
char *__buffer, size_t __buflen,
struct rpcent **__result) __THROW;
diff --git a/mdk-stage1/dietlibc/include/rpc/pmap_clnt.h b/mdk-stage1/dietlibc/include/rpc/pmap_clnt.h
index 68bc8d8ec..c63922772 100644
--- a/mdk-stage1/dietlibc/include/rpc/pmap_clnt.h
+++ b/mdk-stage1/dietlibc/include/rpc/pmap_clnt.h
@@ -45,7 +45,7 @@
__BEGIN_DECLS
-typedef bool_t (*resultproc_t) (caddr_t resp, struct sockaddr_in *raddr);
+typedef bool_t (*resultproc_t) (char* resp, struct sockaddr_in *raddr);
/*
* Usage:
@@ -63,34 +63,34 @@ typedef bool_t (*resultproc_t) (caddr_t resp, struct sockaddr_in *raddr);
* the procedure eachresult is called. Its form is:
* done = eachresult(resp, raddr)
* bool_t done;
- * caddr_t resp;
+ * char* resp;
* struct sockaddr_in raddr;
* where resp points to the results of the call and raddr is the
* address if the responder to the broadcast.
*/
-extern bool_t pmap_set (__const u_long __program, __const u_long __vers,
- int __protocol, u_short __port) __THROW;
-extern bool_t pmap_unset (__const u_long __program, __const u_long __vers)
+extern bool_t pmap_set (const unsigned long __program, const unsigned long __vers,
+ int __protocol, unsigned short __port) __THROW;
+extern bool_t pmap_unset (const unsigned long __program, const unsigned long __vers)
__THROW;
extern struct pmaplist *pmap_getmaps (struct sockaddr_in *__address) __THROW;
extern enum clnt_stat pmap_rmtcall (struct sockaddr_in *__addr,
- __const u_long __prog,
- __const u_long __vers,
- __const u_long __proc,
+ const unsigned long __prog,
+ const unsigned long __vers,
+ const unsigned long __proc,
xdrproc_t __xdrargs,
- caddr_t __argsp, xdrproc_t __xdrres,
- caddr_t __resp, struct timeval __tout,
- u_long *__port_ptr) __THROW;
-extern enum clnt_stat clnt_broadcast (__const u_long __prog,
- __const u_long __vers,
- __const u_long __proc, xdrproc_t __xargs,
- caddr_t __argsp, xdrproc_t __xresults,
- caddr_t __resultsp,
+ char* __argsp, xdrproc_t __xdrres,
+ char* __resp, struct timeval __tout,
+ unsigned long *__port_ptr) __THROW;
+extern enum clnt_stat clnt_broadcast (const unsigned long __prog,
+ const unsigned long __vers,
+ const unsigned long __proc, xdrproc_t __xargs,
+ char* __argsp, xdrproc_t __xresults,
+ char* __resultsp,
resultproc_t __eachresult) __THROW;
-extern u_short pmap_getport (struct sockaddr_in *__address,
- __const u_long __program,
- __const u_long __version, u_int __protocol)
+extern unsigned short pmap_getport (struct sockaddr_in *__address,
+ const unsigned long __program,
+ const unsigned long __version, unsigned int __protocol)
__THROW;
__END_DECLS
diff --git a/mdk-stage1/dietlibc/include/rpc/pmap_prot.h b/mdk-stage1/dietlibc/include/rpc/pmap_prot.h
index fd7fb8e7e..da06d34c1 100644
--- a/mdk-stage1/dietlibc/include/rpc/pmap_prot.h
+++ b/mdk-stage1/dietlibc/include/rpc/pmap_prot.h
@@ -75,17 +75,17 @@ __BEGIN_DECLS
* The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
*/
-#define PMAPPORT ((u_short)111)
-#define PMAPPROG ((u_long)100000)
-#define PMAPVERS ((u_long)2)
-#define PMAPVERS_PROTO ((u_long)2)
-#define PMAPVERS_ORIG ((u_long)1)
-#define PMAPPROC_NULL ((u_long)0)
-#define PMAPPROC_SET ((u_long)1)
-#define PMAPPROC_UNSET ((u_long)2)
-#define PMAPPROC_GETPORT ((u_long)3)
-#define PMAPPROC_DUMP ((u_long)4)
-#define PMAPPROC_CALLIT ((u_long)5)
+#define PMAPPORT ((unsigned short)111)
+#define PMAPPROG ((unsigned long)100000)
+#define PMAPVERS ((unsigned long)2)
+#define PMAPVERS_PROTO ((unsigned long)2)
+#define PMAPVERS_ORIG ((unsigned long)1)
+#define PMAPPROC_NULL ((unsigned long)0)
+#define PMAPPROC_SET ((unsigned long)1)
+#define PMAPPROC_UNSET ((unsigned long)2)
+#define PMAPPROC_GETPORT ((unsigned long)3)
+#define PMAPPROC_DUMP ((unsigned long)4)
+#define PMAPPROC_CALLIT ((unsigned long)5)
struct pmap {
long unsigned pm_prog;
diff --git a/mdk-stage1/dietlibc/include/rpc/pmap_rmt.h b/mdk-stage1/dietlibc/include/rpc/pmap_rmt.h
index 160f998ca..3b975d0fb 100644
--- a/mdk-stage1/dietlibc/include/rpc/pmap_rmt.h
+++ b/mdk-stage1/dietlibc/include/rpc/pmap_rmt.h
@@ -46,8 +46,8 @@
__BEGIN_DECLS
struct rmtcallargs {
- u_long prog, vers, proc, arglen;
- caddr_t args_ptr;
+ unsigned long prog, vers, proc, arglen;
+ char* args_ptr;
xdrproc_t xdr_args;
};
@@ -55,9 +55,9 @@ extern bool_t xdr_rmtcall_args (XDR *__xdrs, struct rmtcallargs *__crp)
__THROW;
struct rmtcallres {
- u_long *port_ptr;
- u_long resultslen;
- caddr_t results_ptr;
+ unsigned long *port_ptr;
+ unsigned long resultslen;
+ char* results_ptr;
xdrproc_t xdr_results;
};
diff --git a/mdk-stage1/dietlibc/include/rpc/rpc.h b/mdk-stage1/dietlibc/include/rpc/rpc.h
index 20b341d74..a966d2e23 100644
--- a/mdk-stage1/dietlibc/include/rpc/rpc.h
+++ b/mdk-stage1/dietlibc/include/rpc/rpc.h
@@ -67,6 +67,4 @@
/* routines for parsing /etc/rpc */
#include <rpc/netdb.h> /* structures and routines to parse /etc/rpc */
-int bindresvport(int sd, struct sockaddr_in* sin) __THROW;
-
#endif /* rpc/rpc.h */
diff --git a/mdk-stage1/dietlibc/include/rpc/rpc_msg.h b/mdk-stage1/dietlibc/include/rpc/rpc_msg.h
index 636d60ea9..d597608ab 100644
--- a/mdk-stage1/dietlibc/include/rpc/rpc_msg.h
+++ b/mdk-stage1/dietlibc/include/rpc/rpc_msg.h
@@ -44,8 +44,8 @@
* Copyright (C) 1984, Sun Microsystems, Inc.
*/
-#define RPC_MSG_VERSION ((u_long) 2)
-#define RPC_SERVICE_PORT ((u_short) 2048)
+#define RPC_MSG_VERSION ((unsigned long) 2)
+#define RPC_SERVICE_PORT ((unsigned short) 2048)
__BEGIN_DECLS
@@ -93,11 +93,11 @@ struct accepted_reply {
enum accept_stat ar_stat;
union {
struct {
- u_long low;
- u_long high;
+ unsigned long low;
+ unsigned long high;
} AR_versions;
struct {
- caddr_t where;
+ char* where;
xdrproc_t proc;
} AR_results;
/* and many other null cases */
@@ -113,8 +113,8 @@ struct rejected_reply {
enum reject_stat rj_stat;
union {
struct {
- u_long low;
- u_long high;
+ unsigned long low;
+ unsigned long high;
} RJ_versions;
enum auth_stat RJ_why; /* why authentication did not work */
} ru;
@@ -139,10 +139,10 @@ struct reply_body {
* Body of an rpc request call.
*/
struct call_body {
- u_long cb_rpcvers; /* must be equal to two */
- u_long cb_prog;
- u_long cb_vers;
- u_long cb_proc;
+ unsigned long cb_rpcvers; /* must be equal to two */
+ unsigned long cb_prog;
+ unsigned long cb_vers;
+ unsigned long cb_proc;
struct opaque_auth cb_cred;
struct opaque_auth cb_verf; /* protocol specific - provided by client */
};
@@ -151,7 +151,7 @@ struct call_body {
* The rpc message
*/
struct rpc_msg {
- u_long rm_xid;
+ unsigned long rm_xid;
enum msg_type rm_direction;
union {
struct call_body RM_cmb;
diff --git a/mdk-stage1/dietlibc/include/rpc/svc.h b/mdk-stage1/dietlibc/include/rpc/svc.h
index 27c997dde..ec598ba79 100644
--- a/mdk-stage1/dietlibc/include/rpc/svc.h
+++ b/mdk-stage1/dietlibc/include/rpc/svc.h
@@ -75,18 +75,18 @@ enum xprt_stat {
typedef struct SVCXPRT SVCXPRT;
struct SVCXPRT {
int xp_sock;
- u_short xp_port; /* associated port number */
+ unsigned short xp_port; /* associated port number */
const struct xp_ops {
bool_t (*xp_recv) (SVCXPRT *__xprt, struct rpc_msg *__msg);
/* receive incoming requests */
enum xprt_stat (*xp_stat) (SVCXPRT *__xprt);
/* get transport status */
bool_t (*xp_getargs) (SVCXPRT *__xprt, xdrproc_t __xdr_args,
- caddr_t args_ptr); /* get arguments */
+ char* args_ptr); /* get arguments */
bool_t (*xp_reply) (SVCXPRT *__xprt, struct rpc_msg *__msg);
/* send reply */
bool_t (*xp_freeargs) (SVCXPRT *__xprt, xdrproc_t __xdr_args,
- caddr_t args_ptr);
+ char* args_ptr);
/* free mem allocated for args */
void (*xp_destroy) (SVCXPRT *__xprt);
/* destroy this struct */
@@ -94,8 +94,8 @@ struct SVCXPRT {
int xp_addrlen; /* length of remote address */
struct sockaddr_in xp_raddr; /* remote address */
struct opaque_auth xp_verf; /* raw response verifier */
- caddr_t xp_p1; /* private */
- caddr_t xp_p2; /* private */
+ char* xp_p1; /* private */
+ char* xp_p2; /* private */
char xp_pad [256]; /* padding, internal use */
};
@@ -110,7 +110,7 @@ struct SVCXPRT {
* SVCXPRT *xprt;
* struct rpc_msg *msg;
* xdrproc_t xargs;
- * caddr_t argsp;
+ * char* argsp;
*/
#define SVC_RECV(xprt, msg) \
(*(xprt)->xp_ops->xp_recv)((xprt), (msg))
@@ -151,7 +151,7 @@ struct svc_req {
rpcvers_t rq_vers; /* service protocol version */
rpcproc_t rq_proc; /* the desired procedure */
struct opaque_auth rq_cred; /* raw creds from the wire */
- caddr_t rq_clntcred; /* read only cooked cred */
+ char* rq_clntcred; /* read only cooked cred */
SVCXPRT *rq_xprt; /* associated transport */
};
@@ -227,7 +227,7 @@ extern void xprt_unregister (SVCXPRT *__xprt) __THROW;
*/
extern bool_t svc_sendreply (SVCXPRT *xprt, xdrproc_t __xdr_results,
- caddr_t __xdr_location) __THROW;
+ char* __xdr_location) __THROW;
extern void svcerr_decode (SVCXPRT *__xprt) __THROW;
@@ -294,20 +294,20 @@ extern SVCXPRT *svcraw_create (void) __THROW;
* Udp based rpc.
*/
extern SVCXPRT *svcudp_create (int __sock) __THROW;
-extern SVCXPRT *svcudp_bufcreate (int __sock, u_int __sendsz, u_int __recvsz)
+extern SVCXPRT *svcudp_bufcreate (int __sock, unsigned int __sendsz, unsigned int __recvsz)
__THROW;
/*
* Tcp based rpc.
*/
-extern SVCXPRT *svctcp_create (int __sock, u_int __sendsize, u_int __recvsize)
+extern SVCXPRT *svctcp_create (int __sock, unsigned int __sendsize, unsigned int __recvsize)
__THROW;
/*
* Unix based rpc.
*/
-extern SVCXPRT *svcunix_create (int __sock, u_int __sendsize, u_int __recvsize,
+extern SVCXPRT *svcunix_create (int __sock, unsigned int __sendsize, unsigned int __recvsize,
char *__path) __THROW;
diff --git a/mdk-stage1/dietlibc/include/rpc/types.h b/mdk-stage1/dietlibc/include/rpc/types.h
index e2e8402be..d4be65e38 100644
--- a/mdk-stage1/dietlibc/include/rpc/types.h
+++ b/mdk-stage1/dietlibc/include/rpc/types.h
@@ -52,10 +52,6 @@ typedef unsigned long rpcport_t;
# define TRUE (1)
#endif
-#ifndef NULL
-# define NULL 0
-#endif
-
#include <stdlib.h> /* For malloc decl. */
#define mem_alloc(bsize) malloc(bsize)
#define mem_free(ptr, bsize) free(ptr)
@@ -63,13 +59,23 @@ typedef unsigned long rpcport_t;
#ifndef makedev /* ie, we haven't already included it */
#include <sys/types.h>
#endif
+
+# ifndef __dietlibc_u_char_defined
+typedef char* caddr_t;
+typedef uint32_t u_long;
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+# define __dietlibc_u_char_defined
+#endif
+
#include <sys/time.h>
#include <sys/param.h>
#include <netinet/in.h>
#ifndef INADDR_LOOPBACK
-#define INADDR_LOOPBACK (u_long)0x7F000001
+#define INADDR_LOOPBACK 0x7F000001UL
#endif
#ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 64
diff --git a/mdk-stage1/dietlibc/include/rpc/xdr.h b/mdk-stage1/dietlibc/include/rpc/xdr.h
index ce092f085..590392070 100644
--- a/mdk-stage1/dietlibc/include/rpc/xdr.h
+++ b/mdk-stage1/dietlibc/include/rpc/xdr.h
@@ -118,13 +118,13 @@ struct XDR
/* get a long from underlying stream */
bool_t (*x_putlong) (XDR *__xdrs, const long *__lp);
/* put a long to " */
- bool_t (*x_getbytes) (XDR *__xdrs, caddr_t __addr, u_int __len);
+ bool_t (*x_getbytes) (XDR *__xdrs, char* __addr, unsigned int __len);
/* get some bytes from " */
- bool_t (*x_putbytes) (XDR *__xdrs, const char *__addr, u_int __len);
+ bool_t (*x_putbytes) (XDR *__xdrs, const char *__addr, unsigned int __len);
/* put some bytes to " */
- u_int (*x_getpostn) (const XDR *__xdrs);
+ unsigned int (*x_getpostn) (const XDR *__xdrs);
/* returns bytes off from beginning */
- bool_t (*x_setpostn) (XDR *__xdrs, u_int __pos);
+ bool_t (*x_setpostn) (XDR *__xdrs, unsigned int __pos);
/* lets you reposition the stream */
int32_t *(*x_inline) (XDR *__xdrs, int __len);
/* buf quick ptr to buffered data */
@@ -136,9 +136,9 @@ struct XDR
/* put a int to " */
}
*x_ops;
- caddr_t x_public; /* users' data */
- caddr_t x_private; /* pointer to private data */
- caddr_t x_base; /* private used for position info */
+ char* x_public; /* users' data */
+ char* x_private; /* pointer to private data */
+ char* x_base; /* private used for position info */
int x_handy; /* extra private word */
};
@@ -149,7 +149,7 @@ struct XDR
* The opaque pointer generally points to a structure of the data type
* to be decoded. If this pointer is 0, then the type routines should
* allocate dynamic storage of the appropriate size and return it.
- * bool_t (*xdrproc_t)(XDR *, caddr_t *);
+ * bool_t (*xdrproc_t)(XDR *, char* *);
*/
typedef bool_t (*xdrproc_t) (XDR *, void *,...);
@@ -160,9 +160,9 @@ typedef bool_t (*xdrproc_t) (XDR *, void *,...);
* XDR *xdrs;
* int32_t *int32p;
* long *longp;
- * caddr_t addr;
- * u_int len;
- * u_int pos;
+ * char* addr;
+ * unsigned int len;
+ * unsigned int pos;
*/
#define XDR_GETINT32(xdrs, int32p) \
(*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
@@ -263,17 +263,17 @@ struct xdr_discrim
* in the RPC code will not work on 64bit Solaris platforms !
*/
#define IXDR_GET_LONG(buf) \
- ((long)ntohl((u_long)*__extension__((u_int32_t*)(buf))++))
+ ((long)ntohl((unsigned long)*__extension__((uint32_t*)(buf))++))
#define IXDR_PUT_LONG(buf, v) \
- (*__extension__((u_int32_t*)(buf))++ = (long)htonl((u_long)(v)))
-#define IXDR_GET_U_LONG(buf) ((u_long)IXDR_GET_LONG(buf))
+ (*__extension__((uint32_t*)(buf))++ = (long)htonl((unsigned long)(v)))
+#define IXDR_GET_U_LONG(buf) ((unsigned long)IXDR_GET_LONG(buf))
#define IXDR_PUT_U_LONG(buf, v) IXDR_PUT_LONG(buf, (long)(v))
#define IXDR_GET_BOOL(buf) ((bool_t)IXDR_GET_LONG(buf))
#define IXDR_GET_ENUM(buf, t) ((t)IXDR_GET_LONG(buf))
#define IXDR_GET_SHORT(buf) ((short)IXDR_GET_LONG(buf))
-#define IXDR_GET_U_SHORT(buf) ((u_short)IXDR_GET_LONG(buf))
+#define IXDR_GET_U_SHORT(buf) ((unsigned short)IXDR_GET_LONG(buf))
#define IXDR_PUT_BOOL(buf, v) IXDR_PUT_LONG(buf, (long)(v))
#define IXDR_PUT_ENUM(buf, v) IXDR_PUT_LONG(buf, (long)(v))
@@ -288,15 +288,15 @@ struct xdr_discrim
*/
extern bool_t xdr_void (void) __THROW;
extern bool_t xdr_short (XDR *__xdrs, short *__sp) __THROW;
-extern bool_t xdr_u_short (XDR *__xdrs, u_short *__usp) __THROW;
+extern bool_t xdr_u_short (XDR *__xdrs, unsigned short *__usp) __THROW;
extern bool_t xdr_int (XDR *__xdrs, int *__ip) __THROW;
-extern bool_t xdr_u_int (XDR *__xdrs, u_int *__up) __THROW;
+extern bool_t xdr_u_int (XDR *__xdrs, unsigned int *__up) __THROW;
extern bool_t xdr_long (XDR *__xdrs, long *__lp) __THROW;
-extern bool_t xdr_u_long (XDR *__xdrs, u_long *__ulp) __THROW;
-extern bool_t xdr_hyper (XDR *__xdrs, __quad_t *__llp) __THROW;
-extern bool_t xdr_u_hyper (XDR *__xdrs, __u_quad_t *__ullp) __THROW;
-extern bool_t xdr_longlong_t (XDR *__xdrs, __quad_t *__llp) __THROW;
-extern bool_t xdr_u_longlong_t (XDR *__xdrs, __u_quad_t *__ullp) __THROW;
+extern bool_t xdr_u_long (XDR *__xdrs, unsigned long *__ulp) __THROW;
+extern bool_t xdr_hyper (XDR *__xdrs, int64_t *__llp) __THROW;
+extern bool_t xdr_u_hyper (XDR *__xdrs, uint64_t *__ullp) __THROW;
+extern bool_t xdr_longlong_t (XDR *__xdrs, int64_t *__llp) __THROW;
+extern bool_t xdr_u_longlong_t (XDR *__xdrs, uint64_t *__ullp) __THROW;
extern bool_t xdr_int8_t (XDR *__xdrs, int8_t *__ip) __THROW;
extern bool_t xdr_uint8_t (XDR *__xdrs, uint8_t *__up) __THROW;
extern bool_t xdr_int16_t (XDR *__xdrs, int16_t *__ip) __THROW;
@@ -307,28 +307,28 @@ extern bool_t xdr_int64_t (XDR *__xdrs, int64_t *__ip) __THROW;
extern bool_t xdr_uint64_t (XDR *__xdrs, uint64_t *__up) __THROW;
extern bool_t xdr_bool (XDR *__xdrs, bool_t *__bp) __THROW;
extern bool_t xdr_enum (XDR *__xdrs, enum_t *__ep) __THROW;
-extern bool_t xdr_array (XDR * _xdrs, caddr_t *__addrp, u_int *__sizep,
- u_int __maxsize, u_int __elsize, xdrproc_t __elproc)
+extern bool_t xdr_array (XDR * _xdrs, char* *__addrp, unsigned int *__sizep,
+ unsigned int __maxsize, unsigned int __elsize, xdrproc_t __elproc)
__THROW;
-extern bool_t xdr_bytes (XDR *__xdrs, char **__cpp, u_int *__sizep,
- u_int __maxsize) __THROW;
-extern bool_t xdr_opaque (XDR *__xdrs, caddr_t __cp, u_int __cnt) __THROW;
-extern bool_t xdr_string (XDR *__xdrs, char **__cpp, u_int __maxsize) __THROW;
+extern bool_t xdr_bytes (XDR *__xdrs, char **__cpp, unsigned int *__sizep,
+ unsigned int __maxsize) __THROW;
+extern bool_t xdr_opaque (XDR *__xdrs, char* __cp, unsigned int __cnt) __THROW;
+extern bool_t xdr_string (XDR *__xdrs, char **__cpp, unsigned int __maxsize) __THROW;
extern bool_t xdr_union (XDR *__xdrs, enum_t *__dscmp, char *__unp,
const struct xdr_discrim *__choices,
xdrproc_t dfault) __THROW;
extern bool_t xdr_char (XDR *__xdrs, char *__cp) __THROW;
-extern bool_t xdr_u_char (XDR *__xdrs, u_char *__cp) __THROW;
-extern bool_t xdr_vector (XDR *__xdrs, char *__basep, u_int __nelem,
- u_int __elemsize, xdrproc_t __xdr_elem) __THROW;
+extern bool_t xdr_u_char (XDR *__xdrs, unsigned char *__cp) __THROW;
+extern bool_t xdr_vector (XDR *__xdrs, char *__basep, unsigned int __nelem,
+ unsigned int __elemsize, xdrproc_t __xdr_elem) __THROW;
extern bool_t xdr_float (XDR *__xdrs, float *__fp) __THROW;
extern bool_t xdr_double (XDR *__xdrs, double *__dp) __THROW;
-extern bool_t xdr_reference (XDR *__xdrs, caddr_t *__xpp, u_int __size,
+extern bool_t xdr_reference (XDR *__xdrs, char* *__xpp, unsigned int __size,
xdrproc_t __proc) __THROW;
extern bool_t xdr_pointer (XDR *__xdrs, char **__objpp,
- u_int __obj_size, xdrproc_t __xdr_obj) __THROW;
+ unsigned int __obj_size, xdrproc_t __xdr_obj) __THROW;
extern bool_t xdr_wrapstring (XDR *__xdrs, char **__cpp) __THROW;
-extern u_long xdr_sizeof (xdrproc_t, void *) __THROW;
+extern unsigned long xdr_sizeof (xdrproc_t, void *) __THROW;
/*
* Common opaque bytes objects used by many rpc protocols;
@@ -337,7 +337,7 @@ extern u_long xdr_sizeof (xdrproc_t, void *) __THROW;
#define MAX_NETOBJ_SZ 1024
struct netobj
{
- u_int n_len;
+ unsigned int n_len;
char *n_bytes;
};
typedef struct netobj netobj;
@@ -349,16 +349,16 @@ extern bool_t xdr_netobj (XDR *__xdrs, struct netobj *__np) __THROW;
*/
/* XDR using memory buffers */
-extern void xdrmem_create (XDR *__xdrs, const caddr_t __addr,
- u_int __size, enum xdr_op __xop) __THROW;
+extern void xdrmem_create (XDR *__xdrs, const char* __addr,
+ unsigned int __size, enum xdr_op __xop) __THROW;
/* XDR using stdio library */
extern void xdrstdio_create (XDR *__xdrs, FILE *__file, enum xdr_op __xop)
__THROW;
/* XDR pseudo records for tcp */
-extern void xdrrec_create (XDR *__xdrs, u_int __sendsize,
- u_int __recvsize, caddr_t __tcp_handle,
+extern void xdrrec_create (XDR *__xdrs, unsigned int __sendsize,
+ unsigned int __recvsize, char* __tcp_handle,
int (*__readit) (char *, char *, int),
int (*__writeit) (char *, char *, int)) __THROW;
diff --git a/mdk-stage1/dietlibc/include/sched.h b/mdk-stage1/dietlibc/include/sched.h
index 5e4430d29..b6442c73b 100644
--- a/mdk-stage1/dietlibc/include/sched.h
+++ b/mdk-stage1/dietlibc/include/sched.h
@@ -4,13 +4,6 @@
#include <time.h>
#include <sys/types.h>
-#ifndef u16
-#define u16 __u16
-#endif
-
-/* till those F**KIN' kernel headers are sane: A COPY !
- * #include <linux/sched.h>
- * A COPY OF THE STUFF WE NEED.... *GRUMBLE* */
/*
* cloning flags:
@@ -26,7 +19,9 @@
#define CLONE_PARENT 0x00008000 /* set if we want to have the same parent as the cloner */
#define CLONE_THREAD 0x00010000 /* Same thread group? */
-#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREA)
+#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)
+
+int clone(void*(*fn)(void*),void*stack,int flags,void*arg);
/*
* Scheduling policies
@@ -42,7 +37,7 @@
#define SCHED_YIELD 0x10
struct sched_param {
- int sched_priority;
+ int sched_priority;
};
/* END OF COPY form kernel-header */
diff --git a/mdk-stage1/dietlibc/include/setjmp.h b/mdk-stage1/dietlibc/include/setjmp.h
index 66fc288f4..b591936ac 100644
--- a/mdk-stage1/dietlibc/include/setjmp.h
+++ b/mdk-stage1/dietlibc/include/setjmp.h
@@ -16,6 +16,42 @@ typedef int __jmp_buf[6];
# define JB_SIZE 24
#endif
+#ifdef __x86_64__
+#ifndef __ASSEMBLER__
+typedef long __jmp_buf[8];
+#endif
+# define JB_RBX 0
+# define JB_RBP 1
+# define JB_R12 2
+# define JB_R13 3
+# define JB_R14 4
+# define JB_R15 5
+# define JB_RSP 6
+# define JB_PC 7
+# define JB_SIZE 64
+#endif
+
+#ifdef __s390__
+#ifndef __ASSEMBLER__
+typedef struct {
+ long int gregs[10];
+ long fpregs[4];
+} __jmp_buf[1];
+#endif
+#define __JB_GPR6 0
+#define __JB_GPR7 1
+#define __JB_GPR8 2
+#define __JB_GPR9 3
+#define __JB_GPR10 4
+#define __JB_GPR11 5
+#define __JB_GPR12 6
+#define __JB_GPR13 7
+#define __JB_GPR14 8
+#define __JB_GPR15 9
+
+#define _JMPBUF_UNWINDS(jmpbuf, address) ((int) (address) < (jmpbuf)->gregs[__JB_GPR15])
+#endif
+
#ifdef __alpha__
#define JB_S0 0
#define JB_S1 1
@@ -55,18 +91,80 @@ typedef struct
#endif
#ifdef __sparc__
+#ifdef __arch64__
+
+#define MC_TSTATE 0
+#define MC_PC 1
+#define MC_NPC 2
+#define MC_Y 3
+#define MC_G1 4
+#define MC_G2 5
+#define MC_G3 6
+#define MC_G4 7
+#define MC_G5 8
+#define MC_G6 9
+#define MC_G7 10
+#define MC_O0 11
+#define MC_O1 12
+#define MC_O2 13
+#define MC_O3 14
+#define MC_O4 15
+#define MC_O5 16
+#define MC_O6 17
+#define MC_O7 18
+#define MC_NGREG 19
+
+#define FLAG_SAVEMASK 512
+#ifndef __ASSEMBLER__
+#include <signal.h>
+
+/* this equal to ucontext from "include/asm-sparc64/uctx.h" */
+typedef struct __sparc64_jmp_buf {
+ struct __sparc64_jmp_buf *uc_link;
+ unsigned long uc_flags;
+ sigset_t uc_sigmask;
+ struct {
+ unsigned long mc_gregs[MC_NGREG];
+ unsigned long mc_fp;
+ unsigned long mc_i7;
+ struct {
+ union {
+ unsigned int sregs[32];
+ unsigned long dregs[32];
+ long double qregs[16];
+ } mcfpu_fregs;
+ unsigned long mcfpu_fsr;
+ unsigned long mcfpu_fprs;
+ unsigned long mcfpu_gsr;
+ struct {
+ unsigned long *mcfq_addr;
+ unsigned int mcfq_insn;
+ } *mcfpu_fq;
+ unsigned char mcfpu_qcnt;
+ unsigned char mcfpu_qentsz;
+ unsigned char mcfpu_enab;
+ } mc_fpregs;
+ } uc_mcontext;
+} __jmp_buf[1];
+
+#endif
+
+#else
+
#define JB_SP 0
#define JB_FP 1
#define JB_PC 2
#ifndef __ASSEMBLER__
typedef int __jmp_buf[3];
#endif
+
+#endif
#endif
#ifdef __arm__
#define __JMP_BUF_SP 8
#ifndef __ASSEMBLER__
-typedef int __jmp_buf[10];
+typedef int __jmp_buf[24];
#endif
#endif
@@ -83,39 +181,49 @@ typedef long int __jmp_buf[58];
#endif
#endif
+#ifdef __hppa__
#ifndef __ASSEMBLER__
+typedef double __jmp_buf[21];
+#endif
+#endif
-typedef int sig_atomic_t;
-#define __sig_atomic_t sig_atomic_t
+#ifdef __ia64__
+#ifndef __ASSEMBLER__
+typedef long __jmp_buf[70] __attribute__ ((aligned(16)));
+#endif
+#endif
-# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
-typedef struct
- {
- unsigned long int __val[_SIGSET_NWORDS];
- } __sigset_t;
+#ifndef __ASSEMBLER__
+#include <signal.h>
+
+/* typedef int sig_atomic_t; */
+#define __sig_atomic_t sig_atomic_t
/* Calling environment, plus possibly a saved signal mask. */
-typedef struct __jmp_buf_tag /* C++ doesn't like tagless structs. */
- {
- /* NOTE: The machine-dependent definitions of `__sigsetjmp'
- assume that a `jmp_buf' begins with a `__jmp_buf'.
- Do not move this member or add others before it. */
- __jmp_buf __jmpbuf; /* Calling environment. */
- int __mask_was_saved; /* Saved the signal mask? */
- __sigset_t __saved_mask; /* Saved signal mask. */
- } jmp_buf[1];
+typedef struct __jmp_buf_tag { /* C++ doesn't like tagless structs. */
+/* NOTE: The machine-dependent definitions of `__sigsetjmp'
+ * assume that a `jmp_buf' begins with a `__jmp_buf'.
+ * Do not move this member or add others before it. */
+ __jmp_buf __jmpbuf; /* Calling environment. */
+ int __mask_was_saved; /* Saved the signal mask? */
+ sigset_t __saved_mask; /* Saved signal mask. */
+} jmp_buf[1];
-extern int __sigsetjmp (jmp_buf __env, int __savemask) __THROW;
+extern int __sigsetjmp(jmp_buf __env,int __savemask) __THROW;
-extern void longjmp (jmp_buf __env, int __val)
- __THROW __attribute__ ((__noreturn__));
+extern void longjmp(jmp_buf __env,int __val)
+ __THROW __attribute__((__noreturn__));
typedef jmp_buf sigjmp_buf;
-extern void siglongjmp (sigjmp_buf __env, int __val)
- __THROW __attribute__ ((__noreturn__));
+extern void siglongjmp(sigjmp_buf __env,int __val)
+ __THROW __attribute__((__noreturn__));
+#ifdef _BSD_SOURCE
+#define setjmp(env) __sigsetjmp(env,1)
+#else
#define setjmp(env) __sigsetjmp(env,0)
+#endif
#define sigsetjmp(a,b) __sigsetjmp(a,b)
#endif
diff --git a/mdk-stage1/dietlibc/include/shadow.h b/mdk-stage1/dietlibc/include/shadow.h
index 4d6341af1..1c84de9e6 100644
--- a/mdk-stage1/dietlibc/include/shadow.h
+++ b/mdk-stage1/dietlibc/include/shadow.h
@@ -19,6 +19,12 @@ struct spwd {
extern struct spwd *getspent(void) __THROW;
extern void setspent(void) __THROW;
extern void endspent(void) __THROW;
-extern struct spwd *getspnam (__const char *__name) __THROW;
+extern struct spwd *getspnam (const char *__name) __THROW;
+
+int getspent_r(struct spwd *res, char *buf, size_t buflen,
+ struct spwd **res_sig) __THROW;
+int getspnam_r(const char* name,
+ struct spwd *res, char *buf, size_t buflen,
+ struct spwd **res_sig) __THROW;
#endif /* _SHADOW_H */
diff --git a/mdk-stage1/dietlibc/include/signal.h b/mdk-stage1/dietlibc/include/signal.h
index 9ed93fe83..fdc0518cf 100644
--- a/mdk-stage1/dietlibc/include/signal.h
+++ b/mdk-stage1/dietlibc/include/signal.h
@@ -5,31 +5,496 @@
#define __WANT_POSIX1B_SIGNALS__
-#include <linux/types.h>
-#include <linux/signal.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+#define NSIG 32
+
+#ifdef __mips__
+#define _NSIG 128
+#else
+#define _NSIG 64
+#endif
+
+#define SIGHUP 1
+#define SIGINT 2
+#define SIGQUIT 3
+#define SIGILL 4
+#define SIGTRAP 5
+#define SIGABRT 6
+#define SIGIOT 6
+#define SIGFPE 8
+#define SIGKILL 9
+#define SIGSEGV 11
+#define SIGPIPE 13
+#define SIGALRM 14
+#define SIGTERM 15
+#define SIGUNUSED 31
+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__arm__) \
+ || defined(__s390__) || defined(__ia64__)
+#define SIGBUS 7
+#define SIGUSR1 10
+#define SIGUSR2 12
+#define SIGSTKFLT 16
+#define SIGCHLD 17
+#define SIGCONT 18
+#define SIGSTOP 19
+#define SIGTSTP 20
+#define SIGTTIN 21
+#define SIGTTOU 22
+#define SIGURG 23
+#define SIGXCPU 24
+#define SIGXFSZ 25
+#define SIGVTALRM 26
+#define SIGPROF 27
+#define SIGWINCH 28
+#define SIGIO 29
+#define SIGPWR 30
+#define SIGSYS 31
+#elif defined(__alpha__) || defined(__sparc__)
+#define SIGEMT 7
+#define SIGBUS 10
+#define SIGSYS 12
+#define SIGURG 16
+#define SIGSTOP 17
+#define SIGTSTP 18
+#define SIGCONT 19
+#define SIGCHLD 20
+#define SIGTTIN 21
+#define SIGTTOU 22
+#define SIGIO 23
+#define SIGXCPU 24
+#define SIGXFSZ 25
+#define SIGVTALRM 26
+#define SIGPROF 27
+#define SIGWINCH 28
+#define SIGPWR 29
+#define SIGUSR1 30
+#define SIGUSR2 31
+#if defined(__alpha__)
+#define SIGINFO SIGPWR
+#endif
+#elif defined(__mips__)
+#define SIGEMT 7
+#define SIGBUS 10
+#define SIGSYS 12
+#define SIGUSR1 16
+#define SIGUSR2 17
+#define SIGCHLD 18
+#define SIGPWR 19
+#define SIGWINCH 20
+#define SIGURG 21
+#define SIGIO 22
+#define SIGSTOP 23
+#define SIGTSTP 24
+#define SIGCONT 25
+#define SIGTTIN 26
+#define SIGTTOU 27
+#define SIGVTALRM 28
+#define SIGPROF 29
+#define SIGXCPU 30
+#define SIGXFSZ 31
+#elif defined(__hppa__)
+#define SIGEMT 7
+#define SIGBUS 10
+#define SIGSYS 12
+#define SIGUSR1 16
+#define SIGUSR2 17
+#define SIGCHLD 18
+#define SIGPWR 19
+#define SIGVTALRM 20
+#define SIGPROF 21
+#define SIGIO 22
+#define SIGWINCH 23
+#define SIGSTOP 24
+#define SIGTSTP 25
+#define SIGCONT 26
+#define SIGTTIN 27
+#define SIGTTOU 28
+#define SIGURG 29
+#define SIGLOST 30
+#define SIGUNUSED 31
+#define SIGRESERVE SIGUNUSE
+#define SIGXCPU 33
+#define SIGXFSZ 34
+#define SIGSTKFLT 36
+
+#else
+#error signal layout not yet known
+#endif
+
+#define SIGCLD SIGCHLD
+#define SIGLOST SIGPWR
+#define SIGPOLL SIGIO
+
+/* These should not be considered constants from userland. */
+#ifdef __hppa__
+#define SIGRTMIN 37
+#else
+#define SIGRTMIN 32
+#endif
+#define SIGRTMAX (_NSIG-1)
+
+/* SA_FLAGS values: */
+#if defined(__alpha__)
+#define SA_ONSTACK 0x00000001
+#define SA_RESTART 0x00000002
+#define SA_NOCLDSTOP 0x00000004
+#define SA_NODEFER 0x00000008
+#define SA_RESETHAND 0x00000010
+#define SA_NOCLDWAIT 0x00000020 /* not supported yet */
+#define SA_SIGINFO 0x00000040
+#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
+#elif defined(__hppa__)
+#define SA_ONSTACK 0x00000001
+#define SA_RESETHAND 0x00000004
+#define SA_NOCLDSTOP 0x00000008
+#define SA_SIGINFO 0x00000010
+#define SA_NODEFER 0x00000020
+#define SA_RESTART 0x00000040
+#define SA_NOCLDWAIT 0x00000080 /* not supported yet */
+#define _SA_SIGGFAULT 0x00000100 /* HPUX */
+#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
+#define SA_RESTORER 0x04000000 /* obsolete -- ignored */
+#elif defined (__sparc__)
+#define SV_SSTACK 1 /* This signal handler should use sig-stack */
+#define SV_INTR 2 /* Sig return should not restart system call */
+#define SV_RESET 4 /* Set handler to SIG_DFL upon taken signal */
+#define SV_IGNCHILD 8 /* Do not send SIGCHLD */
+
+#define SA_NOCLDSTOP SV_IGNCHILD
+#define SA_STACK SV_SSTACK
+#define SA_ONSTACK SV_SSTACK
+#define SA_RESTART SV_INTR
+#define SA_RESETHAND SV_RESET
+#define SA_INTERRUPT 0x10
+#define SA_NODEFER 0x20
+#define SA_SHIRQ 0x40
+#define SA_NOCLDWAIT 0x100 /* not supported yet */
+#define SA_SIGINFO 0x200
+#else
+#if defined (__mips__)
+#define SA_NOCLDSTOP 0x00000001
+#define SA_SIGINFO 0x00000008
+#define SA_NOCLDWAIT 0x00010000 /* Not supported yet */
+#else
+#define SA_NOCLDSTOP 0x00000001
+#define SA_NOCLDWAIT 0x00000002 /* not supported yet */
+#define SA_SIGINFO 0x00000004
+#endif
+#if defined(__arm__)
+#define SA_THIRTYTWO 0x02000000
+#endif
+#define SA_RESTORER 0x04000000
+#define SA_ONSTACK 0x08000000
+#define SA_RESTART 0x10000000
+#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
+#define SA_NODEFER 0x40000000
+#define SA_RESETHAND 0x80000000
+#endif
+
+/* ugh, historic Linux legacy, for gpm :-( */
+#define SA_NOMASK SA_NODEFER
+#define SA_ONESHOT SA_RESETHAND
+
+/* sigaltstack controls */
+#define SS_ONSTACK 1
+#define SS_DISABLE 2
+
+#define MINSIGSTKSZ 2048
+#define SIGSTKSZ 8192
+
+#if defined(__alpha__) || defined(__mips__)
+#define SIG_BLOCK 1 /* for blocking signals */
+#define SIG_UNBLOCK 2 /* for unblocking signals */
+#define SIG_SETMASK 3 /* for setting the signal mask */
+#else
+#define SIG_BLOCK 0 /* for blocking signals */
+#define SIG_UNBLOCK 1 /* for unblocking signals */
+#define SIG_SETMASK 2 /* for setting the signal mask */
+#endif
+
+typedef int sig_atomic_t;
typedef void (*sighandler_t)(int);
+#ifdef _BSD_SOURCE
+typedef sighandler_t sig_t;
+#endif
+
+#define SIG_DFL ((sighandler_t)0) /* default signal handling */
+#define SIG_IGN ((sighandler_t)1) /* ignore signal */
+#define SIG_ERR ((sighandler_t)-1) /* error return from signal */
+
+typedef union sigval {
+ int sival_int;
+ void *sival_ptr;
+} sigval_t;
+
+#define SI_MAX_SIZE 128
+#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
+
+typedef struct siginfo {
+ int si_signo;
+ int si_errno;
+ int si_code;
+ union {
+ int _pad[SI_PAD_SIZE];
+ /* kill() */
+ struct {
+ pid_t _pid; /* sender's pid */
+ uid_t _uid; /* sender's uid */
+ } _kill;
+ /* POSIX.1b timers */
+ struct {
+ unsigned int _timer1;
+ unsigned int _timer2;
+ } _timer;
+ /* POSIX.1b signals */
+ struct {
+ pid_t _pid; /* sender's pid */
+ uid_t _uid; /* sender's uid */
+ sigval_t _sigval;
+ } _rt;
+ /* SIGCHLD */
+ struct {
+ pid_t _pid; /* which child */
+ uid_t _uid; /* sender's uid */
+ int _status; /* exit code */
+ clock_t _utime;
+ clock_t _stime;
+ } _sigchld;
+ /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
+ struct {
+ void *_addr; /* faulting insn/memory ref. */
+ } _sigfault;
+ /* SIGPOLL */
+ struct {
+ int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
+ int _fd;
+ } _sigpoll;
+ } _sifields;
+} siginfo_t;
+
+/*
+ * How these fields are to be accessed.
+ */
+#define si_pid _sifields._kill._pid
+#define si_uid _sifields._kill._uid
+#define si_status _sifields._sigchld._status
+#define si_utime _sifields._sigchld._utime
+#define si_stime _sifields._sigchld._stime
+#define si_value _sifields._rt._sigval
+#define si_int _sifields._rt._sigval.sival_int
+#define si_ptr _sifields._rt._sigval.sival_ptr
+#define si_addr _sifields._sigfault._addr
+#define si_band _sifields._sigpoll._band
+#define si_fd _sifields._sigpoll._fd
+
+/* Values for `si_code'. Positive values are reserved for kernel-generated
+ signals. */
+enum {
+ SI_ASYNCNL = -6, /* Sent by asynch name lookup completion. */
+# define SI_ASYNCNL SI_ASYNCNL
+ SI_SIGIO, /* Sent by queued SIGIO. */
+# define SI_SIGIO SI_SIGIO
+ SI_ASYNCIO, /* Sent by AIO completion. */
+# define SI_ASYNCIO SI_ASYNCIO
+ SI_MESGQ, /* Sent by real time mesq state change. */
+# define SI_MESGQ SI_MESGQ
+ SI_TIMER, /* Sent by timer expiration. */
+# define SI_TIMER SI_TIMER
+ SI_QUEUE, /* Sent by sigqueue. */
+# define SI_QUEUE SI_QUEUE
+ SI_USER, /* Sent by kill, sigsend, raise. */
+# define SI_USER SI_USER
+ SI_KERNEL = 0x80 /* Send by kernel. */
+#define SI_KERNEL SI_KERNEL
+};
+
+
+/* `si_code' values for SIGILL signal. */
+enum {
+ ILL_ILLOPC = 1, /* Illegal opcode. */
+# define ILL_ILLOPC ILL_ILLOPC
+ ILL_ILLOPN, /* Illegal operand. */
+# define ILL_ILLOPN ILL_ILLOPN
+ ILL_ILLADR, /* Illegal addressing mode. */
+# define ILL_ILLADR ILL_ILLADR
+ ILL_ILLTRP, /* Illegal trap. */
+# define ILL_ILLTRP ILL_ILLTRP
+ ILL_PRVOPC, /* Privileged opcode. */
+# define ILL_PRVOPC ILL_PRVOPC
+ ILL_PRVREG, /* Privileged register. */
+# define ILL_PRVREG ILL_PRVREG
+ ILL_COPROC, /* Coprocessor error. */
+# define ILL_COPROC ILL_COPROC
+ ILL_BADSTK /* Internal stack error. */
+# define ILL_BADSTK ILL_BADSTK
+};
+
+/* `si_code' values for SIGFPE signal. */
+enum {
+ FPE_INTDIV = 1, /* Integer divide by zero. */
+# define FPE_INTDIV FPE_INTDIV
+ FPE_INTOVF, /* Integer overflow. */
+# define FPE_INTOVF FPE_INTOVF
+ FPE_FLTDIV, /* Floating point divide by zero. */
+# define FPE_FLTDIV FPE_FLTDIV
+ FPE_FLTOVF, /* Floating point overflow. */
+# define FPE_FLTOVF FPE_FLTOVF
+ FPE_FLTUND, /* Floating point underflow. */
+# define FPE_FLTUND FPE_FLTUND
+ FPE_FLTRES, /* Floating point inexact result. */
+# define FPE_FLTRES FPE_FLTRES
+ FPE_FLTINV, /* Floating point invalid operation. */
+# define FPE_FLTINV FPE_FLTINV
+ FPE_FLTSUB /* Subscript out of range. */
+# define FPE_FLTSUB FPE_FLTSUB
+};
+
+/* `si_code' values for SIGSEGV signal. */
+enum {
+ SEGV_MAPERR = 1, /* Address not mapped to object. */
+# define SEGV_MAPERR SEGV_MAPERR
+ SEGV_ACCERR /* Invalid permissions for mapped object. */
+# define SEGV_ACCERR SEGV_ACCERR
+};
+
+/* `si_code' values for SIGBUS signal. */
+enum {
+ BUS_ADRALN = 1, /* Invalid address alignment. */
+# define BUS_ADRALN BUS_ADRALN
+ BUS_ADRERR, /* Non-existant physical address. */
+# define BUS_ADRERR BUS_ADRERR
+ BUS_OBJERR /* Object specific hardware error. */
+# define BUS_OBJERR BUS_OBJERR
+};
+
+/* `si_code' values for SIGTRAP signal. */
+enum {
+ TRAP_BRKPT = 1, /* Process breakpoint. */
+# define TRAP_BRKPT TRAP_BRKPT
+ TRAP_TRACE /* Process trace trap. */
+# define TRAP_TRACE TRAP_TRACE
+};
+
+/* `si_code' values for SIGCHLD signal. */
+enum {
+ CLD_EXITED = 1, /* Child has exited. */
+# define CLD_EXITED CLD_EXITED
+ CLD_KILLED, /* Child was killed. */
+# define CLD_KILLED CLD_KILLED
+ CLD_DUMPED, /* Child terminated abnormally. */
+# define CLD_DUMPED CLD_DUMPED
+ CLD_TRAPPED, /* Traced child has trapped. */
+# define CLD_TRAPPED CLD_TRAPPED
+ CLD_STOPPED, /* Child has stopped. */
+# define CLD_STOPPED CLD_STOPPED
+ CLD_CONTINUED /* Stopped child has continued. */
+# define CLD_CONTINUED CLD_CONTINUED
+};
+
+/* `si_code' values for SIGPOLL signal. */
+enum {
+ POLL_IN = 1, /* Data input available. */
+# define POLL_IN POLL_IN
+ POLL_OUT, /* Output buffers available. */
+# define POLL_OUT POLL_OUT
+ POLL_MSG, /* Input message available. */
+# define POLL_MSG POLL_MSG
+ POLL_ERR, /* I/O error. */
+# define POLL_ERR POLL_ERR
+ POLL_PRI, /* High priority input available. */
+# define POLL_PRI POLL_PRI
+ POLL_HUP /* Device disconnected. */
+# define POLL_HUP POLL_HUP
+};
+
+#define _NSIG_WORDS ((_NSIG/sizeof(long))>>3)
+
+typedef struct {
+ unsigned long sig[_NSIG_WORDS];
+} sigset_t;
+
+struct sigaction {
+#if defined(__alpha__)
+ union {
+ sighandler_t _sa_handler;
+ void (*_sa_sigaction)(int, siginfo_t*, void*);
+ } _u;
+ sigset_t sa_mask;
+ unsigned long sa_flags;
+#elif defined(__ia64__) || defined(__hppa__)
+ union {
+ sighandler_t _sa_handler;
+ void (*_sa_sigaction)(int, siginfo_t*, void*);
+ } _u;
+ unsigned long sa_flags;
+ sigset_t sa_mask;
+#elif defined(__mips__)
+ unsigned long sa_flags;
+ union {
+ sighandler_t _sa_handler;
+ void (*_sa_sigaction)(int, siginfo_t*, void*);
+ } _u;
+ sigset_t sa_mask;
+ void (*sa_restorer)(void);
+ int sa_resv[1];
+#else /* arm, i386, ppc, s390, sparc, saprc64, x86_64 */
+ union {
+ sighandler_t _sa_handler;
+ void (*_sa_sigaction)(int, siginfo_t*, void*);
+ } _u;
+ unsigned long sa_flags;
+ void (*sa_restorer)(void);
+ sigset_t sa_mask;
+#endif
+};
+
+#define sa_handler _u._sa_handler
+#define sa_sigaction _u._sa_sigaction
+
+typedef struct sigaltstack {
+#if defined(__mips__)
+ void *ss_sp;
+ size_t ss_size;
+ int ss_flags;
+#else
+ void *ss_sp;
+ int ss_flags;
+ size_t ss_size;
+#endif
+} stack_t;
+
+int sigaltstack(const struct sigaltstack *newstack, struct sigaltstack *oldstack) __THROW;
+
int sigemptyset(sigset_t *set) __THROW;
int sigfillset(sigset_t *set) __THROW;
int sigaddset(sigset_t *set, int signum) __THROW;
int sigdelset(sigset_t *set, int signum) __THROW;
+int sigismember(const sigset_t *set, int signo) __THROW;
+int sigsuspend(const sigset_t *mask) __THROW;
+int sigpending(sigset_t *set) __THROW;
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset) __THROW;
+
+
sighandler_t signal(int signum, sighandler_t action);
+
int raise (int sig) __THROW;
+int kill(pid_t pid, int sig) __THROW;
+
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) __THROW;
-int sigaltstack(const struct sigaltstack *newstack, struct sigaltstack *oldstack) __THROW;
-#ifndef SIGCLD
-#define SIGCLD SIGCHLD
-#endif
+int sigtimedwait(const sigset_t *mask, siginfo_t *info, const struct timespec *ts) __THROW;
+int sigqueueinfo(int pid, int sig, siginfo_t *info) __THROW;
+int siginterrupt(int sig, int flag) __THROW;
-extern const char *const sys_siglist[];
+int killpg(int pgrp, int sig) __THROW;
-typedef __sighandler_t sig_t;
+/* 0 is OK ! kernel puts in MAX_THREAD_TIMEOUT :) */
+#define sigwaitinfo(m, i) sigtimedwait((m),(i),0)
-#ifndef NSIG
-#define NSIG _NSIG
-#endif
+extern const char *const sys_siglist[];
#endif
diff --git a/mdk-stage1/dietlibc/include/stdint.h b/mdk-stage1/dietlibc/include/stdint.h
index d287e6794..bbc7ddf0c 100644
--- a/mdk-stage1/dietlibc/include/stdint.h
+++ b/mdk-stage1/dietlibc/include/stdint.h
@@ -1,6 +1,30 @@
#ifndef _STDINT_H
#define _STDINT_H
-#include <sys/types.h>
+#include <inttypes.h>
+
+typedef int8_t int_least8_t;
+typedef int16_t int_least16_t;
+typedef int32_t int_least32_t;
+typedef uint8_t uint_least8_t;
+typedef uint16_t uint_least16_t;
+typedef uint32_t uint_least32_t;
+
+#ifndef __STRICT_ANSI__
+typedef int64_t int_least64_t;
+typedef uint64_t uint_least64_t;
+#endif
+
+typedef signed char int_fast8_t;
+typedef signed long int int_fast16_t;
+typedef signed long int int_fast32_t;
+typedef signed long long int int_fast64_t;
+
+typedef unsigned char uint_fast8_t;
+typedef unsigned long int uint_fast16_t;
+typedef unsigned long int uint_fast32_t;
+typedef unsigned long long int uint_fast64_t;
+
+#include <endian.h>
#endif
diff --git a/mdk-stage1/dietlibc/include/stdio.h b/mdk-stage1/dietlibc/include/stdio.h
index 92d9dc0cb..04783c3b8 100644
--- a/mdk-stage1/dietlibc/include/stdio.h
+++ b/mdk-stage1/dietlibc/include/stdio.h
@@ -3,6 +3,7 @@
#include <sys/cdefs.h>
#include <sys/types.h>
+#include <sys/stat.h>
typedef struct __stdio_file FILE;
@@ -10,28 +11,32 @@ FILE *fopen (const char *path, const char *mode) __THROW;
FILE *fdopen (int fildes, const char *mode) __THROW;
FILE *freopen (const char *path, const char *mode, FILE *stream) __THROW;
-int printf(const char *format, ...) __THROW;
-int fprintf(FILE *stream, const char *format, ...) __THROW;
-int sprintf(char *str, const char *format, ...) __THROW;
-int snprintf(char *str, size_t size, const char *format, ...) __THROW;
-int asprintf(char **ptr, const char* format, ...) __THROW;
+int printf(const char *format, ...) __THROW __attribute__((format(printf,1,2)));
+int fprintf(FILE *stream, const char *format, ...) __THROW __attribute__((format(printf,2,3)));
+int sprintf(char *str, const char *format, ...) __THROW __attribute__((format(printf,2,3)));
+int snprintf(char *str, size_t size, const char *format, ...) __THROW __attribute__((format(printf,3,4)));
+int asprintf(char **ptr, const char* format, ...) __THROW __attribute_malloc__ __attribute__((format(printf,2,3)));
-int scanf( const char *format, ...) __THROW;
-int fscanf( FILE *stream, const char *format, ...) __THROW;
-int sscanf( const char *str, const char *format, ...) __THROW;
+int scanf(const char *format, ...) __THROW __attribute__((format(scanf,1,2)));
+int fscanf(FILE *stream, const char *format, ...) __THROW __attribute__((format(scanf,2,3)));
+int sscanf(const char *str, const char *format, ...) __THROW __attribute__((format(scanf,2,3)));
#include <stdarg.h>
-int vprintf(const char *format, va_list ap) __THROW;
-int vfprintf(FILE *stream, const char *format, va_list ap) __THROW;
-int vsprintf(char *str, const char *format, va_list ap) __THROW;
-int vsnprintf(char *str, size_t size, const char *format, va_list ap) __THROW;
+int vprintf(const char *format, va_list ap) __THROW __attribute__((format(printf,1,0)));
+int vfprintf(FILE *stream, const char *format, va_list ap) __THROW __attribute__((format(printf,2,0)));
+int vsprintf(char *str, const char *format, va_list ap) __THROW __attribute__((format(printf,2,0)));
+int vsnprintf(char *str, size_t size, const char *format, va_list ap) __THROW __attribute__((format(printf,3,0)));
-int vscanf( const char *format, va_list ap) __THROW;
-int vsscanf( const char *str, const char *format, va_list ap) __THROW;
-int vfscanf( FILE *stream, const char *format, va_list ap) __THROW;
+int fdprintf(int fd, const char *format, ...) __THROW __attribute__((format(printf,2,3)));
+int vfdprintf(int fd, const char *format, va_list ap) __THROW __attribute__((format(printf,2,0)));
+
+int vscanf(const char *format, va_list ap) __THROW __attribute__((format(scanf,1,0)));
+int vsscanf(const char *str, const char *format, va_list ap) __THROW __attribute__((format(scanf,2,0)));
+int vfscanf(FILE *stream, const char *format, va_list ap) __THROW __attribute__((format(scanf,2,0)));
int fgetc(FILE *stream) __THROW;
+int fgetc_unlocked(FILE *stream) __THROW;
char *fgets(char *s, int size, FILE *stream) __THROW;
int getc(FILE *stream) __THROW;
int getchar(void) __THROW;
@@ -39,34 +44,53 @@ char *gets(char *s) __THROW;
int ungetc(int c, FILE *stream) __THROW;
int fputc(int c, FILE *stream) __THROW;
+int fputc_unlocked(int c, FILE *stream) __THROW;
int fputs(const char *s, FILE *stream) __THROW;
+int putchar(int c) __THROW;
+
#define putc(c,stream) fputc(c,stream)
#define putchar(c) fputc(c,stdout)
#define getchar() fgetc(stdin)
#define getc(stream) fgetc(stream)
+#define getc_unlocked(stream) fgetc_unlocked(stream)
int puts(const char *s) __THROW;
-long fseek( FILE *stream, long offset, int whence) __THROW;
-long ftell( FILE *stream) __THROW;
-void rewind( FILE *stream) __THROW;
-int fgetpos( FILE *stream, fpos_t *pos) __THROW;
-int fsetpos( FILE *stream, fpos_t *pos) __THROW;
+int fseek(FILE *stream, long offset, int whence) __THROW;
+long ftell(FILE *stream) __THROW;
+int fseeko(FILE *stream, off_t offset, int whence) __THROW;
+off_t ftello(FILE *stream) __THROW;
-size_t fread( void *ptr, size_t size, size_t nmemb, FILE *stream) __THROW;
+#ifndef __NO_STAT64
+int fseeko64(FILE *stream, loff_t offset, int whence) __THROW;
+loff_t ftello64(FILE *stream) __THROW;
-size_t fwrite( const void *ptr, size_t size, size_t nmemb, FILE *stream) __THROW;
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+#define off_t loff_t
+#define fseeko(foo,bar,baz) fseeko64(foo,bar,baz)
+#define ftello(foo) ftello64(foo)
+#endif
+
+#endif
+
+void rewind(FILE *stream) __THROW;
+int fgetpos(FILE *stream, fpos_t *pos) __THROW;
+int fsetpos(FILE *stream, fpos_t *pos) __THROW;
+
+size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) __THROW;
+
+size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) __THROW;
int fflush(FILE *stream) __THROW;
int fclose(FILE *stream) __THROW;
-void clearerr(FILE *stream) __THROW;
int feof (FILE *stream) __THROW;
-int ferror( FILE *stream) __THROW;
-int fileno( FILE *stream) __THROW;
+int ferror(FILE *stream) __THROW;
+int fileno(FILE *stream) __THROW;
+void clearerr(FILE *stream) __THROW;
int remove(const char *pathname) __THROW;
@@ -74,7 +98,7 @@ void perror(const char *s) __THROW;
extern FILE *stdin, *stdout, *stderr;
-#define EOF (int)(-1)
+#define EOF (-1)
#define BUFSIZ 128
@@ -91,7 +115,33 @@ int setvbuf(FILE *stream, char *buf, int mode , size_t size) __THROW;
FILE *popen(const char *command, const char *type) __THROW;
int pclose(FILE *stream) __THROW;
-#define getc_unlocked(stream) getc(stream)
-#define putc_unlocked(c,stream) putc(c,stream)
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+#endif
+
+#define L_tmpnam 128
+#define P_tmpdir "/tmp"
+char* tmpnam(char *s) __THROW; /* DO NOT USE!!! Use mkstemp instead! */
+char* tempnam(char* dir,char* _template); /* dito */
+FILE* tmpfile(void) __THROW;
+
+#define FILENAME_MAX 4095
+#define FOPEN_MAX 16
+
+#ifdef _POSIX_SOURCE
+#define L_ctermid 9
+#define L_cuserid 9
+#endif
+
+void flockfile(FILE* f) __THROW;
+void funlockfile(FILE* f) __THROW;
+
+#ifdef _GNU_SOURCE
+ssize_t getline(char **lineptr, size_t *n, FILE *stream);
+ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
+#define getline(lineptr,n,stream) getdelim(lineptr,n,'\n',stream)
+#endif
#endif
diff --git a/mdk-stage1/dietlibc/include/stdlib.h b/mdk-stage1/dietlibc/include/stdlib.h
index 6a13a48ff..5824a6ffa 100644
--- a/mdk-stage1/dietlibc/include/stdlib.h
+++ b/mdk-stage1/dietlibc/include/stdlib.h
@@ -1,32 +1,38 @@
#ifndef _STDLIB_H
#define _STDLIB_H
+#ifndef __ASSEMBLER__
+
#include <sys/cdefs.h>
#include <sys/types.h>
+#include <alloca.h>
-#define __LIBC_DIETLIBC__
-
-void *calloc(size_t nmemb, size_t size) __THROW;
-void *malloc(size_t size) __THROW;
+void *calloc(size_t nmemb, size_t size) __attribute_malloc__ __THROW;
+void *malloc(size_t size) __attribute_malloc__ __THROW;
void free(void *ptr) __THROW;
-void *realloc(void *ptr, size_t size) __THROW;
+void *realloc(void *ptr, size_t size) __attribute_malloc__ __THROW;
char *getenv(const char *name) __THROW __pure__;
int putenv(const char *string) __THROW;
int setenv(const char *name, const char *value, int overwrite) __THROW;
void unsetenv(const char *name) __THROW;
+int system (const char * string) __THROW;
int atexit(void (*function)(void)) __THROW;
+float strtof(const char *nptr, char **endptr) __THROW;
double strtod(const char *nptr, char **endptr) __THROW;
+long double strtold(const char *nptr, char **endptr) __THROW;
long int strtol(const char *nptr, char **endptr, int base) __THROW;
unsigned long int strtoul(const char *nptr, char **endptr, int base) __THROW;
-int __ltostr(char *s, int size, unsigned long i, int base, char UpCase) __THROW;
-#ifdef __GNUC__
-long long int strtoll(const char *nptr, char **endptr, int base) __THROW;
-unsigned long long int strtoull(const char *nptr, char **endptr, int base) __THROW;
-int __lltostr(char *s, int size, unsigned long long i, int base, char UpCase) __THROW;
+extern int __ltostr(char *s, unsigned int size, unsigned long i, unsigned int base, int UpCase) __THROW;
+extern int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned int prec2) __THROW;
+
+#ifndef __STRICT_ANSI__
+__extension__ long long int strtoll(const char *nptr, char **endptr, int base) __THROW;
+__extension__ unsigned long long int strtoull(const char *nptr, char **endptr, int base) __THROW;
+__extension__ int __lltostr(char *s, unsigned int size, unsigned long long i, unsigned int base, int UpCase) __THROW;
#endif
int atoi(const char *nptr) __THROW;
@@ -36,32 +42,59 @@ double atof(const char *nptr) __THROW;
void exit(int status) __THROW __attribute__((noreturn));
void abort(void) __THROW;
-/* warning: the rand() implementation of the diet libc really sucks. */
-#define RAND_MAX 32767
-
extern int rand(void) __THROW;
+extern int rand_r(unsigned int *seed) __THROW;
extern void srand(unsigned int seed) __THROW;
+#ifdef _BSD_SOURCE
+extern int random(void) __THROW;
+extern void srandom(unsigned int seed) __THROW;
+#endif
+
+typedef unsigned short randbuf[3];
+double drand48(void) __THROW;
+long lrand48(void) __THROW;
+long mrand48(void) __THROW;
+void srand48(long seed) __THROW;
+unsigned short *seed48(randbuf buf) __THROW;
+void lcong48(unsigned short param[7]) __THROW;
+long jrand48(randbuf buf) __THROW;
+long nrand48(randbuf buf) __THROW;
+double erand48(randbuf buf) __THROW;
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) __THROW;
void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) __THROW;
extern char **environ;
-#define EXIT_SUCCESS 0
-#define EXIT_FAILURE 1
-
/* now this function is the greatest bullshit I have ever seen.
* The ISO people must be out of their minds. */
typedef struct { int quot,rem; } div_t;
div_t div(int numer, int denom) __THROW __attribute__((const));
-void *alloca(size_t size) __THROW; /* gcc built-in */
-
char *realpath(const char *path, char *resolved_path) __THROW;
-int abs(int j) __THROW;
+int mkstemp(char *_template);
+char* mkdtemp(char *_template);
+
+char* mktemp(char *_template);
+
+int abs(int i) __THROW __attribute__((const));
+long int labs(long int i) __THROW __attribute__((const));
+__extension__ long long int llabs(long long int i) __THROW __attribute__((const));
+
+#ifdef _XOPEN_SOURCE
+int grantpt (int fd) __THROW;
+int unlockpt (int fd) __THROW;
+char *ptsname (int fd) __THROW;
+#endif
+
+#endif
+
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+
+#define RAND_MAX ((1<<31) -2)
-long int random(void) __THROW;
-void srandom(unsigned int seed) __THROW;
+#define MB_CUR_MAX 1
#endif
diff --git a/mdk-stage1/dietlibc/include/string.h b/mdk-stage1/dietlibc/include/string.h
index 1ef78ae54..1c3df8621 100644
--- a/mdk-stage1/dietlibc/include/string.h
+++ b/mdk-stage1/dietlibc/include/string.h
@@ -5,53 +5,70 @@
#include <sys/types.h>
char *strcpy(char *dest, const char *src) __THROW;
-char *strncpy(char *dest, const char *src, size_t n) __THROW;
void *memccpy(void *dest, const void *src, int c, size_t n) __THROW;
-void *memcpy(void *dest, const void *src, size_t n) __THROW;
void *memmove(void *dest, const void *src, size_t n) __THROW;
int memccmp(const void *s1, const void *s2, int c, size_t n) __THROW __pure__;
+
+void* memset(void *s, int c, size_t n) __THROW;
int memcmp(const void *s1, const void *s2, size_t n) __THROW __pure__;
-int strcmp(const char *s1, const char *s2) __THROW __pure__;
+void* memcpy(void *dest, const void *src, size_t n) __THROW;
+
+char *strncpy(char *dest, const char *src, size_t n) __THROW;
int strncmp(const char *s1, const char *s2, size_t n) __THROW __pure__;
+char *strncat(char *dest, const char *src, size_t n) __THROW;
-int strcasecmp(const char *s1, const char *s2) __THROW __pure__;
-int strncasecmp(const char *s1, const char *s2, size_t n) __THROW __pure__;
+int strcmp(const char *s1, const char *s2) __THROW __pure__;
size_t strlen(const char *s) __THROW __pure__;
char *strstr(const char *haystack, const char *needle) __THROW __pure__;
-char *strdup(const char *s) __THROW;
+char *strdup(const char *s) __attribute_malloc__ __THROW;
char *strchr(const char *s, int c) __THROW __pure__;
char *strrchr(const char *s, int c) __THROW __pure__;
char *strcat(char *dest, const char *src) __THROW;
-char *strncat(char *dest, const char *src, size_t n) __THROW;
-size_t strspn(const char *s, const char *accept) __THROW;
+size_t strspn(const char *s, const char *_accept) __THROW;
size_t strcspn(const char *s, const char *reject) __THROW;
-char *strpbrk(const char *s, const char *accept) __THROW;
+char *strpbrk(const char *s, const char *_accept) __THROW;
char *strsep(char **stringp, const char *delim) __THROW;
-void* memset(void *s, int c, size_t n) __THROW;
+void* memchr(const void *s, int c, size_t n) __THROW __pure__;
+#ifdef _GNU_SOURCE
+void* memrchr(const void *s, int c, size_t n) __THROW __pure__;
+#endif
-#undef NULL
-#define NULL (void*)0
+/* I would like to make this const, but Paul Jarc points out it has to
+ * be char* :-( */
+char *strerror(int errnum) __THROW;
+/* work around b0rken GNU crapware like tar 1.13.19 */
+#define strerror strerror
-#define bzero(s,n) memset(s,0,n)
-#define bcopy(src,dest,n) memmove(dest,src,n)
-#define bcmp(a,b,n) memcmp(a,b,n)
+#ifdef _GNU_SOURCE
+const char *strsignal(int signum) __THROW;
+void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) __THROW;
-char *strerror(int errnum) __THROW;
-char *strsignal(int signum) __THROW;
+char *strndup(const char *s,size_t n) __attribute_malloc__ __THROW;
+#endif
char *strtok(char *s, const char *delim) __THROW;
char *strtok_r(char *s, const char *delim, char **ptrptr) __THROW;
-int ffs(int i) __THROW __attribute__((__const__));
+size_t strlcpy(char *dst, const char *src, size_t size) __THROW;
+size_t strlcat(char *dst, const char *src, size_t size) __THROW;
+
+int strcoll(const char *s1, const char *s2) __THROW;
+size_t strxfrm(char *dest, const char *src, size_t n) __THROW;
+
+#ifdef _BSD_SOURCE
+#include <strings.h>
+#endif
+
+char *stpcpy(char *dest, const char *src);
#endif
diff --git a/mdk-stage1/dietlibc/include/strings.h b/mdk-stage1/dietlibc/include/strings.h
index ec947a9b9..fd2616465 100644
--- a/mdk-stage1/dietlibc/include/strings.h
+++ b/mdk-stage1/dietlibc/include/strings.h
@@ -1,2 +1,23 @@
-#warning "your code included obsolescent <strings.h>. Please change that to <string.h>!"
-#include <string.h>
+#ifndef _STRINGS_H
+#define _STRINGS_H
+
+#include <stddef.h>
+#include <sys/cdefs.h>
+
+int strcasecmp(const char *s1, const char *s2) __THROW __pure__;
+int strncasecmp(const char *s1, const char *s2, size_t n) __THROW __pure__;
+int ffs(int i) __THROW __attribute__((__const__));
+
+int bcmp(const void *, const void *, size_t) __THROW __pure__;
+void bcopy(const void *, void *, size_t) __THROW;
+void bzero(void *, size_t) __THROW;
+char *index(const char *, int) __THROW __pure__;
+char *rindex(const char *, int) __THROW __pure__;
+
+#define bzero(s,n) memset(s,0,n)
+#define bcopy(src,dest,n) memmove(dest,src,n)
+#define bcmp(a,b,n) memcmp(a,b,n)
+#define index(a,b) strchr(a,b)
+#define rindex(a,b) strrchr(a,b)
+
+#endif
diff --git a/mdk-stage1/dietlibc/include/sys/cdefs.h b/mdk-stage1/dietlibc/include/sys/cdefs.h
index 895bb74b8..4ccb0ed2f 100644
--- a/mdk-stage1/dietlibc/include/sys/cdefs.h
+++ b/mdk-stage1/dietlibc/include/sys/cdefs.h
@@ -1,10 +1,13 @@
#ifndef _SYS_CDEFS_H
#define _SYS_CDEFS_H
-#define __dietlibc__
+/* Suppress kernel-name space pollution unless user expressedly asks
+ for it. */
+#ifndef _LOOSE_KERNEL_NAMES
+# define __KERNEL_STRICT_NAMES
+#endif
#ifndef __cplusplus
-#define throw ()
#define __THROW
#define __BEGIN_DECLS
#define __END_DECLS
@@ -16,21 +19,43 @@
#ifndef __GNUC__
#define __attribute__(xyz)
+#define __extension__
#endif
-#define __pure__
-#ifdef __GNUC__
#if (__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 96))
-#undef __pure__
#define __pure__ __attribute__ ((__pure__))
+#else
+#define __pure__
#endif
#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 95)
#define __restrict__
#endif
+#ifndef __STRICT_ANSI__
+#if __GNUC__ < 3
+#define __builtin_expect(foo,bar) (foo)
+#define expect(foo,bar) (foo)
+#else
+#define expect(foo,bar) __builtin_expect(foo,bar)
+#define __attribute_malloc__ __attribute__((malloc))
+#endif
+#endif
+
+#ifndef __attribute_malloc__
+#define __attribute_malloc__
#endif
#define __P(x) x
+#define __ptr_t void*
+
+#ifdef __STRICT_ANSI__
+#define inline
+#endif
+
+#ifndef __i386__
+#define regparm(x)
+#endif
+
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/file.h b/mdk-stage1/dietlibc/include/sys/file.h
index 93787fd42..cf2c74305 100644
--- a/mdk-stage1/dietlibc/include/sys/file.h
+++ b/mdk-stage1/dietlibc/include/sys/file.h
@@ -2,18 +2,9 @@
#define _SYS_FILE_H
#include <sys/cdefs.h>
+#include <fcntl.h>
extern int fcntl(int fd, int cmd, ...) __THROW;
extern int flock(int fd, int operation) __THROW;
-/* Operations for the `flock' call. */
-#define LOCK_SH 1 /* Shared lock. */
-#define LOCK_EX 2 /* Exclusive lock. */
-#define LOCK_UN 8 /* Unlock. */
-
-/* Can be OR'd in to one of the above. */
-#define LOCK_NB 4 /* Don't block when locking. */
-
-
-
#endif /* _SYS_FILE_H */
diff --git a/mdk-stage1/dietlibc/include/sys/io.h b/mdk-stage1/dietlibc/include/sys/io.h
index cce841735..5edf33a57 100644
--- a/mdk-stage1/dietlibc/include/sys/io.h
+++ b/mdk-stage1/dietlibc/include/sys/io.h
@@ -1,41 +1,44 @@
-#ifndef _IO_H
-#define _IO_H
+#ifndef _SYS_IO_H
+#define _SYS_IO_H
-int ioperm(unsigned long from, unsigned long num, int turn_on) __THROW;
+#include <sys/cdefs.h>
-#ifdef __i386__
-
-static __inline void
-outb (unsigned char value, unsigned short int port)
-{
- __asm__ __volatile__ ("outb %b0,%w1": :"a" (value), "Nd" (port));
-}
+extern int ioperm(unsigned long from, unsigned long num, int turn_on) __THROW;
+extern int iopl(int level) __THROW;
-static __inline unsigned char
-inb (unsigned short int port)
-{
+#ifndef __STRICT_ANSI__
+/* anyone have a cleaner solution for this mess? */
+#ifdef __i386__
+static inline unsigned char inb (unsigned short int port) {
unsigned char _v;
-
__asm__ __volatile__ ("inb %w1,%0":"=a" (_v):"Nd" (port));
return _v;
}
-static __inline unsigned short int
-inw (unsigned short int port)
-{
+static inline unsigned short inw (unsigned short int port) {
unsigned short _v;
-
__asm__ __volatile__ ("inw %w1,%0":"=a" (_v):"Nd" (port));
return _v;
}
-static __inline void
-outw (unsigned short int value, unsigned short int port)
-{
- __asm__ __volatile__ ("outw %w0,%w1": :"a" (value), "Nd" (port));
+static inline unsigned int inl (unsigned short int port) {
+ unsigned int _v;
+ __asm__ __volatile__ ("inl %w1,%0":"=a" (_v):"Nd" (port));
+ return _v;
+}
+
+static inline void outb (unsigned char value, unsigned short int port) {
+ __asm__ __volatile__ ("outb %b0,%w1": :"a" (value), "Nd" (port));
+}
+static inline void outw (unsigned short value, unsigned short int port) {
+ __asm__ __volatile__ ("outw %w0,%w1": :"a" (value), "Nd" (port));
}
+static inline void outl (unsigned int value, unsigned short int port) {
+ __asm__ __volatile__ ("outl %0,%w1": :"a" (value), "Nd" (port));
+}
+#endif
#endif
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/ioctl.h b/mdk-stage1/dietlibc/include/sys/ioctl.h
index fca1aeeab..a7890f038 100644
--- a/mdk-stage1/dietlibc/include/sys/ioctl.h
+++ b/mdk-stage1/dietlibc/include/sys/ioctl.h
@@ -2,8 +2,30 @@
#define _IOCTL_H
#include <sys/cdefs.h>
-#include <linux/ioctl.h>
-#include <asm/ioctls.h>
+
+#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__)
+#include <sys/i386-ioctl.h>
+#elif defined(__alpha__)
+#include <sys/alpha-ioctl.h>
+#elif defined(__arm__)
+#include <sys/arm-ioctl.h>
+#elif defined(__sparc__)
+#include <sys/sparc-ioctl.h>
+#elif defined(__mips__)
+#include <sys/mips-ioctl.h>
+#elif defined(__powerpc__)
+#include <sys/ppc-ioctl.h>
+#elif defined(__s390__)
+#include <sys/s390-ioctl.h>
+#elif defined(__hppa__)
+#include <sys/hppa-ioctl.h>
+#endif
+
+/* used for /dev/epoll */
+#define EP_ALLOC _IOR('P', 1, int)
+#define EP_POLL _IOWR('P', 2, struct evpoll)
+#define EP_FREE _IO('P', 3)
+#define EP_ISPOLLED _IOWR('P', 4, struct pollfd)
int ioctl(int d, int request, ...) __THROW;
diff --git a/mdk-stage1/dietlibc/include/sys/ipc.h b/mdk-stage1/dietlibc/include/sys/ipc.h
index 9184a2a82..481d97b62 100644
--- a/mdk-stage1/dietlibc/include/sys/ipc.h
+++ b/mdk-stage1/dietlibc/include/sys/ipc.h
@@ -2,7 +2,48 @@
#define _SYS_IPC_H
#include <sys/cdefs.h>
-#include <linux/ipc.h>
-#include <asm/page.h>
+#include <sys/types.h>
+
+#define SEMOP 1
+#define SEMGET 2
+#define SEMCTL 3
+#define MSGSND 11
+#define MSGRCV 12
+#define MSGGET 13
+#define MSGCTL 14
+#define SHMAT 21
+#define SHMDT 22
+#define SHMGET 23
+#define SHMCTL 24
+
+#define IPC_PRIVATE ((key_t) 0)
+
+#define IPC_CREAT 00001000 /* create if key is nonexistent */
+#define IPC_EXCL 00002000 /* fail if key exists */
+#define IPC_NOWAIT 00004000 /* return error on wait */
+
+#define IPC_RMID 0 /* remove resource */
+#define IPC_SET 1 /* set ipc_perm options */
+#define IPC_STAT 2 /* get ipc_perm options */
+#define IPC_INFO 3 /* see ipcs */
+
+/*
+ * Version flags for semctl, msgctl, and shmctl commands
+ * These are passed as bitflags or-ed with the actual command
+ */
+#define IPC_OLD 0 /* Old version (no 32-bit UID support on many
+ architectures) */
+#define IPC_64 0x0100 /* New version (support 32-bit UIDs, bigger
+ message sizes, etc. */
+
+struct ipc_perm {
+ key_t key;
+ uid_t uid;
+ gid_t gid;
+ uid_t cuid;
+ gid_t cgid;
+ mode_t mode;
+ unsigned short seq;
+};
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/kd.h b/mdk-stage1/dietlibc/include/sys/kd.h
index 9e9a5152b..98b337ede 100644
--- a/mdk-stage1/dietlibc/include/sys/kd.h
+++ b/mdk-stage1/dietlibc/include/sys/kd.h
@@ -1,6 +1,183 @@
#ifndef _SYS_KD_H
#define _SYS_KD_H
-#include <linux/kd.h>
+/* 0x4B is 'K', to avoid collision with termios and vt */
+
+#define GIO_FONT 0x4B60 /* gets font in expanded form */
+#define PIO_FONT 0x4B61 /* use font in expanded form */
+
+#define GIO_FONTX 0x4B6B /* get font using struct consolefontdesc */
+#define PIO_FONTX 0x4B6C /* set font using struct consolefontdesc */
+
+struct consolefontdesc {
+ unsigned short charcount; /* characters in font (256 or 512) */
+ unsigned short charheight; /* scan lines per character (1-32) */
+ char *chardata; /* font data in expanded form */
+};
+
+#define PIO_FONTRESET 0x4B6D /* reset to default font */
+
+#define GIO_CMAP 0x4B70 /* gets colour palette on VGA+ */
+#define PIO_CMAP 0x4B71 /* sets colour palette on VGA+ */
+
+#define KIOCSOUND 0x4B2F /* start sound generation (0 for off) */
+#define KDMKTONE 0x4B30 /* generate tone */
+
+#define KDGETLED 0x4B31 /* return current led state */
+#define KDSETLED 0x4B32 /* set led state [lights, not flags] */
+#define LED_SCR 0x01 /* scroll lock led */
+#define LED_CAP 0x04 /* caps lock led */
+#define LED_NUM 0x02 /* num lock led */
+
+#define KDGKBTYPE 0x4B33 /* get keyboard type */
+#define KB_84 0x01
+#define KB_101 0x02 /* this is what we always answer */
+#define KB_OTHER 0x03
+
+#define KDADDIO 0x4B34 /* add i/o port as valid */
+#define KDDELIO 0x4B35 /* del i/o port as valid */
+#define KDENABIO 0x4B36 /* enable i/o to video board */
+#define KDDISABIO 0x4B37 /* disable i/o to video board */
+
+#define KDSETMODE 0x4B3A /* set text/graphics mode */
+#define KD_TEXT 0x00
+#define KD_GRAPHICS 0x01
+#define KD_TEXT0 0x02 /* obsolete */
+#define KD_TEXT1 0x03 /* obsolete */
+#define KDGETMODE 0x4B3B /* get current mode */
+
+#define KDMAPDISP 0x4B3C /* map display into address space */
+#define KDUNMAPDISP 0x4B3D /* unmap display from address space */
+
+typedef char scrnmap_t;
+
+#define E_TABSZ 256
+#define GIO_SCRNMAP 0x4B40 /* get screen mapping from kernel */
+#define PIO_SCRNMAP 0x4B41 /* put screen mapping table in kernel */
+#define GIO_UNISCRNMAP 0x4B69 /* get full Unicode screen mapping */
+#define PIO_UNISCRNMAP 0x4B6A /* set full Unicode screen mapping */
+
+#define GIO_UNIMAP 0x4B66 /* get unicode-to-font mapping from kernel */
+
+struct unipair {
+ unsigned short unicode;
+ unsigned short fontpos;
+};
+
+struct unimapdesc {
+ unsigned short entry_ct;
+ struct unipair *entries;
+};
+
+#define PIO_UNIMAP 0x4B67 /* put unicode-to-font mapping in kernel */
+#define PIO_UNIMAPCLR 0x4B68 /* clear table, possibly advise hash algorithm */
+
+struct unimapinit {
+ unsigned short advised_hashsize; /* 0 if no opinion */
+ unsigned short advised_hashstep; /* 0 if no opinion */
+ unsigned short advised_hashlevel; /* 0 if no opinion */
+};
+
+#define UNI_DIRECT_BASE 0xF000 /* start of Direct Font Region */
+#define UNI_DIRECT_MASK 0x01FF /* Direct Font Region bitmask */
+
+#define K_RAW 0x00
+#define K_XLATE 0x01
+#define K_MEDIUMRAW 0x02
+#define K_UNICODE 0x03
+#define KDGKBMODE 0x4B44 /* gets current keyboard mode */
+#define KDSKBMODE 0x4B45 /* sets current keyboard mode */
+
+#define K_METABIT 0x03
+#define K_ESCPREFIX 0x04
+#define KDGKBMETA 0x4B62 /* gets meta key handling mode */
+#define KDSKBMETA 0x4B63 /* sets meta key handling mode */
+
+#define K_SCROLLLOCK 0x01
+#define K_CAPSLOCK 0x02
+#define K_NUMLOCK 0x04
+#define KDGKBLED 0x4B64 /* get led flags (not lights) */
+#define KDSKBLED 0x4B65 /* set led flags (not lights) */
+
+struct kbentry {
+ unsigned char kb_table;
+ unsigned char kb_index;
+ unsigned short kb_value;
+};
+
+#define K_NORMTAB 0x00
+#define K_SHIFTTAB 0x01
+#define K_ALTTAB 0x02
+#define K_ALTSHIFTTAB 0x03
+
+#define KDGKBENT 0x4B46 /* gets one entry in translation table */
+#define KDSKBENT 0x4B47 /* sets one entry in translation table */
+
+struct kbsentry {
+ unsigned char kb_func;
+ unsigned char kb_string[512];
+};
+
+#define KDGKBSENT 0x4B48 /* gets one function key string entry */
+#define KDSKBSENT 0x4B49 /* sets one function key string entry */
+
+struct kbdiacr {
+ unsigned char diacr, base, result;
+};
+
+struct kbdiacrs {
+ unsigned int kb_cnt; /* number of entries in following array */
+ struct kbdiacr kbdiacr[256]; /* MAX_DIACR from keyboard.h */
+};
+
+#define KDGKBDIACR 0x4B4A /* read kernel accent table */
+#define KDSKBDIACR 0x4B4B /* write kernel accent table */
+
+struct kbkeycode {
+ unsigned int scancode, keycode;
+};
+
+#define KDGETKEYCODE 0x4B4C /* read kernel keycode table entry */
+#define KDSETKEYCODE 0x4B4D /* write kernel keycode table entry */
+
+#define KDSIGACCEPT 0x4B4E /* accept kbd generated signals */
+
+struct hwclk_time {
+ unsigned int sec; /* 0..59 */
+ unsigned int min; /* 0..59 */
+ unsigned int hour; /* 0..23 */
+ unsigned int day; /* 1..31 */
+ unsigned int mon; /* 0..11 */
+ unsigned int year; /* 70... */
+ int wday; /* 0..6, 0 is Sunday, -1 means unknown/don't set */
+};
+
+#define KDGHWCLK 0x4B50 /* get hardware clock */
+#define KDSHWCLK 0x4B51 /* set hardware clock */
+
+struct kbd_repeat {
+ int delay; /* in msec; <= 0: don't change */
+ int rate; /* in msec; <= 0: don't change */
+};
+
+#define KDKBDREP 0x4B52 /* set keyboard delay/repeat rate;
+ * actually used values are returned */
+
+#define KDFONTOP 0x4B72 /* font operations */
+
+struct console_font_op {
+ unsigned int op; /* operation code KD_FONT_OP_* */
+ unsigned int flags; /* KD_FONT_FLAG_* */
+ unsigned int width, height; /* font size */
+ unsigned int charcount;
+ unsigned char *data; /* font data with height fixed to 32 */
+};
+
+#define KD_FONT_OP_SET 0 /* Set font */
+#define KD_FONT_OP_GET 1 /* Get font */
+#define KD_FONT_OP_SET_DEFAULT 2 /* Set font to default, data points to name / NULL */
+#define KD_FONT_OP_COPY 3 /* Copy from another console */
+
+#define KD_FONT_FLAG_DONT_RECALC 1 /* Don't recalculate hw charcell size [compat] */
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/mman.h b/mdk-stage1/dietlibc/include/sys/mman.h
index dc398ba90..298773a92 100644
--- a/mdk-stage1/dietlibc/include/sys/mman.h
+++ b/mdk-stage1/dietlibc/include/sys/mman.h
@@ -3,13 +3,160 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-#include <linux/mman.h>
-#include <asm/page.h>
-#ifndef PAGE_SIZE
-#warning PAGE_SIZE undefined
+#define MREMAP_MAYMOVE 1UL
+#define MREMAP_FIXED 2UL
+
+#define PROT_READ 0x1 /* page can be read */
+#define PROT_WRITE 0x2 /* page can be written */
+#define PROT_EXEC 0x4 /* page can be executed */
+#define PROT_NONE 0x0 /* page can not be accessed */
+
+#define MAP_SHARED 0x01 /* Share changes */
+#define MAP_PRIVATE 0x02 /* Changes are private */
+
+#ifdef __mips__
+#define MAP_FIXED 0x010 /* Interpret addr exactly */
+#define MAP_NORESERVE 0x0400 /* don't check for reservations */
+#define MAP_ANONYMOUS 0x0800 /* don't use a file */
+#define MAP_GROWSDOWN 0x1000 /* stack-like segment */
+#define MAP_DENYWRITE 0x2000 /* ETXTBSY */
+#define MAP_EXECUTABLE 0x4000 /* mark it as an executable */
+#define MAP_LOCKED 0x8000 /* pages are locked */
+#define MS_ASYNC 0x0001 /* sync memory asynchronously */
+#define MS_INVALIDATE 0x0002 /* invalidate mappings & caches */
+#define MS_SYNC 0x0004 /* synchronous memory sync */
+#define MCL_CURRENT 1 /* lock all current mappings */
+#define MCL_FUTURE 2 /* lock all future mappings */
+#define MADV_NORMAL 0x0 /* default page-in behavior */
+#define MADV_RANDOM 0x1 /* page-in minimum required */
+#define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */
+#define MADV_WILLNEED 0x3 /* pre-fault pages */
+#define MADV_DONTNEED 0x4 /* discard these pages */
+#else
+
+#ifdef __alpha__
+#define MAP_FIXED 0x100 /* Interpret addr exactly */
+#define MAP_ANONYMOUS 0x10 /* don't use a file */
+#define MAP_GROWSDOWN 0x1000 /* stack-like segment */
+#define MAP_DENYWRITE 0x2000 /* ETXTBSY */
+#define MAP_EXECUTABLE 0x4000 /* mark it as an executable */
+#define MAP_LOCKED 0x8000 /* lock the mapping */
+#define MAP_NORESERVE 0x10000 /* don't check for reservations */
+#define MS_ASYNC 1 /* sync memory asynchronously */
+#define MS_SYNC 2 /* synchronous memory sync */
+#define MS_INVALIDATE 4 /* invalidate the caches */
+#define MCL_CURRENT 8192 /* lock all currently mapped pages */
+#define MCL_FUTURE 16384 /* lock all additions to address space */
+#define MADV_NORMAL 0 /* no further special treatment */
+#define MADV_RANDOM 1 /* expect random page references */
+#define MADV_SEQUENTIAL 2 /* expect sequential page references */
+#define MADV_WILLNEED 3 /* will need these pages */
+#define MADV_SPACEAVAIL 5 /* ensure resources are available */
+#define MADV_DONTNEED 6 /* dont need these pages */
+#else
+#define MAP_FIXED 0x10 /* Interpret addr exactly */
+#define MAP_ANONYMOUS 0x20 /* don't use a file */
#endif
+#if defined(__i386__) || defined(__s390__) || defined(__x86_64__)
+#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
+#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
+#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
+#define MAP_LOCKED 0x2000 /* pages are locked */
+#define MAP_NORESERVE 0x4000 /* don't check for reservations */
+#define MS_ASYNC 1 /* sync memory asynchronously */
+#define MS_INVALIDATE 2 /* invalidate the caches */
+#define MS_SYNC 4 /* synchronous memory sync */
+#define MCL_CURRENT 1 /* lock all current mappings */
+#define MCL_FUTURE 2 /* lock all future mappings */
+#define MADV_NORMAL 0x0 /* default page-in behavior */
+#define MADV_RANDOM 0x1 /* page-in minimum required */
+#define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */
+#define MADV_WILLNEED 0x3 /* pre-fault pages */
+#define MADV_DONTNEED 0x4 /* discard these pages */
+#elif defined(__sparc__) || defined (__powerpc__)
+#define MAP_RENAME MAP_ANONYMOUS /* In SunOS terminology */
+#define MAP_NORESERVE 0x40 /* don't reserve swap pages */
+#define MAP_INHERIT 0x80 /* SunOS doesn't do this, but... */
+#define MAP_LOCKED 0x100 /* lock the mapping */
+#define _MAP_NEW 0x80000000 /* Binary compatibility is fun... */
+#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
+#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
+#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
+#define MS_ASYNC 1 /* sync memory asynchronously */
+#define MS_INVALIDATE 2 /* invalidate the caches */
+#define MS_SYNC 4 /* synchronous memory sync */
+#define MCL_CURRENT 0x2000 /* lock all currently mapped pages */
+#define MCL_FUTURE 0x4000 /* lock all additions to address space */
+#define MADV_NORMAL 0x0 /* default page-in behavior */
+#define MADV_RANDOM 0x1 /* page-in minimum required */
+#define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */
+#define MADV_WILLNEED 0x3 /* pre-fault pages */
+#define MADV_DONTNEED 0x4 /* discard these pages */
+#define MADV_FREE 0x5 /* (Solaris) contents can be freed */
+#elif defined (__arm__)
+#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
+#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
+#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
+#define MAP_LOCKED 0x2000 /* pages are locked */
+#define MAP_NORESERVE 0x4000 /* don't check for reservations */
+#define MS_ASYNC 1 /* sync memory asynchronously */
+#define MS_INVALIDATE 2 /* invalidate the caches */
+#define MS_SYNC 4 /* synchronous memory sync */
+#define MCL_CURRENT 1 /* lock all current mappings */
+#define MCL_FUTURE 2 /* lock all future mappings */
+#define MADV_NORMAL 0x0 /* default page-in behavior */
+#define MADV_RANDOM 0x1 /* page-in minimum required */
+#define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */
+#define MADV_WILLNEED 0x3 /* pre-fault pages */
+#define MADV_DONTNEED 0x4 /* discard these pages */
+
+#elif defined(__hppa__)
+#define MAP_TYPE 0x03 /* Mask for type of mapping */
+#define MAP_FIXED 0x04 /* Interpret addr exactly */
+#define MAP_ANONYMOUS 0x10 /* don't use a file */
+
+#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
+#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
+#define MAP_LOCKED 0x2000 /* pages are locked */
+#define MAP_NORESERVE 0x4000 /* don't check for reservations */
+#define MAP_GROWSDOWN 0x8000 /* stack-like segment */
+
+#define MS_SYNC 1 /* synchronous memory sync */
+#define MS_ASYNC 2 /* sync memory asynchronously */
+#define MS_INVALIDATE 4 /* invalidate the caches */
+
+#define MCL_CURRENT 1 /* lock all current mappings */
+#define MCL_FUTURE 2
+
+#elif defined(__ia64__)
+
+#define MAP_TYPE 0x0f /* Mask for type of mapping */
+#define MAP_FIXED 0x10 /* Interpret addr exactly */
+#define MAP_ANONYMOUS 0x20 /* don't use a file */
+
+#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
+#define MAP_GROWSUP 0x0200 /* register stack-like segment */
+#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
+#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
+#define MAP_LOCKED 0x2000 /* pages are locked */
+#define MAP_NORESERVE 0x4000 /* don't check for reservations */
+#define MAP_WRITECOMBINED 0x10000 /* write-combine the area */
+#define MAP_NONCACHED 0x20000 /* don't cache the memory */
+
+#define MS_ASYNC 1 /* sync memory asynchronously */
+#define MS_INVALIDATE 2 /* invalidate the caches */
+#define MS_SYNC 4 /* synchronous memory sync */
+
+#endif
+
+#endif
+
+/* compatibility flags */
+#define MAP_ANON MAP_ANONYMOUS
+#define MAP_FILE 0
+
#define MAP_FAILED ((void *) -1)
extern void *mmap (void *__addr, size_t __len, int __prot,
@@ -19,15 +166,19 @@ extern int munmap (void *__addr, size_t __len) __THROW;
extern int mprotect (void *__addr, size_t __len, int __prot) __THROW;
extern int msync (void *__addr, size_t __len, int __flags) __THROW;
extern void *mremap (void *__addr, size_t __old_len, size_t __new_len,
- int __may_move) __THROW;
+ unsigned long __may_move) __THROW;
extern int mincore (void *__start, size_t __len, unsigned char *__vec);
-#ifdef __quad_t
extern void *mmap64 (void *__addr, size_t __len, int __prot,
int __flags, int __fd, off64_t __offset) __THROW;
-#endif
int mlockall(int flags) __THROW;
+int mlock(const void *addr, size_t len) __THROW;
+int munlock(const void *addr, size_t len) __THROW;
int munlockall(void) __THROW;
+int madvise(void *start, size_t length, int advice) __THROW;
+
+#define _POSIX_MAPPED_FILES
+
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/mount.h b/mdk-stage1/dietlibc/include/sys/mount.h
index 2e9e86774..a5170fda9 100644
--- a/mdk-stage1/dietlibc/include/sys/mount.h
+++ b/mdk-stage1/dietlibc/include/sys/mount.h
@@ -3,17 +3,78 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-#include <linux/fs.h>
+#define _LINUX_CONFIG_H
+
+#define BLOCK_SIZE 1024
+#define BLOCK_SIZE_BITS 10
+
+
+/* These are the fs-independent mount-flags: up to 16 flags are
+ supported */
+enum
+{
+ MS_RDONLY = 1, /* Mount read-only. */
+#define MS_RDONLY MS_RDONLY
+ MS_NOSUID = 2, /* Ignore suid and sgid bits. */
+#define MS_NOSUID MS_NOSUID
+ MS_NODEV = 4, /* Disallow access to device special files. */
+#define MS_NODEV MS_NODEV
+ MS_NOEXEC = 8, /* Disallow program execution. */
+#define MS_NOEXEC MS_NOEXEC
+ MS_SYNCHRONOUS = 16, /* Writes are synced at once. */
+#define MS_SYNCHRONOUS MS_SYNCHRONOUS
+ MS_REMOUNT = 32, /* Alter flags of a mounted FS. */
+#define MS_REMOUNT MS_REMOUNT
+ MS_MANDLOCK = 64, /* Allow mandatory locks on an FS. */
+#define MS_MANDLOCK MS_MANDLOCK
+ S_WRITE = 128, /* Write on file/directory/symlink. */
+#define S_WRITE S_WRITE
+ S_APPEND = 256, /* Append-only file. */
+#define S_APPEND S_APPEND
+ S_IMMUTABLE = 512, /* Immutable file. */
+#define S_IMMUTABLE S_IMMUTABLE
+ MS_NOATIME = 1024, /* Do not update access times. */
+#define MS_NOATIME MS_NOATIME
+ MS_NODIRATIME = 2048, /* Do not update directory access times. */
+#define MS_NODIRATIME MS_NODIRATIME
+ MS_BIND = 4096, /* Bind directory at different place. */
+#define MS_BIND MS_BIND
+};
+
+/* Flags that can be altered by MS_REMOUNT */
+#define MS_RMT_MASK (MS_RDONLY | MS_MANDLOCK)
+
+
+/* Magic mount flag number. Has to be or-ed to the flag values. */
+
+#define MS_MGC_VAL 0xc0ed0000 /* Magic flag number to indicate "new" flags */
+#define MS_MGC_MSK 0xffff0000 /* Magic flag number mask */
+
+
+/* The read-only stuff doesn't really belong here, but any other place
+ is probably as bad and I don't want to create yet another include
+ file. */
+
+#define BLKROSET _IO(0x12, 93) /* Set device read-only (0 = read-write). */
+#define BLKROGET _IO(0x12, 94) /* Get read-only status (0 = read_write). */
+#define BLKRRPART _IO(0x12, 95) /* Re-read partition table. */
+#define BLKGETSIZE _IO(0x12, 96) /* Return device size. */
+#define BLKFLSBUF _IO(0x12, 97) /* Flush buffer cache. */
+#define BLKRASET _IO(0x12, 98) /* Set read ahead for block device. */
+#define BLKRAGET _IO(0x12, 99) /* Get current read ahead setting. */
+
+
+/* Possible value for FLAGS parameter of `umount2'. */
+enum
+{
+ MNT_FORCE = 1 /* Force unmounting. */
+#define MNT_FORCE MNT_FORCE
+};
int mount(const char* specialfile, const char* dir, const char* filesystemtype,
unsigned long rwflag, const void * data) __THROW;
int umount(const char *specialfile) __THROW;
-
-int umount(const char *dir) __THROW;
-
int umount2(const char *specialfile, int mflag) __THROW;
-int umount2(const char *dir, int mflag) __THROW;
-
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/msg.h b/mdk-stage1/dietlibc/include/sys/msg.h
index ea1e470b6..564fd9472 100644
--- a/mdk-stage1/dietlibc/include/sys/msg.h
+++ b/mdk-stage1/dietlibc/include/sys/msg.h
@@ -1,9 +1,53 @@
#ifndef _SYS_MSG_H
#define _SYS_MSG_H
-#include <linux/msg.h>
#include <sys/ipc.h>
-#include <asm/page.h>
+
+/* ipcs ctl commands */
+#define MSG_STAT 11
+#define MSG_INFO 12
+
+/* msgrcv options */
+#define MSG_NOERROR 010000 /* no error if message is too big */
+#define MSG_EXCEPT 020000 /* recv any msg except of specified type.*/
+
+struct msqid_ds {
+ struct ipc_perm msg_perm;
+ struct msg *msg_first; /* first message on queue,unused */
+ struct msg *msg_last; /* last message in queue,unused */
+ time_t msg_stime; /* last msgsnd time */
+ time_t msg_rtime; /* last msgrcv time */
+ time_t msg_ctime; /* last change time */
+ unsigned long msg_lcbytes; /* Reuse junk fields for 32 bit */
+ unsigned long msg_lqbytes; /* ditto */
+ unsigned short msg_cbytes; /* current number of bytes on queue */
+ unsigned short msg_qnum; /* number of messages in queue */
+ unsigned short msg_qbytes; /* max number of bytes on queue */
+ pid_t msg_lspid; /* pid of last msgsnd */
+ pid_t msg_lrpid; /* last receive pid */
+};
+
+/* message buffer for msgsnd and msgrcv calls */
+struct msgbuf {
+ long mtype; /* type of message */
+ char mtext[1]; /* message text */
+};
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo {
+ int msgpool;
+ int msgmap;
+ int msgmax;
+ int msgmnb;
+ int msgmni;
+ int msgssz;
+ int msgtql;
+ unsigned short msgseg;
+};
+
+#define MSGMNI 16 /* <= IPCMNI */ /* max # of msg queue identifiers */
+#define MSGMAX 8192 /* <= INT_MAX */ /* max size of message (bytes) */
+#define MSGMNB 16384 /* <= INT_MAX */ /* default max size of a message queue */
extern int msgctl (int msqid, int cmd, struct msqid_ds *buf) __THROW;
extern int msgget (key_t key, int msgflg) __THROW;
diff --git a/mdk-stage1/dietlibc/include/sys/mtio.h b/mdk-stage1/dietlibc/include/sys/mtio.h
index e70663407..08c735dcc 100644
--- a/mdk-stage1/dietlibc/include/sys/mtio.h
+++ b/mdk-stage1/dietlibc/include/sys/mtio.h
@@ -1,6 +1,340 @@
#ifndef _SYS_MTIO_H
#define _SYS_MTIO_H
-#include <linux/mtio.h>
+#include <sys/ioctl.h>
+
+/* structure for MTIOCTOP - mag tape op command */
+struct mtop {
+ short int mt_op; /* operations defined below */
+ int mt_count; /* how many of them */
+};
+
+/* Magnetic Tape operations [Not all operations supported by all drivers]: */
+#define MTRESET 0 /* +reset drive in case of problems */
+#define MTFSF 1 /* forward space over FileMark,
+ * position at first record of next file
+ */
+#define MTBSF 2 /* backward space FileMark (position before FM) */
+#define MTFSR 3 /* forward space record */
+#define MTBSR 4 /* backward space record */
+#define MTWEOF 5 /* write an end-of-file record (mark) */
+#define MTREW 6 /* rewind */
+#define MTOFFL 7 /* rewind and put the drive offline (eject?) */
+#define MTNOP 8 /* no op, set status only (read with MTIOCGET) */
+#define MTRETEN 9 /* retension tape */
+#define MTBSFM 10 /* +backward space FileMark, position at FM */
+#define MTFSFM 11 /* +forward space FileMark, position at FM */
+#define MTEOM 12 /* goto end of recorded media (for appending files).
+ * MTEOM positions after the last FM, ready for
+ * appending another file.
+ */
+#define MTERASE 13 /* erase tape -- be careful! */
+
+#define MTRAS1 14 /* run self test 1 (nondestructive) */
+#define MTRAS2 15 /* run self test 2 (destructive) */
+#define MTRAS3 16 /* reserved for self test 3 */
+
+#define MTSETBLK 20 /* set block length (SCSI) */
+#define MTSETDENSITY 21 /* set tape density (SCSI) */
+#define MTSEEK 22 /* seek to block (Tandberg, etc.) */
+#define MTTELL 23 /* tell block (Tandberg, etc.) */
+#define MTSETDRVBUFFER 24 /* set the drive buffering according to SCSI-2 */
+ /* ordinary buffered operation with code 1 */
+#define MTFSS 25 /* space forward over setmarks */
+#define MTBSS 26 /* space backward over setmarks */
+#define MTWSM 27 /* write setmarks */
+
+#define MTLOCK 28 /* lock the drive door */
+#define MTUNLOCK 29 /* unlock the drive door */
+#define MTLOAD 30 /* execute the SCSI load command */
+#define MTUNLOAD 31 /* execute the SCSI unload command */
+#define MTCOMPRESSION 32/* control compression with SCSI mode page 15 */
+#define MTSETPART 33 /* Change the active tape partition */
+#define MTMKPART 34 /* Format the tape with one or two partitions */
+
+/* structure for MTIOCGET - mag tape get status command */
+
+typedef int daddr_t;
+
+struct mtget {
+ long int mt_type; /* type of magtape device */
+ long int mt_resid; /* residual count: (not sure)
+ * number of bytes ignored, or
+ * number of files not skipped, or
+ * number of records not skipped.
+ */
+ /* the following registers are device dependent */
+ long int mt_dsreg; /* status register */
+ long int mt_gstat; /* generic (device independent) status */
+ long int mt_erreg; /* error register */
+ /* The next two fields are not always used */
+ daddr_t mt_fileno; /* number of current file on tape */
+ daddr_t mt_blkno; /* current block number */
+};
+
+/*
+ * Constants for mt_type. Not all of these are supported,
+ * and these are not all of the ones that are supported.
+ */
+#define MT_ISUNKNOWN 0x01
+#define MT_ISQIC02 0x02 /* Generic QIC-02 tape streamer */
+#define MT_ISWT5150 0x03 /* Wangtek 5150EQ, QIC-150, QIC-02 */
+#define MT_ISARCHIVE_5945L2 0x04 /* Archive 5945L-2, QIC-24, QIC-02? */
+#define MT_ISCMSJ500 0x05 /* CMS Jumbo 500 (QIC-02?) */
+#define MT_ISTDC3610 0x06 /* Tandberg 6310, QIC-24 */
+#define MT_ISARCHIVE_VP60I 0x07 /* Archive VP60i, QIC-02 */
+#define MT_ISARCHIVE_2150L 0x08 /* Archive Viper 2150L */
+#define MT_ISARCHIVE_2060L 0x09 /* Archive Viper 2060L */
+#define MT_ISARCHIVESC499 0x0A /* Archive SC-499 QIC-36 controller */
+#define MT_ISQIC02_ALL_FEATURES 0x0F /* Generic QIC-02 with all features */
+#define MT_ISWT5099EEN24 0x11 /* Wangtek 5099-een24, 60MB, QIC-24 */
+#define MT_ISTEAC_MT2ST 0x12 /* Teac MT-2ST 155mb drive, Teac DC-1 card (Wangtek type) */
+#define MT_ISEVEREX_FT40A 0x32 /* Everex FT40A (QIC-40) */
+#define MT_ISDDS1 0x51 /* DDS device without partitions */
+#define MT_ISDDS2 0x52 /* DDS device with partitions */
+#define MT_ISONSTREAM_SC 0x61 /* OnStream SCSI tape drives (SC-x0)
+ and SCSI emulated (DI, DP, USB) */
+#define MT_ISSCSI1 0x71 /* Generic ANSI SCSI-1 tape unit */
+#define MT_ISSCSI2 0x72 /* Generic ANSI SCSI-2 tape unit */
+
+/* QIC-40/80/3010/3020 ftape supported drives.
+ * 20bit vendor ID + 0x800000 (see ftape-vendors.h)
+ */
+#define MT_ISFTAPE_UNKNOWN 0x800000 /* obsolete */
+#define MT_ISFTAPE_FLAG 0x800000
+
+struct mt_tape_info {
+ long int t_type; /* device type id (mt_type) */
+ char* t_name; /* descriptive name */
+};
+
+#define MT_TAPE_INFO { \
+ {MT_ISUNKNOWN, "Unknown type of tape device"}, \
+ {MT_ISQIC02, "Generic QIC-02 tape streamer"}, \
+ {MT_ISWT5150, "Wangtek 5150, QIC-150"}, \
+ {MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \
+ {MT_ISCMSJ500, "CMS Jumbo 500"}, \
+ {MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \
+ {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \
+ {MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \
+ {MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \
+ {MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \
+ {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \
+ {MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \
+ {MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \
+ {MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, \
+ {MT_ISONSTREAM_SC, "OnStream SC-, DI-, DP-, or USB tape drive"}, \
+ {MT_ISSCSI1, "Generic SCSI-1 tape"}, \
+ {MT_ISSCSI2, "Generic SCSI-2 tape"}, \
+ {0, NULL} \
+}
+
+
+/* structure for MTIOCPOS - mag tape get position command */
+
+struct mtpos {
+ long int mt_blkno; /* current block number */
+};
+
+
+/* structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended
+ * as an interim solution for QIC-02 until DDI is fully implemented.
+ */
+struct mtconfiginfo {
+ long int mt_type; /* drive type */
+ long int ifc_type; /* interface card type */
+ unsigned short int irqnr; /* IRQ number to use */
+ unsigned short int dmanr; /* DMA channel to use */
+ unsigned short int port; /* IO port base address */
+
+ unsigned long int debug; /* debugging flags */
+
+ unsigned int have_dens:1;
+ unsigned int have_bsf:1;
+ unsigned int have_fsr:1;
+ unsigned int have_bsr:1;
+ unsigned int have_eod:1;
+ unsigned int have_seek:1;
+ unsigned int have_tell:1;
+ unsigned int have_ras1:1;
+ unsigned int have_ras2:1;
+ unsigned int have_ras3:1;
+ unsigned int have_qfa:1;
+
+ unsigned int pad1:5;
+ char reserved[10];
+};
+
+/* structure for MTIOCVOLINFO, query information about the volume
+ * currently positioned at (zftape)
+ */
+struct mtvolinfo {
+ unsigned int mt_volno; /* vol-number */
+ unsigned int mt_blksz; /* blocksize used when recording */
+ unsigned int mt_rawsize; /* raw tape space consumed, in kb */
+ unsigned int mt_size; /* volume size after decompression, in kb */
+ unsigned int mt_cmpr:1; /* this volume has been compressed */
+};
+
+/* raw access to a floppy drive, read and write an arbitrary segment.
+ * For ftape/zftape to support formatting etc.
+ */
+#define MT_FT_RD_SINGLE 0
+#define MT_FT_RD_AHEAD 1
+#define MT_FT_WR_ASYNC 0 /* start tape only when all buffers are full */
+#define MT_FT_WR_MULTI 1 /* start tape, continue until buffers are empty */
+#define MT_FT_WR_SINGLE 2 /* write a single segment and stop afterwards */
+#define MT_FT_WR_DELETE 3 /* write deleted data marks, one segment at time */
+
+struct mtftseg {
+ unsigned int mt_segno; /* the segment to read or write */
+ unsigned int mt_mode; /* modes for read/write (sync/async etc.) */
+ int mt_result; /* result of r/w request, not of the ioctl */
+ void *mt_data; /* User space buffer: must be 29kb */
+};
+
+/* get tape capacity (ftape/zftape)
+ */
+struct mttapesize {
+ unsigned long mt_capacity; /* entire, uncompressed capacity of a cartridge */
+ unsigned long mt_used; /* what has been used so far, raw uncompressed amount */
+};
+
+/* possible values of the ftfmt_op field
+ */
+#define FTFMT_SET_PARMS 1 /* set software parms */
+#define FTFMT_GET_PARMS 2 /* get software parms */
+#define FTFMT_FORMAT_TRACK 3 /* start formatting a tape track */
+#define FTFMT_STATUS 4 /* monitor formatting a tape track */
+#define FTFMT_VERIFY 5 /* verify the given segment */
+
+struct ftfmtparms {
+ unsigned char ft_qicstd; /* QIC-40/QIC-80/QIC-3010/QIC-3020 */
+ unsigned char ft_fmtcode; /* Refer to the QIC specs */
+ unsigned char ft_fhm; /* floppy head max */
+ unsigned char ft_ftm; /* floppy track max */
+ unsigned short ft_spt; /* segments per track */
+ unsigned short ft_tpc; /* tracks per cartridge */
+};
+
+struct ftfmttrack {
+ unsigned int ft_track; /* track to format */
+ unsigned char ft_gap3; /* size of gap3, for FORMAT_TRK */
+};
+
+struct ftfmtstatus {
+ unsigned int ft_segment; /* segment currently being formatted */
+};
+
+struct ftfmtverify {
+ unsigned int ft_segment; /* segment to verify */
+ unsigned long ft_bsm; /* bsm as result of VERIFY cmd */
+};
+
+struct mtftformat {
+ unsigned int fmt_op; /* operation to perform */
+ union fmt_arg {
+ struct ftfmtparms fmt_parms; /* format parameters */
+ struct ftfmttrack fmt_track; /* ctrl while formatting */
+ struct ftfmtstatus fmt_status;
+ struct ftfmtverify fmt_verify; /* for verifying */
+ } fmt_arg;
+};
+
+/* mag tape io control commands */
+#define MTIOCTOP _IOW('m', 1, struct mtop) /* do a mag tape op */
+#define MTIOCGET _IOR('m', 2, struct mtget) /* get tape status */
+#define MTIOCPOS _IOR('m', 3, struct mtpos) /* get tape position */
+
+/* The next two are used by the QIC-02 driver for runtime reconfiguration.
+ * See tpqic02.h for struct mtconfiginfo.
+ */
+#define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo) /* get tape config */
+#define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo) /* set tape config */
+
+/* the next six are used by the floppy ftape drivers and its frontends
+ * sorry, but MTIOCTOP commands are write only.
+ */
+#define MTIOCRDFTSEG _IOWR('m', 6, struct mtftseg) /* read a segment */
+#define MTIOCWRFTSEG _IOWR('m', 7, struct mtftseg) /* write a segment */
+#define MTIOCVOLINFO _IOR('m', 8, struct mtvolinfo) /* info about volume */
+#define MTIOCGETSIZE _IOR('m', 9, struct mttapesize)/* get cartridge size*/
+#define MTIOCFTFORMAT _IOWR('m', 10, struct mtftformat) /* format ftape */
+#define MTIOCFTCMD _IOWR('m', 11, struct mtftcmd) /* send QIC-117 cmd */
+
+/* Generic Mag Tape (device independent) status macros for examining
+ * mt_gstat -- HP-UX compatible.
+ * There is room for more generic status bits here, but I don't
+ * know which of them are reserved. At least three or so should
+ * be added to make this really useful.
+ */
+#define GMT_EOF(x) ((x) & 0x80000000)
+#define GMT_BOT(x) ((x) & 0x40000000)
+#define GMT_EOT(x) ((x) & 0x20000000)
+#define GMT_SM(x) ((x) & 0x10000000) /* DDS setmark */
+#define GMT_EOD(x) ((x) & 0x08000000) /* DDS EOD */
+#define GMT_WR_PROT(x) ((x) & 0x04000000)
+/* #define GMT_ ? ((x) & 0x02000000) */
+#define GMT_ONLINE(x) ((x) & 0x01000000)
+#define GMT_D_6250(x) ((x) & 0x00800000)
+#define GMT_D_1600(x) ((x) & 0x00400000)
+#define GMT_D_800(x) ((x) & 0x00200000)
+/* #define GMT_ ? ((x) & 0x00100000) */
+/* #define GMT_ ? ((x) & 0x00080000) */
+#define GMT_DR_OPEN(x) ((x) & 0x00040000) /* door open (no tape) */
+/* #define GMT_ ? ((x) & 0x00020000) */
+#define GMT_IM_REP_EN(x) ((x) & 0x00010000) /* immediate report mode */
+/* 16 generic status bits unused */
+
+
+/* SCSI-tape specific definitions */
+/* Bitfield shifts in the status */
+#define MT_ST_BLKSIZE_SHIFT 0
+#define MT_ST_BLKSIZE_MASK 0xffffff
+#define MT_ST_DENSITY_SHIFT 24
+#define MT_ST_DENSITY_MASK 0xff000000
+
+#define MT_ST_SOFTERR_SHIFT 0
+#define MT_ST_SOFTERR_MASK 0xffff
+
+/* Bitfields for the MTSETDRVBUFFER ioctl */
+#define MT_ST_OPTIONS 0xf0000000
+#define MT_ST_BOOLEANS 0x10000000
+#define MT_ST_SETBOOLEANS 0x30000000
+#define MT_ST_CLEARBOOLEANS 0x40000000
+#define MT_ST_WRITE_THRESHOLD 0x20000000
+#define MT_ST_DEF_BLKSIZE 0x50000000
+#define MT_ST_DEF_OPTIONS 0x60000000
+#define MT_ST_TIMEOUTS 0x70000000
+#define MT_ST_SET_TIMEOUT (MT_ST_TIMEOUTS | 0x000000)
+#define MT_ST_SET_LONG_TIMEOUT (MT_ST_TIMEOUTS | 0x100000)
+
+#define MT_ST_BUFFER_WRITES 0x1
+#define MT_ST_ASYNC_WRITES 0x2
+#define MT_ST_READ_AHEAD 0x4
+#define MT_ST_DEBUGGING 0x8
+#define MT_ST_TWO_FM 0x10
+#define MT_ST_FAST_MTEOM 0x20
+#define MT_ST_AUTO_LOCK 0x40
+#define MT_ST_DEF_WRITES 0x80
+#define MT_ST_CAN_BSR 0x100
+#define MT_ST_NO_BLKLIMS 0x200
+#define MT_ST_CAN_PARTITIONS 0x400
+#define MT_ST_SCSI2LOGICAL 0x800
+#define MT_ST_SYSV 0x1000
+
+/* The mode parameters to be controlled. Parameter chosen with bits 20-28 */
+#define MT_ST_CLEAR_DEFAULT 0xfffff
+#define MT_ST_DEF_DENSITY (MT_ST_DEF_OPTIONS | 0x100000)
+#define MT_ST_DEF_COMPRESSION (MT_ST_DEF_OPTIONS | 0x200000)
+#define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000)
+
+/* The offset for the arguments for the special HP changer load command. */
+#define MT_ST_HPLOADER_OFFSET 10000
+
+/* Specify default tape device. */
+#ifndef DEFTAPE
+#define DEFTAPE "/dev/tape/0"
+#endif
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/param.h b/mdk-stage1/dietlibc/include/sys/param.h
index 05f4d40e2..0744dccdb 100644
--- a/mdk-stage1/dietlibc/include/sys/param.h
+++ b/mdk-stage1/dietlibc/include/sys/param.h
@@ -3,6 +3,26 @@
#include <limits.h>
-#define MAXPATHLEN PATH_MAX
+#define MAXPATHLEN PATH_MAX
+#define MAXHOSTNAMELEN 64
+#define NGROUPS 32
+#define NOGROUP (-1)
+
+#undef MIN
+#undef MAX
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
+
+#ifdef __alpha__
+#define HZ 1024
+#else
+#define HZ 100
+#endif
+
+#ifndef howmany
+# define howmany(x, y) (((x)+((y)-1))/(y))
+#endif
+#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
+#define powerof2(x) ((((x)-1)&(x))==0)
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/poll.h b/mdk-stage1/dietlibc/include/sys/poll.h
index adce26687..fe36df79d 100644
--- a/mdk-stage1/dietlibc/include/sys/poll.h
+++ b/mdk-stage1/dietlibc/include/sys/poll.h
@@ -3,9 +3,45 @@
#include <sys/cdefs.h>
-#include <linux/poll.h>
+enum {
+ POLLIN = 0x0001,
+#define POLLIN POLLIN
+ POLLPRI = 0x0002,
+#define POLLPRI POLLPRI
+ POLLOUT = 0x0004,
+#define POLLOUT POLLOUT
+ POLLERR = 0x0008,
+#define POLLERR POLLERR
+ POLLHUP = 0x0010,
+#define POLLHUP POLLHUP
+ POLLNVAL = 0x0020,
+#define POLLNVAL POLLNVAL
+ POLLRDNORM = 0x0040,
+#define POLLRDNORM POLLRDNORM
+ POLLRDBAND = 0x0080,
+#define POLLRDBAND POLLRDBAND
+ POLLWRBAND = 0x0200,
+#define POLLWRBAND POLLWRBAND
+ POLLMSG = 0x0400,
+#define POLLMSG POLLMSG
+/* POLLREMOVE is for /dev/epoll (/dev/misc/eventpoll),
+ * a new event notification mechanism for 2.6 */
+ POLLREMOVE = 0x1000,
+#define POLLREMOVE POLLREMOVE
+};
-extern int poll(struct pollfd *ufds, unsigned int nfds, int timeout) __THROW;
+#if defined(__sparc__) || defined (__mips__)
+#define POLLWRNORM POLLOUT
+#else
+#define POLLWRNORM 0x0100
+#endif
+
+struct pollfd {
+ int fd;
+ short events;
+ short revents;
+};
+extern int poll(struct pollfd *ufds, unsigned int nfds, int timeout) __THROW;
#endif /* _SYS_POLL_H */
diff --git a/mdk-stage1/dietlibc/include/sys/ptrace.h b/mdk-stage1/dietlibc/include/sys/ptrace.h
index 9dd730bc6..b09d3ac3a 100644
--- a/mdk-stage1/dietlibc/include/sys/ptrace.h
+++ b/mdk-stage1/dietlibc/include/sys/ptrace.h
@@ -3,8 +3,844 @@
#include <sys/cdefs.h>
-#include <linux/ptrace.h>
+#define PTRACE_TRACEME 0
+#define PTRACE_PEEKTEXT 1
+#define PTRACE_PEEKDATA 2
+#define PTRACE_PEEKUSR 3
+#define PTRACE_PEEKUSER PTRACE_PEEKUSR
+#define PTRACE_POKETEXT 4
+#define PTRACE_POKEDATA 5
+#define PTRACE_POKEUSR 6
+#define PTRACE_POKEUSER PTRACE_POKEUSR
+#define PTRACE_CONT 7
+#define PTRACE_KILL 8
+#define PTRACE_SINGLESTEP 9
-extern long int ptrace (int request, ...) __THROW;
+#define PTRACE_ATTACH 0x10
+#define PTRACE_DETACH 0x11
+
+#define PTRACE_SYSCALL 24
+
+#define PT_TRACE_ME PTRACE_TRACEME
+#define PT_READ_I PTRACE_PEEKTEXT
+#define PT_READ_D PTRACE_PEEKDATA
+#define PT_READ_U PTRACE_READ_U
+#define PT_WRITE_I PTRACE_POKETEXT
+#define PT_WRITE_D PTRACE_POKEDATA
+#define PT_WRITE_U PTRACE_POKEUSER
+#define PT_CONTINUE PTRACE_CONT
+#define PT_KILL PTRACE_KILL
+#define PT_STEP PTRACE_SINGLESTEP
+#define PT_GETREGS PTRACE_GETREGS
+#define PT_SETREGS PTRACE_SETREGS
+#define PT_GETFPREGS PTRACE_GETFPREGS
+#define PT_SETFPREGS PTRACE_SETFPREGS
+#define PT_ATTACH PTRACE_ATTACH
+#define PT_DETACH PTRACE_DETACH
+
+#if defined(__i386__)
+#define EBX 0
+#define ECX 1
+#define EDX 2
+#define ESI 3
+#define EDI 4
+#define EBP 5
+#define EAX 6
+#define DS 7
+#define ES 8
+#define FS 9
+#define GS 10
+#define ORIG_EAX 11
+#define EIP 12
+#define CS 13
+#define EFL 14
+#define UESP 15
+#define SS 16
+#define FRAME_SIZE 17
+
+/* this struct defines the way the registers are stored on the
+ stack during a system call. */
+
+struct pt_regs {
+ long ebx;
+ long ecx;
+ long edx;
+ long esi;
+ long edi;
+ long ebp;
+ long eax;
+ int xds;
+ int xes;
+ long orig_eax;
+ long eip;
+ int xcs;
+ long eflags;
+ long esp;
+ int xss;
+};
+
+/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
+#define PTRACE_GETREGS 12
+#define PTRACE_SETREGS 13
+#define PTRACE_GETFPREGS 14
+#define PTRACE_SETFPREGS 15
+#define PTRACE_GETFPXREGS 18
+#define PTRACE_SETFPXREGS 19
+
+#define PTRACE_SETOPTIONS 21
+
+/* options set using PTRACE_SETOPTIONS */
+#define PTRACE_O_TRACESYSGOOD 0x00000001
+
+#elif defined(__s390__)
+
+#define PT_PSWMASK 0x00
+#define PT_PSWADDR 0x04
+#define PT_GPR0 0x08
+#define PT_GPR1 0x0C
+#define PT_GPR2 0x10
+#define PT_GPR3 0x14
+#define PT_GPR4 0x18
+#define PT_GPR5 0x1C
+#define PT_GPR6 0x20
+#define PT_GPR7 0x24
+#define PT_GPR8 0x28
+#define PT_GPR9 0x2C
+#define PT_GPR10 0x30
+#define PT_GPR11 0x34
+#define PT_GPR12 0x38
+#define PT_GPR13 0x3C
+#define PT_GPR14 0x40
+#define PT_GPR15 0x44
+#define PT_ACR0 0x48
+#define PT_ACR1 0x4C
+#define PT_ACR2 0x50
+#define PT_ACR3 0x54
+#define PT_ACR4 0x58
+#define PT_ACR5 0x5C
+#define PT_ACR6 0x60
+#define PT_ACR7 0x64
+#define PT_ACR8 0x68
+#define PT_ACR9 0x6C
+#define PT_ACR10 0x70
+#define PT_ACR11 0x74
+#define PT_ACR12 0x78
+#define PT_ACR13 0x7C
+#define PT_ACR14 0x80
+#define PT_ACR15 0x84
+#define PT_ORIGGPR2 0x88
+#define PT_FPC 0x90
+#define PT_FPR0_HI 0x98
+#define PT_FPR0_LO 0x9C
+#define PT_FPR1_HI 0xA0
+#define PT_FPR1_LO 0xA4
+#define PT_FPR2_HI 0xA8
+#define PT_FPR2_LO 0xAC
+#define PT_FPR3_HI 0xB0
+#define PT_FPR3_LO 0xB4
+#define PT_FPR4_HI 0xB8
+#define PT_FPR4_LO 0xBC
+#define PT_FPR5_HI 0xC0
+#define PT_FPR5_LO 0xC4
+#define PT_FPR6_HI 0xC8
+#define PT_FPR6_LO 0xCC
+#define PT_FPR7_HI 0xD0
+#define PT_FPR7_LO 0xD4
+#define PT_FPR8_HI 0xD8
+#define PT_FPR8_LO 0XDC
+#define PT_FPR9_HI 0xE0
+#define PT_FPR9_LO 0xE4
+#define PT_FPR10_HI 0xE8
+#define PT_FPR10_LO 0xEC
+#define PT_FPR11_HI 0xF0
+#define PT_FPR11_LO 0xF4
+#define PT_FPR12_HI 0xF8
+#define PT_FPR12_LO 0xFC
+#define PT_FPR13_HI 0x100
+#define PT_FPR13_LO 0x104
+#define PT_FPR14_HI 0x108
+#define PT_FPR14_LO 0x10C
+#define PT_FPR15_HI 0x110
+#define PT_FPR15_LO 0x114
+#define PT_CR_9 0x118
+#define PT_CR_10 0x11C
+#define PT_CR_11 0x120
+#define PT_IEEE_IP 0x13C
+#define PT_LASTOFF PT_IEEE_IP
+#define PT_ENDREGS 0x140-1
+
+#define NUM_GPRS 16
+#define NUM_FPRS 16
+#define NUM_CRS 16
+#define NUM_ACRS 16
+#define GPR_SIZE 4
+#define FPR_SIZE 8
+#define FPC_SIZE 4
+#define FPC_PAD_SIZE 4 /* gcc insists on aligning the fpregs */
+#define CR_SIZE 4
+#define ACR_SIZE 4
+
+#define STACK_FRAME_OVERHEAD 96 /* size of minimum stack frame */
+
+#include <inttypes.h>
+
+/* this typedef defines how a Program Status Word looks like */
+typedef struct {
+ uint32_t mask;
+ uint32_t addr;
+} psw_t __attribute__ ((aligned(8)));
+
+typedef union
+{
+ float f;
+ double d;
+ uint64_t ui;
+ struct
+ {
+ uint32_t hi;
+ uint32_t lo;
+ } fp;
+} freg_t;
+
+typedef struct
+{
+ uint32_t fpc;
+ freg_t fprs[NUM_FPRS];
+} s390_fp_regs;
+
+#define FPC_EXCEPTION_MASK 0xF8000000
+#define FPC_FLAGS_MASK 0x00F80000
+#define FPC_DXC_MASK 0x0000FF00
+#define FPC_RM_MASK 0x00000003
+#define FPC_VALID_MASK 0xF8F8FF03
+
+typedef struct
+{
+ psw_t psw;
+ uint32_t gprs[NUM_GPRS];
+ uint32_t acrs[NUM_ACRS];
+ uint32_t orig_gpr2;
+} s390_regs;
+
+struct pt_regs
+{
+ psw_t psw;
+ uint32_t gprs[NUM_GPRS];
+ uint32_t acrs[NUM_ACRS];
+ uint32_t orig_gpr2;
+ uint32_t trap;
+ uint32_t old_ilc;
+};
+
+typedef struct
+{
+ uint32_t cr[3];
+} per_cr_words __attribute__((packed));
+
+#define PER_EM_MASK 0xE8000000
+
+typedef uint32_t addr_t;
+
+typedef struct
+{
+ unsigned em_branching : 1;
+ unsigned em_instruction_fetch : 1;
+ /*
+ * Switching on storage alteration automatically fixes
+ * the storage alteration event bit in the users std.
+ */
+ unsigned em_storage_alteration : 1;
+ unsigned em_gpr_alt_unused : 1;
+ unsigned em_store_real_address : 1;
+ unsigned : 3;
+ unsigned branch_addr_ctl : 1;
+ unsigned : 1;
+ unsigned storage_alt_space_ctl : 1;
+ unsigned : 21;
+ addr_t starting_addr;
+ addr_t ending_addr;
+} per_cr_bits __attribute__((packed));
+
+typedef struct
+{
+ uint16_t perc_atmid; /* 0x096 */
+ uint32_t address; /* 0x098 */
+ uint8_t access_id; /* 0x0a1 */
+} per_lowcore_words __attribute__((packed));
+
+typedef struct
+{
+ unsigned perc_branching : 1; /* 0x096 */
+ unsigned perc_instruction_fetch : 1;
+ unsigned perc_storage_alteration : 1;
+ unsigned perc_gpr_alt_unused : 1;
+ unsigned perc_store_real_address : 1;
+ unsigned : 4;
+ unsigned atmid_validity_bit : 1;
+ unsigned atmid_psw_bit_32 : 1;
+ unsigned atmid_psw_bit_5 : 1;
+ unsigned atmid_psw_bit_16 : 1;
+ unsigned atmid_psw_bit_17 : 1;
+ unsigned si : 2;
+ addr_t address; /* 0x098 */
+ unsigned : 4; /* 0x0a1 */
+ unsigned access_id : 4;
+} per_lowcore_bits __attribute__((packed));
+
+typedef struct
+{
+ union {
+ per_cr_words words;
+ per_cr_bits bits;
+ } control_regs __attribute__((packed));
+ /*
+ * Use these flags instead of setting em_instruction_fetch
+ * directly they are used so that single stepping can be
+ * switched on & off while not affecting other tracing
+ */
+ unsigned single_step : 1;
+ unsigned instruction_fetch : 1;
+ unsigned : 30;
+ /*
+ * These addresses are copied into cr10 & cr11 if single
+ * stepping is switched off
+ */
+ uint32_t starting_addr;
+ uint32_t ending_addr;
+ union {
+ per_lowcore_words words;
+ per_lowcore_bits bits;
+ } lowcore;
+} per_struct __attribute__((packed));
+
+typedef struct
+{
+ uint32_t len;
+ addr_t kernel_addr;
+ addr_t process_addr;
+} ptrace_area;
+
+/*
+ * S/390 specific non posix ptrace requests. I chose unusual values so
+ * they are unlikely to clash with future ptrace definitions.
+ */
+#define PTRACE_PEEKUSR_AREA 0x5000
+#define PTRACE_POKEUSR_AREA 0x5001
+#define PTRACE_PEEKTEXT_AREA 0x5002
+#define PTRACE_PEEKDATA_AREA 0x5003
+#define PTRACE_POKETEXT_AREA 0x5004
+#define PTRACE_POKEDATA_AREA 0x5005
+/*
+ * PT_PROT definition is loosely based on hppa bsd definition in
+ * gdb/hppab-nat.c
+ */
+#define PTRACE_PROT 21
+
+typedef enum
+{
+ ptprot_set_access_watchpoint,
+ ptprot_set_write_watchpoint,
+ ptprot_disable_watchpoint
+} ptprot_flags;
+
+typedef struct
+{
+ addr_t lowaddr;
+ addr_t hiaddr;
+ ptprot_flags prot;
+} ptprot_area;
+
+/* Sequence of bytes for breakpoint illegal instruction. */
+#define S390_BREAKPOINT {0x0,0x1}
+#define S390_BREAKPOINT_U16 ((uint16_t)0x0001)
+#define S390_SYSCALL_OPCODE ((uint16_t)0x0a00)
+#define S390_SYSCALL_SIZE 2
+
+/*
+ * The user_regs_struct defines the way the user registers are
+ * store on the stack for signal handling.
+ */
+struct user_regs_struct
+{
+ psw_t psw;
+ uint32_t gprs[NUM_GPRS];
+ uint32_t acrs[NUM_ACRS];
+ uint32_t orig_gpr2;
+ s390_fp_regs fp_regs;
+ /*
+ * These per registers are in here so that gdb can modify them
+ * itself as there is no "official" ptrace interface for hardware
+ * watchpoints. This is the way intel does it.
+ */
+ per_struct per_info;
+ addr_t ieee_instruction_pointer;
+ /* Used to give failing instruction back to user for ieee exceptions */
+};
+
+#elif defined(__arm__)
+
+/* this assumes armv */
+#define USR26_MODE 0x00
+#define FIQ26_MODE 0x01
+#define IRQ26_MODE 0x02
+#define SVC26_MODE 0x03
+#define USR_MODE 0x10
+#define FIQ_MODE 0x11
+#define IRQ_MODE 0x12
+#define SVC_MODE 0x13
+#define ABT_MODE 0x17
+#define UND_MODE 0x1b
+#define SYSTEM_MODE 0x1f
+#define MODE_MASK 0x1f
+#define T_BIT 0x20
+#define F_BIT 0x40
+#define I_BIT 0x80
+#define CC_V_BIT (1 << 28)
+#define CC_C_BIT (1 << 29)
+#define CC_Z_BIT (1 << 30)
+#define CC_N_BIT (1 << 31)
+#define PCMASK 0
+
+struct pt_regs {
+ long uregs[18];
+};
+
+#define ARM_cpsr uregs[16]
+#define ARM_pc uregs[15]
+#define ARM_lr uregs[14]
+#define ARM_sp uregs[13]
+#define ARM_ip uregs[12]
+#define ARM_fp uregs[11]
+#define ARM_r10 uregs[10]
+#define ARM_r9 uregs[9]
+#define ARM_r8 uregs[8]
+#define ARM_r7 uregs[7]
+#define ARM_r6 uregs[6]
+#define ARM_r5 uregs[5]
+#define ARM_r4 uregs[4]
+#define ARM_r3 uregs[3]
+#define ARM_r2 uregs[2]
+#define ARM_r1 uregs[1]
+#define ARM_r0 uregs[0]
+#define ARM_ORIG_r0 uregs[17]
+
+#elif defined(__alpha__)
+
+struct pt_regs {
+ unsigned long r0;
+ unsigned long r1;
+ unsigned long r2;
+ unsigned long r3;
+ unsigned long r4;
+ unsigned long r5;
+ unsigned long r6;
+ unsigned long r7;
+ unsigned long r8;
+ unsigned long r19;
+ unsigned long r20;
+ unsigned long r21;
+ unsigned long r22;
+ unsigned long r23;
+ unsigned long r24;
+ unsigned long r25;
+ unsigned long r26;
+ unsigned long r27;
+ unsigned long r28;
+ unsigned long hae;
+/* JRP - These are the values provided to a0-a2 by PALcode */
+ unsigned long trap_a0;
+ unsigned long trap_a1;
+ unsigned long trap_a2;
+/* These are saved by PAL-code: */
+ unsigned long ps;
+ unsigned long pc;
+ unsigned long gp;
+ unsigned long r16;
+ unsigned long r17;
+ unsigned long r18;
+};
+
+struct switch_stack {
+ unsigned long r9;
+ unsigned long r10;
+ unsigned long r11;
+ unsigned long r12;
+ unsigned long r13;
+ unsigned long r14;
+ unsigned long r15;
+ unsigned long r26;
+ unsigned long fp[32]; /* fp[31] is fpcr */
+};
+
+#elif defined(__mips__)
+
+/* 0 - 31 are integer registers, 32 - 63 are fp registers. */
+#define FPR_BASE 32
+#define PC 64
+#define CAUSE 65
+#define BADVADDR 66
+#define MMHI 67
+#define MMLO 68
+#define FPC_CSR 69
+#define FPC_EIR 70
+
+struct pt_regs {
+ /* Pad bytes for argument save space on the stack. */
+ unsigned long pad0[6];
+ /* Saved main processor registers. */
+ unsigned long regs[32];
+ /* Other saved registers. */
+ unsigned long lo;
+ unsigned long hi;
+ /* saved cp0 registers */
+ unsigned long cp0_epc;
+ unsigned long cp0_badvaddr;
+ unsigned long cp0_status;
+ unsigned long cp0_cause;
+};
+
+#elif defined(__sparc__)
+
+struct pt_regs {
+ unsigned long psr;
+ unsigned long pc;
+ unsigned long npc;
+ unsigned long y;
+ unsigned long u_regs[16]; /* globals and ins */
+};
+
+#define UREG_G0 0
+#define UREG_G1 1
+#define UREG_G2 2
+#define UREG_G3 3
+#define UREG_G4 4
+#define UREG_G5 5
+#define UREG_G6 6
+#define UREG_G7 7
+#define UREG_I0 8
+#define UREG_I1 9
+#define UREG_I2 10
+#define UREG_I3 11
+#define UREG_I4 12
+#define UREG_I5 13
+#define UREG_I6 14
+#define UREG_I7 15
+#define UREG_WIM UREG_G0
+#define UREG_FADDR UREG_G0
+#define UREG_FP UREG_I6
+#define UREG_RETPC UREG_I7
+
+/* A register window */
+struct reg_window {
+ unsigned long locals[8];
+ unsigned long ins[8];
+};
+
+/* A Sparc stack frame */
+struct sparc_stackf {
+ unsigned long locals[8];
+ unsigned long ins[6];
+ struct sparc_stackf *fp;
+ unsigned long callers_pc;
+ char *structptr;
+ unsigned long xargs[6];
+ unsigned long xxargs[1];
+};
+
+#define TRACEREG_SZ sizeof(struct pt_regs)
+#define STACKFRAME_SZ sizeof(struct sparc_stackf)
+#define REGWIN_SZ sizeof(struct reg_window)
+
+/* These are for pt_regs. */
+#define PT_PSR 0x0
+#define PT_PC 0x4
+#define PT_NPC 0x8
+#define PT_Y 0xc
+#define PT_G0 0x10
+#define PT_WIM PT_G0
+#define PT_G1 0x14
+#define PT_G2 0x18
+#define PT_G3 0x1c
+#define PT_G4 0x20
+#define PT_G5 0x24
+#define PT_G6 0x28
+#define PT_G7 0x2c
+#define PT_I0 0x30
+#define PT_I1 0x34
+#define PT_I2 0x38
+#define PT_I3 0x3c
+#define PT_I4 0x40
+#define PT_I5 0x44
+#define PT_I6 0x48
+#define PT_FP PT_I6
+#define PT_I7 0x4c
+
+/* Reg_window offsets */
+#define RW_L0 0x00
+#define RW_L1 0x04
+#define RW_L2 0x08
+#define RW_L3 0x0c
+#define RW_L4 0x10
+#define RW_L5 0x14
+#define RW_L6 0x18
+#define RW_L7 0x1c
+#define RW_I0 0x20
+#define RW_I1 0x24
+#define RW_I2 0x28
+#define RW_I3 0x2c
+#define RW_I4 0x30
+#define RW_I5 0x34
+#define RW_I6 0x38
+#define RW_I7 0x3c
+
+/* Stack_frame offsets */
+#define SF_L0 0x00
+#define SF_L1 0x04
+#define SF_L2 0x08
+#define SF_L3 0x0c
+#define SF_L4 0x10
+#define SF_L5 0x14
+#define SF_L6 0x18
+#define SF_L7 0x1c
+#define SF_I0 0x20
+#define SF_I1 0x24
+#define SF_I2 0x28
+#define SF_I3 0x2c
+#define SF_I4 0x30
+#define SF_I5 0x34
+#define SF_FP 0x38
+#define SF_PC 0x3c
+#define SF_RETP 0x40
+#define SF_XARG0 0x44
+#define SF_XARG1 0x48
+#define SF_XARG2 0x4c
+#define SF_XARG3 0x50
+#define SF_XARG4 0x54
+#define SF_XARG5 0x58
+#define SF_XXARG 0x5c
+
+/* Stuff for the ptrace system call */
+#define PTRACE_SUNATTACH 10
+#define PTRACE_SUNDETACH 11
+#define PTRACE_GETREGS 12
+#define PTRACE_SETREGS 13
+#define PTRACE_GETFPREGS 14
+#define PTRACE_SETFPREGS 15
+#define PTRACE_READDATA 16
+#define PTRACE_WRITEDATA 17
+#define PTRACE_READTEXT 18
+#define PTRACE_WRITETEXT 19
+#define PTRACE_GETFPAREGS 20
+#define PTRACE_SETFPAREGS 21
+
+#define PTRACE_GETUCODE 29 /* stupid bsd-ism */
+
+#elif defined(__powerpc__)
+
+struct pt_regs {
+ unsigned long gpr[32];
+ unsigned long nip;
+ unsigned long msr;
+ unsigned long orig_gpr3; /* Used for restarting system calls */
+ unsigned long ctr;
+ unsigned long link;
+ unsigned long xer;
+ unsigned long ccr;
+ unsigned long mq; /* 601 only (not used at present) */
+ /* Used on APUS to hold IPL value. */
+ unsigned long trap; /* Reason for being here */
+ unsigned long dar; /* Fault registers */
+ unsigned long dsisr;
+ unsigned long result; /* Result of a system call */
+};
+
+/*
+ * Offsets used by 'ptrace' system call interface.
+ * These can't be changed without breaking binary compatibility
+ * with MkLinux, etc.
+ */
+#define PT_R0 0
+#define PT_R1 1
+#define PT_R2 2
+#define PT_R3 3
+#define PT_R4 4
+#define PT_R5 5
+#define PT_R6 6
+#define PT_R7 7
+#define PT_R8 8
+#define PT_R9 9
+#define PT_R10 10
+#define PT_R11 11
+#define PT_R12 12
+#define PT_R13 13
+#define PT_R14 14
+#define PT_R15 15
+#define PT_R16 16
+#define PT_R17 17
+#define PT_R18 18
+#define PT_R19 19
+#define PT_R20 20
+#define PT_R21 21
+#define PT_R22 22
+#define PT_R23 23
+#define PT_R24 24
+#define PT_R25 25
+#define PT_R26 26
+#define PT_R27 27
+#define PT_R28 28
+#define PT_R29 29
+#define PT_R30 30
+#define PT_R31 31
+
+#define PT_NIP 32
+#define PT_MSR 33
+#define PT_CTR 35
+#define PT_LNK 36
+#define PT_XER 37
+#define PT_CCR 38
+#define PT_MQ 39
+
+#define PT_FPR0 48 /* each FP reg occupies 2 slots in this space */
+#define PT_FPR31 (PT_FPR0 + 2*31)
+#define PT_FPSCR (PT_FPR0 + 2*32 + 1)
+
+#elif defined(__hppa__)
+
+#include <inttypes.h>
+
+struct pt_regs {
+ unsigned long gr[32]; /* PSW is in gr[0] */
+ uint64_t fr[32];
+ unsigned long sr[ 8];
+ unsigned long iasq[2];
+ unsigned long iaoq[2];
+ unsigned long cr27;
+ unsigned long pad0; /* available for other uses */
+ unsigned long orig_r28;
+ unsigned long ksp;
+ unsigned long kpc;
+ unsigned long sar; /* CR11 */
+ unsigned long iir; /* CR19 */
+ unsigned long isr; /* CR20 */
+ unsigned long ior; /* CR21 */
+ unsigned long ipsw; /* CR22 */
+};
+
+#define PTRACE_SINGLEBLOCK 12 /* resume execution until next branch */
+#define PTRACE_GETSIGINFO 13 /* get child's siginfo structure */
+#define PTRACE_SETSIGINFO 14 /* set child's siginfo structure */
+
+#elif defined(__ia64__)
+
+struct ia64_fpreg {
+ union {
+ unsigned long bits[2];
+ } u;
+} __attribute__ ((aligned (16)));
+
+struct pt_regs {
+ unsigned long cr_ipsr; /* interrupted task's psr */
+ unsigned long cr_iip; /* interrupted task's instruction pointer */
+ unsigned long cr_ifs; /* interrupted task's function state */
+ unsigned long ar_unat; /* interrupted task's NaT register (preserved) */
+ unsigned long ar_pfs; /* prev function state */
+ unsigned long ar_rsc; /* RSE configuration */
+ unsigned long ar_rnat; /* RSE NaT */
+ unsigned long ar_bspstore; /* RSE bspstore */
+ unsigned long pr; /* 64 predicate registers (1 bit each) */
+ unsigned long b6; /* scratch */
+ unsigned long loadrs; /* size of dirty partition << 16 */
+ unsigned long r1; /* the gp pointer */
+ unsigned long r2; /* scratch */
+ unsigned long r3; /* scratch */
+ unsigned long r12; /* interrupted task's memory stack pointer */
+ unsigned long r13; /* thread pointer */
+ unsigned long r14; /* scratch */
+ unsigned long r15; /* scratch */
+ unsigned long r8; /* scratch (return value register 0) */
+ unsigned long r9; /* scratch (return value register 1) */
+ unsigned long r10; /* scratch (return value register 2) */
+ unsigned long r11; /* scratch (return value register 3) */
+ unsigned long r16; /* scratch */
+ unsigned long r17; /* scratch */
+ unsigned long r18; /* scratch */
+ unsigned long r19; /* scratch */
+ unsigned long r20; /* scratch */
+ unsigned long r21; /* scratch */
+ unsigned long r22; /* scratch */
+ unsigned long r23; /* scratch */
+ unsigned long r24; /* scratch */
+ unsigned long r25; /* scratch */
+ unsigned long r26; /* scratch */
+ unsigned long r27; /* scratch */
+ unsigned long r28; /* scratch */
+ unsigned long r29; /* scratch */
+ unsigned long r30; /* scratch */
+ unsigned long r31; /* scratch */
+ unsigned long ar_ccv; /* compare/exchange value (scratch) */
+ unsigned long ar_fpsr; /* floating point status (preserved) */
+ unsigned long b0; /* return pointer (bp) */
+ unsigned long b7; /* scratch */
+ struct ia64_fpreg f6; /* scratch */
+ struct ia64_fpreg f7; /* scratch */
+ struct ia64_fpreg f8; /* scratch */
+ struct ia64_fpreg f9; /* scratch */
+};
+
+struct switch_stack {
+ unsigned long caller_unat; /* user NaT collection register (preserved) */
+ unsigned long ar_fpsr; /* floating-point status register */
+
+ struct ia64_fpreg f2; /* preserved */
+ struct ia64_fpreg f3; /* preserved */
+ struct ia64_fpreg f4; /* preserved */
+ struct ia64_fpreg f5; /* preserved */
+
+ struct ia64_fpreg f10; /* scratch, but untouched by kernel */
+ struct ia64_fpreg f11; /* scratch, but untouched by kernel */
+ struct ia64_fpreg f12; /* scratch, but untouched by kernel */
+ struct ia64_fpreg f13; /* scratch, but untouched by kernel */
+ struct ia64_fpreg f14; /* scratch, but untouched by kernel */
+ struct ia64_fpreg f15; /* scratch, but untouched by kernel */
+ struct ia64_fpreg f16; /* preserved */
+ struct ia64_fpreg f17; /* preserved */
+ struct ia64_fpreg f18; /* preserved */
+ struct ia64_fpreg f19; /* preserved */
+ struct ia64_fpreg f20; /* preserved */
+ struct ia64_fpreg f21; /* preserved */
+ struct ia64_fpreg f22; /* preserved */
+ struct ia64_fpreg f23; /* preserved */
+ struct ia64_fpreg f24; /* preserved */
+ struct ia64_fpreg f25; /* preserved */
+ struct ia64_fpreg f26; /* preserved */
+ struct ia64_fpreg f27; /* preserved */
+ struct ia64_fpreg f28; /* preserved */
+ struct ia64_fpreg f29; /* preserved */
+ struct ia64_fpreg f30; /* preserved */
+ struct ia64_fpreg f31; /* preserved */
+
+ unsigned long r4; /* preserved */
+ unsigned long r5; /* preserved */
+ unsigned long r6; /* preserved */
+ unsigned long r7; /* preserved */
+
+ unsigned long b0; /* so we can force a direct return in copy_thread */
+ unsigned long b1;
+ unsigned long b2;
+ unsigned long b3;
+ unsigned long b4;
+ unsigned long b5;
+
+ unsigned long ar_pfs; /* previous function state */
+ unsigned long ar_lc; /* loop counter (preserved) */
+ unsigned long ar_unat; /* NaT bits for r4-r7 */
+ unsigned long ar_rnat; /* RSE NaT collection register */
+ unsigned long ar_bspstore; /* RSE dirty base (preserved) */
+ unsigned long pr; /* 64 predicate registers (1 bit each) */
+};
+
+#endif
+
+extern long int ptrace(int request, ...) __THROW;
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/reboot.h b/mdk-stage1/dietlibc/include/sys/reboot.h
index ba58d296a..b17a556e5 100644
--- a/mdk-stage1/dietlibc/include/sys/reboot.h
+++ b/mdk-stage1/dietlibc/include/sys/reboot.h
@@ -1,9 +1,26 @@
#ifndef _SYS_REBOOT_H
#define _SYS_REBOOT_H
-#include <linux/reboot.h>
+#define LINUX_REBOOT_MAGIC1 0xfee1dead
+#define LINUX_REBOOT_MAGIC2 672274793
+#define LINUX_REBOOT_MAGIC2A 85072278
+#define LINUX_REBOOT_MAGIC2B 369367448
+
+#define LINUX_REBOOT_CMD_RESTART 0x01234567
+#define LINUX_REBOOT_CMD_HALT 0xCDEF0123
+#define LINUX_REBOOT_CMD_CAD_ON 0x89ABCDEF
+#define LINUX_REBOOT_CMD_CAD_OFF 0x00000000
+#define LINUX_REBOOT_CMD_POWER_OFF 0x4321FEDC
+#define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4
/* Reboot or halt the system. */
-int reboot (int flag, void *arg);
+int reboot (int flag);
+
+/* the glibc people changed their macro names :-/ */
+#define RB_AUTOBOOT 0x01234567
+#define RB_HALT_SYSTEM 0xcdef0123
+#define RB_ENABLE_CAD 0x89abcdef
+#define RB_DISABLE_CAD 0
+#define RB_POWER_OFF 0x4321fedc
#endif /* _SYS_REBOOT_H */
diff --git a/mdk-stage1/dietlibc/include/sys/resource.h b/mdk-stage1/dietlibc/include/sys/resource.h
index 442434cd1..df31b82ab 100644
--- a/mdk-stage1/dietlibc/include/sys/resource.h
+++ b/mdk-stage1/dietlibc/include/sys/resource.h
@@ -1,8 +1,59 @@
#ifndef _SYS_RESOURCE_H
#define _SYS_RESOURCE_H
+#include <time.h>
#include <sys/cdefs.h>
-#include <linux/resource.h>
+
+#define RUSAGE_SELF 0
+#define RUSAGE_CHILDREN (-1)
+#define RUSAGE_BOTH (-2) /* sys_wait4() uses this */
+
+struct rusage {
+ struct timeval ru_utime; /* user time used */
+ struct timeval ru_stime; /* system time used */
+ long ru_maxrss; /* maximum resident set size */
+ long ru_ixrss; /* integral shared memory size */
+ long ru_idrss; /* integral unshared data size */
+ long ru_isrss; /* integral unshared stack size */
+ long ru_minflt; /* page reclaims */
+ long ru_majflt; /* page faults */
+ long ru_nswap; /* swaps */
+ long ru_inblock; /* block input operations */
+ long ru_oublock; /* block output operations */
+ long ru_msgsnd; /* messages sent */
+ long ru_msgrcv; /* messages received */
+ long ru_nsignals; /* signals received */
+ long ru_nvcsw; /* voluntary context switches */
+ long ru_nivcsw; /* involuntary " */
+};
+
+struct rlimit {
+ unsigned long rlim_cur;
+ unsigned long rlim_max;
+};
+
+#define PRIO_MIN (-20)
+#define PRIO_MAX 20
+
+#define PRIO_PROCESS 0
+#define PRIO_PGRP 1
+#define PRIO_USER 2
+
+#define RLIMIT_CPU 0 /* CPU time in ms */
+#define RLIMIT_FSIZE 1 /* Maximum filesize */
+#define RLIMIT_DATA 2 /* max data size */
+#define RLIMIT_STACK 3 /* max stack size */
+#define RLIMIT_CORE 4 /* max core file size */
+#define RLIMIT_RSS 5 /* max resident set size */
+#define RLIMIT_NPROC 6 /* max number of processes */
+#define RLIMIT_NOFILE 7 /* max number of open files */
+#define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */
+#define RLIMIT_AS 9 /* address space limit */
+#define RLIMIT_LOCKS 10 /* maximum file locks held */
+
+#define RLIM_NLIMITS 11
+
+#define RLIM_INFINITY ((long)(~0UL>>1))
int getpriority(int which, int who) __THROW;
int setpriority(int which, int who, int prio) __THROW;
diff --git a/mdk-stage1/dietlibc/include/sys/select.h b/mdk-stage1/dietlibc/include/sys/select.h
index e69de29bb..ce67b8bee 100644
--- a/mdk-stage1/dietlibc/include/sys/select.h
+++ b/mdk-stage1/dietlibc/include/sys/select.h
@@ -0,0 +1,22 @@
+#ifndef _SYS_SELECT_H
+#define _SYS_SELECT_H
+
+typedef long int fd_mask;
+
+#define NFDBITS (8 * sizeof(unsigned long))
+#define FD_SETSIZE 1024
+#define __FDSET_LONGS (FD_SETSIZE/NFDBITS)
+#define __FDELT(d) ((d) / NFDBITS)
+#define __FDMASK(d) (1UL << ((d) % NFDBITS))
+
+typedef struct {
+ unsigned long fds_bits [__FDSET_LONGS];
+} fd_set;
+
+#define FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
+#define FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
+#define FD_ISSET(d, set) (((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) != 0)
+#define FD_ZERO(set) \
+ ((void) memset ((void*) (set), 0, sizeof (fd_set)))
+
+#endif
diff --git a/mdk-stage1/dietlibc/include/sys/sem.h b/mdk-stage1/dietlibc/include/sys/sem.h
index cc182649c..ad16b5f53 100644
--- a/mdk-stage1/dietlibc/include/sys/sem.h
+++ b/mdk-stage1/dietlibc/include/sys/sem.h
@@ -1,11 +1,81 @@
#ifndef _SYS_SEM_H
#define _SYS_SEM_H
-#include <linux/sem.h>
#include <sys/ipc.h>
+/* semop flags */
+#define SEM_UNDO 0x1000 /* undo the operation on exit */
+
+/* semctl Command Definitions. */
+#define GETPID 11 /* get sempid */
+#define GETVAL 12 /* get semval */
+#define GETALL 13 /* get all semval's */
+#define GETNCNT 14 /* get semncnt */
+#define GETZCNT 15 /* get semzcnt */
+#define SETVAL 16 /* set semval */
+#define SETALL 17 /* set all semval's */
+
+/* ipcs ctl cmds */
+#define SEM_STAT 18
+#define SEM_INFO 19
+
+struct semid_ds {
+ struct ipc_perm sem_perm; /* permissions .. see ipc.h */
+ time_t sem_otime; /* last semop time */
+ time_t sem_ctime; /* last change time */
+ struct sem *sem_base; /* ptr to first semaphore in array */
+ struct sem_queue *sem_pending; /* pending operations to be processed */
+ struct sem_queue **sem_pending_last; /* last pending operation */
+ struct sem_undo *undo; /* undo requests on this array */
+ unsigned short sem_nsems; /* no. of semaphores in array */
+};
+
+/* semop system calls takes an array of these. */
+struct sembuf {
+ unsigned short sem_num; /* semaphore index in array */
+ short sem_op; /* semaphore operation */
+ short sem_flg; /* operation flags */
+};
+
+/* please complain to the glibc goons for the following misbehaviour */
+#if 0
+/* arg for semctl system calls. */
+union semun {
+ int val; /* value for SETVAL */
+ struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
+ unsigned short *array; /* array for GETALL & SETALL */
+ struct seminfo *__buf; /* buffer for IPC_INFO */
+ void *__pad;
+};
+#endif
+#define _SEM_SEMUN_UNDEFINED
+
+struct seminfo {
+ int semmap;
+ int semmni;
+ int semmns;
+ int semmnu;
+ int semmsl;
+ int semopm;
+ int semume;
+ int semusz;
+ int semvmx;
+ int semaem;
+};
+
+#define SEMMNI 128 /* <= IPCMNI max # of semaphore identifiers */
+#define SEMMSL 250 /* <= 8 000 max num of semaphores per id */
+#define SEMMNS (SEMMNI*SEMMSL) /* <= INT_MAX max # of semaphores in system */
+#define SEMOPM 32 /* <= 1 000 max num of ops per semop call */
+#define SEMVMX 32767 /* <= 32767 semaphore maximum value */
+
extern int semget( key_t key, int nsems, int semflg) __THROW;
-extern int semctl(int semid, int semnum, int cmd, union semun arg) __THROW;
+
+/* The prototype really is:
+ * extern int semctl(int semid, int semnum, int cmd, union semun arg) __THROW;
+ * glibc bug compatibility forces us to write it like this: */
+extern int semctl(int semid, int semnum, int cmd, ...) __THROW;
+
extern int semop(int semid, struct sembuf *sops, unsigned nsops) __THROW;
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/sendfile.h b/mdk-stage1/dietlibc/include/sys/sendfile.h
index 2e0c04add..ce6630676 100644
--- a/mdk-stage1/dietlibc/include/sys/sendfile.h
+++ b/mdk-stage1/dietlibc/include/sys/sendfile.h
@@ -2,8 +2,12 @@
#define _SYS_SENDFILE_H
#include <sys/cdefs.h>
+#include <sys/types.h>
-extern ssize_t sendfile (int __out_fd, int __in_fd, off_t *offset,
- size_t __count) __THROW;
+extern ssize_t sendfile (int out_fd, int in_fd, off_t* offset,
+ size_t count) __THROW;
+
+extern ssize_t sendfile64 (int out_fd, int in_fd, loff_t* offset,
+ size_t count) __THROW;
#endif /* sys/sendfile.h */
diff --git a/mdk-stage1/dietlibc/include/sys/shm.h b/mdk-stage1/dietlibc/include/sys/shm.h
index c27f5ddcf..879a8786e 100644
--- a/mdk-stage1/dietlibc/include/sys/shm.h
+++ b/mdk-stage1/dietlibc/include/sys/shm.h
@@ -1,12 +1,70 @@
#ifndef _SYS_SHM_H
#define _SYS_SHM_H
-#include <linux/shm.h>
#include <sys/ipc.h>
-#include <asm/page.h>
-#ifndef PAGE_SIZE
-#define PAGE_SIZE getpagesize()
+#define SHMMAX 0x2000000 /* max shared seg size (bytes) */
+#define SHMMIN 1 /* min shared seg size (bytes) */
+#define SHMMNI 4096 /* max num of segs system wide */
+#define SHMALL (SHMMAX/PAGE_SIZE*(SHMMNI/16)) /* max shm system wide (pages) */
+#define SHMSEG SHMMNI /* max shared segs per process */
+
+struct shmid_ds {
+ struct ipc_perm shm_perm; /* operation perms */
+ int shm_segsz; /* size of segment (bytes) */
+ time_t shm_atime; /* last attach time */
+ time_t shm_dtime; /* last detach time */
+ time_t shm_ctime; /* last change time */
+ pid_t shm_cpid; /* pid of creator */
+ pid_t shm_lpid; /* pid of last operator */
+ unsigned short shm_nattch; /* no. of current attaches */
+ unsigned short shm_unused; /* compatibility */
+ void *shm_unused2; /* ditto - used by DIPC */
+ void *shm_unused3; /* unused */
+};
+
+/* permission flag for shmget */
+#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */
+#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */
+
+/* mode for attach */
+#define SHM_RDONLY 010000 /* read-only access */
+#define SHM_RND 020000 /* round attach address to SHMLBA boundary */
+#define SHM_REMAP 040000 /* take-over region on attach */
+
+/* super user shmctl commands */
+#define SHM_LOCK 11
+#define SHM_UNLOCK 12
+
+/* ipcs ctl commands */
+#define SHM_STAT 13
+#define SHM_INFO 14
+
+/* Obsolete, used only for backwards compatibility */
+struct shminfo {
+ int shmmax;
+ int shmmin;
+ int shmmni;
+ int shmseg;
+ int shmall;
+};
+
+struct shm_info {
+ int used_ids;
+ unsigned long shm_tot; /* total allocated shm */
+ unsigned long shm_rss; /* total resident shm */
+ unsigned long shm_swp; /* total swapped shm */
+ unsigned long swap_attempts;
+ unsigned long swap_successes;
+};
+
+#if defined(__i386__) || defined(__mips__) || defined(__arm__) || defined(__powerpc__) || defined(__s390__) || defined(__hppa__) || defined(__x86_64__) || defined(__ia64__)
+#define PAGE_SIZE 4096UL
+#define PAGE_SHIFT 12
+#elif defined(__alpha__) || defined(__sparc__)
+/* sun4* has 4k except sun4 architecture, sparc64 has 8k */
+#define PAGE_SIZE 8192UL
+#define PAGE_SHIFT 13
#endif
extern int shmget(key_t key, int size, int shmflg) __THROW;
diff --git a/mdk-stage1/dietlibc/include/sys/socket.h b/mdk-stage1/dietlibc/include/sys/socket.h
index a1435501c..a1130c4f6 100644
--- a/mdk-stage1/dietlibc/include/sys/socket.h
+++ b/mdk-stage1/dietlibc/include/sys/socket.h
@@ -3,26 +3,380 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-#include <linux/socket.h>
-#ifndef SOCK_DGRAM
-/* the Linux kernel headers suck really badly on non-x86 */
+/* For setsockoptions(2) */
+#if defined(__alpha__) || defined(__mips__)
+#define SOL_SOCKET 0xffff
+
+#define SO_DEBUG 0x0001
+#define SO_REUSEADDR 0x0004
+#define SO_TYPE 0x1008
+#define SO_ERROR 0x1007
+#define SO_DONTROUTE 0x0010
+#define SO_BROADCAST 0x0020
+#define SO_SNDBUF 0x1001
+#define SO_RCVBUF 0x1002
+#define SO_KEEPALIVE 0x0008
+#define SO_OOBINLINE 0x0100
+#define SO_NO_CHECK 11
+#define SO_PRIORITY 12
+#define SO_LINGER 0x0080
+#define SO_BSDCOMPAT 14
+/* To add :#define SO_REUSEPORT 15 */
+#define SO_PASSCRED 17
+#define SO_PEERCRED 18
+#define SO_RCVLOWAT 0x1004
+#define SO_SNDLOWAT 0x1003
+#define SO_RCVTIMEO 0x1006
+#define SO_SNDTIMEO 0x1005
+#define SO_ACCEPTCONN 0x1009
+
+#define SO_STYLE SO_TYPE /* Synonym */
+
+#elif defined(__hppa__)
+#define SOL_SOCKET 0xffff
+
+#define SO_DEBUG 0x0001
+#define SO_REUSEADDR 0x0004
+#define SO_KEEPALIVE 0x0008
+#define SO_DONTROUTE 0x0010
+#define SO_BROADCAST 0x0020
+#define SO_LINGER 0x0080
+#define SO_OOBINLINE 0x0100
+/* To add :#define SO_REUSEPORT 0x0200 */
+#define SO_SNDBUF 0x1001
+#define SO_RCVBUF 0x1002
+#define SO_SNDLOWAT 0x1003
+#define SO_RCVLOWAT 0x1004
+#define SO_SNDTIMEO 0x1005
+#define SO_RCVTIMEO 0x1006
+#define SO_ERROR 0x1007
+#define SO_TYPE 0x1008
+#define SO_PEERNAME 0x2000
+
+#define SO_NO_CHECK 0x400b
+#define SO_PRIORITY 0x400c
+#define SO_BSDCOMPAT 0x400e
+#define SO_PASSCRED 0x4010
+#define SO_PEERCRED 0x4011
+#define SO_TIMESTAMP 0x4012
+#define SCM_TIMESTAMP SO_TIMESTAMP
+
+/* Security levels - as per NRL IPv6 - don't actually do anything */
+#define SO_SECURITY_AUTHENTICATION 0x4016
+#define SO_SECURITY_ENCRYPTION_TRANSPORT 0x4017
+#define SO_SECURITY_ENCRYPTION_NETWORK 0x4018
+
+#define SO_BINDTODEVICE 0x4019
+
+/* Socket filtering */
+#define SO_ATTACH_FILTER 0x401a
+#define SO_DETACH_FILTER 0x401b
+
+#define SO_ACCEPTCONN 0x401c
+
+#elif defined(__sparc__)
+#define SOL_SOCKET 0xffff
+
+#define SO_DEBUG 0x0001
+#define SO_PASSCRED 0x0002
+#define SO_REUSEADDR 0x0004
+#define SO_KEEPALIVE 0x0008
+#define SO_DONTROUTE 0x0010
+#define SO_BROADCAST 0x0020
+#define SO_PEERCRED 0x0040
+#define SO_LINGER 0x0080
+#define SO_OOBINLINE 0x0100
+/* To add :#define SO_REUSEPORT 0x0200 */
+#define SO_BSDCOMPAT 0x0400
+#define SO_RCVLOWAT 0x0800
+#define SO_SNDLOWAT 0x1000
+#define SO_RCVTIMEO 0x2000
+#define SO_SNDTIMEO 0x4000
+#define SO_ACCEPTCONN 0x8000
+
+#define SO_DONTLINGER (~SO_LINGER) /* Older SunOS compat. hack */
+
+#define SO_SNDBUF 0x1001
+#define SO_RCVBUF 0x1002
+#define SO_ERROR 0x1007
+#define SO_TYPE 0x1008
+
+#define SO_ATTACH_FILTER 0x001a
+#define SO_DETACH_FILTER 0x001b
+
+#define SO_PEERNAME 0x001c
+#define SO_TIMESTAMP 0x001d
+#define SCM_TIMESTAMP SO_TIMESTAMP
+
+/* Security levels - as per NRL IPv6 - don't actually do anything */
+#define SO_SECURITY_AUTHENTICATION 0x5001
+#define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002
+#define SO_SECURITY_ENCRYPTION_NETWORK 0x5004
+
+#else
+
+#define SOL_SOCKET 1
+
+#define SO_DEBUG 1
+#define SO_REUSEADDR 2
+#define SO_TYPE 3
+#define SO_ERROR 4
+#define SO_DONTROUTE 5
+#define SO_BROADCAST 6
+#define SO_SNDBUF 7
+#define SO_RCVBUF 8
+#define SO_KEEPALIVE 9
+#define SO_OOBINLINE 10
+#define SO_NO_CHECK 11
+#define SO_PRIORITY 12
+#define SO_LINGER 13
+#define SO_BSDCOMPAT 14
+/* To add :#define SO_REUSEPORT 15 */
+#define SO_PASSCRED 16
+#define SO_PEERCRED 17
+#define SO_RCVLOWAT 18
+#define SO_SNDLOWAT 19
+#define SO_RCVTIMEO 20
+#define SO_SNDTIMEO 21
+#define SO_ACCEPTCONN 30
+
+#endif
+
+#if !defined(__hppa__) && !defined(__sparc__)
+/* Security levels - as per NRL IPv6 - don't actually do anything */
+#define SO_SECURITY_AUTHENTICATION 22
+#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
+#define SO_SECURITY_ENCRYPTION_NETWORK 24
+
+#define SO_BINDTODEVICE 25
+
+/* Socket filtering */
+#define SO_ATTACH_FILTER 26
+#define SO_DETACH_FILTER 27
+
+#define SO_PEERNAME 28
+#define SO_TIMESTAMP 29
+#define SCM_TIMESTAMP SO_TIMESTAMP
+#endif
+
+/* Socket types. */
+#ifdef __mips__
+#define SOCK_DGRAM 1 /* datagram (conn.less) socket */
+#define SOCK_STREAM 2 /* stream (connection) socket */
+#else
#define SOCK_STREAM 1 /* stream (connection) socket */
#define SOCK_DGRAM 2 /* datagram (conn.less) socket */
+#endif
#define SOCK_RAW 3 /* raw socket */
#define SOCK_RDM 4 /* reliably-delivered message */
#define SOCK_SEQPACKET 5 /* sequential packet socket */
#define SOCK_PACKET 10 /* linux specific way of */
-#endif
+ /* getting packets at the dev */
+ /* level. For writing rarp and */
+ /* other similar things on the */
+ /* user level. */
+
+struct sockaddr {
+ sa_family_t sa_family;
+ char sa_data[14];
+};
+
+struct linger {
+ int l_onoff;
+ int l_linger;
+};
+
+struct iovec {
+ void* iov_base; /* BSD uses caddr_t (1003.1g requires void *) */
+ size_t iov_len; /* Must be size_t (1003.1g) */
+};
+
+struct msghdr {
+ void* msg_name; /* Socket name */
+ int msg_namelen; /* Length of name */
+ struct iovec* msg_iov; /* Data blocks */
+ size_t msg_iovlen; /* Number of blocks */
+ void* msg_control; /* Per protocol magic (eg BSD file descriptor passing) */
+ size_t msg_controllen; /* Length of cmsg list */
+ unsigned msg_flags;
+};
+
+struct cmsghdr {
+ size_t cmsg_len; /* data byte count, including hdr */
+ int cmsg_level; /* originating protocol */
+ int cmsg_type; /* protocol-specific type */
+};
+
+#define UIO_FASTIOV 8
+#define UIO_MAXIOV 1024
+
+/* "Socket"-level control message types: */
+
+#define SCM_RIGHTS 0x01 /* rw: access rights (array of int) */
+#define SCM_CREDENTIALS 0x02 /* rw: struct ucred */
+#define SCM_CONNECT 0x03 /* rw: struct scm_connect */
+
+struct ucred {
+ unsigned int pid;
+ unsigned int uid;
+ unsigned int gid;
+};
+
+/* Supported address families. */
+#define AF_UNSPEC 0
+#define AF_UNIX 1 /* Unix domain sockets */
+#define AF_LOCAL 1 /* POSIX name for AF_UNIX */
+#define AF_INET 2 /* Internet IP Protocol */
+#define AF_AX25 3 /* Amateur Radio AX.25 */
+#define AF_IPX 4 /* Novell IPX */
+#define AF_APPLETALK 5 /* AppleTalk DDP */
+#define AF_NETROM 6 /* Amateur Radio NET/ROM */
+#define AF_BRIDGE 7 /* Multiprotocol bridge */
+#define AF_ATMPVC 8 /* ATM PVCs */
+#define AF_X25 9 /* Reserved for X.25 project */
+#define AF_INET6 10 /* IP version 6 */
+#define AF_ROSE 11 /* Amateur Radio X.25 PLP */
+#define AF_DECnet 12 /* Reserved for DECnet project */
+#define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/
+#define AF_SECURITY 14 /* Security callback pseudo AF */
+#define AF_KEY 15 /* PF_KEY key management API */
+#define AF_NETLINK 16
+#define AF_ROUTE AF_NETLINK /* Alias to emulate 4.4BSD */
+#define AF_PACKET 17 /* Packet family */
+#define AF_ASH 18 /* Ash */
+#define AF_ECONET 19 /* Acorn Econet */
+#define AF_ATMSVC 20 /* ATM SVCs */
+#define AF_SNA 22 /* Linux SNA Project (nutters!) */
+#define AF_IRDA 23 /* IRDA sockets */
+#define AF_PPPOX 24 /* PPPoX sockets */
+#define AF_WANPIPE 25 /* Wanpipe API Sockets */
+#define AF_MAX 32 /* For now.. */
+
+/* Protocol families, same as address families. */
+#define PF_UNSPEC AF_UNSPEC
+#define PF_UNIX AF_UNIX
+#define PF_LOCAL AF_LOCAL
+#define PF_INET AF_INET
+#define PF_AX25 AF_AX25
+#define PF_IPX AF_IPX
+#define PF_APPLETALK AF_APPLETALK
+#define PF_NETROM AF_NETROM
+#define PF_BRIDGE AF_BRIDGE
+#define PF_ATMPVC AF_ATMPVC
+#define PF_X25 AF_X25
+#define PF_INET6 AF_INET6
+#define PF_ROSE AF_ROSE
+#define PF_DECnet AF_DECnet
+#define PF_NETBEUI AF_NETBEUI
+#define PF_SECURITY AF_SECURITY
+#define PF_KEY AF_KEY
+#define PF_NETLINK AF_NETLINK
+#define PF_ROUTE AF_ROUTE
+#define PF_PACKET AF_PACKET
+#define PF_ASH AF_ASH
+#define PF_ECONET AF_ECONET
+#define PF_ATMSVC AF_ATMSVC
+#define PF_SNA AF_SNA
+#define PF_IRDA AF_IRDA
+#define PF_PPPOX AF_PPPOX
+#define PF_WANPIPE AF_WANPIPE
+#define PF_MAX AF_MAX
+
+/* Maximum queue length specifiable by listen. */
+#define SOMAXCONN 128
+
+/* Flags we can use with send/ and recv.
+ Added those for 1003.1g not all are supported yet */
+#define MSG_OOB 1
+#define MSG_PEEK 2
+#define MSG_DONTROUTE 4
+#define MSG_TRYHARD 4 /* Synonym for MSG_DONTROUTE for DECnet */
+#define MSG_CTRUNC 8
+#define MSG_PROBE 0x10 /* Do not send. Only probe path f.e. for MTU */
+#define MSG_TRUNC 0x20
+#define MSG_DONTWAIT 0x40 /* Nonblocking io */
+#define MSG_EOR 0x80 /* End of record */
+#define MSG_WAITALL 0x100 /* Wait for a full request */
+#define MSG_FIN 0x200
+#define MSG_EOF MSG_FIN
+#define MSG_SYN 0x400
+#define MSG_CONFIRM 0x800 /* Confirm path validity */
+#define MSG_RST 0x1000
+#define MSG_ERRQUEUE 0x2000 /* Fetch message from error queue */
+#define MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */
+#define MSG_MORE 0x8000 /* Sender will send more */
+
+/* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
+#define SOL_IP 0
+/* #define SOL_ICMP 1 No-no-no! Due to Linux :-) we cannot use SOL_ICMP=1 */
+#define SOL_TCP 6
+#define SOL_UDP 17
+#define SOL_IPV6 41
+#define SOL_ICMPV6 58
+#define SOL_RAW 255
+#define SOL_IPX 256
+#define SOL_AX25 257
+#define SOL_ATALK 258
+#define SOL_NETROM 259
+#define SOL_ROSE 260
+#define SOL_DECNET 261
+#define SOL_X25 262
+#define SOL_PACKET 263
+#define SOL_ATM 264 /* ATM layer (cell level) */
+#define SOL_AAL 265 /* ATM Adaption Layer (packet level) */
+#define SOL_IRDA 266
+
+/* IPX options */
+#define IPX_TYPE 1
+
+#define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
+#define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg))
+#define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg))
+
+static inline struct cmsghdr* __cmsg_nxthdr(void *__ctl, size_t __size, struct cmsghdr *__cmsg)
+{
+ struct cmsghdr * __ptr;
+ __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len));
+ if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
+ return (struct cmsghdr *)0;
+ return __ptr;
+}
+
+static inline struct cmsghdr* cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg)
+{
+ return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
+}
+
+#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr))))
+#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
+#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
+
+#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? \
+ (struct cmsghdr *)(ctl) : \
+ (struct cmsghdr *)NULL)
+#define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
struct sockaddr_storage {
- char __tmp[sizeof(struct sockaddr)];
+ sa_family_t ss_family;
+ uint32_t __ss_align;
+ char __ss_padding[(128 - (2 * sizeof (uint32_t ))) ];
};
+#ifndef SOCK_DGRAM
+/* the Linux kernel headers suck really badly on non-x86 */
+#define SOCK_STREAM 1 /* stream (connection) socket */
+#define SOCK_DGRAM 2 /* datagram (conn.less) socket */
+#define SOCK_RAW 3 /* raw socket */
+#define SOCK_RDM 4 /* reliably-delivered message */
+#define SOCK_SEQPACKET 5 /* sequential packet socket */
+#define SOCK_PACKET 10 /* linux specific way of */
+#endif
+
int socket(int domain, int type, int protocol) __THROW;
int accept(int s, struct sockaddr *addr, socklen_t *addrlen) __THROW;
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) __THROW;
-int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) __THROW;
+int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen) __THROW;
int recv(int s, void *buf, size_t len, int flags) __THROW;
int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) __THROW;
int recvmsg(int s, struct msghdr *msg, int flags) __THROW;
@@ -43,4 +397,130 @@ int listen(int s, int backlog) __THROW;
#define SHUT_RDWR 2
int shutdown(int s, int how) __THROW;
+int socketpair(int d, int type, int protocol, int sv[2]);
+
+/* currently not supported: */
+#define NI_NOFQDN 1
+
+#define NI_NUMERICHOST 2
+#define NI_NAMEREQD 4
+#define NI_NUMERICSERV 8
+#define NI_DGRAM 16
+
+struct addrinfo {
+ int ai_flags;
+ int ai_family;
+ int ai_socktype;
+ int ai_protocol;
+ size_t ai_addrlen;
+ struct sockaddr *ai_addr;
+ char *ai_canonname;
+ struct addrinfo *ai_next;
+};
+
+int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host,
+ size_t hostlen, char *serv, size_t servlen, int flags) __THROW;
+int getaddrinfo(const char *node, const char *service, const struct
+ addrinfo *hints, struct addrinfo **res) __THROW;
+void freeaddrinfo(struct addrinfo *res) __THROW;
+const char *gai_strerror(int errcode) __THROW;
+
+#define EAI_FAMILY -1
+#define EAI_SOCKTYPE -2
+#define EAI_BADFLAGS -3
+#define EAI_NONAME -4
+#define EAI_SERVICE -5
+#define EAI_ADDRFAMILY -6
+#define EAI_NODATA -7
+#define EAI_MEMORY -8
+#define EAI_FAIL -9
+#define EAI_AGAIN -10
+#define EAI_SYSTEM -11
+
+#define AI_NUMERICHOST 1
+#define AI_CANONNAME 2
+#define AI_PASSIVE 4
+
+/* Linux-specific socket ioctls */
+#define SIOCINQ FIONREAD
+#define SIOCOUTQ TIOCOUTQ
+
+/* Routing table calls. */
+#define SIOCADDRT 0x890B /* add routing table entry */
+#define SIOCDELRT 0x890C /* delete routing table entry */
+#define SIOCRTMSG 0x890D /* call to routing system */
+
+/* Socket configuration controls. */
+#define SIOCGIFNAME 0x8910 /* get iface name */
+#define SIOCSIFLINK 0x8911 /* set iface channel */
+#define SIOCGIFCONF 0x8912 /* get iface list */
+#define SIOCGIFFLAGS 0x8913 /* get flags */
+#define SIOCSIFFLAGS 0x8914 /* set flags */
+#define SIOCGIFADDR 0x8915 /* get PA address */
+#define SIOCSIFADDR 0x8916 /* set PA address */
+#define SIOCGIFDSTADDR 0x8917 /* get remote PA address */
+#define SIOCSIFDSTADDR 0x8918 /* set remote PA address */
+#define SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */
+#define SIOCSIFBRDADDR 0x891a /* set broadcast PA address */
+#define SIOCGIFNETMASK 0x891b /* get network PA mask */
+#define SIOCSIFNETMASK 0x891c /* set network PA mask */
+#define SIOCGIFMETRIC 0x891d /* get metric */
+#define SIOCSIFMETRIC 0x891e /* set metric */
+#define SIOCGIFMEM 0x891f /* get memory address (BSD) */
+#define SIOCSIFMEM 0x8920 /* set memory address (BSD) */
+#define SIOCGIFMTU 0x8921 /* get MTU size */
+#define SIOCSIFMTU 0x8922 /* set MTU size */
+#define SIOCSIFNAME 0x8923 /* set interface name */
+#define SIOCSIFHWADDR 0x8924 /* set hardware address */
+#define SIOCGIFENCAP 0x8925 /* get/set encapsulations */
+#define SIOCSIFENCAP 0x8926
+#define SIOCGIFHWADDR 0x8927 /* Get hardware address */
+#define SIOCGIFSLAVE 0x8929 /* Driver slaving support */
+#define SIOCSIFSLAVE 0x8930
+#define SIOCADDMULTI 0x8931 /* Multicast address lists */
+#define SIOCDELMULTI 0x8932
+#define SIOCGIFINDEX 0x8933 /* name -> if_index mapping */
+#define SIOGIFINDEX SIOCGIFINDEX /* misprint compatibility :-) */
+#define SIOCSIFPFLAGS 0x8934 /* set/get extended flags set */
+#define SIOCGIFPFLAGS 0x8935
+#define SIOCDIFADDR 0x8936 /* delete PA address */
+#define SIOCSIFHWBROADCAST 0x8937 /* set hardware broadcast addr */
+#define SIOCGIFCOUNT 0x8938 /* get number of devices */
+
+#define SIOCGIFBR 0x8940 /* Bridging support */
+#define SIOCSIFBR 0x8941 /* Set bridging options */
+
+#define SIOCGIFTXQLEN 0x8942 /* Get the tx queue length */
+#define SIOCSIFTXQLEN 0x8943 /* Set the tx queue length */
+
+#define SIOCGIFDIVERT 0x8944 /* Frame diversion support */
+#define SIOCSIFDIVERT 0x8945 /* Set frame diversion options */
+
+#define SIOCETHTOOL 0x8946 /* Ethtool interface */
+
+/* ARP cache control calls. */
+ /* 0x8950 - 0x8952 * obsolete calls, don't re-use */
+#define SIOCDARP 0x8953 /* delete ARP table entry */
+#define SIOCGARP 0x8954 /* get ARP table entry */
+#define SIOCSARP 0x8955 /* set ARP table entry */
+
+/* RARP cache control calls. */
+#define SIOCDRARP 0x8960 /* delete RARP table entry */
+#define SIOCGRARP 0x8961 /* get RARP table entry */
+#define SIOCSRARP 0x8962 /* set RARP table entry */
+
+/* Driver configuration calls */
+
+#define SIOCGIFMAP 0x8970 /* Get device parameters */
+#define SIOCSIFMAP 0x8971 /* Set device parameters */
+
+/* DLCI configuration calls */
+
+#define SIOCADDDLCI 0x8980 /* Create new DLCI device */
+#define SIOCDELDLCI 0x8981 /* Delete DLCI device */
+
+#define SIOCDEVPRIVATE 0x89F0 /* to 89FF */
+
+#define _LINUX_SOCKET_H
+
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/stat.h b/mdk-stage1/dietlibc/include/sys/stat.h
index 10fddfa42..d31cbd1f2 100644
--- a/mdk-stage1/dietlibc/include/sys/stat.h
+++ b/mdk-stage1/dietlibc/include/sys/stat.h
@@ -3,30 +3,499 @@
#include <sys/cdefs.h>
#include <sys/types.h>
+#include <endian.h>
-#include <linux/stat.h>
-#include <asm/stat.h>
+#if defined(__i386__)
+struct stat {
+ unsigned short st_dev;
+ unsigned short __pad1;
+ unsigned long st_ino;
+ unsigned short st_mode;
+ unsigned short st_nlink;
+ unsigned short st_uid;
+ unsigned short st_gid;
+ unsigned short st_rdev;
+ unsigned short __pad2;
+ unsigned long st_size;
+ unsigned long st_blksize;
+ unsigned long st_blocks;
+ signed long st_atime;
+ unsigned long __unused1;
+ signed long st_mtime;
+ unsigned long __unused2;
+ signed long st_ctime;
+ unsigned long __unused3;
+ unsigned long __unused4;
+ unsigned long __unused5;
+};
+
+struct stat64 {
+ unsigned short st_dev;
+ unsigned char __pad0[10];
+
+#define STAT64_HAS_BROKEN_ST_INO 1
+ unsigned long __st_ino;
+
+ unsigned int st_mode;
+ unsigned int st_nlink;
+
+ unsigned long st_uid;
+ unsigned long st_gid;
+
+ unsigned short st_rdev;
+ unsigned char __pad3[10];
+
+__extension__ long long st_size;
+ unsigned long st_blksize;
+
+ unsigned long st_blocks; /* Number 512-byte blocks allocated. */
+ unsigned long __pad4; /* future possible st_blocks high bits */
+
+ unsigned long st_atime;
+ unsigned long __pad5;
+
+ signed long st_mtime;
+ unsigned long __pad6;
+
+ unsigned long st_ctime;
+ unsigned long __pad7; /* will be high 32 bits of ctime someday */
+
+__extension__ unsigned long long st_ino;
+};
+#elif defined(__sparc__)
+struct stat {
+ unsigned short st_dev;
+ unsigned long st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ unsigned short st_uid;
+ unsigned short st_gid;
+ unsigned short st_rdev;
+ long st_size;
+ long st_atime;
+ unsigned long __unused1;
+ long st_mtime;
+ unsigned long __unused2;
+ long st_ctime;
+ unsigned long __unused3;
+ long st_blksize;
+ long st_blocks;
+ unsigned long __unused4[2];
+};
+
+struct stat64 {
+ unsigned char __pad0[6];
+ unsigned short st_dev;
+
+__extension__ unsigned long long st_ino;
+
+ unsigned int st_mode;
+ unsigned int st_nlink;
+
+ unsigned int st_uid;
+ unsigned int st_gid;
+
+ unsigned char __pad2[6];
+ unsigned short st_rdev;
+
+ unsigned char __pad3[8];
+
+__extension__ long long st_size;
+ unsigned int st_blksize;
+
+ unsigned char __pad4[8];
+ unsigned int st_blocks;
+
+ signed int st_atime;
+ unsigned int __unused1;
+
+ signed int st_mtime;
+ unsigned int __unused2;
+
+ signed int st_ctime;
+ unsigned int __unused3;
+
+ unsigned int __unused4;
+ unsigned int __unused5;
+};
+#elif defined(__alpha__)
+struct stat {
+ unsigned int st_dev;
+ unsigned int st_ino;
+ unsigned int st_mode;
+ unsigned int st_nlink;
+ unsigned int st_uid;
+ unsigned int st_gid;
+ unsigned int st_rdev;
+ long st_size;
+ signed long st_atime;
+ signed long st_mtime;
+ signed long st_ctime;
+ unsigned int st_blksize;
+ int st_blocks;
+ unsigned int st_flags;
+ unsigned int st_gen;
+};
+#elif defined(__mips__)
+struct stat {
+ unsigned int st_dev;
+ long st_pad1[3]; /* Reserved for network id */
+ ino_t st_ino;
+ unsigned int st_mode;
+ int st_nlink;
+ int st_uid;
+ int st_gid;
+ unsigned int st_rdev;
+ long st_pad2[2];
+ long st_size;
+ long st_pad3;
+ /*
+ * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
+ * but we don't have it under Linux.
+ */
+ time_t st_atime;
+ long reserved0;
+ time_t st_mtime;
+ long reserved1;
+ time_t st_ctime;
+ long reserved2;
+ long st_blksize;
+ long st_blocks;
+ char st_fstype[16]; /* Filesystem type name */
+ long st_pad4[8];
+ /* Linux specific fields */
+ unsigned int st_flags;
+ unsigned int st_gen;
+};
+
+struct stat64 {
+ unsigned long st_dev;
+ unsigned long st_pad0[3]; /* Reserved for st_dev expansion */
+__extension__ unsigned long long st_ino;
+ unsigned int st_mode;
+ unsigned int st_nlink;
+ unsigned int st_uid;
+ unsigned int st_gid;
+ unsigned long st_rdev;
+ unsigned long st_pad1[3]; /* Reserved for st_rdev expansion */
+__extension__ long long st_size;
+ /*
+ * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
+ * but we don't have it under Linux.
+ */
+ time_t st_atime;
+ unsigned long reserved0; /* Reserved for st_atime expansion */
+ time_t st_mtime;
+ unsigned long reserved1; /* Reserved for st_atime expansion */
+ time_t st_ctime;
+ unsigned long reserved2; /* Reserved for st_atime expansion */
+ unsigned long st_blksize;
+ unsigned long st_pad2;
+__extension__ long long st_blocks;
+};
+#elif defined(__powerpc__)
+struct stat {
+ dev_t st_dev;
+ ino_t st_ino;
+ mode_t st_mode;
+ nlink_t st_nlink;
+ uid_t st_uid;
+ gid_t st_gid;
+ dev_t st_rdev;
+ off_t st_size;
+ unsigned long st_blksize;
+ unsigned long st_blocks;
+ signed long st_atime;
+ unsigned long __unused1;
+ signed long st_mtime;
+ unsigned long __unused2;
+ signed long st_ctime;
+ unsigned long __unused3;
+ unsigned long __unused4;
+ unsigned long __unused5;
+};
+
+/* This matches struct stat64 in glibc2.1.
+ */
+struct stat64 {
+__extension__ unsigned long long st_dev; /* Device. */
+__extension__ unsigned long long st_ino; /* File serial number. */
+ unsigned int st_mode; /* File mode. */
+ unsigned int st_nlink; /* Link count. */
+ unsigned int st_uid; /* User ID of the file's owner. */
+ unsigned int st_gid; /* Group ID of the file's group. */
+__extension__ unsigned long long st_rdev; /* Device number, if device. */
+ unsigned short int __pad2;
+__extension__ long long st_size; /* Size of file, in bytes. */
+ long st_blksize; /* Optimal block size for I/O. */
+
+__extension__ long long st_blocks; /* Number 512-byte blocks allocated. */
+ long st_atime; /* Time of last access. */
+ unsigned long int __unused1;
+ long st_mtime; /* Time of last modification. */
+ unsigned long int __unused2;
+ long st_ctime; /* Time of last status change. */
+ unsigned long int __unused3;
+ unsigned long int __unused4;
+ unsigned long int __unused5;
+};
+#elif defined(__arm__)
+struct stat {
+ unsigned short st_dev;
+ unsigned short __pad1;
+ unsigned long st_ino;
+ unsigned short st_mode;
+ unsigned short st_nlink;
+ unsigned short st_uid;
+ unsigned short st_gid;
+ unsigned short st_rdev;
+ unsigned short __pad2;
+ unsigned long st_size;
+ unsigned long st_blksize;
+ unsigned long st_blocks;
+ signed long st_atime;
+ unsigned long __unused1;
+ signed long st_mtime;
+ unsigned long __unused2;
+ signed long st_ctime;
+ unsigned long __unused3;
+ unsigned long __unused4;
+ unsigned long __unused5;
+};
+
+/* This matches struct stat64 in glibc2.1, hence the absolutely
+ * insane amounts of padding around dev_t's.
+ */
+struct stat64 {
+ unsigned short st_dev;
+ unsigned char __pad0[10];
+
+#define STAT64_HAS_BROKEN_ST_INO 1
+ unsigned long __st_ino;
+ unsigned int st_mode;
+ unsigned int st_nlink;
+
+ unsigned long st_uid;
+ unsigned long st_gid;
+
+ unsigned short st_rdev;
+ unsigned char __pad3[10];
+
+__extension__ long long st_size;
+ unsigned long st_blksize;
+
+ unsigned long st_blocks; /* Number 512-byte blocks allocated. */
+ unsigned long __pad4; /* future possible st_blocks high bits */
+
+ signed long st_atime;
+ unsigned long __pad5;
+
+ signed long st_mtime;
+ unsigned long __pad6;
+
+ signed long st_ctime;
+ unsigned long __pad7; /* will be high 32 bits of ctime someday */
+
+__extension__ unsigned long long st_ino;
+};
+#elif defined(__s390__)
+struct stat {
+ unsigned short st_dev;
+ unsigned short __pad1;
+ unsigned long st_ino;
+ unsigned short st_mode;
+ unsigned short st_nlink;
+ unsigned short st_uid;
+ unsigned short st_gid;
+ unsigned short st_rdev;
+ unsigned short __pad2;
+ unsigned long st_size;
+ unsigned long st_blksize;
+ unsigned long st_blocks;
+ unsigned long st_atime;
+ unsigned long __unused1;
+ unsigned long st_mtime;
+ unsigned long __unused2;
+ unsigned long st_ctime;
+ unsigned long __unused3;
+ unsigned long __unused4;
+ unsigned long __unused5;
+};
+struct stat64 {
+ unsigned char __pad0[6];
+ unsigned short st_dev;
+ unsigned int __pad1;
+#define STAT64_HAS_BROKEN_ST_INO 1
+ unsigned long __st_ino;
+ unsigned int st_mode;
+ unsigned int st_nlink;
+ unsigned long st_uid;
+ unsigned long st_gid;
+ unsigned char __pad2[6];
+ unsigned short st_rdev;
+ unsigned int __pad3;
+__extension__ long long st_size;
+ unsigned long st_blksize;
+ unsigned char __pad4[4];
+ unsigned long __pad5; /* future possible st_blocks high bits */
+ unsigned long st_blocks; /* Number 512-byte blocks allocated. */
+ unsigned long st_atime;
+ unsigned long __pad6;
+ unsigned long st_mtime;
+ unsigned long __pad7;
+ unsigned long st_ctime;
+ unsigned long __pad8; /* will be high 32 bits of ctime someday */
+__extension__ unsigned long long st_ino;
+};
+
+#elif defined(__hppa__)
+
+struct stat {
+ unsigned long long st_dev;
+ unsigned short int _pad1;
+ unsigned long st_ino;
+ unsigned long st_mode;
+ unsigned long st_nlink;
+ unsigned long st_uid;
+ unsigned long st_gid;
+ unsigned long long st_rdev;
+ unsigned short int _pad2;
+ unsigned long st_size;
+ unsigned long st_blksize;
+ unsigned long st_blocks;
+ unsigned long st_atime;
+ unsigned long int unused1;
+ unsigned long st_mtime;
+ unsigned long int unused2;
+ unsigned long st_ctime;
+ unsigned long int unused3;
+ unsigned long long unused4;
+};
+
+struct stat64 {
+ unsigned long long st_dev;
+ unsigned int __pad1;
+#define STAT64_HAS_BROKEN_ST_INO 1
+ unsigned long __st_ino;
+ unsigned long st_mode;
+ unsigned long st_nlink;
+ unsigned long st_uid;
+ unsigned long st_gid;
+ unsigned long long st_rdev;
+ unsigned int __pad2;
+ unsigned long long st_size;
+ unsigned long long st_blksize;
+
+ unsigned long long st_blocks;
+ unsigned long st_atime;
+ unsigned long int __unused1;
+ unsigned long st_mtime;
+ unsigned long int __unused2;
+ unsigned long st_ctime;
+ unsigned long int __unused3;
+ unsigned long long st_ino;
+};
+
+#elif defined(__x86_64__)
+struct stat {
+ unsigned long st_dev;
+ unsigned long st_ino;
+ unsigned long st_nlink;
+ unsigned int st_mode;
+ unsigned int st_uid;
+ unsigned int st_gid;
+ unsigned int __pad0;
+ unsigned long st_rdev;
+ unsigned long st_size;
+ unsigned long st_blksize;
+ unsigned long st_blocks;
+ unsigned long st_atime;
+ unsigned long __reserved0;
+ unsigned long st_mtime;
+ unsigned long __reserved1;
+ unsigned long st_ctime;
+ unsigned long __reserved2;
+ long __unused[3];
+};
+
+#elif defined(__ia64__)
+
+struct stat {
+ unsigned long st_dev;
+ unsigned long st_ino;
+ unsigned long st_nlink;
+ unsigned int st_mode;
+ unsigned int st_uid;
+ unsigned int st_gid;
+ unsigned int __pad;
+ unsigned long st_rdev;
+ unsigned long st_size;
+ unsigned long st_atime;
+ unsigned long reserved;
+ unsigned long st_mtime;
+ unsigned long reserved2;
+ unsigned long st_ctime;
+ unsigned long reserved3;
+ unsigned long st_blksize;
+ long st_blocks;
+ unsigned long pad[3];
+};
-#ifndef STAT64_HAS_BROKEN_ST_INO
-#define __NO_STAT64
#endif
+#define S_IFMT 00170000
+#define S_IFSOCK 0140000
+#define S_IFLNK 0120000
+#define S_IFREG 0100000
+#define S_IFBLK 0060000
+#define S_IFDIR 0040000
+#define S_IFCHR 0020000
+#define S_IFIFO 0010000
+#define S_ISUID 0004000
+#define S_ISGID 0002000
+#define S_ISVTX 0001000
+
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+
+#define S_IRWXU 00700
+#define S_IRUSR 00400
+#define S_IWUSR 00200
+#define S_IXUSR 00100
+
+#define S_IRWXG 00070
+#define S_IRGRP 00040
+#define S_IWGRP 00020
+#define S_IXGRP 00010
+
+#define S_IRWXO 00007
+#define S_IROTH 00004
+#define S_IWOTH 00002
+#define S_IXOTH 00001
+
extern int stat(const char *__file, struct stat *__buf) __THROW;
extern int fstat(int __fd, struct stat *__buf) __THROW;
extern int lstat(const char *__file, struct stat *__buf) __THROW;
-#ifdef __NO_STAT64
-#undef _FILE_OFFSET_BITS
+#if __WORDSIZE == 64
+#define __NO_STAT64
#else
extern int stat64(const char *__file, struct stat64 *__buf) __THROW;
extern int fstat64(int __fd, struct stat64 *__buf) __THROW;
extern int lstat64(const char *__file, struct stat64 *__buf) __THROW;
-#endif
-#if _FILE_OFFSET_BITS == 64
-#define lstat(file,buf) lstat64(file,buf)
-#define fstat(file,buf) fstat64(file,buf)
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+#define lstat lstat64
+#define fstat fstat64
#define stat stat64
+#define pread pread64
+#define pwrite pwrite64
+#endif
#endif
#define major(dev) (((dev)>>8) & 0xff)
@@ -34,15 +503,10 @@ extern int lstat64(const char *__file, struct stat64 *__buf) __THROW;
#define makedev(major, minor) ((((unsigned int) (major)) << 8) | ((unsigned int) (minor)))
extern int chmod (const char *__file, mode_t __mode) __THROW;
-
extern int fchmod (int __fd, mode_t __mode) __THROW;
-
extern mode_t umask (mode_t __mask) __THROW;
-
extern int mkdir (const char *__path, mode_t __mode) __THROW;
-
extern int mknod (const char *__path, mode_t __mode, dev_t __dev) __THROW;
-
extern int mkfifo (const char *__path, mode_t __mode) __THROW;
#define S_IREAD S_IRUSR
diff --git a/mdk-stage1/dietlibc/include/sys/sysinfo.h b/mdk-stage1/dietlibc/include/sys/sysinfo.h
index 5f059d469..cf88be34c 100644
--- a/mdk-stage1/dietlibc/include/sys/sysinfo.h
+++ b/mdk-stage1/dietlibc/include/sys/sysinfo.h
@@ -2,7 +2,25 @@
#define _SYS_SYSINFO_H
#include <sys/cdefs.h>
-#include <linux/kernel.h>
+
+#define SI_LOAD_SHIFT 16
+struct sysinfo {
+ long uptime; /* Seconds since boot */
+ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
+ unsigned long totalram; /* Total usable main memory size */
+ unsigned long freeram; /* Available memory size */
+ unsigned long sharedram; /* Amount of shared memory */
+ unsigned long bufferram; /* Memory used by buffers */
+ unsigned long totalswap; /* Total swap space size */
+ unsigned long freeswap; /* swap space still available */
+ unsigned short procs; /* Number of current processes */
+ unsigned short pad; /* explicit padding */
+ unsigned long totalhigh; /* Total high memory size */
+ unsigned long freehigh; /* Available high memory size */
+ unsigned int mem_unit; /* Memory unit size in bytes */
+ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
+};
+
int sysinfo(struct sysinfo *info) __THROW;
diff --git a/mdk-stage1/dietlibc/include/sys/syslog.h b/mdk-stage1/dietlibc/include/sys/syslog.h
index 91bf0d1fa..8722038a5 100644
--- a/mdk-stage1/dietlibc/include/sys/syslog.h
+++ b/mdk-stage1/dietlibc/include/sys/syslog.h
@@ -92,7 +92,7 @@ void vsyslog (int priority, const char *format, va_list arg_ptr) __THROW;
/* yuck yuck yuck, only needed for syslogd. */
typedef struct _code {
- char *c_name;
+ const char *const c_name;
int c_val;
} CODE;
diff --git a/mdk-stage1/dietlibc/include/sys/time.h b/mdk-stage1/dietlibc/include/sys/time.h
index 11144f57b..9fc40089f 100644
--- a/mdk-stage1/dietlibc/include/sys/time.h
+++ b/mdk-stage1/dietlibc/include/sys/time.h
@@ -2,11 +2,39 @@
#define _SYS_TIME_H 1
#include <sys/cdefs.h>
-
#include <sys/types.h>
-#include <linux/time.h>
+#include <sys/select.h>
+
+struct timespec {
+ time_t tv_sec; /* seconds */
+ long tv_nsec; /* nanoseconds */
+};
+
+struct timeval {
+ time_t tv_sec; /* seconds */
+ suseconds_t tv_usec; /* microseconds */
+};
+
+struct timezone {
+ int tz_minuteswest; /* minutes west of Greenwich */
+ int tz_dsttime; /* type of dst correction */
+};
+
+#define ITIMER_REAL 0
+#define ITIMER_VIRTUAL 1
+#define ITIMER_PROF 2
-#if defined __USE_GNU || defined __USE_BSD
+struct itimerspec {
+ struct timespec it_interval; /* timer period */
+ struct timespec it_value; /* timer expiration */
+};
+
+struct itimerval {
+ struct timeval it_interval; /* timer interval */
+ struct timeval it_value; /* current value */
+};
+
+#if defined _GNU_SOURCE || defined _BSD_SOURCE
typedef struct timezone *__timezone_ptr_t;
#else
typedef void *__timezone_ptr_t;
@@ -18,17 +46,17 @@ int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue
int gettimeofday(struct timeval *tv, struct timezone *tz) __THROW;
int settimeofday(const struct timeval *tv , const struct timezone *tz) __THROW;
-extern int adjtime (const struct timeval *__delta,
- struct timeval *__olddelta) __THROW;
+extern int utimes (const char *__file, const struct timeval __tvp[2]) __THROW;
-struct tm
-{
+extern int adjtime (const struct timeval *delta, struct timeval *olddelta) __THROW;
+
+struct tm {
int tm_sec; /* Seconds. [0-60] (1 leap second) */
int tm_min; /* Minutes. [0-59] */
int tm_hour; /* Hours. [0-23] */
int tm_mday; /* Day. [1-31] */
int tm_mon; /* Month. [0-11] */
- int tm_year; /* Year - 1900. */
+ int tm_year; /* Year - 1900. */
int tm_wday; /* Day of week. [0-6] */
int tm_yday; /* Days in year.[0-365] */
int tm_isdst; /* DST. [-1/0/1]*/
@@ -37,10 +65,4 @@ struct tm
const char *tm_zone; /* Timezone abbreviation. */
};
-struct tm* gmtime(const time_t *t) __THROW;
-struct tm* gmtime_r(const time_t *t, struct tm *r) __THROW;
-
-struct tm* localtime(const time_t *t) __THROW;
-struct tm* localtime_r(const time_t *t, struct tm *r) __THROW;
-
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/times.h b/mdk-stage1/dietlibc/include/sys/times.h
index 72ec62fec..27f75cdc5 100644
--- a/mdk-stage1/dietlibc/include/sys/times.h
+++ b/mdk-stage1/dietlibc/include/sys/times.h
@@ -1,8 +1,16 @@
#ifndef _SYS_TIMES_H
#define _SYS_TIMES_H
-#include <linux/times.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
-clock_t times(struct tms *buf);
+struct tms {
+ clock_t tms_utime;
+ clock_t tms_stime;
+ clock_t tms_cutime;
+ clock_t tms_cstime;
+};
+
+clock_t times(struct tms *buf) __THROW;
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/types.h b/mdk-stage1/dietlibc/include/sys/types.h
index 34dbaa9f1..a3d2bf4be 100644
--- a/mdk-stage1/dietlibc/include/sys/types.h
+++ b/mdk-stage1/dietlibc/include/sys/types.h
@@ -1,33 +1,133 @@
#ifndef _SYS_TYPES_H
#define _SYS_TYPES_H
-#include <linux/types.h>
-#include <linux/posix_types.h>
-#include <linux/socket.h>
-
-#ifdef __GNUC__
-#define __quad_t __quad_t
-typedef long long int __quad_t;
-typedef unsigned long long int __u_quad_t;
+#include <inttypes.h>
+#include <stddef.h>
+
+typedef unsigned long int blkcnt_t; /* Used for file block counts */
+typedef unsigned long int blksize_t; /* Used for block sizes */
+typedef unsigned long int clock_t; /* Used for system times in
+ clock ticks or CLOCKS_PER_SEC
+ (see <time.h>). */
+
+/* TODO:
+ clockid_t
+ Used for clock ID type in the clock and timer functions.
+ fsblkcnt_t
+ Used for file system block counts
+ fsfilcnt_t
+ Used for file system file counts
+ pthread_attr_t
+ Used to identify a thread attribute object.
+ pthread_cond_t
+ Used for condition variables.
+ pthread_condattr_t
+ Used to identify a condition attribute object.
+ pthread_key_t
+ Used for thread-specific data keys.
+ pthread_mutex_t
+ Used for mutexes.
+ pthread_mutexattr_t
+ Used to identify a mutex attribute object.
+ pthread_once_t
+ Used for dynamic package initialisation.
+ pthread_rwlock_t
+ Used for read-write locks.
+ pthread_rwlockattr_t
+ Used for read-write lock attributes.
+ pthread_t
+ Used to identify a thread.
+ timer_t
+ Used for timer ID returned by timer_create().
+*/
+
+#if defined(__alpha__) || defined(__mips__) || defined(__powerpc__) || defined(__hppa__) || defined(__sparc64__) \
+ || defined(__x86_64__) || defined(__ia64__)
+typedef unsigned int uid_t; /* Used for user IDs. */
+typedef unsigned int gid_t; /* Used for group IDs. */
+typedef unsigned int dev_t; /* Used for device IDs. */
#else
-#warning no long long support - no 64 bit file I/O support
-typedef long int __quad_t;
-typedef unsigned long int __u_quad_t;
+typedef unsigned short uid_t; /* Used for user IDs. */
+typedef unsigned short gid_t; /* Used for group IDs. */
+typedef unsigned short dev_t; /* Used for device IDs. */
#endif
+#if defined(__alpha__) || defined(__mips__) || defined(__powerpc__) || defined(__sparc64__) \
+ || defined(__x86_64__) || defined(__ia64__)
+typedef unsigned int mode_t; /* Used for some file attributes. */
+#else
+typedef unsigned short mode_t; /* Used for some file attributes. */
+#endif
-#ifdef __quad_t
-typedef __quad_t off64_t;
-typedef __u_quad_t ino64_t;
-typedef __quad_t blkcnt64_t;
+#if defined(__alpha__) || defined(__mips__) || defined(__sparc64__) \
+ || defined(__x86_64__) || defined(__ia64__)
+typedef unsigned int nlink_t; /* Used for link counts. */
+#else
+typedef unsigned short nlink_t; /* Used for link counts. */
#endif
+typedef signed int id_t; /* Used as a general identifier; can be
+ used to contain at least a pid_t,
+ uid_t or a gid_t. */
+typedef unsigned long ino_t; /* Used for file serial numbers. */
+typedef signed int key_t; /* Used for interprocess communication. */
+typedef signed int pid_t; /* Used for process IDs and process group IDs. */
+typedef signed long ssize_t; /* Used for a count of bytes or an error indication. */
+typedef signed long suseconds_t; /* Used for time in microseconds. */
+typedef signed long time_t; /* Used for time in seconds. */
+typedef signed long useconds_t; /* Used for time in microseconds. */
+
+/* non-susv2 types: */
+__extension__ typedef signed long long loff_t; /* 64-bit offset */
+
+__extension__ typedef signed long long off64_t;
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
+typedef off64_t off_t;
+#else
+typedef signed long off_t; /* Used for file sizes. */
+#endif
+
+__extension__ typedef unsigned long long ino64_t;
+__extension__ typedef signed long long blkcnt64_t;
+
+typedef uint32_t uid32_t;
+typedef uint32_t gid32_t;
+
typedef long int fpos_t;
-#define socklen_t socklen_t
+#define __socklen_t_defined
typedef unsigned int socklen_t;
+typedef unsigned short sa_family_t;
-typedef long int blksize_t;
-typedef long int blkcnt_t;
+#ifdef _BSD_SOURCE
+/* die, BSD, die! */
+typedef uint16_t nshort;
+typedef uint32_t ntime;
+typedef uint32_t nlong;
+typedef uint32_t ulong;
+typedef uint16_t n_short;
+typedef uint32_t n_time;
+typedef uint32_t n_long;
+# ifndef __dietlibc_u_char_defined
+typedef char* caddr_t;
+typedef uint32_t u_long;
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+# define __dietlibc_u_char_defined
+# endif
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned int uint;
+#endif
+
+#ifdef _GNU_SOURCE
+typedef uint8_t u_int8_t;
+typedef uint16_t u_int16_t;
+typedef uint32_t u_int32_t;
+#ifndef __STRICT_ANSI__
+typedef uint64_t u_int64_t;
+#endif
+#endif
#endif
diff --git a/mdk-stage1/dietlibc/include/sys/uio.h b/mdk-stage1/dietlibc/include/sys/uio.h
index d64fd33c9..5edbdc8b2 100644
--- a/mdk-stage1/dietlibc/include/sys/uio.h
+++ b/mdk-stage1/dietlibc/include/sys/uio.h
@@ -1,7 +1,7 @@
#ifndef _SYS_UIO
#define _SYS_UIO 1
-#include <linux/uio.h>
+#include <sys/socket.h>
int readv(int filedes, const struct iovec *vector, size_t count);
int writev(int filedes, const struct iovec *vector, size_t count);
diff --git a/mdk-stage1/dietlibc/include/sys/un.h b/mdk-stage1/dietlibc/include/sys/un.h
index 213d9290e..000a937c1 100644
--- a/mdk-stage1/dietlibc/include/sys/un.h
+++ b/mdk-stage1/dietlibc/include/sys/un.h
@@ -3,6 +3,11 @@
#include <sys/cdefs.h>
-#include <linux/un.h>
+#define UNIX_PATH_MAX 108
+
+struct sockaddr_un {
+ sa_family_t sun_family; /* AF_UNIX */
+ char sun_path[UNIX_PATH_MAX]; /* pathname */
+};
#endif /* sys/un.h */
diff --git a/mdk-stage1/dietlibc/include/sys/vfs.h b/mdk-stage1/dietlibc/include/sys/vfs.h
index e4740a225..19b3242bb 100644
--- a/mdk-stage1/dietlibc/include/sys/vfs.h
+++ b/mdk-stage1/dietlibc/include/sys/vfs.h
@@ -3,7 +3,31 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-#include <linux/vfs.h>
+
+typedef struct {
+ int __val[2];
+} __kernel_fsid_t;
+
+struct statfs {
+ long f_type;
+ long f_bsize;
+#ifdef __mips__
+ long f_frsize;
+#endif
+ long f_blocks;
+ long f_bfree;
+#ifndef __mips__
+ long f_bavail;
+#endif
+ long f_files;
+ long f_ffree;
+#ifdef __mips__
+ long f_bavail;
+#endif
+ __kernel_fsid_t f_fsid;
+ long f_namelen;
+ long f_spare[6];
+};
int statfs(const char *path, struct statfs *buf) __THROW;
int fstatfs(int fd, struct statfs *buf) __THROW;
diff --git a/mdk-stage1/dietlibc/include/sys/wait.h b/mdk-stage1/dietlibc/include/sys/wait.h
index eb70112e2..0ba55499e 100644
--- a/mdk-stage1/dietlibc/include/sys/wait.h
+++ b/mdk-stage1/dietlibc/include/sys/wait.h
@@ -3,7 +3,13 @@
#include <sys/cdefs.h>
#include <sys/resource.h>
-#include <linux/wait.h>
+
+#define WNOHANG 0x00000001
+#define WUNTRACED 0x00000002
+
+#define __WNOTHREAD 0x20000000 /* Don't wait on children of other threads in this group */
+#define __WALL 0x40000000 /* Wait on all children, regardless of type */
+#define __WCLONE 0x80000000 /* Wait only on non-SIGCHLD children */
/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
@@ -26,6 +32,8 @@
/* Nonzero if STATUS indicates the child is stopped. */
#define WIFSTOPPED(status) (((status) & 0xff) == 0x7f)
+/* Nonzero if STATUS indicates the child dumped core. */
+#define WCOREDUMP(status) ((status) & 0x80)
pid_t wait(int *status) __THROW;
pid_t waitpid(pid_t pid, int *status, int options) __THROW;
diff --git a/mdk-stage1/dietlibc/include/termios.h b/mdk-stage1/dietlibc/include/termios.h
index f10909c1b..12e02c5d7 100644
--- a/mdk-stage1/dietlibc/include/termios.h
+++ b/mdk-stage1/dietlibc/include/termios.h
@@ -4,19 +4,380 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-/* man, the Linux kernel headers suck */
-#define __USE_BSD
-#include <linux/termios.h>
-#undef __USE_BSD
+struct winsize {
+ unsigned short ws_row;
+ unsigned short ws_col;
+ unsigned short ws_xpixel;
+ unsigned short ws_ypixel;
+};
+
+#define NCC 8
+struct termio {
+ unsigned short c_iflag; /* input mode flags */
+ unsigned short c_oflag; /* output mode flags */
+ unsigned short c_cflag; /* control mode flags */
+ unsigned short c_lflag; /* local mode flags */
+ unsigned char c_line; /* line discipline */
+ unsigned char c_cc[NCC]; /* control characters */
+};
+
+/* modem lines */
+#ifdef __mips__
+#define TIOCM_LE 0x001
+#define TIOCM_DTR 0x002
+#define TIOCM_RTS 0x004
+#define TIOCM_ST 0x010
+#define TIOCM_SR 0x020
+#define TIOCM_CTS 0x040
+#define TIOCM_CAR 0x100
+#define TIOCM_RNG 0x200
+#define TIOCM_DSR 0x400
+#define TIOCM_CD TIOCM_CAR
+#define TIOCM_RI TIOCM_RNG
+#define TIOCM_OUT1 0x2000
+#define TIOCM_OUT2 0x4000
+#define TIOCM_LOOP 0x8000
+#else
+#define TIOCM_LE 0x001
+#define TIOCM_DTR 0x002
+#define TIOCM_RTS 0x004
+#define TIOCM_ST 0x008
+#define TIOCM_SR 0x010
+#define TIOCM_CTS 0x020
+#define TIOCM_CAR 0x040
+#define TIOCM_RNG 0x080
+#define TIOCM_DSR 0x100
+#define TIOCM_CD TIOCM_CAR
+#define TIOCM_RI TIOCM_RNG
+#define TIOCM_OUT1 0x2000
+#define TIOCM_OUT2 0x4000
+#define TIOCM_LOOP 0x8000
+#endif
+
+/* line disciplines */
+#define N_TTY 0
+#define N_SLIP 1
+#define N_MOUSE 2
+#define N_PPP 3
+#define N_STRIP 4
+#define N_AX25 5
+#define N_X25 6 /* X.25 async */
+#define N_6PACK 7
+#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */
+#define N_R3964 9 /* Reserved for Simatic R3964 module */
+#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */
+#define N_IRDA 11 /* Linux IR - http://irda.sourceforge.net/ */
+#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */
+#define N_HDLC 13 /* synchronous HDLC */
+#define N_SYNC_PPP 14 /* synchronous PPP */
+#define N_HCI 15 /* Bluetooth HCI UART */
+
+typedef unsigned char cc_t;
+typedef unsigned int speed_t;
+typedef unsigned int tcflag_t;
+
+#define _POSIX_VDISABLE '\0'
+
+#if defined(__i386__) || defined(__arm__) || defined(__ia64__) || defined(__hppa__) || defined(__s390__) || defined(__s390x__) || defined(__x86_64__)
+#define NCCS 19
+struct termios {
+ tcflag_t c_iflag; /* input mode flags */
+ tcflag_t c_oflag; /* output mode flags */
+ tcflag_t c_cflag; /* control mode flags */
+ tcflag_t c_lflag; /* local mode flags */
+ cc_t c_line; /* line discipline */
+ cc_t c_cc[NCCS]; /* control characters */
+};
+#elif defined(__mips__) || defined(__mips64__)
+#define NCCS 23
+struct termios {
+ tcflag_t c_iflag; /* input mode flags */
+ tcflag_t c_oflag; /* output mode flags */
+ tcflag_t c_cflag; /* control mode flags */
+ tcflag_t c_lflag; /* local mode flags */
+ /*
+ * Seems nonexistent in the ABI, but Linux assumes existence ...
+ */
+ cc_t c_line; /* line discipline */
+ cc_t c_cc[NCCS]; /* control characters */
+};
+#elif defined(powerpc) || defined(__alpha__)
+#define NCCS 19
+struct termios {
+ tcflag_t c_iflag; /* input mode flags */
+ tcflag_t c_oflag; /* output mode flags */
+ tcflag_t c_cflag; /* control mode flags */
+ tcflag_t c_lflag; /* local mode flags */
+ cc_t c_cc[NCCS]; /* control characters */
+ cc_t c_line; /* line discipline (== c_cc[19]) */
+ speed_t c_ispeed; /* input speed */
+ speed_t c_ospeed; /* output speed */
+};
+#elif defined(__sparc__)
+#define NCCS 17
+struct termios {
+ tcflag_t c_iflag; /* input mode flags */
+ tcflag_t c_oflag; /* output mode flags */
+ tcflag_t c_cflag; /* control mode flags */
+ tcflag_t c_lflag; /* local mode flags */
+ cc_t c_line; /* line discipline */
+ cc_t c_cc[NCCS]; /* control characters */
+};
+#else
+# error "Struct termios undefined on your architecture"
+#endif
+
+/* c_cc characters */
+#if defined(__alpha__)
+#define VEOF 0
+#define VEOL 1
+#define VEOL2 2
+#define VERASE 3
+#define VWERASE 4
+#define VKILL 5
+#define VREPRINT 6
+#define VSWTC 7
+#define VINTR 8
+#define VQUIT 9
+#define VSUSP 10
+#define VSTART 12
+#define VSTOP 13
+#define VLNEXT 14
+#define VDISCARD 15
+#define VMIN 16
+#define VTIME 17
+#elif defined(__mips__)
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VMIN 4
+#define VTIME 5
+#define VEOL2 6
+#define VSWTC 7
+#define VSWTCH VSWTC
+#define VSTART 8
+#define VSTOP 9
+#define VSUSP 10
+#define VREPRINT 12
+#define VDISCARD 13
+#define VWERASE 14
+#define VLNEXT 15
+#define VEOF 16
+#define VEOL 17
+#elif defined(__powerpc__)
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VEOF 4
+#define VMIN 5
+#define VEOL 6
+#define VTIME 7
+#define VEOL2 8
+#define VSWTC 9
+#define VWERASE 10
+#define VREPRINT 11
+#define VSUSP 12
+#define VSTART 13
+#define VSTOP 14
+#define VLNEXT 15
+#define VDISCARD 16
+#elif defined(__sparc__)
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VEOF 4
+#define VEOL 5
+#define VEOL2 6
+#define VSWTC 7
+#define VSTART 8
+#define VSTOP 9
+#define VSUSP 10
+#define VDSUSP 11
+#define VREPRINT 12
+#define VDISCARD 13
+#define VWERASE 14
+#define VLNEXT 15
+#define VMIN 16
+#define VTIME 17
+#else /* arm, i386, parisc, s390, x86_64 */
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VEOF 4
+#define VTIME 5
+#define VMIN 6
+#define VSWTC 7
+#define VSTART 8
+#define VSTOP 9
+#define VSUSP 10
+#define VEOL 11
+#define VREPRINT 12
+#define VDISCARD 13
+#define VWERASE 14
+#define VLNEXT 15
+#define VEOL2 16
+#endif
+
+/* c_iflag bits */
+#define IGNBRK 0000001
+#define BRKINT 0000002
+#define IGNPAR 0000004
+#define PARMRK 0000010
+#define INPCK 0000020
+#define ISTRIP 0000040
+#define INLCR 0000100
+#define IGNCR 0000200
+#define ICRNL 0000400
+#define IUCLC 0001000
+#define IXON 0002000
+#define IXANY 0004000
+#define IXOFF 0010000
+#define IMAXBEL 0020000
+
+/* c_oflag bits */
+#define OPOST 0000001
+#define OLCUC 0000002
+#define ONLCR 0000004
+#define OCRNL 0000010
+#define ONOCR 0000020
+#define ONLRET 0000040
+#define OFILL 0000100
+#define OFDEL 0000200
+#define NLDLY 0000400
+#define NL0 0000000
+#define NL1 0000400
+#define CRDLY 0003000
+#define CR0 0000000
+#define CR1 0001000
+#define CR2 0002000
+#define CR3 0003000
+#define TABDLY 0014000
+#define TAB0 0000000
+#define TAB1 0004000
+#define TAB2 0010000
+#define TAB3 0014000
+#define XTABS 0014000
+#define BSDLY 0020000
+#define BS0 0000000
+#define BS1 0020000
+#define VTDLY 0040000
+#define VT0 0000000
+#define VT1 0040000
+#define FFDLY 0100000
+#define FF0 0000000
+#define FF1 0100000
+
+/* c_cflag bit meaning */
+#define CBAUD 0010017
+#define B0 0000000 /* hang up */
+#define B50 0000001
+#define B75 0000002
+#define B110 0000003
+#define B134 0000004
+#define B150 0000005
+#define B200 0000006
+#define B300 0000007
+#define B600 0000010
+#define B1200 0000011
+#define B1800 0000012
+#define B2400 0000013
+#define B4800 0000014
+#define B9600 0000015
+#define B19200 0000016
+#define B38400 0000017
+#define EXTA B19200
+#define EXTB B38400
+#define CSIZE 0000060
+#define CS5 0000000
+#define CS6 0000020
+#define CS7 0000040
+#define CS8 0000060
+#define CSTOPB 0000100
+#define CREAD 0000200
+#define PARENB 0000400
+#define PARODD 0001000
+#define HUPCL 0002000
+#define CLOCAL 0004000
+#define CBAUDEX 0010000
+#define B57600 0010001
+#define B115200 0010002
+#define B230400 0010003
+#define B460800 0010004
+#define B500000 0010005
+#define B576000 0010006
+#define B921600 0010007
+#define B1000000 0010010
+#define B1152000 0010011
+#define B1500000 0010012
+#define B2000000 0010013
+#define B2500000 0010014
+#define B3000000 0010015
+#define B3500000 0010016
+#define B4000000 0010017
+#define CIBAUD 002003600000 /* input baud rate (not used) */
+#define CMSPAR 010000000000 /* mark or space (stick) parity */
+#define CRTSCTS 020000000000 /* flow control */
+
+/* c_lflag bits */
+#define ISIG 0000001
+#define ICANON 0000002
+#define XCASE 0000004
+#define ECHO 0000010
+#define ECHOE 0000020
+#define ECHOK 0000040
+#define ECHONL 0000100
+#define NOFLSH 0000200
+#define ECHOCTL 0001000
+#define ECHOPRT 0002000
+#define ECHOKE 0004000
+#ifdef __mips__
+#define IEXTEN 0000400
+#define FLUSHO 0020000
+#define TOSTOP 0100000
+#else
+#define TOSTOP 0000400
+#define FLUSHO 0010000
+#define IEXTEN 0100000
+#endif
+#define PENDIN 0040000
+
+/* tcflow() and TCXONC use these */
+#define TCOOFF 0
+#define TCOON 1
+#define TCIOFF 2
+#define TCION 3
+
+/* tcflush() and TCFLSH use these */
+#define TCIFLUSH 0
+#define TCOFLUSH 1
+#define TCIOFLUSH 2
+
+/* tcsetattr uses these */
+#ifdef __mips__
+#define TCSANOW 0x540e
+#define TCSADRAIN 0x540f
+#define TCSAFLUSH 0x5410
+#else
+#define TCSANOW 0
+#define TCSADRAIN 1
+#define TCSAFLUSH 2
+#endif
-pid_t tcgetpgrp(int fd) __THROW;
-int tcsetpgrp(int fd, pid_t pgrpid) __THROW;
int tcgetattr(int fd, struct termios *termios_p) __THROW;
int tcsetattr(int fd, int optional_actions, struct termios *termios_p) __THROW;
speed_t cfgetospeed(struct termios *termios_p) __THROW;
int cfsetospeed(struct termios *termios_p, speed_t speed) __THROW;
speed_t cfgetispeed(struct termios *termios_p) __THROW;
int cfsetispeed(struct termios *termios_p, speed_t speed) __THROW;
+void cfmakeraw(struct termios *t) __THROW;
+
int tcflush(int fd, int queue_selector) __THROW;
+int tcdrain(int fd) __THROW;
+int tcflow (int fd,int action) __THROW;
+int tcsendbreak (int fd,int duration) __THROW;
#endif
diff --git a/mdk-stage1/dietlibc/include/time.h b/mdk-stage1/dietlibc/include/time.h
index 827c85b97..29681fa3d 100644
--- a/mdk-stage1/dietlibc/include/time.h
+++ b/mdk-stage1/dietlibc/include/time.h
@@ -7,7 +7,6 @@
extern int __isleap(int year);
int nanosleep(const struct timespec *req, struct timespec *rem) __THROW;
-unsigned int sleep(unsigned int secs) __THROW;
time_t mktime(struct tm *timeptr) __THROW __pure__;
@@ -16,9 +15,26 @@ char *asctime_r(const struct tm *timeptr, char *buf) __THROW;
char *ctime(const time_t *timep) __THROW;
-size_t strftime(char *s, size_t max, const char *format, const struct tm *tm) __THROW;
+size_t strftime(char *s, size_t max, const char *format, const struct tm *tm) __THROW __attribute__((format(strftime,3,0)));
time_t time(time_t *t) __THROW;
int stime(time_t *t) __THROW;
+double difftime(time_t time1, time_t time0) __THROW __attribute__((const));
+
+#define CLOCKS_PER_SEC 1000000l
+
+extern long int timezone;
+extern int daylight;
+extern char* tzname[2];
+
+void tzset (void) __THROW;
+
+struct tm* localtime(const time_t* t) __THROW;
+struct tm* gmtime(const time_t* t) __THROW;
+struct tm* localtime_r(const time_t* t, struct tm* r) __THROW;
+struct tm* gmtime_r(const time_t* t, struct tm* r) __THROW;
+
+clock_t clock(void);
+
#endif
diff --git a/mdk-stage1/dietlibc/include/unistd.h b/mdk-stage1/dietlibc/include/unistd.h
index 1a528c0e4..2fba5d584 100644
--- a/mdk-stage1/dietlibc/include/unistd.h
+++ b/mdk-stage1/dietlibc/include/unistd.h
@@ -2,12 +2,14 @@
#define _UNISTD_H
#include <sys/cdefs.h>
-#include <dirent.h>
#include <sys/types.h>
#include <sys/time.h>
-#include <getopt.h>
-#include <linux/sysctl.h>
#include <sys/stat.h>
+#include <sys/fsuid.h>
+
+extern int optind,opterr;
+extern char *optarg;
+int getopt(int argc, char *const argv[], const char *options);
/* Values for the second argument to access.
These may be OR'd together. */
@@ -17,28 +19,28 @@
#define F_OK 0 /* Test for existence. */
/* Test for access to NAME using the real UID and real GID. */
-extern int access (__const char *__name, int __type) __THROW;
+extern int access (const char *__name, int __type) __THROW;
+#ifndef SEEK_SET
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
+#endif
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
off_t lseek(int fildes, off_t offset, int whence) __THROW;
-int llseek(int fildes, unsigned long hi, unsigned long lo, loff_t* result,int whence) __THROW;
#ifndef __NO_STAT64
loff_t lseek64(int fildes, loff_t offset, int whence) __THROW;
-#endif
-#if _FILE_OFFSET_BITS == 64
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
#define lseek(fildes,offset,whence) lseek64(fildes,offset,whence)
#endif
+#endif
int chdir(const char *path) __THROW;
int fchdir(int fd) __THROW;
-int mkdir(const char *pathname, mode_t mode) __THROW;
int rmdir(const char *pathname) __THROW;
char *getcwd(char *buf, size_t size) __THROW;
@@ -60,23 +62,24 @@ int execlp(const char *file, const char *arg, ...) __THROW;
int execv(const char *path, char *const argv[]) __THROW;
int execvp(const char *file, char *const argv[]) __THROW;
int execl(const char *path, ...) __THROW;
+int execle(const char *path, ...) __THROW;
-pid_t getpid(void) __attribute__((__const__)) __THROW;
+pid_t getpid(void) __THROW;
pid_t getppid(void) __THROW;
-int kill(pid_t pid, int sig) __THROW;
int setpgid (pid_t pid,pid_t pgid) __THROW;
pid_t getpgid (pid_t pid) __THROW;
int setpgrp (void) __THROW;
pid_t getpgrp (void) __THROW;
+pid_t getsid(pid_t pid) __THROW;
pid_t setsid (void) __THROW;
int dup (int oldfd) __THROW;
int dup2 (int oldfd,int newfd) __THROW;
-int mknod(const char *pathname, mode_t mode, dev_t dev) __THROW;
-
-int getdents(unsigned int fd, struct dirent *dirp, unsigned int count) __THROW;
-int getdents64(unsigned int fd, struct dirent64 *dirp, unsigned int count) __THROW;
+struct dirent;
+struct dirent64;
+int getdents(int fd, struct dirent *dirp, unsigned int count) __THROW;
+int getdents64(int fd, struct dirent64 *dirp, unsigned int count) __THROW;
pid_t fork(void) __THROW;
pid_t vfork(void) __THROW;
@@ -90,6 +93,8 @@ int fchown(int fd, uid_t owner, gid_t group) __THROW;
int lchown(const char *path, uid_t owner, gid_t group) __THROW;
int fsync(int fd) __THROW;
+#define _POSIX_SYNCHRONIZED_IO
+int fdatasync(int fd) __THROW;
int pipe(int filedes[2]) __THROW;
@@ -101,7 +106,7 @@ void *sbrk(ptrdiff_t increment) __THROW;
int gethostname(char *name, size_t len) __THROW;
int sethostname(const char *name, size_t len) __THROW;
-void usleep(unsigned long usec) __THROW;
+int usleep(unsigned long useconds) __THROW;
unsigned int sleep(unsigned int seconds) __THROW;
unsigned int alarm(unsigned int seconds) __THROW;
@@ -111,11 +116,16 @@ int isatty(int desc) __THROW;
void _exit(int status) __THROW __attribute__((noreturn));
-extern int daemon (int nochdir,int noclose) __THROW;
+extern int daemon(int nochdir,int noclose) __THROW;
+
+int pause(void) __THROW;
-#if _FILE_OFFSET_BITS == 64
+#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
#define open open64
#define creat creat64
+#define truncate truncate64
+#define ftruncate ftruncate64
+#define getdents getdents64
#endif
extern char* getlogin(void) __THROW;
@@ -137,32 +147,87 @@ int setreuid(uid_t ruid, uid_t euid) __THROW;
#define setegid(egid) setregid(-1,egid)
int rename(const char *oldpath, const char *newpath) __THROW;
+int truncate(const char *path, off_t length) __THROW;
int ftruncate(int fd, off_t length) __THROW;
-
-int mkstemp(char *Template) __THROW;
+#ifndef __NO_STAT64
+int truncate64(const char *path, loff_t length) __THROW;
+int ftruncate64(int fd, loff_t length) __THROW;
+#endif
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) __THROW;
int nice(int inc) __THROW;
-extern char *__environ[];
+extern char **__environ;
char *crypt(const char *key, const char *salt) __THROW;
void encrypt(char block[64], int edflag) __THROW;
void setkey(const char *key) __THROW;
-size_t getpagesize(void) __attribute__((__const__)) __THROW;
+size_t getpagesize(void) __THROW __attribute__((__const__));
int getdomainname(char *name, size_t len) __THROW;
int setdomainname(const char *name, size_t len) __THROW;
int getgroups(int size, gid_t list[]) __THROW;
+int getdtablesize(void) __THROW;
+char *getpass(const char * prompt) __THROW;
/* warning: linux specific: */
+int llseek(int fildes, unsigned long hi, unsigned long lo, loff_t* result,int whence) __THROW;
+
+/* include <linux/sysctl.h> to get all the definitions! */
+struct __sysctl_args;
int _sysctl(struct __sysctl_args *args) __THROW;
-int sendfile(int out_fd, int in_fd, off_t *offset, size_t count) __THROW;
-int getdtablesize(void) __THROW;
-char *getpass(const char * prompt) __THROW;
+#define _SC_CLK_TCK 1
+#define _SC_ARG_MAX 2
+#define _SC_NGROUPS_MAX 3
+#define _SC_OPEN_MAX 4
+#define _SC_PAGESIZE 5
+#define _SC_NPROCESSORS_ONLN 6
+#define _SC_NPROCESSORS_CONF _SC_NPROCESSORS_ONLN
+long sysconf(int name) __THROW;
+#define _PC_PATH_MAX 1
+#define _PC_VDISABLE 2
+
+pid_t tcgetpgrp(int fd) __THROW;
+int tcsetpgrp(int fd, pid_t pgrpid) __THROW;
+
+int profil(unsigned short *buf, size_t bufsiz, size_t offset, unsigned int scale);
+
+/* Linux only: */
+int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid) __THROW;
+int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid) __THROW;
+int setresuid(uid_t ruid, uid_t euid, uid_t suid) __THROW;
+int setresgid(gid_t rgid, gid_t egid, gid_t sgid) __THROW;
+
+/* 32-bit uid support */
+int chown32(const char *path, uid32_t owner, gid32_t group) __THROW;
+int fchown32(int fd, uid32_t owner, gid32_t group) __THROW;
+int lchown32(const char *path, uid32_t owner, gid32_t group) __THROW;
+uid32_t getuid32(void) __THROW;
+uid32_t geteuid32(void) __THROW;
+gid32_t getgid32(void) __THROW;
+gid32_t getegid32(void) __THROW;
+int setuid32(uid32_t uid) __THROW;
+int setgid32(gid32_t gid) __THROW;
+int setreuid32(uid32_t ruid, uid32_t euid) __THROW;
+int setregid32(gid32_t rgid, gid32_t egid) __THROW;
+#define seteuid32(euid) setreuid32(-1,euid)
+#define setegid32(egid) setregid32(-1,egid)
+int getgroups32(int size, gid32_t list[]) __THROW;
+int getresuid32(uid32_t *ruid, uid32_t *euid, uid32_t *suid);
+int getresgid32(gid32_t *rgid, gid32_t *egid, gid32_t *sgid);
+int setresuid32(uid32_t ruid, uid32_t euid, uid32_t suid) __THROW;
+int setresgid32(gid32_t rgid, gid32_t egid, gid32_t sgid) __THROW;
+
+#ifdef _BSD_SOURCE
+char *getusershell(void);
+void setusershell(void);
+void endusershell(void);
+#endif
+
+#define _POSIX_VERSION 199506L
#endif
diff --git a/mdk-stage1/dietlibc/include/utmp.h b/mdk-stage1/dietlibc/include/utmp.h
index 2946be921..cc2adc9f6 100644
--- a/mdk-stage1/dietlibc/include/utmp.h
+++ b/mdk-stage1/dietlibc/include/utmp.h
@@ -11,6 +11,11 @@
#define _PATH_UTMP "/var/run/utmp"
#define _PATH_WTMP "/var/log/wtmp"
+#ifdef _BSD_SOURCE
+/* die, BSD, die!!! */
+#define UTMP_FILE _PATH_UTMP
+#define WTMP_FILE _PATH_WTMP
+#endif
/* The structure describing an entry in the database of
previous logins. */
@@ -38,11 +43,13 @@ struct utmp
char ut_id[4]; /* Inittab ID. */
char ut_user[UT_NAMESIZE]; /* Username. */
char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */
-#define ut_name ut_host
+#define ut_name ut_user
struct exit_status ut_exit; /* Exit status of a process marked
as DEAD_PROCESS. */
long int ut_session; /* Session ID, used for windowing. */
+#define ut_time ut_tv.tv_sec
struct timeval ut_tv; /* Time entry was made. */
+#define ut_addr ut_addr_v6[0]
int32_t ut_addr_v6[4]; /* Internet address of remote host. */
char __unused[20]; /* Reserved for future use. */
};
@@ -70,4 +77,18 @@ struct utmp
#define _HAVE_UT_TV 1
#define _HAVE_UT_HOST 1
+struct utmp *getutent(void) __THROW;
+struct utmp *getutid(struct utmp *ut) __THROW;
+struct utmp *getutline(struct utmp *ut) __THROW;
+
+void pututline(struct utmp *ut) __THROW;
+
+void setutent(void) __THROW;
+void endutent(void) __THROW;
+
+void utmpname(const char *file) __THROW;
+
+void updwtmp(const char *wtmp_file, const struct utmp *ut);
+void logwtmp(const char *line, const char *name, const char *host);
+
#endif
diff --git a/mdk-stage1/dietlibc/lib/__dtostr.c b/mdk-stage1/dietlibc/lib/__dtostr.c
index e9a8a83d3..580258936 100644
--- a/mdk-stage1/dietlibc/lib/__dtostr.c
+++ b/mdk-stage1/dietlibc/lib/__dtostr.c
@@ -1,104 +1,140 @@
-#include <stdio.h>
+#include <stdlib.h>
+#include <endian.h>
+#include <math.h>
/* convert double to string. Helper for sprintf. */
-int __dtostr(double d,char *buf,int maxlen,int prec) {
+static int copystring(char* buf,int maxlen, const char* s) {
+ int i;
+ for (i=0; i<3&&i<maxlen; ++i)
+ buf[i]=s[i];
+ if (i<maxlen) { buf[i]=0; ++i; }
+ return i;
+}
+
+int __dtostr(double d,char *buf,unsigned int maxlen,unsigned int prec,unsigned int prec2) {
+#if 1
unsigned long long *x=(unsigned long long *)&d;
/* step 1: extract sign, mantissa and exponent */
- signed int s=*x>>63;
signed long e=((*x>>52)&((1<<11)-1))-1023;
+#else
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+ signed long e=(((((unsigned long*)&d)[1])>>20)&((1<<11)-1))-1023;
+#else
+ signed long e=(((*((unsigned long*)&d))>>20)&((1<<11)-1))-1023;
+#endif
+#endif
/* unsigned long long m=*x & ((1ull<<52)-1); */
/* step 2: exponent is base 2, compute exponent for base 10 */
- signed long e10=1+(long)(e*0.30102999566398119802); /* log10(2) */
+ signed long e10;
/* step 3: calculate 10^e10 */
- int i;
- double tmp=10.0;
+ unsigned int i;
+ double backup=d;
+ double tmp;
char *oldbuf=buf;
- int initial=1;
+ if (isnan(d)) return copystring(buf,maxlen,"nan");
+ if ((i=isinf(d))) return copystring(buf,maxlen,i>0?"inf":"-inf");
+ e10=1+(long)(e*0.30102999566398119802); /* log10(2) */
+ /* Wir iterieren von Links bis wir bei 0 sind oder maxlen erreicht
+ * ist. Wenn maxlen erreicht ist, machen wir das nochmal in
+ * scientific notation. Wenn dann von prec noch was übrig ist, geben
+ * wir einen Dezimalpunkt aus und geben prec2 Nachkommastellen aus.
+ * Wenn prec2 Null ist, geben wir so viel Stellen aus, wie von prec
+ * noch übrig ist. */
if (d==0.0) {
- *buf='0'; ++buf;
- goto done;
+ prec2=prec2==0?1:prec2+2;
+ prec2=prec2>maxlen?8:prec2;
+ for (i=0; i<prec2; ++i) buf[i]='0';
+ buf[1]='.'; buf[i]=0;
+ return i;
}
- if (s) { d=-d; *buf='-'; --maxlen; buf++; }
+
+ if (d < 0.0) { d=-d; *buf='-'; --maxlen; ++buf; }
+
+ /*
+ Perform rounding. It needs to be done before we generate any
+ digits as the carry could propagate through the whole number.
+ */
+
+ tmp = 0.5;
+ for (i = 0; i < prec2; i++) { tmp *= 0.1; }
+ d += tmp;
+
+ if (d < 1.0) { *buf='0'; --maxlen; ++buf; }
/* printf("e=%d e10=%d prec=%d\n",e,e10,prec); */
- if (e10>=0) {
+ if (e10>0) {
+ int first=1; /* are we about to write the first digit? */
+ tmp = 10.0;
i=e10;
while (i>10) { tmp=tmp*1e10; i-=10; }
while (i>1) { tmp=tmp*10; --i; }
- } else {
- i=(e10=-e10);
- while (i>10) { tmp=tmp*1e-10; i-=10; }
- while (i>1) { tmp=tmp/10; --i; }
- }
- while (d/tmp<1) {
- --e10;
- tmp/=10.0;
- }
- /* step 4: see if precision is sufficient to display all digits */
- if (e10>prec) {
- /* use scientific notation */
- int len=__dtostr(d/tmp,buf,maxlen,prec);
- if (len==0) return 0;
- maxlen-=len; buf+=len;
- if (--maxlen>=0) {
- *buf='e';
- ++buf;
- }
- for (len=1000; len>0; len/=10) {
- if (e10>=len || !initial) {
- if (--maxlen>=0) {
- *buf=(e10/len)+'0';
- ++buf;
+ /* the number is greater than 1. Iterate through digits before the
+ * decimal point until we reach the decimal point or maxlen is
+ * reached (in which case we switch to scientific notation). */
+ while (tmp>0.9) {
+ char digit;
+ double fraction=d/tmp;
+ digit=(int)(fraction); /* floor() */
+ if (!first || digit) {
+ first=0;
+ *buf=digit+'0'; ++buf;
+ if (!maxlen) {
+ /* use scientific notation */
+ int len=__dtostr(backup/tmp,oldbuf,maxlen,prec,prec2);
+ int initial=1;
+ if (len==0) return 0;
+ maxlen-=len; buf+=len;
+ if (maxlen>0) {
+ *buf='e';
+ ++buf;
+ }
+ --maxlen;
+ for (len=1000; len>0; len/=10) {
+ if (e10>=len || !initial) {
+ if (maxlen>0) {
+ *buf=(e10/len)+'0';
+ ++buf;
+ }
+ --maxlen;
+ initial=0;
+ e10=e10%len;
+ }
+ }
+ if (maxlen>0) goto fini;
+ return 0;
}
- initial=0;
- e10=e10%len;
+ d-=digit*tmp;
+ --maxlen;
}
+ tmp/=10.0;
}
- if (maxlen>=0) return buf-oldbuf;
- return 0;
}
- /* step 5: loop through the digits, inserting the decimal point when
- * appropriate */
- if (d<1.0) {
- double x=1.0;
- int first=1;
- do {
- if (--maxlen<0) return buf-oldbuf;
- *buf='0'; ++buf;
- if (first) {
- first=0;
- *buf='.'; ++buf;
- if (--maxlen<0) return buf-oldbuf;
- }
- x/=10.0;
- } while (x>d);
+ else
+ {
+ tmp = 0.1;
}
- for (; prec>0; ) {
- double tmp2=d/tmp;
- char c;
- d-=((int)tmp2*tmp);
- c=((int)tmp2);
- if ((!initial)||c) {
- if (--maxlen>=0) {
- initial=0;
- *buf=c+'0';
- ++buf;
- } else
- return 0;
+
+ if (buf==oldbuf) {
+ if (!maxlen) return 0; --maxlen;
+ *buf='0'; ++buf;
+ }
+ if (prec2 || prec>(unsigned int)(buf-oldbuf)+1) { /* more digits wanted */
+ if (!maxlen) return 0; --maxlen;
+ *buf='.'; ++buf;
+ prec-=buf-oldbuf-1;
+ if (prec2) prec=prec2;
+ if (prec>maxlen) return 0;
+ while (prec>0) {
+ char digit;
+ double fraction=d/tmp;
+ digit=(int)(fraction); /* floor() */
+ *buf=digit+'0'; ++buf;
+ d-=digit*tmp;
+ tmp/=10.0;
--prec;
}
- if (tmp>0.5 && tmp<1.5) {
- tmp=1e-1;
- initial=0;
- if (--maxlen>=0) {
- *buf='.';
- ++buf;
- } else
- return 0;
- } else
- tmp/=10.0;
}
-done:
+fini:
*buf=0;
return buf-oldbuf;
}
diff --git a/mdk-stage1/dietlibc/lib/__fstat64.c b/mdk-stage1/dietlibc/lib/__fstat64.c
index 6f9fcb2c5..f2f9858ea 100644
--- a/mdk-stage1/dietlibc/lib/__fstat64.c
+++ b/mdk-stage1/dietlibc/lib/__fstat64.c
@@ -1,9 +1,8 @@
+#include <errno.h>
#include "dietfeatures.h"
-
#ifdef WANT_LARGEFILE_BACKCOMPAT
#include <sys/stat.h>
#ifndef __NO_STAT64
-#include <errno.h>
extern int __dietlibc_fstat64(int __fd, struct stat64 *__buf);
extern void __stat64_cvt(const struct stat *src,struct stat64 *dest);
@@ -11,11 +10,7 @@ extern void __stat64_cvt(const struct stat *src,struct stat64 *dest);
int fstat64(int __fd, struct stat64 *__buf) {
if (__dietlibc_fstat64(__fd,__buf)) {
struct stat temp;
-#ifdef WANT_THREAD_SAFE
- if (*__errno_location()!=ENOSYS) return -1;
-#else
if (errno!=ENOSYS) return -1;
-#endif
if (fstat(__fd,&temp)) return -1;
__stat64_cvt(&temp,__buf);
}
diff --git a/mdk-stage1/dietlibc/lib/__getcwd.c b/mdk-stage1/dietlibc/lib/__getcwd.c
index e97fc4520..8616704ec 100644
--- a/mdk-stage1/dietlibc/lib/__getcwd.c
+++ b/mdk-stage1/dietlibc/lib/__getcwd.c
@@ -1,3 +1,4 @@
+#include <unistd.h>
#include <stdlib.h>
extern int __syscall_getcwd(char* buf, size_t size);
diff --git a/mdk-stage1/dietlibc/lib/__isnan.c b/mdk-stage1/dietlibc/lib/__isnan.c
index 9d21e9824..de74b8a9f 100644
--- a/mdk-stage1/dietlibc/lib/__isnan.c
+++ b/mdk-stage1/dietlibc/lib/__isnan.c
@@ -1,9 +1,10 @@
-#include <stdio.h>
+#include <math.h>
-int __isnan(double d) {
+int isnan(double d) {
unsigned long long *x=(unsigned long long *)&d;
- return (*x==0x7FF8002000000000ll || *x==0x7FF0002000000000);
+ return (*x==0x7FF8000000000000ll || *x==0x7FF0000000000000 || *x==0xfff8000000000000);
}
+int __isnan(double d) __attribute__((alias("isnan")));
#if 0
TestFromIeeeExtended("7FFF0000000000000000"); /* +infinity */
diff --git a/mdk-stage1/dietlibc/lib/__lltostr.c b/mdk-stage1/dietlibc/lib/__lltostr.c
index eb4a27cef..fe4701f29 100644
--- a/mdk-stage1/dietlibc/lib/__lltostr.c
+++ b/mdk-stage1/dietlibc/lib/__lltostr.c
@@ -1,9 +1,11 @@
#include <string.h>
+int __lltostr(char *s, int size, unsigned long long i, int base, char UpCase);
+
int __lltostr(char *s, int size, unsigned long long i, int base, char UpCase)
{
char *tmp;
- int j=0;
+ unsigned int j=0;
s[--size]=0;
diff --git a/mdk-stage1/dietlibc/lib/__lstat64.c b/mdk-stage1/dietlibc/lib/__lstat64.c
index a871f3917..0eab6a94b 100644
--- a/mdk-stage1/dietlibc/lib/__lstat64.c
+++ b/mdk-stage1/dietlibc/lib/__lstat64.c
@@ -1,9 +1,8 @@
+#include <errno.h>
#include "dietfeatures.h"
-
#ifdef WANT_LARGEFILE_BACKCOMPAT
#include <sys/stat.h>
#ifndef __NO_STAT64
-#include <errno.h>
extern int __dietlibc_lstat64(const char *__file, struct stat64 *__buf);
extern void __stat64_cvt(const struct stat *src,struct stat64 *dest);
@@ -11,11 +10,7 @@ extern void __stat64_cvt(const struct stat *src,struct stat64 *dest);
int lstat64(const char *__file, struct stat64 *__buf) {
if (__dietlibc_lstat64(__file,__buf)) {
struct stat temp;
-#ifdef WANT_THREAD_SAFE
- if (*__errno_location()!=ENOSYS) return -1;
-#else
if (errno!=ENOSYS) return -1;
-#endif
if (lstat(__file,&temp)) return -1;
__stat64_cvt(&temp,__buf);
}
diff --git a/mdk-stage1/dietlibc/lib/__ltostr.c b/mdk-stage1/dietlibc/lib/__ltostr.c
index 57e0690d2..fa71be9ab 100644
--- a/mdk-stage1/dietlibc/lib/__ltostr.c
+++ b/mdk-stage1/dietlibc/lib/__ltostr.c
@@ -1,9 +1,10 @@
#include <string.h>
+#include <stdlib.h>
-int __ltostr(char *s, int size, unsigned long i, int base, char UpCase)
+int __ltostr(char *s, unsigned int size, unsigned long i, unsigned int base, int UpCase)
{
char *tmp;
- int j=0;
+ unsigned int j=0;
s[--size]=0;
diff --git a/mdk-stage1/dietlibc/lib/__stat64.c b/mdk-stage1/dietlibc/lib/__stat64.c
index dfb0d4315..fcbdfef2d 100644
--- a/mdk-stage1/dietlibc/lib/__stat64.c
+++ b/mdk-stage1/dietlibc/lib/__stat64.c
@@ -1,9 +1,8 @@
+#include <errno.h>
#include "dietfeatures.h"
-
#ifdef WANT_LARGEFILE_BACKCOMPAT
#include <sys/stat.h>
#ifndef __NO_STAT64
-#include <errno.h>
extern int __dietlibc_stat64(const char *__file, struct stat64 *__buf);
extern void __stat64_cvt(const struct stat *src,struct stat64 *dest);
@@ -11,11 +10,7 @@ extern void __stat64_cvt(const struct stat *src,struct stat64 *dest);
int stat64(const char *__file, struct stat64 *__buf) {
if (__dietlibc_stat64(__file,__buf)) {
struct stat temp;
-#ifdef WANT_THREAD_SAFE
- if (*__errno_location()!=ENOSYS) return -1;
-#else
if (errno!=ENOSYS) return -1;
-#endif
if (stat(__file,&temp)) return -1;
__stat64_cvt(&temp,__buf);
}
diff --git a/mdk-stage1/dietlibc/lib/__stat64_cvt.c b/mdk-stage1/dietlibc/lib/__stat64_cvt.c
index dced352a4..c4ce8bea4 100644
--- a/mdk-stage1/dietlibc/lib/__stat64_cvt.c
+++ b/mdk-stage1/dietlibc/lib/__stat64_cvt.c
@@ -1,6 +1,8 @@
#include <sys/stat.h>
#ifndef __NO_STAT64
+void __stat64_cvt(const struct stat *src,struct stat64 *dest);
+
void __stat64_cvt(const struct stat *src,struct stat64 *dest) {
dest->st_dev=src->st_dev;
dest->st_ino=src->st_ino;
diff --git a/mdk-stage1/dietlibc/lib/__xmknod.c b/mdk-stage1/dietlibc/lib/__xmknod.c
deleted file mode 100644
index 4739a1f5f..000000000
--- a/mdk-stage1/dietlibc/lib/__xmknod.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <sys/stat.h>
-
-int __xmknod(int ver,char* filename,mode_t mode,dev_t *dev) {
- return mknod(filename,mode,*dev);
-}
-
diff --git a/mdk-stage1/dietlibc/lib/_brk.c b/mdk-stage1/dietlibc/lib/_brk.c
index 6d0b29c03..e73d7b621 100644
--- a/mdk-stage1/dietlibc/lib/_brk.c
+++ b/mdk-stage1/dietlibc/lib/_brk.c
@@ -1,14 +1,13 @@
#include <unistd.h>
-extern int __diet_brk(void *end_data_segment);
+extern void* __diet_brk(void *end_data_segment);
void* __curbrk=0;
-int __brk(void *end_data_segment) {
- int res;
- if ((res=__diet_brk(end_data_segment))==0)
- __curbrk=end_data_segment;
- return res;
+int __libc_brk(void *end_data_segment);
+
+int __libc_brk(void *end_data_segment) {
+ return ((__curbrk=__diet_brk(end_data_segment))==(void*)-1?-1:0);
}
-int brk (void *end_data_segment) __attribute__((weak,alias("__brk")));
+int brk(void *end_data_segment) __attribute__((weak,alias("__libc_brk")));
diff --git a/mdk-stage1/dietlibc/lib/abort.c b/mdk-stage1/dietlibc/lib/abort.c
index 55bfb8f0f..7c49a32ef 100644
--- a/mdk-stage1/dietlibc/lib/abort.c
+++ b/mdk-stage1/dietlibc/lib/abort.c
@@ -1,10 +1,16 @@
-#include <linux/types.h>
-#include <linux/signal.h>
+#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>
+#include <stdio.h>
+
+#ifndef __PIC__
+void __stdio_flushall(void) __attribute__((weak));
+void __stdio_flushall(void) { }
+#endif
void abort() {
sigset_t t;
+ __stdio_flushall();
if (!sigemptyset(&t) && !sigaddset(&t, SIGABRT))
sigprocmask(SIG_UNBLOCK, &t, 0);
while (1)
diff --git a/mdk-stage1/dietlibc/lib/abs.c b/mdk-stage1/dietlibc/lib/abs.c
index 9d7055358..d3b75f202 100644
--- a/mdk-stage1/dietlibc/lib/abs.c
+++ b/mdk-stage1/dietlibc/lib/abs.c
@@ -1,6 +1,6 @@
-#include <stdlib.h>
+#include <endian.h>
-int abs(int j)
-{
- return (j < 0) ? -j : j;
-}
+int abs(int i) { return i>=0?i:-i; }
+#if __WORDSIZE == 32
+long labs(long i) __attribute__((alias("abs")));
+#endif
diff --git a/mdk-stage1/dietlibc/lib/accept.c b/mdk-stage1/dietlibc/lib/accept.c
index c7e8254ca..08359b894 100644
--- a/mdk-stage1/dietlibc/lib/accept.c
+++ b/mdk-stage1/dietlibc/lib/accept.c
@@ -1,14 +1,12 @@
-#include <linux/net.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
+int __libc_accept(int a, void * addr, void * addr2);
+
int __libc_accept(int a, void * addr, void * addr2) {
-#ifdef __i386__
- return socketcall(SYS_ACCEPT, (long*)&a);
-#else
unsigned long args[] = { a, (long) addr, (long) addr2 };
return socketcall(SYS_ACCEPT, args);
-#endif
}
int accept(int a, void * addr, void * addr2) __attribute__((weak,alias("__libc_accept")));
diff --git a/mdk-stage1/dietlibc/lib/alarm.c b/mdk-stage1/dietlibc/lib/alarm.c
deleted file mode 100644
index fd35372f2..000000000
--- a/mdk-stage1/dietlibc/lib/alarm.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (C) 1991, 1992, 1994, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <unistd.h>
-#include <sys/time.h>
-
-/* Schedule an alarm. In SECONDS seconds, the process will get a SIGALRM.
- If SECONDS is zero, any currently scheduled alarm will be cancelled.
- The function returns the number of seconds remaining until the last
- alarm scheduled would have signaled, or zero if there wasn't one.
- There is no return value to indicate an error, but you can set `errno'
- to 0 and check its value after calling `alarm', and this might tell you.
- The signal may come late due to processor scheduling. */
-unsigned int
-alarm (seconds)
- unsigned int seconds;
-{
- struct itimerval old, new;
- unsigned int retval;
-
- new.it_interval.tv_usec = 0;
- new.it_interval.tv_sec = 0;
- new.it_value.tv_usec = 0;
- new.it_value.tv_sec = (long int) seconds;
- if (setitimer (ITIMER_REAL, &new, &old) < 0)
- return 0;
-
- retval = old.it_value.tv_sec;
- if (old.it_value.tv_usec)
- ++retval;
- return retval;
-}
diff --git a/mdk-stage1/dietlibc/lib/alloc.c b/mdk-stage1/dietlibc/lib/alloc.c
index 8cb87a69b..a2b3b73a1 100644
--- a/mdk-stage1/dietlibc/lib/alloc.c
+++ b/mdk-stage1/dietlibc/lib/alloc.c
@@ -1,23 +1,27 @@
/*
* malloc/free by O.Dreesen
+ *
+ * first TRY:
+ * lists w/magics
+ * and now the second TRY
+ * let the kernel map all the stuff (if there is something to do)
*/
-#include <linux/unistd.h>
-#include <asm/mman.h>
-#include <linux/errno.h>
-#include "dietfeatures.h"
-
-#if 0
+#include <unistd.h>
#include <sys/mman.h>
-#define _LIBC
#include <errno.h>
-#endif
+#include "dietfeatures.h"
-#include <linux/types.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/shm.h> /* for PAGE_SIZE */
-#if defined(MAP_ANONYMOUS) && !defined(MAP_ANON)
-#define MAP_ANON MAP_ANONYMOUS
-#endif
+
+/* -- HELPER CODE --------------------------------------------------------- */
#ifndef MAP_FAILED
#define MAP_FAILED ((void*)-1)
@@ -27,217 +31,207 @@
#define NULL ((void*)0)
#endif
-extern void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);
-extern void *memset(void *s, int c, size_t n);
-extern void *memcpy(void *dest, const void *src, size_t n);
+typedef union {
+ void* next;
+ size_t size;
+} __alloc_t;
-typedef struct t_alloc_head {
- unsigned int magic1;
- struct t_alloc_head *ptr;
- unsigned long size;
- unsigned int magic2;
-} alloc_head;
+#define BLOCK_START(b) (((void*)(b))-sizeof(__alloc_t))
+#define BLOCK_RET(b) (((void*)(b))+sizeof(__alloc_t))
-/* guess what ? the virtual block size */
-#define MEM_BLOCK_SIZE 4096
+#define MEM_BLOCK_SIZE PAGE_SIZE
+#define PAGE_ALIGN(s) (((s)+MEM_BLOCK_SIZE-1)&(unsigned long)(~(MEM_BLOCK_SIZE-1)))
-/* minimum allocated bytes */
-#define MEM_ALLOC_MIN 4
+/* a simple mmap :) */
-/* Initial start position in memory */
-#define MEM_ALLOC_START ((char*)0x18000000)
+#ifdef __i386__
+/* regparm exists only on i386 */
+static void *do_mmap(size_t size) __attribute__((regparm(1)));
+static size_t get_index(size_t _size) __attribute__((regparm(1)));
+static void* __small_malloc(size_t _size) __attribute__((regparm(1)));
+#endif
-/* Make every block align */
-#define MEM_ALIGN(s) (((s)+MEM_ALLOC_MIN-1)&(~(MEM_ALLOC_MIN-1)))
-#define PAGE_ALIGN(s) (((s)+MEM_BLOCK_SIZE-1)&(~(MEM_BLOCK_SIZE-1)))
-#define PAGE_ALIGNP(p) ((char*)PAGE_ALIGN((size_t)(p)))
+static void *do_mmap(size_t size) {
+ return mmap(0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, (size_t)0);
+}
-#define END_OF_BLOCK(p) ((alloc_head*)(((char*)(p))+((p)->size)))
-#define START_BLOCK(p) ((alloc_head*)(((char*)(p))-sizeof(alloc_head)))
-#define START_DATA(p) (((char*)(p))+sizeof(alloc_head))
-#define MIN_ALLOC(s) (((((s)+sizeof(alloc_head)-1)/MEM_ALLOC_MIN)+1)*MEM_ALLOC_MIN)
+/* -- SMALL MEM ----------------------------------------------------------- */
-#define ALLOC_MAGIC1 0xbad2f7ee
-#define ALLOC_MAGIC2 0xf7ee2bad
+static __alloc_t* __small_mem[8];
-/* freelist handler */
-static alloc_head base = {ALLOC_MAGIC1,&base,0,ALLOC_MAGIC2};
-static char *alloc_get_end = MEM_ALLOC_START;
+#define __SMALL_NR(i) (MEM_BLOCK_SIZE/(i))
-void __libc_free(void *ptr)
-{
- alloc_head *prev,*p,*block;
+#define __MIN_SMALL_SIZE __SMALL_NR(256) /* 16 / 32 */
+#define __MAX_SMALL_SIZE __SMALL_NR(2) /* 2048 / 4096 */
- if (ptr==NULL) return;
+#define GET_SIZE(s) (__MIN_SMALL_SIZE<<get_index((s)))
- block=START_BLOCK(ptr);
- if (block->magic1 != ALLOC_MAGIC1) return;
- if (block->magic2 != ALLOC_MAGIC2) return;
+#define FIRST_SMALL(p) (((unsigned long)(p))&(~(MEM_BLOCK_SIZE-1)))
- prev=&base;
- for (p=prev->ptr ; ; prev=p, p=p->ptr)
- {
- if ((block>prev)&&(block<p)) break; /* found the gap block belongs */
- if ((prev>p)&&(block<p)) break; /* block pre freelist */
- if ((prev>p)&&(block>prev)) break; /* block after freelist */
+static inline int __ind_shift() { return (MEM_BLOCK_SIZE==4096)?4:5; }
- /* emergency escape: freelist has ONLY one entry the freelist base */
- if (p->ptr==p) break;
+static size_t get_index(size_t _size) {
+ register size_t idx=0;
+ if (_size) {
+ register size_t size=((_size-1)&(MEM_BLOCK_SIZE-1))>>__ind_shift();
+ while(size) { size>>=1; ++idx; }
}
- prev->ptr = block;
+ return idx;
+}
- if (END_OF_BLOCK(block)==p)
- { /* join right neighbor */
- block->ptr = p->ptr;
- block->size += p->size;
- }
- else
- block->ptr = p;
+/* small mem */
+static void __small_free(void*_ptr,size_t _size) __attribute__((regparm(2)));
- if (END_OF_BLOCK(prev)==block)
- { /* join left neighbor */
- prev->size += block->size;
- prev->ptr = block->ptr;
- }
+static void __small_free(void*_ptr,size_t _size) {
+ __alloc_t* ptr=BLOCK_START(_ptr);
+ size_t size=_size;
+ size_t idx=get_index(size);
+
+ memset(ptr,0,size); /* allways zero out small mem */
+
+ ptr->next=__small_mem[idx];
+ __small_mem[idx]=ptr;
}
-void free(void *ptr) __attribute__((weak,alias("__libc_free")));
-
-static void *alloc_get_mem(unsigned long size)
-{
- char *tmp;
- alloc_head *ah;
-
- size=PAGE_ALIGN(size);
-
- /* map free pages @ alloc_get_end */
- tmp=mmap(alloc_get_end, size, PROT_READ|PROT_WRITE,
- MAP_ANONYMOUS|MAP_PRIVATE|MAP_FIXED, -1, 0);
- if (tmp==MAP_FAILED)
- {
- /* OK we can't map free pages @ alloc_get_end so try free position */
- tmp=mmap(0, size, PROT_READ|PROT_WRITE,
- MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
- if (tmp==MAP_FAILED)
- {
- errno = ENOMEM;
- return NULL; /* PANIC ! */
- }
- alloc_get_end=tmp;
- }
- alloc_get_end+=size;
+static void* __small_malloc(size_t _size) {
+ __alloc_t *ptr;
+ size_t size=_size;
+ size_t idx;
+
+ idx=get_index(size);
+ ptr=__small_mem[idx];
- /* make a header */
- ah=(alloc_head*)tmp;
- ah->magic1=ALLOC_MAGIC1;
- ah->magic2=ALLOC_MAGIC2;
- ah->ptr=ah;
- ah->size=size;
+ if (ptr==0) { /* no free blocks ? */
+ register int i,nr;
+ ptr=do_mmap(MEM_BLOCK_SIZE);
+ if (ptr==MAP_FAILED) return MAP_FAILED;
+
+ __small_mem[idx]=ptr;
+
+ nr=__SMALL_NR(size)-1;
+ for (i=0;i<nr;i++) {
+ ptr->next=(((void*)ptr)+size);
+ ptr=ptr->next;
+ }
+ ptr->next=0;
+
+ ptr=__small_mem[idx];
+ }
- /* link new free maped pages in freelist */
- __libc_free(START_DATA(tmp));
+ /* get a free block */
+ __small_mem[idx]=ptr->next;
+ ptr->next=0;
- return &base;
+ return ptr;
}
-void *__libc_malloc(size_t size)
-{
- alloc_head *p, *prev;
- size_t need;
+/* -- PUBLIC FUNCTIONS ---------------------------------------------------- */
- /* needed MEM_ALLOC_MIN */
- need=MIN_ALLOC(size);
-
- prev=&base;
- for (p=prev->ptr;;prev=p,p=p->ptr)
- {
- if (p->size>=need)
- {
- if (p->size==need)
- { /* fit PERFECT */
- prev->ptr=p->ptr; /* relink freelist */
- }
+static void _alloc_libc_free(void *ptr) {
+ register size_t size;
+ if (ptr) {
+ size=((__alloc_t*)BLOCK_START(ptr))->size;
+ if (size) {
+ if (size<=__MAX_SMALL_SIZE)
+ __small_free(ptr,size);
else
- {
- alloc_head *tmp=(alloc_head*)(((char*)p)+need);
- if ((p->size-need)<sizeof(alloc_head))
- { /* work around: if there is not enough space for freelist head.
- * this waste some bytes ( < sizeof(alloc_head) ) */
- need=p->size;
- prev->ptr=p->ptr; /* relink freelist */
- }
- else
- {
- prev->ptr=tmp;
- tmp->magic1=ALLOC_MAGIC1;
- tmp->magic2=ALLOC_MAGIC2;
- tmp->ptr=p->ptr;
- tmp->size=p->size-need; /* remaining size */
- }
+ munmap(BLOCK_START(ptr),size);
+ }
+ }
+}
+void __libc_free(void *ptr) __attribute__((alias("_alloc_libc_free")));
+void free(void *ptr) __attribute__((weak,alias("_alloc_libc_free")));
+void if_freenameindex(void* ptr) __attribute__((alias("free")));
- p->size=need; /* set size */
- }
- p->ptr=p; /* self-link */
+#ifdef WANT_MALLOC_ZERO
+static __alloc_t zeromem[2]={{0},{0}};
+#endif
- return (void*)START_DATA(p);
- }
- else if (p==&base)
- {
- if ((p=alloc_get_mem(need))==NULL) goto err_out;
- }
+static void* _alloc_libc_malloc(size_t size) {
+ __alloc_t* ptr;
+ size_t need;
+#ifdef WANT_MALLOC_ZERO
+ if (!size) return BLOCK_RET(zeromem);
+#else
+ if (!size) goto retzero;
+#endif
+ size+=sizeof(__alloc_t);
+ if (size<sizeof(__alloc_t)) goto retzero;
+ if (size<=__MAX_SMALL_SIZE) {
+ need=GET_SIZE(size);
+ ptr=__small_malloc(need);
+ }
+ else {
+ need=PAGE_ALIGN(size);
+ if (!need) ptr=MAP_FAILED; else ptr=do_mmap(need);
}
+ if (ptr==MAP_FAILED) goto err_out;
+ ptr->size=need;
+ return BLOCK_RET(ptr);
err_out:
- return NULL;
+ (*__errno_location())=ENOMEM;
+retzero:
+ return 0;
}
-void *malloc(size_t size) __attribute__((weak,alias("__libc_malloc")));
-
-void *calloc(size_t nmemb,size_t size)
-{
- size_t n=nmemb*size;
- void *tmp=malloc(n);
- if (tmp) memset(tmp,0,n);
- return tmp;
+void* __libc_malloc(size_t size) __attribute__((alias("_alloc_libc_malloc")));
+void* malloc(size_t size) __attribute__((weak,alias("_alloc_libc_malloc")));
+
+void *calloc(size_t nmemb, size_t _size) {
+ register size_t size=_size*nmemb;
+ if (nmemb && size/nmemb!=_size) {
+ (*__errno_location())=ENOMEM;
+ return 0;
+ }
+ return malloc(size);
}
-void *realloc(void *ptr,size_t size)
-{
- alloc_head *tmp=0,*tf=0;
- long need=0;
- long diff=0;
-
- if (ptr)
- {
- if (size)
- {
- tmp=START_BLOCK(ptr);
- need=MIN_ALLOC(size); /* only this size will survive */
- diff=tmp->size-need;
- if (diff<0)
- {
- if ((tf=malloc(size)))
- {
- memcpy(tf,ptr,tmp->size-sizeof(alloc_head));
- free(ptr);
- return tf;
+void* __libc_realloc(void* ptr, size_t _size);
+void* __libc_realloc(void* ptr, size_t _size) {
+ register size_t size=_size;
+ if (ptr) {
+ if (size) {
+ __alloc_t* tmp=BLOCK_START(ptr);
+ size+=sizeof(__alloc_t);
+ if (size<sizeof(__alloc_t)) goto retzero;
+ size=(size<=__MAX_SMALL_SIZE)?GET_SIZE(size):PAGE_ALIGN(size);
+ if (tmp->size!=size) {
+ if ((tmp->size<=__MAX_SMALL_SIZE)) {
+ void *new=_alloc_libc_malloc(_size);
+ if (new) {
+ register __alloc_t* foo=BLOCK_START(new);
+ size=foo->size;
+ if (size>tmp->size) size=tmp->size;
+ if (size) memcpy(new,ptr,size-sizeof(__alloc_t));
+ _alloc_libc_free(ptr);
+ }
+ ptr=new;
+ }
+ else {
+ register __alloc_t* foo;
+ size=PAGE_ALIGN(size);
+ foo=mremap(tmp,tmp->size,size,MREMAP_MAYMOVE);
+ if (foo==MAP_FAILED) {
+retzero:
+ (*__errno_location())=ENOMEM;
+ ptr=0;
+ }
+ else {
+ foo->size=size;
+ ptr=BLOCK_RET(foo);
+ }
}
- return NULL;
- }
- if (diff>=sizeof(alloc_head))
- {
- tmp->size=need;
- tf=END_OF_BLOCK(tmp);
- tf->magic1=ALLOC_MAGIC1;
- tf->magic2=ALLOC_MAGIC2;
- tf->ptr=tf;
- tf->size=diff;
- free(START_DATA(tf));
}
- return ptr;
}
- else
- free(ptr);
+ else { /* size==0 */
+ _alloc_libc_free(ptr);
+ }
}
- else if (size>0)
- return malloc(size);
- return NULL;
+ else { /* ptr==0 */
+ if (size) {
+ ptr=_alloc_libc_malloc(size);
+ }
+ }
+ return ptr;
}
+void* realloc(void* ptr, size_t size) __attribute__((weak,alias("__libc_realloc")));
+
diff --git a/mdk-stage1/dietlibc/lib/assert_fail.c b/mdk-stage1/dietlibc/lib/assert_fail.c
index 3d6ba65c1..35b8b186a 100644
--- a/mdk-stage1/dietlibc/lib/assert_fail.c
+++ b/mdk-stage1/dietlibc/lib/assert_fail.c
@@ -2,14 +2,15 @@
#include <string.h>
#include <unistd.h>
#include "dietwarning.h"
+#include <write12.h>
-extern int __ltostr(char *s, int size, unsigned long i, int base, char UpCase);
+void __assert_fail (const char *assertion, const char *file, unsigned int line, const char *function);
void __assert_fail (const char *assertion, const char *file, unsigned int line, const char *function)
{
- int alen=strlen(assertion);
- int flen=strlen(file);
- int fulen=strlen(function);
+ unsigned int alen=strlen(assertion);
+ unsigned int flen=strlen(file);
+ unsigned int fulen=function?strlen(function):0;
char *buf=(char*)alloca(alen+flen+fulen+50);
if (buf) {
char *tmp;
@@ -22,7 +23,7 @@ void __assert_fail (const char *assertion, const char *file, unsigned int line,
strcat(buf,"Assertion `");
strcat(buf,assertion);
strcat(buf,"' failed.\n");
- write(2,buf,strlen(buf));
+ __write2(buf);
}
abort();
}
diff --git a/mdk-stage1/dietlibc/lib/atexit.c b/mdk-stage1/dietlibc/lib/atexit.c
index 8204af06c..e0eef19c6 100644
--- a/mdk-stage1/dietlibc/lib/atexit.c
+++ b/mdk-stage1/dietlibc/lib/atexit.c
@@ -1,23 +1,31 @@
+#include <stdlib.h>
+
typedef void (*function)(void);
-static function __atexitlist[4];
+#define NUM_ATEXIT 32
+
+static function __atexitlist[NUM_ATEXIT];
+static int atexit_counter = 0;
int atexit(function t) {
- int i;
- for (i=0; i<4; i++)
- if (__atexitlist[i]==0) {
- __atexitlist[i]=t;
- return 0;
- }
+ if (atexit_counter<NUM_ATEXIT) {
+ __atexitlist[atexit_counter]=t;
+ ++atexit_counter;
+ return 0;
+ }
return -1;
}
extern void _exit(int code) __attribute__((noreturn));
+extern void __thread_doexit();
-void exit(int code) {
- if (__atexitlist[3]) __atexitlist[3]();
- if (__atexitlist[2]) __atexitlist[2]();
- if (__atexitlist[1]) __atexitlist[1]();
- if (__atexitlist[0]) __atexitlist[0]();
+void __libc_exit(int code);
+void __libc_exit(int code) {
+ register int i=atexit_counter;
+ __thread_doexit();
+ while(i) {
+ __atexitlist[--i]();
+ }
_exit(code);
}
+void exit(int code) __attribute__((alias("__libc_exit")));
diff --git a/mdk-stage1/dietlibc/lib/atoi.c b/mdk-stage1/dietlibc/lib/atoi.c
index fe952b8c4..10b618950 100644
--- a/mdk-stage1/dietlibc/lib/atoi.c
+++ b/mdk-stage1/dietlibc/lib/atoi.c
@@ -1,8 +1,19 @@
+#include <endian.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+#if __WORDSIZE == 64
int atoi(const char* s) {
- int v=0;
+ long int v=0;
int sign=1;
- if (*s=='-') { sign=-1; ++s; } else if (*s=='+') ++s;
- while (*s && (*s>='0') && (*s<='9'))
- v=v*10+*s++-'0';
- return v*sign;
+ while ( *s == ' ' || (unsigned int)(*s - 9) < 5u) s++;
+ switch (*s) {
+ case '-': sign=-1;
+ case '+': ++s;
+ }
+ while ((unsigned int) (*s - '0') < 10u) {
+ v=v*10+*s-'0'; ++s;
+ }
+ return sign==-1?-v:v;
}
+#endif
diff --git a/mdk-stage1/dietlibc/lib/atol.c b/mdk-stage1/dietlibc/lib/atol.c
index 558a004b9..5961a1881 100644
--- a/mdk-stage1/dietlibc/lib/atol.c
+++ b/mdk-stage1/dietlibc/lib/atol.c
@@ -1,8 +1,23 @@
+#include <endian.h>
+#include <ctype.h>
+#include <stdlib.h>
+
long int atol(const char* s) {
long int v=0;
- int sign=1;
- if (*s=='-') { sign=-1; ++s; } else if (*s=='+') ++s;
- while (*s && (*s>='0') && (*s<='9'))
- v=v*10+*s++-'0';
- return v*sign;
+ int sign=0;
+ while ( *s == ' ' || (unsigned int)(*s - 9) < 5u) ++s;
+ switch (*s) {
+ case '-': sign=-1;
+ case '+': ++s;
+ }
+ while ((unsigned int) (*s - '0') < 10u) {
+ v=v*10+*s-'0'; ++s;
+ }
+ return sign?-v:v;
}
+
+#if __WORDSIZE == 64
+long long int atoll(const char* s) __attribute__((alias("atol")));
+#else
+int atoi(const char* s) __attribute__((alias("atol")));
+#endif
diff --git a/mdk-stage1/dietlibc/lib/bind.c b/mdk-stage1/dietlibc/lib/bind.c
index ec1c93e1b..dae80f491 100644
--- a/mdk-stage1/dietlibc/lib/bind.c
+++ b/mdk-stage1/dietlibc/lib/bind.c
@@ -1,12 +1,11 @@
-#include <linux/net.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
-int bind(int a, void * b, int c) {
-#ifdef __i386__
- return socketcall(SYS_BIND, (long*)&a);
-#else
+int __libc_bind(int a, void * b, int c);
+int __libc_bind(int a, void * b, int c) {
unsigned long args[] = { a, (long) b, c };
return socketcall(SYS_BIND, args);
-#endif
}
+
+int bind(int a, void * b, int c) __attribute__((weak,alias("__libc_bind")));
diff --git a/mdk-stage1/dietlibc/lib/bsearch.c b/mdk-stage1/dietlibc/lib/bsearch.c
index d2f5c74b2..14605f1f6 100644
--- a/mdk-stage1/dietlibc/lib/bsearch.c
+++ b/mdk-stage1/dietlibc/lib/bsearch.c
@@ -1,20 +1,20 @@
+#include <assert.h>
#include <stdlib.h>
void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) {
- const char *v, *r;
- int res;
- r=base+(nmemb-1)*size;
- do {
- register int num=nmemb/2;
- v=base+num*size;
- if ((res=compar(key,v))<0) {
- r=v-size;
- nmemb=num;
- } else {
- if (res==0) return (void*)v;
- base=v+size;
- nmemb-=num;
- }
- } while ((char*)base<=r);
+ size_t m;
+ while (nmemb) {
+ int tmp;
+ void *p;
+ m=nmemb/2;
+ p=(void *) (((const char *) base) + (m * size));
+ if ((tmp=(*compar)(key,p))<0) {
+ nmemb=m;
+ } else if (tmp>0) {
+ base=p+size;
+ nmemb-=m+1;
+ } else
+ return p;
+ }
return 0;
}
diff --git a/mdk-stage1/dietlibc/lib/cfmakeraw.c b/mdk-stage1/dietlibc/lib/cfmakeraw.c
index 7f6df9913..e33c783c9 100644
--- a/mdk-stage1/dietlibc/lib/cfmakeraw.c
+++ b/mdk-stage1/dietlibc/lib/cfmakeraw.c
@@ -1,8 +1,7 @@
#include <termios.h>
#include <sys/ioctl.h>
-void cfmakeraw(struct termios *t)
-{
+void cfmakeraw(struct termios *t) {
t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
t->c_oflag &= ~OPOST;
t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
diff --git a/mdk-stage1/dietlibc/lib/closedir.c b/mdk-stage1/dietlibc/lib/closedir.c
index e73025eb1..3aade81b3 100644
--- a/mdk-stage1/dietlibc/lib/closedir.c
+++ b/mdk-stage1/dietlibc/lib/closedir.c
@@ -1,10 +1,11 @@
#include "dietdirent.h"
+#include <sys/mman.h>
#include <unistd.h>
#include <dirent.h>
#include <stdlib.h>
int closedir (DIR* d) {
int res=close(d->fd);
- free(d);
+ munmap (d, PAGE_SIZE);
return res;
}
diff --git a/mdk-stage1/dietlibc/lib/connect.c b/mdk-stage1/dietlibc/lib/connect.c
index 01fd61a6c..642303ef3 100644
--- a/mdk-stage1/dietlibc/lib/connect.c
+++ b/mdk-stage1/dietlibc/lib/connect.c
@@ -1,14 +1,11 @@
-#include <linux/net.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
+int __libc_connect(int a, void * b, int c);
int __libc_connect(int a, void * b, int c) {
-#ifdef __i386__
- return socketcall(SYS_CONNECT, (long*)&a);
-#else
unsigned long args[] = { a, (long) b, c };
return socketcall(SYS_CONNECT, args);
-#endif
}
int connect(int a, void * b, int c) __attribute__((weak,alias("__libc_connect")));
diff --git a/mdk-stage1/dietlibc/lib/creat.c b/mdk-stage1/dietlibc/lib/creat.c
index 82145b515..41d8236aa 100644
--- a/mdk-stage1/dietlibc/lib/creat.c
+++ b/mdk-stage1/dietlibc/lib/creat.c
@@ -1,5 +1,7 @@
#include <fcntl.h>
-int creat(const char *file,mode_t mode) {
+int __libc_creat(const char *file,mode_t mode);
+int __libc_creat(const char *file,mode_t mode) {
return open(file,O_WRONLY|O_CREAT|O_TRUNC,mode);
}
+int creat(const char *file,mode_t mode) __attribute__((weak,alias("__libc_creat")));
diff --git a/mdk-stage1/dietlibc/lib/errlist.c b/mdk-stage1/dietlibc/lib/errlist.c
deleted file mode 100644
index d0e712190..000000000
--- a/mdk-stage1/dietlibc/lib/errlist.c
+++ /dev/null
@@ -1,132 +0,0 @@
-
-const char *const sys_errlist[] = {
- "Success", /* 0 */
- "Operation not permitted", /* EPERM */
- "No such file or directory", /* ENOENT */
- "No such process", /* ESRCH */
- "Interrupted system call", /* EINTR */
- "I/O error", /* EIO */
- "No such device or address", /* ENXIO */
- "Arg list too long", /* E2BIG */
- "Exec format error", /* ENOEXEC */
- "Bad file number", /* EBADF */
- "No child processes", /* ECHILD */
- "Try again", /* EAGAIN */
- "Out of memory", /* ENOMEM */
- "Permission denied", /* EACCES */
- "Bad address", /* EFAULT */
- "Block device required", /* ENOTBLK */
- "Device or resource busy", /* EBUSY */
- "File exists", /* EEXIST */
- "Cross-device link", /* EXDEV */
- "No such device", /* ENODEV */
- "Not a directory", /* ENOTDIR */
- "Is a directory", /* EISDIR */
- "Invalid argument", /* EINVAL */
- "File table overflow", /* ENFILE */
- "Too many open files", /* EMFILE */
- "Not a typewriter", /* ENOTTY */
- "Text file busy", /* ETXTBSY */
- "File too large", /* EFBIG */
- "No space left on device", /* ENOSPC */
- "Illegal seek", /* ESPIPE */
- "Read-only file system", /* EROFS */
- "Too many links", /* EMLINK */
- "Broken pipe", /* EPIPE */
- "Math argument out of domain of func", /* EDOM */
- "Math result not representable", /* ERANGE */
- "Resource deadlock would occur", /* EDEADLK */
- "File name too long", /* ENAMETOOLONG */
- "No record locks available", /* ENOLCK */
- "Function not implemented", /* ENOSYS */
- "Directory not empty", /* ENOTEMPTY */
- "Too many symbolic links encountered", /* ELOOP */
- "Operation would block", /* EWOULDBLOCK */
- "No message of desired type", /* ENOMSG */
- "Identifier removed", /* EIDRM */
- "Channel number out of range", /* ECHRNG */
- "Level 2 not synchronized", /* EL2NSYNC */
- "Level 3 halted", /* EL3HLT */
- "Level 3 reset", /* EL3RST */
- "Link number out of range", /* ELNRNG */
- "Protocol driver not attached", /* EUNATCH */
- "No CSI structure available", /* ENOCSI */
- "Level 2 halted", /* EL2HLT */
- "Invalid exchange", /* EBADE */
- "Invalid request descriptor", /* EBADR */
- "Exchange full", /* EXFULL */
- "No anode", /* ENOANO */
- "Invalid request code", /* EBADRQC */
- "Invalid slot", /* EBADSLT */
- "File locking deadlock error", /* EDEADLOCK */
- "Bad font file format", /* EBFONT */
- "Device not a stream", /* ENOSTR */
- "No data available", /* ENODATA */
- "Timer expired", /* ETIME */
- "Out of streams resources", /* ENOSR */
- "Machine is not on the network", /* ENONET */
- "Package not installed", /* ENOPKG */
- "Object is remote", /* EREMOTE */
- "Link has been severed", /* ENOLINK */
- "Advertise error", /* EADV */
- "Srmount error", /* ESRMNT */
- "Communication error on send", /* ECOMM */
- "Protocol error", /* EPROTO */
- "Multihop attempted", /* EMULTIHOP */
- "RFS specific error", /* EDOTDOT */
- "Not a data message", /* EBADMSG */
- "Value too large for defined data type", /* EOVERFLOW */
- "Name not unique on network", /* ENOTUNIQ */
- "File descriptor in bad state", /* EBADFD */
- "Remote address changed", /* EREMCHG */
- "Can not access a needed shared library", /* ELIBACC */
- "Accessing a corrupted shared library", /* ELIBBAD */
- ".lib section in a.out corrupted", /* ELIBSCN */
- "Attempting to link in too many shared libraries", /* ELIBMAX */
- "Cannot exec a shared library directly", /* ELIBEXEC */
- "Illegal byte sequence", /* EILSEQ */
- "Interrupted system call should be restarted", /* ERESTART */
- "Streams pipe error", /* ESTRPIPE */
- "Too many users", /* EUSERS */
- "Socket operation on non-socket", /* ENOTSOCK */
- "Destination address required", /* EDESTADDRREQ */
- "Message too long", /* EMSGSIZE */
- "Protocol wrong type for socket", /* EPROTOTYPE */
- "Protocol not available", /* ENOPROTOOPT */
- "Protocol not supported", /* EPROTONOSUPPORT */
- "Socket type not supported", /* ESOCKTNOSUPPORT */
- "Operation not supported on transport endpoint", /* EOPNOTSUPP */
- "Protocol family not supported", /* EPFNOSUPPORT */
- "Address family not supported by protocol", /* EAFNOSUPPORT */
- "Address already in use", /* EADDRINUSE */
- "Cannot assign requested address", /* EADDRNOTAVAIL */
- "Network is down", /* ENETDOWN */
- "Network is unreachable", /* ENETUNREACH */
- "Network dropped connection because of reset", /* ENETRESET */
- "Software caused connection abort", /* ECONNABORTED */
- "Connection reset by peer", /* ECONNRESET */
- "No buffer space available", /* ENOBUFS */
- "Transport endpoint is already connected", /* EISCONN */
- "Transport endpoint is not connected", /* ENOTCONN */
- "Cannot send after transport endpoint shutdown", /* ESHUTDOWN */
- "Too many references: cannot splice", /* ETOOMANYREFS */
- "Connection timed out", /* ETIMEDOUT */
- "Connection refused", /* ECONNREFUSED */
- "Host is down", /* EHOSTDOWN */
- "No route to host", /* EHOSTUNREACH */
- "Operation already in progress", /* EALREADY */
- "Operation now in progress", /* EINPROGRESS */
- "Stale NFS file handle", /* ESTALE */
- "Structure needs cleaning", /* EUCLEAN */
- "Not a XENIX named type file", /* ENOTNAM */
- "No XENIX semaphores available", /* ENAVAIL */
- "Is a named type file", /* EISNAM */
- "Remote I/O error", /* EREMOTEIO */
- "Quota exceeded", /* EDQUOT */
- "No medium found", /* ENOMEDIUM */
- "Wrong medium type", /* EMEDIUMTYPE */
- 0
-};
-
-
-const int sys_nerr = ((sizeof (sys_errlist))/(sizeof(char *))-1);
diff --git a/mdk-stage1/dietlibc/lib/errno_location.c b/mdk-stage1/dietlibc/lib/errno_location.c
index 286f833c9..298c9c3cf 100644
--- a/mdk-stage1/dietlibc/lib/errno_location.c
+++ b/mdk-stage1/dietlibc/lib/errno_location.c
@@ -1,5 +1,5 @@
extern int errno;
+int *__errno_location(void) __attribute__((weak));
int *__errno_location() { return &errno; }
-int *errno_location() __attribute__((weak,alias("__errno_location")));
diff --git a/mdk-stage1/dietlibc/lib/exec_lib.c b/mdk-stage1/dietlibc/lib/exec_lib.c
index 3129224a0..575c03d6d 100644
--- a/mdk-stage1/dietlibc/lib/exec_lib.c
+++ b/mdk-stage1/dietlibc/lib/exec_lib.c
@@ -3,18 +3,19 @@
extern char **environ;
+int __exec_shell(const char *file, char *const argv[]);
int __exec_shell(const char *file, char *const argv[]) {
int i;
for (i = 0; argv[i]; i++);
{
- char *shell_argv[i + 1];
+ const char *shell_argv[i + 1];
shell_argv[0] = _PATH_BSHELL;
- shell_argv[1] = (char *) file;
+ shell_argv[1] = file;
for (; i > 1; i--)
shell_argv[i] = argv[i - 1];
- return execve(_PATH_BSHELL, shell_argv, environ);
+ return execve(_PATH_BSHELL, (char*const*)shell_argv, environ);
}
}
diff --git a/mdk-stage1/dietlibc/lib/execl.c b/mdk-stage1/dietlibc/lib/execl.c
index 71459e71f..360bd3908 100644
--- a/mdk-stage1/dietlibc/lib/execl.c
+++ b/mdk-stage1/dietlibc/lib/execl.c
@@ -2,6 +2,7 @@
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
+#include "dietfeatures.h"
int execl( const char *path,...) {
va_list ap;
@@ -19,6 +20,6 @@ int execl( const char *path,...) {
va_end (ap);
return execve(path,argv,environ);
}
- __set_errno(ENOMEM);
+ errno=ENOMEM;
return -1;
}
diff --git a/mdk-stage1/dietlibc/lib/execlp.c b/mdk-stage1/dietlibc/lib/execlp.c
index 3aea1e960..27dc0bb95 100644
--- a/mdk-stage1/dietlibc/lib/execlp.c
+++ b/mdk-stage1/dietlibc/lib/execlp.c
@@ -2,7 +2,7 @@
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
-#include "dietstdarg.h"
+#include "dietfeatures.h"
int execlp(const char* file, const char *arg,...) {
va_list ap,bak;
@@ -15,12 +15,12 @@ int execlp(const char* file, const char *arg,...) {
++n;
va_end (ap);
if ((argv=(char **)alloca(n*sizeof(char*)))) {
- argv[0]=arg;
+ argv[0]=(char*)arg;
for (i=0; i<n; ++i)
argv[i+1]=va_arg(bak,char *);
va_end (bak);
return execvp(file,argv);
}
- __set_errno(ENOMEM);
+ errno=ENOMEM;
return -1;
}
diff --git a/mdk-stage1/dietlibc/lib/execv.c b/mdk-stage1/dietlibc/lib/execv.c
index efd760253..d7acfa29f 100644
--- a/mdk-stage1/dietlibc/lib/execv.c
+++ b/mdk-stage1/dietlibc/lib/execv.c
@@ -4,10 +4,12 @@
#include <unistd.h>
#include <errno.h>
#include "exec_lib.h"
+#include "dietfeatures.h"
int execv(const char *file, char *const argv[]) {
if (execve(file,argv,environ)==-1) {
- if (errno==ENOEXEC) __exec_shell(file,argv);
+ if (errno==ENOEXEC)
+ __exec_shell(file,argv);
}
return -1;
}
diff --git a/mdk-stage1/dietlibc/lib/execvp.c b/mdk-stage1/dietlibc/lib/execvp.c
index 20521d69f..72447af7a 100644
--- a/mdk-stage1/dietlibc/lib/execvp.c
+++ b/mdk-stage1/dietlibc/lib/execvp.c
@@ -4,31 +4,40 @@
#include <unistd.h>
#include <errno.h>
#include "exec_lib.h"
+#include "dietfeatures.h"
int execvp(const char *file, char *const argv[]) {
- char *path=getenv("PATH");
+ const char *path=getenv("PATH");
char *cur,*next;
char buf[PATH_MAX];
if (strchr((char*)file,'/')) {
if (execve(file,argv,environ)==-1) {
- if (errno==ENOEXEC) __exec_shell(file,argv);
+ if (errno==ENOEXEC)
+ __exec_shell(file,argv);
return -1;
}
}
if (!path) path=_PATH_DEFPATH;
- for (cur=path; cur; cur=next) {
+ for (cur=(char*)path; cur; cur=next) {
next=strchr(cur,':');
if (!next)
next=cur+strlen(cur);
if (next==cur) {
buf[0]='.';
cur--;
- } else
- memmove(buf,cur,next-cur);
+ } else {
+ if (next-cur>=PATH_MAX-3) { error: errno=EINVAL; return -1; }
+ memmove(buf,cur,(size_t)(next-cur));
+ }
buf[next-cur]='/';
- memmove(&buf[next-cur+1],file,strlen(file)+1);
+ {
+ int len=strlen(file);
+ if (len+(next-cur)>=PATH_MAX-2) goto error;
+ memmove(&buf[next-cur+1],file,strlen(file)+1);
+ }
if (execve(buf,argv,environ)==-1) {
- if (errno==ENOEXEC) return __exec_shell(buf,argv);
+ if (errno==ENOEXEC)
+ return __exec_shell(buf,argv);
if ((errno!=EACCES) && (errno!=ENOENT)) return -1;
}
if (*next==0) break;
diff --git a/mdk-stage1/dietlibc/lib/ftw.c b/mdk-stage1/dietlibc/lib/ftw.c
index a3c04af9a..af13a7f86 100644
--- a/mdk-stage1/dietlibc/lib/ftw.c
+++ b/mdk-stage1/dietlibc/lib/ftw.c
@@ -1,52 +1,47 @@
-#include <linux/stat.h>
+#include <sys/stat.h>
#include <unistd.h>
#include <limits.h>
#include <ftw.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
+#include "dietdirent.h"
-int ftw(const char *dir,int (*fn)(const char *file, const struct stat *sb, int flag), int depth) {
- char *cwd;
- int cwdlen;
- DIR *d;
- struct dirent *de;
+int ftw(const char*dir,int(*f)(const char*file,const struct stat*sb,int flag),int dpth){
+ char* cd;
+ size_t cdl;
+ DIR* d;
+ struct dirent* de;
struct stat sb;
- if (chdir(dir)) return -1;
- cwd=alloca(PATH_MAX+1);
- if (!getcwd(cwd,PATH_MAX)) return -1;
- cwd[PATH_MAX]=0;
- cwdlen=strlen(cwd);
-/* write(1,"ftw in ",7); puts(cwd); */
- if (!(d=opendir("."))) return -1;
- while ((de=readdir(d))) {
- int res;
- int flag;
- int nlen;
- char *filename;
- if (de->d_name[0]=='.' &&
- (de->d_name[1]==0 ||
- (de->d_name[1]=='.' && de->d_name[2]==0))) continue;
- nlen=strlen(de->d_name);
- filename=alloca(nlen+cwdlen+3);
- memmove(filename,cwd,cwdlen);
- filename[cwdlen]='/';
- memmove(filename+cwdlen+1,de->d_name,nlen+1);
- if (!lstat(de->d_name,&sb)) {
- if (S_ISLNK(sb.st_mode)) flag=FTW_SL; else
- if (S_ISDIR(sb.st_mode)) flag=FTW_D; else
- flag=FTW_F;
- } else
- flag=FTW_NS;
- res=fn(filename,&sb,flag);
- if (res) return res;
- if (flag==FTW_D && depth>0) {
- res=ftw(filename,fn,depth-1);
- chdir(dir);
- if (res) return res;
+ int r;
+ unsigned int oldlen=0;
+ char* filename; /* the warning gcc issues here is bogus */
+ if(chdir(dir))return-1;
+ cd=alloca(PATH_MAX+1);
+ if(!getcwd(cd,PATH_MAX))return-1;
+ cd[PATH_MAX]='\0';
+ cdl=strlen(cd);
+ if(!(d=opendir(".")))return-1;
+ while((de=readdir(d))){
+ int flg;
+ size_t nl;
+ if(de->d_name[0]=='.'){if(!de->d_name[1])continue;if(de->d_name[1]=='.'&&!de->d_name[2])continue;}
+ nl=strlen(de->d_name);
+ if (nl+cdl+2>oldlen)
+ filename=alloca(oldlen=nl+cdl+2);
+ memmove(filename,cd,cdl);
+ filename[cdl]='/';
+ memmove(filename+cdl+1,de->d_name,nl+1);
+ if(!lstat(de->d_name,&sb)){
+ if(S_ISLNK(sb.st_mode))flg=FTW_SL;else if(S_ISDIR(sb.st_mode))flg=FTW_D;else flg=FTW_F;
+ }else flg=FTW_NS;
+ r=f(filename,&sb,flg);
+ if(r){closedir(d);return r;}
+ if(flg==FTW_D&&dpth){
+ r=ftw(filename,f,dpth-1);
+ fchdir(d->fd);
+ if (r){closedir(d);return r;}
}
-/* puts(de->d_name); */
}
- closedir(d);
- return 0;
+ return closedir(d);
}
diff --git a/mdk-stage1/dietlibc/lib/getdomainname.c b/mdk-stage1/dietlibc/lib/getdomainname.c
index 2554fe4c3..75486b010 100644
--- a/mdk-stage1/dietlibc/lib/getdomainname.c
+++ b/mdk-stage1/dietlibc/lib/getdomainname.c
@@ -2,12 +2,13 @@
#include <sys/types.h>
#include <sys/utsname.h>
+#include <unistd.h>
int getdomainname(char *name,size_t len) {
struct utsname u;
int res=uname(&u);
if (res==0) {
- int i;
+ size_t i;
if (len>=_UTSNAME_DOMAIN_LENGTH)
len=_UTSNAME_DOMAIN_LENGTH;
for (i=0; i<len; i++)
diff --git a/mdk-stage1/dietlibc/lib/getenv.c b/mdk-stage1/dietlibc/lib/getenv.c
index fc37e9927..5b529c17f 100644
--- a/mdk-stage1/dietlibc/lib/getenv.c
+++ b/mdk-stage1/dietlibc/lib/getenv.c
@@ -1,7 +1,6 @@
+#include <stdlib.h>
#include <string.h>
-extern char **environ;
-
extern char *getenv(const char *s)
{
int i;
diff --git a/mdk-stage1/dietlibc/lib/gethostname.c b/mdk-stage1/dietlibc/lib/gethostname.c
index ccc0fbc8e..c3d2f3d5e 100644
--- a/mdk-stage1/dietlibc/lib/gethostname.c
+++ b/mdk-stage1/dietlibc/lib/gethostname.c
@@ -2,12 +2,13 @@
#include <sys/types.h>
#include <sys/utsname.h>
+#include <unistd.h>
int gethostname(char *name,size_t len) {
struct utsname u;
int res=uname(&u);
if (res==0) {
- int i;
+ size_t i;
if (len>=_UTSNAME_NODENAME_LENGTH)
len=_UTSNAME_NODENAME_LENGTH;
for (i=0; i<len; i++)
diff --git a/mdk-stage1/dietlibc/lib/getopt.c b/mdk-stage1/dietlibc/lib/getopt.c
index 93097122f..aa1988f8d 100644
--- a/mdk-stage1/dietlibc/lib/getopt.c
+++ b/mdk-stage1/dietlibc/lib/getopt.c
@@ -1,118 +1,63 @@
-#include "getopt.h"
#include <string.h>
-
-/*
- * by Olaf Dreesen
- */
-
-int opterr;
-
-int optind=1;
-char *optarg;
-
-static int opt_unknown=1,opt_unknown_len;
-
-static int getopt_check(int c,char*o,int ol)
-{
- int i;
- if (c==':') return 2;
- for (i=0;i<ol;i++)
- {
- if (o[i]==c)
- {
- if (o[i+1]==':') return 1;
- return 0;
+#include <getopt.h>
+
+static void getopterror(int which) {
+ static char error1[]="Unknown option `-x'.\n";
+ static char error2[]="Missing argument for `-x'.\n";
+ if (opterr) {
+ if (which) {
+ error2[23]=optopt;
+ write(2,error2,28);
+ } else {
+ error1[17]=optopt;
+ write(2,error1,22);
}
}
- return 2;
}
-static void getopt_sort(char*v[],int oi)
-{
- int i;
- char *tmp, *tmp2=0;
-
- if (opt_unknown_len)
- {
- tmp=v[optind-(1+oi)];
- if (oi) tmp2=v[optind-1];
-
- for (i=opt_unknown+opt_unknown_len;i>opt_unknown;i--) v[i+oi]=v[i-1];
-
- v[opt_unknown++]=tmp;
- if (oi) v[opt_unknown++]=tmp2;
+int getopt(int argc, char * const argv[], const char *optstring) {
+ static int lastidx=0,lastofs=0;
+ char *tmp;
+ if (optind==0) optind=1; /* whoever started setting optind to 0 should be shot */
+again:
+ if (optind>argc || !argv[optind] || *argv[optind]!='-' || argv[optind][1]==0)
+ return -1;
+ if (argv[optind][1]=='-' && argv[optind][2]==0) {
+ ++optind;
+ return -1;
}
-}
-
-static char* nextchar;
-int getopt(int c,char*v[],char*o)
-{
- int ol=strlen(o);
- int ret=0;
- int oi=0;
-
- optarg=0;
-
- while (nextchar || (optind<c))
- {
- if (nextchar)
- {
- if ((ret=(*(++nextchar))))
- {
- switch (getopt_check(ret,o,ol))
- {
- case 1:
- if (*(++nextchar))
- optarg=nextchar;
- else
- {
- if (optind<c)
- {
- oi=1;
- optarg=v[optind++];
- }
- else
- ret='?';
- }
- nextchar=0;
- case 0:
- if (!nextchar)
- getopt_sort(v,oi);
- else
- if (!(*(nextchar+1)))
- getopt_sort(v,oi);
- return ret;
- break;
- default:
- return '?';
- break;
- }
- }
- else
- nextchar=0;
+ if (lastidx!=optind) {
+ lastidx=optind; lastofs=0;
+ }
+ optopt=argv[optind][lastofs+1];
+ if ((tmp=strchr(optstring,optopt))) {
+ if (*tmp==0) { /* apparently, we looked for \0, i.e. end of argument */
+ ++optind;
+ goto again;
}
- else
- {
- if ((v[optind][0]=='-')&&((v[optind][1]!=0)))
- {
- if ((v[optind][1]=='-')&&(v[optind][2]==0))
- {
- getopt_sort(v,oi);
- optind=opt_unknown;
- return -1;
- }
- else
- {
- nextchar=v[optind];
- }
+ if (tmp[1]==':') { /* argument expected */
+ if (tmp[2]==':' || argv[optind][lastofs+2]) { /* "-foo", return "oo" as optarg */
+ if (!*(optarg=argv[optind]+lastofs+2)) optarg=0;
+ goto found;
}
- else
- {
- ++opt_unknown_len;
+ optarg=argv[optind+1];
+ if (!optarg) { /* missing argument */
+ ++optind;
+ if (*optstring==':') return ':';
+ getopterror(1);
+ return ':';
}
++optind;
+ } else {
+ ++lastofs;
+ return optopt;
}
+found:
+ ++optind;
+ return optopt;
+ } else { /* not found */
+ getopterror(0);
+ ++optind;
+ return '?';
}
- optind=opt_unknown;
- return -1;
}
diff --git a/mdk-stage1/dietlibc/lib/getpeername.c b/mdk-stage1/dietlibc/lib/getpeername.c
index 8adcddf55..c806c720d 100644
--- a/mdk-stage1/dietlibc/lib/getpeername.c
+++ b/mdk-stage1/dietlibc/lib/getpeername.c
@@ -1,13 +1,12 @@
-#include <linux/net.h>
+#include <linuxnet.h>
+#include <sys/socket.h>
extern int socketcall(int callno,long* args);
-int getpeername(int a, void * b, int c) {
-#ifdef __i386__
- return socketcall(SYS_GETPEERNAME, (long*)&a);
-#else
- unsigned long args[] = { a, (long) b, c };
+int __libc_getpeername(int a, void * b, int *c);
+int __libc_getpeername(int a, void * b, int *c) {
+ unsigned long args[] = { a, (long) b, (long) c };
return socketcall(SYS_GETPEERNAME, args);
-#endif
}
+int getpeername(int a, struct sockaddr* b, socklen_t *c) __attribute__((weak,alias("__libc_getpeername")));
diff --git a/mdk-stage1/dietlibc/lib/getservent.c b/mdk-stage1/dietlibc/lib/getservent.c
deleted file mode 100644
index bf25d046b..000000000
--- a/mdk-stage1/dietlibc/lib/getservent.c
+++ /dev/null
@@ -1,137 +0,0 @@
-#include <unistd.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include <netinet/in.h>
-#include <string.h>
-#include <ctype.h>
-
-static int servicesfd=-1;
-static char* servicesmap;
-static unsigned int serviceslen;
-
-static char* aliases[10];
-
-static char *cur;
-
-/* nameserver 42/tcp name # IEN 116 */
-struct servent *getservent(void) {
- static struct servent se;
- char *last;
- int aliasidx;
- if (servicesfd<0) {
- servicesfd=open(_PATH_SERVICES,O_RDONLY);
- if (servicesfd<0) return 0;
- serviceslen=lseek(servicesfd,0,SEEK_END);
- servicesmap=mmap(0,serviceslen,PROT_READ|PROT_WRITE,MAP_PRIVATE,servicesfd,0);
- if ((long)servicesmap==(-1)) goto error;
- cur=servicesmap;
- }
- last=servicesmap+serviceslen;
-again:
- se.s_name=0;
- se.s_aliases=aliases; aliases[0]=0;
- se.s_port=0;
- se.s_proto=0;
- if (cur>=last) return 0;
- if (*cur=='#' || *cur=='\n') goto parseerror;
- /* first, the primary name */
- if (!isalpha(*cur)) goto parseerror;
- se.s_name=cur;
- se.s_aliases=aliases;
- while (cur<last && isalnum(*cur)) cur++;
- if (cur>=last) return 0;
- if (*cur=='\n') goto parseerror;
- *cur=0; cur++;
- /* second, the port */
- while (cur<last && isblank(*cur)) cur++;
- while (cur<last && isdigit(*cur)) {
- se.s_port=se.s_port*10+*cur-'0';
- cur++;
- }
- se.s_port=htons(se.s_port);
- if (cur>=last) return 0;
- /* third, "/tcp" or "/udp" */
- if (*cur!='/') goto parseerror;
- cur++;
- se.s_proto=cur;
- while (cur<last && isalpha(*cur)) ++cur;
- if (cur>=last) return 0;
- if (*cur=='\n') { *cur++=0; return &se; }
- *cur=0; cur++;
- /* now the aliases */
- for (aliasidx=0;aliasidx<10;++aliasidx) {
- while (cur<last && isblank(*cur)) ++cur;
- aliases[aliasidx]=cur;
- while (cur<last && isalpha(*cur)) ++cur;
- if (*cur=='\n') { *cur++=0; ++aliasidx; break; }
- if (cur>=last || !isblank(*cur)) break;
- *cur++=0;
- }
- aliases[aliasidx]=0;
- return &se;
-parseerror:
- while (cur<last && *cur!='\n') cur++;
- cur++;
- goto again;
-error:
- if (servicesmap!=(char*)-1) munmap(servicesmap,serviceslen);
- if (servicesfd!=-1) close(servicesfd);
- servicesmap=(char*)-1;
- servicesfd=-1;
- errno=ENOMEM;
- return 0;
-}
-
-void setservent(int stayopen) {
- cur=servicesmap;
-}
-
-struct servent *getservbyname(const char *name, const char *proto) {
- struct servent *s;
- setservent(0);
- for (s=getservent(); s; s=getservent()) {
- char **tmp;
-#if 0
- write(1,"found ",6);
- write(1,s->s_name,strlen(s->s_name));
- write(1,"/",1);
- write(1,s->s_proto,strlen(s->s_proto));
- write(1,"\n",1);
- if (!strcmp(name,"auth")) {
- tmp=s->s_aliases;
- write(1," aka ",5);
- while (*tmp) {
- write(1,*tmp,strlen(*tmp));
- write(1,", ",2);
- ++tmp;
- }
- write(1,"\n",1);
- }
-#endif
- if (!strcmp(name,s->s_name) && !strcmp(proto,s->s_proto))
- return s;
- tmp=s->s_aliases;
- while (*tmp)
- if (!strcmp(name,*tmp++)) return s;
- }
- return 0;
-}
-
-struct servent *getservbyport(int port, const char *proto) {
- struct servent *s;
- for (s=getservent(); s; s=getservent()) {
- if (port==s->s_port && !strcmp(proto,s->s_proto))
- return s;
- }
- return 0;
-}
-
-void endservent(void) {
- if (servicesmap!=(char*)-1) munmap(servicesmap,serviceslen);
- if (servicesfd!=-1) close(servicesfd);
- servicesmap=(char*)-1;
- servicesfd=-1;
-}
-
diff --git a/mdk-stage1/dietlibc/lib/getsockname.c b/mdk-stage1/dietlibc/lib/getsockname.c
index 61a3ea24a..6c81e317d 100644
--- a/mdk-stage1/dietlibc/lib/getsockname.c
+++ b/mdk-stage1/dietlibc/lib/getsockname.c
@@ -1,13 +1,12 @@
-#include <linux/net.h>
+#include <linuxnet.h>
+#include <sys/socket.h>
extern int socketcall(int callno,long* args);
-int getsockname(int a, void * b, int c) {
-#ifdef __i386__
- return socketcall(SYS_GETSOCKNAME, (long*)&a);
-#else
+int __libc_getsockname(int a, void * b, int c);
+int __libc_getsockname(int a, void * b, int c) {
unsigned long args[] = { a, (long) b, c };
return socketcall(SYS_GETSOCKNAME, args);
-#endif
}
+int getsockname(int a, struct sockaddr* b, socklen_t* c) __attribute__((weak,alias("__libc_getsockname")));
diff --git a/mdk-stage1/dietlibc/lib/getsockopt.c b/mdk-stage1/dietlibc/lib/getsockopt.c
index 8c0a57557..05b71d77d 100644
--- a/mdk-stage1/dietlibc/lib/getsockopt.c
+++ b/mdk-stage1/dietlibc/lib/getsockopt.c
@@ -1,13 +1,12 @@
-#include <linux/net.h>
+#include <linuxnet.h>
+#include <sys/socket.h>
extern int socketcall(int callno,long* args);
-int getsockopt(int a, int b, int c, void *d, int e) {
-#ifdef __i386__
- return socketcall(SYS_GETSOCKOPT, (long*)&a);
-#else
+int __libc_getsockopt(int a, int b, int c, void *d, int e);
+int __libc_getsockopt(int a, int b, int c, void *d, int e) {
unsigned long args[] = { a, b, c, (long)d, e };
return socketcall(SYS_GETSOCKOPT, args);
-#endif
}
+int getsockopt(int s, int level, int optname, void * optval, socklen_t *optlen) __attribute__((weak,alias("__libc_getsockopt")));
diff --git a/mdk-stage1/dietlibc/lib/htonl.c b/mdk-stage1/dietlibc/lib/htonl.c
index 490de42c4..4096d04f5 100644
--- a/mdk-stage1/dietlibc/lib/htonl.c
+++ b/mdk-stage1/dietlibc/lib/htonl.c
@@ -1,6 +1,7 @@
#include <endian.h>
+#include <netinet/in.h>
-unsigned long int htonl(unsigned long int hostlong) {
+uint32_t htonl(uint32_t hostlong) {
#if __BYTE_ORDER==__LITTLE_ENDIAN
return (hostlong>>24) | ((hostlong&0xff0000)>>8) |
((hostlong&0xff00)<<8) | (hostlong<<24);
@@ -9,4 +10,4 @@ unsigned long int htonl(unsigned long int hostlong) {
#endif
}
-unsigned long int ntohl(unsigned long int hostlong) __attribute__((weak,alias("htonl")));
+uint32_t ntohl(uint32_t hostlong) __attribute__((weak,alias("htonl")));
diff --git a/mdk-stage1/dietlibc/lib/htons.c b/mdk-stage1/dietlibc/lib/htons.c
index 765d3bbc5..a64483174 100644
--- a/mdk-stage1/dietlibc/lib/htons.c
+++ b/mdk-stage1/dietlibc/lib/htons.c
@@ -1,6 +1,7 @@
#include <endian.h>
+#include <netinet/in.h>
-unsigned short int htons(unsigned short int hostshort) {
+uint16_t htons(uint16_t hostshort) {
#if __BYTE_ORDER==__LITTLE_ENDIAN
return ((hostshort>>8)&0xff) | (hostshort<<8);
#else
@@ -8,4 +9,4 @@ unsigned short int htons(unsigned short int hostshort) {
#endif
}
-unsigned short int ntohs(unsigned short int hostshort) __attribute__((weak,alias("htons")));
+uint16_t ntohs(uint16_t hostshort) __attribute__((weak,alias("htons")));
diff --git a/mdk-stage1/dietlibc/lib/if_indextoname.c b/mdk-stage1/dietlibc/lib/if_indextoname.c
index e683755f6..cc3111ed8 100644
--- a/mdk-stage1/dietlibc/lib/if_indextoname.c
+++ b/mdk-stage1/dietlibc/lib/if_indextoname.c
@@ -1,5 +1,4 @@
-#include <linux/if.h>
-#include <linux/net.h>
+#include <net/if.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <sys/socket.h>
diff --git a/mdk-stage1/dietlibc/lib/if_nametoindex.c b/mdk-stage1/dietlibc/lib/if_nametoindex.c
index 5923963b1..c9dd1b051 100644
--- a/mdk-stage1/dietlibc/lib/if_nametoindex.c
+++ b/mdk-stage1/dietlibc/lib/if_nametoindex.c
@@ -1,5 +1,4 @@
-#include <linux/if.h>
-#include <linux/net.h>
+#include <net/if.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <sys/socket.h>
@@ -8,7 +7,7 @@
#define SOCK_DGRAM 2
#endif
-int if_nametoindex(char* blub) {
+unsigned int if_nametoindex(const char* blub) {
struct ifreq ifr;
int fd;
char *tmp;
diff --git a/mdk-stage1/dietlibc/lib/isalnum.c b/mdk-stage1/dietlibc/lib/isalnum.c
index 4d363fab9..3192cc20d 100644
--- a/mdk-stage1/dietlibc/lib/isalnum.c
+++ b/mdk-stage1/dietlibc/lib/isalnum.c
@@ -1,7 +1,9 @@
#include <ctype.h>
-int __isalnum_ascii(int c) {
- return isalpha(c) || isdigit(c);
+int __isalnum_ascii ( int ch );
+int __isalnum_ascii ( int ch ) {
+ return (unsigned int)((ch | 0x20) - 'a') < 26u ||
+ (unsigned int)( ch - '0') < 10u;
}
-int isalnum(int c) __attribute__((weak,alias("__isalnum_ascii")));
+int isalnum ( int ch ) __attribute__((weak,alias("__isalnum_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/isalpha.c b/mdk-stage1/dietlibc/lib/isalpha.c
index 07ea69696..efd8b1940 100644
--- a/mdk-stage1/dietlibc/lib/isalpha.c
+++ b/mdk-stage1/dietlibc/lib/isalpha.c
@@ -1,7 +1,8 @@
#include <ctype.h>
-int __isalpha_ascii(int c) {
- return (c>='a' && c<='z') || (c>='A' && c<='Z');
+int __isalpha_ascii ( int ch );
+int __isalpha_ascii ( int ch ) {
+ return (unsigned int)((ch | 0x20) - 'a') < 26u;
}
-int isalpha(int c) __attribute__((weak,alias("__isalpha_ascii")));
+int isalpha ( int ch ) __attribute__((weak,alias("__isalpha_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/isascii.c b/mdk-stage1/dietlibc/lib/isascii.c
index e06994783..57a23ba44 100644
--- a/mdk-stage1/dietlibc/lib/isascii.c
+++ b/mdk-stage1/dietlibc/lib/isascii.c
@@ -1,6 +1,6 @@
#include <ctype.h>
-int isascii(int c) {
- return (c & 0x80) == 0;
+int isascii ( int ch )
+{
+ return (unsigned int)ch < 128u;
}
-
diff --git a/mdk-stage1/dietlibc/lib/isatty.c b/mdk-stage1/dietlibc/lib/isatty.c
index b31609720..4858a364d 100644
--- a/mdk-stage1/dietlibc/lib/isatty.c
+++ b/mdk-stage1/dietlibc/lib/isatty.c
@@ -2,11 +2,11 @@
#include <termios.h>
#undef ioctl
#include <sys/ioctl.h>
+#include <errno.h>
+#include <unistd.h>
+#include "dietfeatures.h"
-extern int errno;
-
-int isatty(int fd)
-{
+int isatty(int fd) {
int save;
int is_tty;
struct termios term;
diff --git a/mdk-stage1/dietlibc/lib/isblank.c b/mdk-stage1/dietlibc/lib/isblank.c
index 034e543b1..f13ca304a 100644
--- a/mdk-stage1/dietlibc/lib/isblank.c
+++ b/mdk-stage1/dietlibc/lib/isblank.c
@@ -1,6 +1,6 @@
#include <ctype.h>
-int isblank(int ch)
+int isblank ( int ch )
{
- return ((ch==' ')||(ch=='\t'));
+ return ch == ' ' || ch == '\t';
}
diff --git a/mdk-stage1/dietlibc/lib/iscntrl.c b/mdk-stage1/dietlibc/lib/iscntrl.c
index a183a54f1..98dbae6f3 100644
--- a/mdk-stage1/dietlibc/lib/iscntrl.c
+++ b/mdk-stage1/dietlibc/lib/iscntrl.c
@@ -1,7 +1,8 @@
#include <ctype.h>
-int __iscntrl_ascii(int c) {
- return (c<32) || (c==127);
+int __iscntrl_ascii ( int ch );
+int __iscntrl_ascii ( int ch ) {
+ return (unsigned int)ch < 32u || ch == 127;
}
-int iscntrl(int c) __attribute__((weak,alias("__iscntrl_ascii")));
+int iscntrl ( int ch ) __attribute__((weak,alias("__iscntrl_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/isdigit.c b/mdk-stage1/dietlibc/lib/isdigit.c
index 8a7c3e801..d04d281a8 100644
--- a/mdk-stage1/dietlibc/lib/isdigit.c
+++ b/mdk-stage1/dietlibc/lib/isdigit.c
@@ -1,7 +1,8 @@
#include <ctype.h>
-int __isdigit_ascii(int c) {
- return (c>='0' && c<='9');
+int __isdigit_ascii ( int ch );
+int __isdigit_ascii ( int ch ) {
+ return (unsigned int)(ch - '0') < 10u;
}
-int isdigit(int c) __attribute__((weak,alias("__isdigit_ascii")));
+int isdigit ( int ch ) __attribute__((weak,alias("__isdigit_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/isgraph.c b/mdk-stage1/dietlibc/lib/isgraph.c
index 807f90ff0..83419e788 100644
--- a/mdk-stage1/dietlibc/lib/isgraph.c
+++ b/mdk-stage1/dietlibc/lib/isgraph.c
@@ -1,5 +1,6 @@
-int __isgraph_ascii(int c) {
- return (c>=33 && c<=126);
+int __isgraph_ascii ( int ch );
+int __isgraph_ascii ( int ch ) {
+ return (unsigned int)(ch - '!') < 127u - '!';
}
-int isgraph(int c) __attribute__((weak,alias("__isgraph_ascii")));
+int isgraph ( int ch ) __attribute__((weak,alias("__isgraph_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/islower.c b/mdk-stage1/dietlibc/lib/islower.c
index 6a9afa519..8d219c43a 100644
--- a/mdk-stage1/dietlibc/lib/islower.c
+++ b/mdk-stage1/dietlibc/lib/islower.c
@@ -1,7 +1,8 @@
#include <ctype.h>
-int __islower_ascii(int c) {
- return (c>='a' && c<='z');
+int __islower_ascii ( int ch );
+int __islower_ascii ( int ch ) {
+ return (unsigned int) (ch - 'a') < 26u;
}
-int islower(int c) __attribute__((weak,alias("__islower_ascii")));
+int islower ( int ch ) __attribute__((weak,alias("__islower_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/isprint.c b/mdk-stage1/dietlibc/lib/isprint.c
index e980658a5..51ff5b6ee 100644
--- a/mdk-stage1/dietlibc/lib/isprint.c
+++ b/mdk-stage1/dietlibc/lib/isprint.c
@@ -1,6 +1,7 @@
-int __isprint_ascii(int c) {
- return (c>=32 && c<=126);
+int __isprint_ascii ( int ch );
+int __isprint_ascii ( int ch ) {
+ return (unsigned int)(ch - ' ') < 127u - ' ';
}
-int isprint(int c) __attribute__((weak,alias("__isprint_ascii")));
+int isprint ( int ch ) __attribute__((weak,alias("__isprint_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/ispunct.c b/mdk-stage1/dietlibc/lib/ispunct.c
index 2fd1183b1..8bbfcdb5a 100644
--- a/mdk-stage1/dietlibc/lib/ispunct.c
+++ b/mdk-stage1/dietlibc/lib/ispunct.c
@@ -1,7 +1,9 @@
#include <ctype.h>
-int __ispunct_ascii(int c) {
- return isprint(c) && !( isalnum(c) || isspace(c) );
+int __ispunct_ascii ( int ch );
+int __ispunct_ascii ( int ch )
+{
+ return isprint (ch) && !isalnum (ch) && !isspace (ch);
}
-int ispunct(int c) __attribute__((weak,alias("__ispunct_ascii")));
+int ispunct ( int ch ) __attribute__((weak,alias("__ispunct_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/isspace.c b/mdk-stage1/dietlibc/lib/isspace.c
index 916f784ab..bfa46648b 100644
--- a/mdk-stage1/dietlibc/lib/isspace.c
+++ b/mdk-stage1/dietlibc/lib/isspace.c
@@ -1,8 +1,9 @@
#include <ctype.h>
-int __isspace_ascii(int ch)
+int __isspace_ascii ( int ch );
+int __isspace_ascii ( int ch )
{
- return ((ch==' ')||(ch=='\f')||(ch=='\t')||(ch=='\v')||(ch=='\r')||(ch=='\n'));
+ return (unsigned int)(ch - 9) < 5u || ch == ' ';
}
-int isspace(int c) __attribute__((weak,alias("__isspace_ascii")));
+int isspace ( int ch ) __attribute__((weak,alias("__isspace_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/isupper.c b/mdk-stage1/dietlibc/lib/isupper.c
index 933dfc169..048d4fd6c 100644
--- a/mdk-stage1/dietlibc/lib/isupper.c
+++ b/mdk-stage1/dietlibc/lib/isupper.c
@@ -1,7 +1,9 @@
#include <ctype.h>
-int __isupper_ascii(int c) {
- return (c>='A' && c<='Z');
+int __isupper_ascii ( int ch );
+int __isupper_ascii ( int ch )
+{
+ return (unsigned int)(ch - 'A') < 26u;
}
-int isupper(int c) __attribute__((weak,alias("__isupper_ascii")));
+int isupper ( int ch ) __attribute__((weak,alias("__isupper_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/isxdigit.c b/mdk-stage1/dietlibc/lib/isxdigit.c
index 22a711f2d..bca8e74ac 100644
--- a/mdk-stage1/dietlibc/lib/isxdigit.c
+++ b/mdk-stage1/dietlibc/lib/isxdigit.c
@@ -1,5 +1,8 @@
-int __isxdigit_ascii(int c) {
- return ((c>='0'&&c<='9') || (c>='A'&&c<='F') || (c>='a'&&c<='f'));
+int __isxdigit_ascii ( int ch );
+int __isxdigit_ascii ( int ch )
+{
+ return (unsigned int)( ch - '0') < 10u ||
+ (unsigned int)((ch | 0x20) - 'a') < 6u;
}
-int isxdigit(int c) __attribute__((weak,alias("__isxdigit_ascii")));
+int isxdigit ( int ch ) __attribute__((weak,alias("__isxdigit_ascii")));
diff --git a/mdk-stage1/dietlibc/lib/listen.c b/mdk-stage1/dietlibc/lib/listen.c
index 56a51be06..661b86a63 100644
--- a/mdk-stage1/dietlibc/lib/listen.c
+++ b/mdk-stage1/dietlibc/lib/listen.c
@@ -1,13 +1,12 @@
-#include <linux/net.h>
+#include <linuxnet.h>
+#include <sys/socket.h>
extern int socketcall(int callno,long* args);
-int listen(int a, int b) {
-#ifdef __i386__
- return socketcall(SYS_LISTEN, (long*)&a);
-#else
+int __libc_listen(int a, int b);
+int __libc_listen(int a, int b) {
unsigned long args[] = { a, b, 0 };
return socketcall(SYS_LISTEN, args);
-#endif
}
+int listen(int s, int backlog) __attribute__((weak,alias("__libc_listen")));
diff --git a/mdk-stage1/dietlibc/lib/lockf.c b/mdk-stage1/dietlibc/lib/lockf.c
index 2b1d004ef..1b6fcb80c 100644
--- a/mdk-stage1/dietlibc/lib/lockf.c
+++ b/mdk-stage1/dietlibc/lib/lockf.c
@@ -2,6 +2,7 @@
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
+#include "dietfeatures.h"
int lockf(int fd, int cmd, off_t len) {
struct flock fl;
diff --git a/mdk-stage1/dietlibc/lib/longjmp.c b/mdk-stage1/dietlibc/lib/longjmp.c
index d0a5719c1..6f1afb4b1 100644
--- a/mdk-stage1/dietlibc/lib/longjmp.c
+++ b/mdk-stage1/dietlibc/lib/longjmp.c
@@ -1,51 +1,16 @@
-/* Copyright (C) 1991, 92, 94, 95, 97, 98 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* #include <stddef.h> */
#include <setjmp.h>
#include <signal.h>
-extern int __sigprocmask(int how,void* set,void* oldset);
-extern void __longjmp(void* env, int val);
+void __longjmp(void*env,int val);
-/*
-extern void _longjmp_unwind (jmp_buf env, int val);
-*/
-/* Set the signal mask to the one specified in ENV, and jump
- to the position specified in ENV, causing the setjmp
- call there to return VAL, or 1 if VAL is 0. */
-void __siglongjmp (sigjmp_buf env, int val)
-{
- /* Perform any cleanups needed by the frames being unwound. */
- /*
- _longjmp_unwind (env, val);
- */
-
- if (env[0].__mask_was_saved)
- /* Restore the saved signal mask. */
- (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask,
- (sigset_t *) NULL);
-
- /* Call the machine-dependent function to restore machine state. */
- __longjmp (env[0].__jmpbuf, val ?: 1);
+void __libc_longjmp(sigjmp_buf env,int val);
+void __libc_longjmp(sigjmp_buf env,int val) {
+ if (env[0].__mask_was_saved) {
+ sigprocmask(SIG_SETMASK,(sigset_t*)&env[0].__saved_mask,0);
+ }
+ if (val==0) val=1;
+ __longjmp(env[0].__jmpbuf,val);
}
-
-void siglongjmp (sigjmp_buf env, int val) __attribute__((weak,alias("__siglongjmp")));
-void longjmp (sigjmp_buf env, int val) __attribute__((weak,alias("__siglongjmp")));
-void _longjmp (sigjmp_buf env, int val) __attribute__((weak,alias("__siglongjmp")));
-void __libc_longjmp (sigjmp_buf env, int val) __attribute__((weak,alias("__siglongjmp")));
+void __siglongjmp(sigjmp_buf env,int val) __attribute__((alias("__libc_longjmp")));
+void longjmp(sigjmp_buf env,int val) __attribute__((weak,alias("__libc_longjmp")));
+void siglongjmp(sigjmp_buf env,int val) __attribute__((weak,alias("__libc_longjmp")));
diff --git a/mdk-stage1/dietlibc/lib/lseek64.c b/mdk-stage1/dietlibc/lib/lseek64.c
index f39e779f9..62acf4a2b 100644
--- a/mdk-stage1/dietlibc/lib/lseek64.c
+++ b/mdk-stage1/dietlibc/lib/lseek64.c
@@ -1,22 +1,16 @@
+#include <errno.h>
#include "dietfeatures.h"
-#ifdef WANT_LARGEFILE_BACKCOMPAT
#include <sys/stat.h>
#ifndef __NO_STAT64
-#include <errno.h>
#include <unistd.h>
loff_t lseek64(int fildes, loff_t offset, int whence) {
loff_t tmp;
- if (llseek(fildes,offset>>32,offset&0xffffffff,&tmp,whence)) {
-#ifdef WANT_THREAD_SAFE
- if (*__errno_location()!=ENOSYS) return -1;
-#else
+ if (llseek(fildes,(unsigned long)(offset>>32),(unsigned long)offset&0xffffffff,&tmp,whence)) {
if (errno!=ENOSYS) return -1;
-#endif
return (loff_t)lseek(fildes,(off_t)offset,whence);
}
return tmp;
}
#endif
-#endif
diff --git a/mdk-stage1/dietlibc/lib/memccmp.c b/mdk-stage1/dietlibc/lib/memccmp.c
deleted file mode 100644
index 3a8c14f60..000000000
--- a/mdk-stage1/dietlibc/lib/memccmp.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#define _POSIX_SOURCE
-#define _XOPEN_SOURCE
-#include <sys/types.h>
-
-int memccmp(const void *dst, const void *src, int c, size_t count)
-{
- register const char *a = dst;
- register const char *b = src;
- while (count--)
- {
- register int res=(*a - *b);
- if (res) return res;
- if (*a==c) return 0;
- ++a; ++b;
- }
- return 0;
-}
diff --git a/mdk-stage1/dietlibc/lib/memccpy.c b/mdk-stage1/dietlibc/lib/memccpy.c
index 6d6ac98ab..3208cfabb 100644
--- a/mdk-stage1/dietlibc/lib/memccpy.c
+++ b/mdk-stage1/dietlibc/lib/memccpy.c
@@ -1,6 +1,7 @@
#define _POSIX_SOURCE
#define _XOPEN_SOURCE
#include <sys/types.h>
+#include <string.h>
void *memccpy(void *dst, const void *src, int c, size_t count)
{
diff --git a/mdk-stage1/dietlibc/lib/memchr.c b/mdk-stage1/dietlibc/lib/memchr.c
index 93d81328a..ae76bb150 100644
--- a/mdk-stage1/dietlibc/lib/memchr.c
+++ b/mdk-stage1/dietlibc/lib/memchr.c
@@ -1,9 +1,13 @@
#include <sys/types.h>
+#include <string.h>
-char *memchr(const char *s, int c, size_t n) {
+void* memchr(const void *s, int c, size_t n) {
+ register const char* t=s;
int i;
- for (i=n; i; --i)
- if (*s++==c)
- return (char*)s;
+ for (i=n; i; --i) {
+ if (*t==c)
+ return (char*)t;
+ ++t;
+ }
return 0;
}
diff --git a/mdk-stage1/dietlibc/lib/memcmp.c b/mdk-stage1/dietlibc/lib/memcmp.c
index c05a46863..4c8f77142 100644
--- a/mdk-stage1/dietlibc/lib/memcmp.c
+++ b/mdk-stage1/dietlibc/lib/memcmp.c
@@ -1,5 +1,7 @@
#include <sys/types.h>
+/* gcc is broken and has a non-SUSv2 compliant internal prototype.
+ * This causes it to warn about a type mismatch here. Ignore it. */
int memcmp(const void *dst, const void *src, size_t count) {
register int r;
register const char *d=dst;
diff --git a/mdk-stage1/dietlibc/lib/memcpy.c b/mdk-stage1/dietlibc/lib/memcpy.c
index 0c688b509..ebfd1e60a 100644
--- a/mdk-stage1/dietlibc/lib/memcpy.c
+++ b/mdk-stage1/dietlibc/lib/memcpy.c
@@ -1,5 +1,7 @@
#include <sys/types.h>
+/* gcc is broken and has a non-SUSv2 compliant internal prototype.
+ * This causes it to warn about a type mismatch here. Ignore it. */
void* memcpy(void* dst, const void* src, size_t count) {
register char *d=dst;
register const char *s=src;
diff --git a/mdk-stage1/dietlibc/lib/memmove.c b/mdk-stage1/dietlibc/lib/memmove.c
index 7adb2be91..58414d503 100644
--- a/mdk-stage1/dietlibc/lib/memmove.c
+++ b/mdk-stage1/dietlibc/lib/memmove.c
@@ -1,6 +1,7 @@
#define _POSIX_SOURCE
#define _XOPEN_SOURCE
#include <sys/types.h>
+#include <string.h>
void *memmove(void *dst, const void *src, size_t count)
{
diff --git a/mdk-stage1/dietlibc/lib/memset.c b/mdk-stage1/dietlibc/lib/memset.c
index 5f9ae49ee..a019eca44 100644
--- a/mdk-stage1/dietlibc/lib/memset.c
+++ b/mdk-stage1/dietlibc/lib/memset.c
@@ -1,6 +1,8 @@
#include <sys/types.h>
-void * memset(void * dst, int s, size_t count) {
+/* gcc is broken and has a non-SUSv2 compliant internal prototype.
+ * This causes it to warn about a type mismatch here. Ignore it. */
+void* memset(void * dst, int s, size_t count) {
register char * a = dst;
count++; /* this actually creates smaller code than using count-- */
while (--count)
diff --git a/mdk-stage1/dietlibc/lib/mkfifo.c b/mdk-stage1/dietlibc/lib/mkfifo.c
index 596efbe27..1bd132e65 100644
--- a/mdk-stage1/dietlibc/lib/mkfifo.c
+++ b/mdk-stage1/dietlibc/lib/mkfifo.c
@@ -1,6 +1,6 @@
-#include <linux/stat.h>
+#include <sys/stat.h>
#include <unistd.h>
int mkfifo(const char *fn,mode_t mode) {
- return mknod(fn,S_IFIFO|mode,0);
+ return mknod(fn,(mode_t)(mode|S_IFIFO),0);
}
diff --git a/mdk-stage1/dietlibc/lib/msgctl.c b/mdk-stage1/dietlibc/lib/msgctl.c
index 19ea6d8cf..51cffdef0 100644
--- a/mdk-stage1/dietlibc/lib/msgctl.c
+++ b/mdk-stage1/dietlibc/lib/msgctl.c
@@ -1,9 +1,8 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,int,int,int,void*);
int msgctl(int msqid, int cmd, struct msqid_ds *buf) {
return __ipc(MSGCTL,msqid,cmd,0,buf);
diff --git a/mdk-stage1/dietlibc/lib/msgget.c b/mdk-stage1/dietlibc/lib/msgget.c
index 9bca09ebe..6023c1786 100644
--- a/mdk-stage1/dietlibc/lib/msgget.c
+++ b/mdk-stage1/dietlibc/lib/msgget.c
@@ -1,9 +1,8 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,key_t,int,int,int);
int msgget(key_t key,int flag) {
return __ipc(MSGGET,key,flag,0,0);
diff --git a/mdk-stage1/dietlibc/lib/msgrcv.c b/mdk-stage1/dietlibc/lib/msgrcv.c
index b4ae9cc6c..8168187a5 100644
--- a/mdk-stage1/dietlibc/lib/msgrcv.c
+++ b/mdk-stage1/dietlibc/lib/msgrcv.c
@@ -1,9 +1,13 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,int,size_t,int,void*);
+
+struct ipc_kludge {
+ struct msgbuf *msgp;
+ long msgtyp;
+};
int msgrcv(int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg) {
struct ipc_kludge tmp;
diff --git a/mdk-stage1/dietlibc/lib/msgsnd.c b/mdk-stage1/dietlibc/lib/msgsnd.c
index 6203053f0..6e9ef445e 100644
--- a/mdk-stage1/dietlibc/lib/msgsnd.c
+++ b/mdk-stage1/dietlibc/lib/msgsnd.c
@@ -1,9 +1,8 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,int,size_t,int,const void*);
int msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg) {
return __ipc(MSGSND,msqid, msgsz, msgflg, msgp);
diff --git a/mdk-stage1/dietlibc/lib/nop.c b/mdk-stage1/dietlibc/lib/nop.c
deleted file mode 100644
index c05bea813..000000000
--- a/mdk-stage1/dietlibc/lib/nop.c
+++ /dev/null
@@ -1,7 +0,0 @@
-
-int __fflush_stdin() __attribute__((weak,alias("__return0")));
-int __fflush_stdout() __attribute__((weak,alias("__return0")));
-int __fflush_stderr() __attribute__((weak,alias("__return0")));
-
-/* used for weak aliases */
-int __return0() { return 0; }
diff --git a/mdk-stage1/dietlibc/lib/open64.c b/mdk-stage1/dietlibc/lib/open64.c
index f1499d017..2599e2259 100644
--- a/mdk-stage1/dietlibc/lib/open64.c
+++ b/mdk-stage1/dietlibc/lib/open64.c
@@ -1,14 +1,13 @@
-#include <linux/types.h>
-#include <linux/fcntl.h>
+#include <sys/types.h>
+#include <fcntl.h>
#ifndef O_LARGEFILE
#define O_LARGEFILE 0
#endif
-extern int open(const char* file,int oflag,int mode);
-
+int __libc_open64(const char* file,int oflag,int mode);
int __libc_open64(const char* file,int oflag,int mode) {
return open(file,oflag|O_LARGEFILE,mode);
}
-int open64(const char* file,int oflag,int mode) __attribute__((weak,alias("__libc_open64")));
+int open64(const char* file,int oflag,...) __attribute__((weak,alias("__libc_open64")));
diff --git a/mdk-stage1/dietlibc/lib/opendir.c b/mdk-stage1/dietlibc/lib/opendir.c
index 5c0c4a305..2530d1ac9 100644
--- a/mdk-stage1/dietlibc/lib/opendir.c
+++ b/mdk-stage1/dietlibc/lib/opendir.c
@@ -1,18 +1,26 @@
#include "dietdirent.h"
+#include <sys/mman.h>
#include <unistd.h>
#include <dirent.h>
#include <stdlib.h>
#include <fcntl.h>
-DIR *opendir (const char *name) {
- DIR *t=(DIR*)malloc(sizeof(DIR));
- if (t) {
- if ((t->fd=open(name,O_RDONLY|O_DIRECTORY))>=0) {
- t->num=t->cur=0;
- } else {
- free(t);
- t=0;
- }
+DIR* opendir ( const char* name ) {
+ int fd = open (name, O_RDONLY | O_DIRECTORY);
+ DIR* t = NULL;
+
+ if ( fd >= 0 ) {
+ if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0)
+ goto lose;
+ t = (DIR *) mmap (NULL, PAGE_SIZE, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ if (t == MAP_FAILED)
+lose:
+ close (fd);
+ else
+ t->fd = fd;
}
+
+
return t;
}
diff --git a/mdk-stage1/dietlibc/lib/perror.c b/mdk-stage1/dietlibc/lib/perror.c
index ecab7250b..0a45fb9d6 100644
--- a/mdk-stage1/dietlibc/lib/perror.c
+++ b/mdk-stage1/dietlibc/lib/perror.c
@@ -1,22 +1,24 @@
#include "dietfeatures.h"
#include <unistd.h>
#include <string.h>
+#include <stdio.h>
+
+#define _BSD_SOURCE
#include <errno.h>
-extern char *sys_errlist[];
-extern int sys_nerr;
-extern int errno;
+extern const char __sys_err_unknown [];
+
+void perror ( const char* prepend )
+{
+ register const char* message = __sys_err_unknown;
+
+ if ( (unsigned int) errno < (unsigned int) __SYS_NERR )
+ message = sys_errlist [errno];
-void perror(const char *s) {
- register char *message="[unknown error]";
- write(2,s,strlen(s));
- write(2,": ",2);
- if (errno>=0 && errno<sys_nerr)
-#ifdef WANT_THREAD_SAFE
- message=sys_errlist[*__errno_location()];
-#else
- message=sys_errlist[errno];
-#endif
- write(2,message,strlen(message));
- write(2,"\n",1);
+ if (prepend) {
+ write ( 2, prepend, strlen(prepend) );
+ write ( 2, ": ", 2 );
+ }
+ write ( 2, message, strlen(message) );
+ write ( 2, "\n", 1 );
}
diff --git a/mdk-stage1/dietlibc/lib/pread.c b/mdk-stage1/dietlibc/lib/pread.c
index b922aa93e..fd6c49149 100644
--- a/mdk-stage1/dietlibc/lib/pread.c
+++ b/mdk-stage1/dietlibc/lib/pread.c
@@ -3,6 +3,7 @@
extern size_t __pread(int fd, void *buf, size_t count, off_t a,off_t b);
+size_t __libc_pread(int fd, void *buf, size_t count, off_t offset);
size_t __libc_pread(int fd, void *buf, size_t count, off_t offset) {
return __pread(fd,buf,count,offset,0);
}
diff --git a/mdk-stage1/dietlibc/lib/pread64.c b/mdk-stage1/dietlibc/lib/pread64.c
index e6ba4d103..6dc93cefa 100644
--- a/mdk-stage1/dietlibc/lib/pread64.c
+++ b/mdk-stage1/dietlibc/lib/pread64.c
@@ -5,8 +5,9 @@
#ifndef __NO_STAT64
extern size_t __pread(int fd, void *buf, size_t count, off_t a,off_t b);
+size_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset);
size_t __libc_pread64(int fd, void *buf, size_t count, off64_t offset) {
- return __pread(fd,buf,count,__LONG_LONG_PAIR (offset&0xffffffff,offset>>32));
+ return __pread(fd,buf,count,__LONG_LONG_PAIR ((off_t)(offset&0xffffffff),(off_t)(offset>>32)));
}
int pread64(int fd, void *buf, size_t count, off_t offset) __attribute__((weak,alias("__libc_pread64")));
diff --git a/mdk-stage1/dietlibc/lib/putenv.c b/mdk-stage1/dietlibc/lib/putenv.c
index 274b16b0e..448d59840 100644
--- a/mdk-stage1/dietlibc/lib/putenv.c
+++ b/mdk-stage1/dietlibc/lib/putenv.c
@@ -1,21 +1,24 @@
#include <stdlib.h>
#include <string.h>
+#include <errno.h>
int putenv(const char *string) {
- int len;
+ size_t len;
int envc;
+ int remove=0;
char *tmp;
const char **ep;
char **newenv;
- static char **origenv=0;
+ static char **origenv;
if (!origenv) origenv=environ;
- if (!(tmp=strchr(string,'=')))
+ if (!(tmp=strchr(string,'='))) {
len=strlen(string);
- else
+ remove=1;
+ } else
len=tmp-string+1;
for (envc=0, ep=(const char**)environ; *ep; ++ep) {
- if (!memcmp(string,*ep,len)) { /* found */
- if (!tmp) {
+ if (*string == **ep && !memcmp(string,*ep,len)) {
+ if (remove) {
for (; ep[1]; ++ep) ep[0]=ep[1];
ep[0]=0;
return 0;
@@ -26,11 +29,11 @@ int putenv(const char *string) {
++envc;
}
if (tmp) {
- newenv=(char**)malloc((envc+2)*sizeof(char*));
+ newenv = (char**) realloc(environ==origenv?0:origenv,
+ (envc+2)*sizeof(char*));
if (!newenv) return -1;
newenv[0]=(char*)string;
memcpy(newenv+1,environ,(envc+1)*sizeof(char*));
- if (environ!=origenv) free(environ);
environ=newenv;
}
return 0;
diff --git a/mdk-stage1/dietlibc/lib/puts.c b/mdk-stage1/dietlibc/lib/puts.c
deleted file mode 100644
index 54415151d..000000000
--- a/mdk-stage1/dietlibc/lib/puts.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <unistd.h>
-#include <string.h>
-#include "dietstdio.h"
-#include "dietfeatures.h"
-
-int puts(const char *s) {
-#ifdef WANT_BUFFERED_STDIO
- return fwrite(s,1,strlen(s),stdout) && fputc('\n',stdout);
-#else
- return write(1,s,strlen(s)) && write(1,"\n",1);
-#endif
-}
diff --git a/mdk-stage1/dietlibc/lib/qsort.c b/mdk-stage1/dietlibc/lib/qsort.c
index 2a8824bf3..62217e142 100644
--- a/mdk-stage1/dietlibc/lib/qsort.c
+++ b/mdk-stage1/dietlibc/lib/qsort.c
@@ -1,3 +1,4 @@
+#include <sys/cdefs.h>
#include <stdlib.h>
#include <assert.h>
@@ -19,7 +20,7 @@ static inline void iswap(void *a,void *b,size_t size) {
}
static inline void swap(void *base,size_t size,size_t a,size_t b) {
- iswap(base+a*size,base+b*size,size);
+ iswap((char*)base+a*size,(char*)base+b*size,size);
}
#if 0
@@ -30,18 +31,19 @@ void dumparray() {
}
#endif
+void isort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
void isort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) {
- int i;
- while (nmemb>1) {
+ size_t i;
+ while (expect(nmemb>1,1)) {
char *min=base;
char *tmp=min+size;
for (i=1; i<nmemb; ++i) {
- if (compar(tmp,min)<0)
+ if (expect(compar(tmp,min)<0,0))
min=tmp;
tmp+=size;
}
iswap(min,base,size);
- base+=size;
+ (char*)base+=size;
nmemb-=1;
}
}
@@ -55,7 +57,7 @@ void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, co
static int level=0;
char* v; /* pivot */
char* mid, *max, *min;
- int lmemb;
+ size_t lmemb;
#if 0
int left,right;
@@ -71,8 +73,8 @@ void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, co
return isort(base,nmemb,size,compar);
}
{
- mid=base+(nmemb/2)*size;
- max=base+(nmemb-1)*size;
+ mid=(char*)base+(nmemb/2)*size;
+ max=(char*)base+(nmemb-1)*size;
if (compar(base,max)<0) /* a[left] < a[right] */
if (compar(base,mid)<0) /* a[left] < a[med] */
@@ -97,8 +99,8 @@ void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, co
v=max;
min=base; lmemb=0;
for (;;) {
- while (compar(min,v)<0) { min+=size; ++lmemb; }
- while (compar(max-=size,v)>0) ;
+ while (expect(compar(min,v)<0,1)) { min+=size; ++lmemb; }
+ while (expect(compar(max-=size,v)>0,1)) ;
if (min>=max) break;
iswap(min,max,size);
}
diff --git a/mdk-stage1/dietlibc/lib/raise.c b/mdk-stage1/dietlibc/lib/raise.c
index 606546034..0f548fc3b 100644
--- a/mdk-stage1/dietlibc/lib/raise.c
+++ b/mdk-stage1/dietlibc/lib/raise.c
@@ -1,7 +1,6 @@
-#include <linux/types.h>
+#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
-#include "syscalls.h"
int raise(int sig) {
return kill(getpid(),sig);
diff --git a/mdk-stage1/dietlibc/lib/rand.c b/mdk-stage1/dietlibc/lib/rand.c
index 10bfaf94d..beb2d2717 100644
--- a/mdk-stage1/dietlibc/lib/rand.c
+++ b/mdk-stage1/dietlibc/lib/rand.c
@@ -2,8 +2,11 @@
static unsigned int seed=1;
-int rand() {
- return ((seed = seed * 1103515245 + 12345) % ((unsigned int)RAND_MAX + 1));
+int rand(void) {
+ return rand_r(&seed);
}
void srand(unsigned int i) { seed=i; }
+
+int random(void) __attribute__((alias("rand")));
+void srandom(unsigned int i) __attribute__((alias("srand")));
diff --git a/mdk-stage1/dietlibc/lib/random.c b/mdk-stage1/dietlibc/lib/random.c
deleted file mode 100644
index e7785c455..000000000
--- a/mdk-stage1/dietlibc/lib/random.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdlib.h>
-
-static unsigned int seed=1;
-
-long int random() {
- return ((seed = seed * 1103515245 + 12345) % ((unsigned int)RAND_MAX + 1));
-}
-
-void srandom(unsigned int i) { seed=i; }
diff --git a/mdk-stage1/dietlibc/lib/readdir.c b/mdk-stage1/dietlibc/lib/readdir.c
index 689f5d08b..ed885a5f0 100644
--- a/mdk-stage1/dietlibc/lib/readdir.c
+++ b/mdk-stage1/dietlibc/lib/readdir.c
@@ -5,7 +5,7 @@
struct dirent* readdir(DIR *d) {
if (!d->num || (d->cur += ((struct dirent*)(d->buf+d->cur))->d_reclen)>=d->num) {
- int res=getdents(d->fd,(struct dirent*)d->buf,1023);
+ int res=getdents(d->fd,(struct dirent*)d->buf,sizeof (d->buf)-1);
if (res<=0) return 0;
d->num=res; d->cur=0;
}
diff --git a/mdk-stage1/dietlibc/lib/reboot.c b/mdk-stage1/dietlibc/lib/reboot.c
index 7f47a95dd..421068504 100644
--- a/mdk-stage1/dietlibc/lib/reboot.c
+++ b/mdk-stage1/dietlibc/lib/reboot.c
@@ -1,8 +1,8 @@
#include <sys/reboot.h>
-int __reboot(int magic1, int magic2, int cmd, void * arg);
+int __reboot(unsigned int magic1, unsigned int magic2, int cmd);
-int reboot(int cmd, void *arg)
+int reboot(int cmd)
{
- return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, arg);
+ return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd);
}
diff --git a/mdk-stage1/dietlibc/lib/recv.c b/mdk-stage1/dietlibc/lib/recv.c
index bc6b1e5d7..c6bab4fb1 100644
--- a/mdk-stage1/dietlibc/lib/recv.c
+++ b/mdk-stage1/dietlibc/lib/recv.c
@@ -1,14 +1,12 @@
-#include <linux/net.h>
+#include <sys/types.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
+int __libc_recv(int a, const void * b, size_t c, int flags);
int __libc_recv(int a, const void * b, size_t c, int flags) {
-#ifdef __i386__
- return socketcall(SYS_RECV,(long*)&a);
-#else
unsigned long args[] = { a, (long) b, c, flags };
return socketcall(SYS_RECV, args);
-#endif
}
int recv(int a, const void * b, size_t c, int flags)
diff --git a/mdk-stage1/dietlibc/lib/recvfrom.c b/mdk-stage1/dietlibc/lib/recvfrom.c
index 802ad665f..b66ce3813 100644
--- a/mdk-stage1/dietlibc/lib/recvfrom.c
+++ b/mdk-stage1/dietlibc/lib/recvfrom.c
@@ -1,14 +1,12 @@
-#include <linux/net.h>
+#include <sys/types.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
+int __libc_recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen);
int __libc_recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen) {
-#ifdef __i386__
- return socketcall(SYS_RECVFROM, (long*)&a);
-#else
unsigned long args[] = { a, (long) b, c, flags, (long) to, (long) tolen };
return socketcall(SYS_RECVFROM, args);
-#endif
}
int recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen)
diff --git a/mdk-stage1/dietlibc/lib/recvmsg.c b/mdk-stage1/dietlibc/lib/recvmsg.c
index c14c58c78..d843ce9c0 100644
--- a/mdk-stage1/dietlibc/lib/recvmsg.c
+++ b/mdk-stage1/dietlibc/lib/recvmsg.c
@@ -1,14 +1,12 @@
-#include <linux/net.h>
+#include <sys/socket.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
+int __libc_recvmsg(int a, struct msghdr* msg, int flags);
int __libc_recvmsg(int a, struct msghdr* msg, int flags) {
-#ifdef __i386__
- return socketcall(SYS_RECVMSG, (long*)&a);
-#else
unsigned long args[] = { a, (long) msg, flags };
return socketcall(SYS_RECVMSG, args);
-#endif
}
int recvmsg(int a, struct msghdr *msg, int flags)
diff --git a/mdk-stage1/dietlibc/lib/remove.c b/mdk-stage1/dietlibc/lib/remove.c
index d5125bfed..06f686356 100644
--- a/mdk-stage1/dietlibc/lib/remove.c
+++ b/mdk-stage1/dietlibc/lib/remove.c
@@ -1,5 +1,7 @@
#include <unistd.h>
#include <errno.h>
+#include "dietfeatures.h"
+#include <stdio.h>
int remove(const char* filename) {
if (unlink(filename)) {
diff --git a/mdk-stage1/dietlibc/lib/sbrk.c b/mdk-stage1/dietlibc/lib/sbrk.c
index 945ad5a16..799ce7428 100644
--- a/mdk-stage1/dietlibc/lib/sbrk.c
+++ b/mdk-stage1/dietlibc/lib/sbrk.c
@@ -1,20 +1,21 @@
#include <unistd.h>
-extern int __brk(void *end_data_segment);
+extern int __libc_brk(void *end_data_segment);
extern void* __curbrk;
-void* __sbrk(ptrdiff_t increment) {
+void* __libc_sbrk(ptrdiff_t increment);
+void* __libc_sbrk(ptrdiff_t increment) {
void* oldbrk;
if (__curbrk==0)
- if (__brk(0) < 0)
+ if (__libc_brk(0) < 0)
return (void*)-1;
if (increment==0)
return __curbrk;
oldbrk=__curbrk;
- if (__brk(oldbrk+increment)<0)
+ if (__libc_brk((char*)oldbrk+increment)<0)
return (void*)-1;
return oldbrk;
}
-void* sbrk (ptrdiff_t increment) __attribute__((weak,alias("__sbrk")));
+void* sbrk (ptrdiff_t increment) __attribute__((weak,alias("__libc_sbrk")));
diff --git a/mdk-stage1/dietlibc/lib/semctl.c b/mdk-stage1/dietlibc/lib/semctl.c
index ddc0aae95..cec0b7535 100644
--- a/mdk-stage1/dietlibc/lib/semctl.c
+++ b/mdk-stage1/dietlibc/lib/semctl.c
@@ -1,10 +1,17 @@
#include <sys/types.h>
#include <sys/ipc.h>
-#include <sys/sem.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,int,int,int,void*);
+union semun {
+ int val; /* value for SETVAL */
+ struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
+ unsigned short *array; /* array for GETALL & SETALL */
+ struct seminfo *__buf; /* buffer for IPC_INFO */
+ void *__pad;
+};
+
+int semctl(int semid, int semnum, int cmd, union semun arg);
int semctl(int semid, int semnum, int cmd, union semun arg) {
return __ipc(SEMCTL,semid,semnum,cmd,&arg);
}
diff --git a/mdk-stage1/dietlibc/lib/semget.c b/mdk-stage1/dietlibc/lib/semget.c
index 056aeae04..c3649eea1 100644
--- a/mdk-stage1/dietlibc/lib/semget.c
+++ b/mdk-stage1/dietlibc/lib/semget.c
@@ -1,9 +1,8 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,key_t,int,int,int);
int semget(key_t key, int nsems, int semflg) {
return __ipc(SEMGET,key,nsems,semflg,0);
diff --git a/mdk-stage1/dietlibc/lib/semop.c b/mdk-stage1/dietlibc/lib/semop.c
index abfde73a7..4d2e748cc 100644
--- a/mdk-stage1/dietlibc/lib/semop.c
+++ b/mdk-stage1/dietlibc/lib/semop.c
@@ -1,9 +1,8 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,int,unsigned,int,void*);
int semop(int semid,struct sembuf *sops,unsigned nsops) {
return __ipc(SEMOP,semid,nsops,0,sops);
diff --git a/mdk-stage1/dietlibc/lib/send.c b/mdk-stage1/dietlibc/lib/send.c
index c1adf1b5d..783ecaf89 100644
--- a/mdk-stage1/dietlibc/lib/send.c
+++ b/mdk-stage1/dietlibc/lib/send.c
@@ -1,14 +1,12 @@
-#include <linux/net.h>
+#include <sys/types.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
+int __libc_send(int a, const void * b, size_t c, int flags);
int __libc_send(int a, const void * b, size_t c, int flags) {
-#ifdef __i386__
- return socketcall(SYS_SEND, (long*)&a);
-#else
unsigned long args[] = { a, (long) b, c, flags };
return socketcall(SYS_SEND, args);
-#endif
}
int send(int a, const void * b, size_t c, int flags)
diff --git a/mdk-stage1/dietlibc/lib/sendmsg.c b/mdk-stage1/dietlibc/lib/sendmsg.c
index 277265985..bb5d1711a 100644
--- a/mdk-stage1/dietlibc/lib/sendmsg.c
+++ b/mdk-stage1/dietlibc/lib/sendmsg.c
@@ -1,14 +1,12 @@
-#include <linux/net.h>
+#include <sys/socket.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
+int __libc_sendmsg(int a, const struct msghdr* msg, int flags);
int __libc_sendmsg(int a, const struct msghdr* msg, int flags) {
-#ifdef __i386__
- return socketcall(SYS_SENDMSG, (long*)&a);
-#else
unsigned long args[] = { a, (long) msg, flags };
return socketcall(SYS_SENDMSG, args);
-#endif
}
int sendmsg(int a, const struct msghdr *msg, int flags)
diff --git a/mdk-stage1/dietlibc/lib/sendto.c b/mdk-stage1/dietlibc/lib/sendto.c
index 078c010ea..d3239932b 100644
--- a/mdk-stage1/dietlibc/lib/sendto.c
+++ b/mdk-stage1/dietlibc/lib/sendto.c
@@ -1,15 +1,13 @@
-#include <linux/net.h>
+#include <sys/socket.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
+int __libc_sendto(int a, const void * b, size_t c, int flags, void *to, int tolen);
int __libc_sendto(int a, const void * b, size_t c, int flags, void *to, int tolen) {
-#ifdef __i386__
- return socketcall(SYS_SENDTO, (long*)&a);
-#else
unsigned long args[] = { a, (long) b, c, flags, (long) to, tolen };
return socketcall(SYS_SENDTO, args);
-#endif
}
-int sendto(int a, const void * b, size_t c, int flags, void *to, int tolen)
+int sendto(int a, const void * b, size_t c, int flags, const struct sockaddr* to, socklen_t tolen)
__attribute__ ((weak, alias("__libc_sendto")));
diff --git a/mdk-stage1/dietlibc/lib/set_errno.c b/mdk-stage1/dietlibc/lib/set_errno.c
deleted file mode 100644
index 6553bc496..000000000
--- a/mdk-stage1/dietlibc/lib/set_errno.c
+++ /dev/null
@@ -1,9 +0,0 @@
-extern int errno;
-
-void __set_errno(int error) __attribute__ ((weak));
-
-void __set_errno(int error)
-{
- errno=error;
-}
-
diff --git a/mdk-stage1/dietlibc/lib/setsockopt.c b/mdk-stage1/dietlibc/lib/setsockopt.c
index 781e9c31c..e4bab349f 100644
--- a/mdk-stage1/dietlibc/lib/setsockopt.c
+++ b/mdk-stage1/dietlibc/lib/setsockopt.c
@@ -1,13 +1,12 @@
-#include <linux/net.h>
+#include <linuxnet.h>
+#include <sys/socket.h>
extern int socketcall(int callno,long* args);
-int setsockopt(int a, int b, int c, void *d, void *e) {
-#ifdef __i386__
- return socketcall(SYS_SETSOCKOPT, (long*)&a);
-#else
+int __libc_setsockopt(int a, int b, int c, void *d, void *e);
+int __libc_setsockopt(int a, int b, int c, void *d, void *e) {
unsigned long args[] = { a, b, c, (long)d, (long) e };
return socketcall(SYS_SETSOCKOPT, args);
-#endif
}
+int setsockopt(int s, int level, int optname, const void* optval, socklen_t optlen) __attribute__((weak,alias("__libc_setsockopt")));
diff --git a/mdk-stage1/dietlibc/lib/shmat.c b/mdk-stage1/dietlibc/lib/shmat.c
index 63284b1ea..d4b34c120 100644
--- a/mdk-stage1/dietlibc/lib/shmat.c
+++ b/mdk-stage1/dietlibc/lib/shmat.c
@@ -1,15 +1,14 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
-#include <asm/ipc.h>
-extern void* __ipc();
+extern void* __ipc(int,int,int,void*,const void*);
void* shmat(int shmid,const void* shmaddr,int shmflg) {
void* raddr;
register void* result;
result=__ipc(SHMAT,shmid,shmflg,&raddr,shmaddr);
- if ((unsigned long)result <= -(unsigned long)SHMLBA)
+ if ((unsigned long)result <= -(unsigned long)8196)
result=raddr;
return result;
}
diff --git a/mdk-stage1/dietlibc/lib/shmctl.c b/mdk-stage1/dietlibc/lib/shmctl.c
index 8f942f2a4..92b9d1fbb 100644
--- a/mdk-stage1/dietlibc/lib/shmctl.c
+++ b/mdk-stage1/dietlibc/lib/shmctl.c
@@ -1,9 +1,8 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,int,int,int,void*);
int shmctl(int shmid, int cmd, struct shmid_ds *buf) {
return __ipc(SHMCTL,shmid,cmd,0,buf);
diff --git a/mdk-stage1/dietlibc/lib/shmdt.c b/mdk-stage1/dietlibc/lib/shmdt.c
index 36db10f08..54dc6f41b 100644
--- a/mdk-stage1/dietlibc/lib/shmdt.c
+++ b/mdk-stage1/dietlibc/lib/shmdt.c
@@ -1,9 +1,8 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,int,int,int,const void*);
int shmdt(const void* shmaddr) {
return __ipc(SHMDT,0,0,0,shmaddr);
diff --git a/mdk-stage1/dietlibc/lib/shmget.c b/mdk-stage1/dietlibc/lib/shmget.c
index 9b03f5deb..bf1dc2030 100644
--- a/mdk-stage1/dietlibc/lib/shmget.c
+++ b/mdk-stage1/dietlibc/lib/shmget.c
@@ -1,9 +1,8 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
-#include <asm/ipc.h>
-extern int __ipc();
+extern int __ipc(int,key_t,int,int,int);
int shmget(key_t key, int size, int shmflg) {
return __ipc(SHMGET,key,size,shmflg,0);
diff --git a/mdk-stage1/dietlibc/lib/shutdown.c b/mdk-stage1/dietlibc/lib/shutdown.c
index 0a6be6c37..0e7b8755c 100644
--- a/mdk-stage1/dietlibc/lib/shutdown.c
+++ b/mdk-stage1/dietlibc/lib/shutdown.c
@@ -1,14 +1,12 @@
-#include <linux/net.h>
+#include <linuxnet.h>
+#include <sys/socket.h>
extern int socketcall(int callno,long* args);
+int __libc_shutdown(int s, int how);
int __libc_shutdown(int s, int how) {
-#ifdef __i386__
- return socketcall(SYS_SHUTDOWN, (long*)&s);
-#else
unsigned long args[] = { s, (long) how, 0 };
return socketcall(SYS_SHUTDOWN, args);
-#endif
}
int shutdown(int s, int how) __attribute__((weak,alias("__libc_shutdown")));
diff --git a/mdk-stage1/dietlibc/lib/sigaddset.c b/mdk-stage1/dietlibc/lib/sigaddset.c
index 8ce69ea77..1c2632e67 100644
--- a/mdk-stage1/dietlibc/lib/sigaddset.c
+++ b/mdk-stage1/dietlibc/lib/sigaddset.c
@@ -1,15 +1,17 @@
-#define __KERNEL__
-#define sigaddset foobar
-#include <asm/signal.h>
-#undef sigaddset
+#include <signal.h>
+#include <errno.h>
-int __sigaddset(sigset_t *set, int signo) {
- unsigned long sig = signo - 1;
- if (_NSIG_WORDS == 1)
- set->sig[0] |= 1UL << sig;
- else
- set->sig[sig / _NSIG_BPW] |= 1UL << (sig % _NSIG_BPW);
- return 0;
-}
+#define __sigmask(sig) ( ((unsigned long)1) << (((sig)-1) % (8*sizeof(unsigned long))) )
+#define __sigword(sig) ( ((sig)-1) / (8*sizeof(unsigned long)) )
-int sigaddset (sigset_t *env, int signo) __attribute__((weak,alias("__sigaddset")));
+int sigaddset(sigset_t *set, int signo) {
+ if ((signo<1)||(signo>SIGRTMAX)) {
+ (*__errno_location())=EINVAL;
+ return -1;
+ } else {
+ unsigned long __mask = __sigmask (signo);
+ unsigned long __word = __sigword (signo);
+ set->sig[__word]|=__mask;
+ return 0;
+ }
+}
diff --git a/mdk-stage1/dietlibc/lib/sigdelset.c b/mdk-stage1/dietlibc/lib/sigdelset.c
index 2c3385ea8..0c47ce348 100644
--- a/mdk-stage1/dietlibc/lib/sigdelset.c
+++ b/mdk-stage1/dietlibc/lib/sigdelset.c
@@ -1,15 +1,17 @@
-#define __KERNEL__
-#define sigdelset foobar
-#include <asm/signal.h>
-#undef sigdelset
+#include <signal.h>
+#include <errno.h>
-int __sigdelset(sigset_t *set, int signo) {
- unsigned long sig = signo - 1;
- if (_NSIG_WORDS == 1)
- set->sig[0] &= ~(1UL << sig);
- else
- set->sig[sig / _NSIG_BPW] &= ~(1UL << (sig % _NSIG_BPW));
- return 0;
-}
+#define __sigmask(sig) ( ((unsigned long)1) << (((sig)-1) % (8*sizeof(unsigned long))) )
+#define __sigword(sig) ( ((sig)-1) / (8*sizeof(unsigned long)) )
-int sigdelset (sigset_t *env, int signo) __attribute__((weak,alias("__sigdelset")));
+int sigdelset(sigset_t *set, int signo) {
+ if ((signo<1)||(signo>SIGRTMAX)) {
+ (*__errno_location())=EINVAL;
+ return -1;
+ } else {
+ unsigned long __mask = __sigmask (signo);
+ unsigned long __word = __sigword (signo);
+ set->sig[__word]&=~__mask;
+ return 0;
+ }
+}
diff --git a/mdk-stage1/dietlibc/lib/sigemptyset.c b/mdk-stage1/dietlibc/lib/sigemptyset.c
index f4532f96e..4efee2550 100644
--- a/mdk-stage1/dietlibc/lib/sigemptyset.c
+++ b/mdk-stage1/dietlibc/lib/sigemptyset.c
@@ -1,14 +1,12 @@
-#define __USE_EXTERN_INLINES 1
#include <signal.h>
-#include <errno.h>
-#include <string.h>
int sigemptyset(sigset_t *set) {
- if (set==NULL) {
- __set_errno(EINVAL);
- return -1;
+ set->sig[0]=0;
+ if (_NSIG_WORDS>1) set->sig[1]=0;
+ if (_NSIG_WORDS>2) {
+ set->sig[2]=0;
+ set->sig[3]=0;
}
- memset(set,0,sizeof(*set));
return 0;
}
diff --git a/mdk-stage1/dietlibc/lib/sigfillset.c b/mdk-stage1/dietlibc/lib/sigfillset.c
index ddac6e391..b4e369fe4 100644
--- a/mdk-stage1/dietlibc/lib/sigfillset.c
+++ b/mdk-stage1/dietlibc/lib/sigfillset.c
@@ -1,11 +1,11 @@
-#define __KERNEL__
-#include <asm/signal.h>
+#include <signal.h>
-int __sigfillset (sigset_t *set) {
- int i;
- for (i=0; i<_NSIG_WORDS; i++)
- set->sig[i]=~0;
+int sigfillset(sigset_t *set) {
+ set->sig[0]=(unsigned long)-1;
+ if (_NSIG_WORDS>1) set->sig[1]=(unsigned long)-1;
+ if (_NSIG_WORDS>2) {
+ set->sig[2]=(unsigned long)-1;
+ set->sig[3]=(unsigned long)-1;
+ }
return 0;
}
-
-int sigfillset(sigset_t *env) __attribute__((weak,alias("__sigfillset")));
diff --git a/mdk-stage1/dietlibc/lib/sigismember.c b/mdk-stage1/dietlibc/lib/sigismember.c
index 67a258884..8ffe9762a 100644
--- a/mdk-stage1/dietlibc/lib/sigismember.c
+++ b/mdk-stage1/dietlibc/lib/sigismember.c
@@ -1,21 +1,16 @@
-#define __USE_EXTERN_INLINES 1
#include <signal.h>
+#include <errno.h>
-# define __sigmask(sig) \
- (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int))))
+#define __sigmask(sig) ( ((unsigned long)1) << (((sig)-1) % (8*sizeof(unsigned long))) )
+#define __sigword(sig) ( ((sig)-1) / (8*sizeof(unsigned long)) )
-# define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned long int)))
-
-# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
-typedef struct
- {
- unsigned long int __val[_SIGSET_NWORDS];
- } __sigset_t;
-
-int __sigismember(const __sigset_t *set, int signo) {
- unsigned long int __mask = __sigmask (signo);
- unsigned long int __word = __sigword (signo);
- return (set->__val[__word] & __mask);
+int sigismember(const sigset_t *set, int signo) {
+ if ((signo<1)||(signo>SIGRTMAX)) {
+ (*__errno_location())=EINVAL;
+ return -1;
+ } else {
+ unsigned long __mask = __sigmask (signo);
+ unsigned long __word = __sigword (signo);
+ return (set->sig[__word] & __mask)?1:0;
+ }
}
-
-int sigismember(const sigset_t *env, int signo) __attribute__((weak,alias("__sigismember")));
diff --git a/mdk-stage1/dietlibc/lib/sigjmp.c b/mdk-stage1/dietlibc/lib/sigjmp.c
index be97c62cc..73c8baa8e 100644
--- a/mdk-stage1/dietlibc/lib/sigjmp.c
+++ b/mdk-stage1/dietlibc/lib/sigjmp.c
@@ -1,35 +1,10 @@
-/* Copyright (C) 1992, 1994, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
#include <setjmp.h>
#include <signal.h>
-#include <string.h>
-
-/* This function is called by the `sigsetjmp' macro
- before doing a `__setjmp' on ENV[0].__jmpbuf.
- Always return zero. */
-
-int
-__sigjmp_save (sigjmp_buf env, int savemask)
-{
- env[0].__mask_was_saved = (savemask &&
- sigprocmask (SIG_BLOCK, (sigset_t *) NULL,
- (sigset_t*)&env[0].__saved_mask) == 0);
+int __sigjmp_save(sigjmp_buf env,int savemask);
+int __sigjmp_save(sigjmp_buf env,int savemask) {
+ if (savemask) {
+ env[0].__mask_was_saved=(sigprocmask(SIG_BLOCK,(sigset_t*)0,(sigset_t*)&env[0].__saved_mask)==0);
+ }
return 0;
}
diff --git a/mdk-stage1/dietlibc/lib/sleep.c b/mdk-stage1/dietlibc/lib/sleep.c
index ec5b99533..45c51f1b6 100644
--- a/mdk-stage1/dietlibc/lib/sleep.c
+++ b/mdk-stage1/dietlibc/lib/sleep.c
@@ -1,4 +1,4 @@
-#include <linux/time.h>
+#include <unistd.h>
#include <time.h>
unsigned int sleep(unsigned int secs) {
diff --git a/mdk-stage1/dietlibc/lib/snprintf.c b/mdk-stage1/dietlibc/lib/snprintf.c
index 096c06115..141b4ec13 100644
--- a/mdk-stage1/dietlibc/lib/snprintf.c
+++ b/mdk-stage1/dietlibc/lib/snprintf.c
@@ -1,7 +1,6 @@
#include <stdarg.h>
#include <sys/types.h>
-
-int vsnprintf (char *str,size_t size,const char *format, va_list arg_ptr);
+#include <stdio.h>
int snprintf(char *str,size_t size,const char *format,...)
{
diff --git a/mdk-stage1/dietlibc/lib/socket.c b/mdk-stage1/dietlibc/lib/socket.c
index 1684a6a2b..c18df5123 100644
--- a/mdk-stage1/dietlibc/lib/socket.c
+++ b/mdk-stage1/dietlibc/lib/socket.c
@@ -1,12 +1,11 @@
-#include <linux/net.h>
+#include <linuxnet.h>
extern int socketcall(int callno,long* args);
-int socket(int a, int b, int c) {
-#ifdef __i386__
- return socketcall(SYS_SOCKET, (long*)&a);
-#else
+int __libc_socket(int a, int b, int c);
+int __libc_socket(int a, int b, int c) {
unsigned long args[] = { a, b, c };
return socketcall(SYS_SOCKET, args);
-#endif
}
+
+int socket(int a,int b,int c) __attribute__((weak,alias("__libc_socket")));
diff --git a/mdk-stage1/dietlibc/lib/speed.c b/mdk-stage1/dietlibc/lib/speed.c
deleted file mode 100644
index a7fcca7c9..000000000
--- a/mdk-stage1/dietlibc/lib/speed.c
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <unistd.h>
-#include <termios.h>
-#include <sys/types.h>
-
-#include <asm/errno.h>
-
-extern int errno;
-
-/* Hack around a kernel bug; value must correspond to the one used in tcsetattr.c */
-#define IBAUD0 020000000000
-
-
-/* Return the output baud rate stored in *TERMIOS_P. */
-speed_t cfgetospeed (struct termios *termios_p)
-{
- return termios_p->c_cflag & (CBAUD | CBAUDEX);
-}
-
-
-/* Return the input baud rate stored in *TERMIOS_P.
- Although for Linux there is no difference between input and output
- speed, the numerical 0 is a special case for the input baud rate. It
- should set the input baud rate to the output baud rate. */
-speed_t cfgetispeed (struct termios *termios_p)
-{
- return ((termios_p->c_iflag & IBAUD0)
- ? 0 : termios_p->c_cflag & (CBAUD | CBAUDEX));
-}
-
-
-/* Set the output baud rate stored in *TERMIOS_P to SPEED. */
-int cfsetospeed (struct termios *termios_p, speed_t speed)
-{
- if ((speed & ~CBAUD) != 0 && (speed < B57600 || speed > B460800)) {
- errno = EINVAL;
- return -1;
- }
-
- termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
- termios_p->c_cflag |= speed;
-
- return 0;
-}
-
-
-/* Set the input baud rate stored in *TERMIOS_P to SPEED.
- Although for Linux there is no difference between input and output
- speed, the numerical 0 is a special case for the input baud rate. It
- should set the input baud rate to the output baud rate. */
-int cfsetispeed (struct termios *termios_p, speed_t speed)
-{
- if ((speed & ~CBAUD) != 0 && (speed < B57600 || speed > B460800)) {
- errno = EINVAL;
- return -1;
- }
-
- if (speed == 0)
- termios_p->c_iflag |= IBAUD0;
- else
- {
- termios_p->c_iflag &= ~IBAUD0;
- termios_p->c_cflag &= ~(CBAUD | CBAUDEX);
- termios_p->c_cflag |= speed;
- }
-
- return 0;
-}
diff --git a/mdk-stage1/dietlibc/lib/sprintf.c b/mdk-stage1/dietlibc/lib/sprintf.c
index b355d01f9..37fd831d9 100644
--- a/mdk-stage1/dietlibc/lib/sprintf.c
+++ b/mdk-stage1/dietlibc/lib/sprintf.c
@@ -1,18 +1,14 @@
#include <stdarg.h>
-#include <linux/types.h>
+#include <sys/types.h>
#include <stdlib.h>
-#include "dietwarning.h"
-
-int vsnprintf (char *str,size_t size,const char *format, va_list arg_ptr);
+#include <stdio.h>
int sprintf(char *dest,const char *format,...)
{
int n;
va_list arg_ptr;
va_start(arg_ptr, format);
- n=vsnprintf(dest,1000000,format,arg_ptr);
+ n=vsprintf(dest,format,arg_ptr);
va_end (arg_ptr);
return n;
}
-
-link_warning("sprintf","warning: Avoid sprintf; use snprintf. It is more secure and faster.")
diff --git a/mdk-stage1/dietlibc/lib/sscanf.c b/mdk-stage1/dietlibc/lib/sscanf.c
index 341e74bba..e608878ef 100644
--- a/mdk-stage1/dietlibc/lib/sscanf.c
+++ b/mdk-stage1/dietlibc/lib/sscanf.c
@@ -1,6 +1,5 @@
#include <stdarg.h>
-
-int vsscanf(const char *str, const char *format, va_list arg_ptr);
+#include <stdio.h>
int sscanf(const char *str, const char *format, ...)
{
diff --git a/mdk-stage1/dietlibc/lib/strcasecmp.c b/mdk-stage1/dietlibc/lib/strcasecmp.c
index d978488a4..cf1592567 100644
--- a/mdk-stage1/dietlibc/lib/strcasecmp.c
+++ b/mdk-stage1/dietlibc/lib/strcasecmp.c
@@ -1,17 +1,18 @@
-#include <ctype.h>
-#include "dietfeatures.h"
+#include <strings.h>
-int strcasecmp(register const char *s,register const char *t) {
- register char x;
+int strcasecmp ( const char* s1, const char* s2 )
+{
+ register unsigned int x2;
+ register unsigned int x1;
- for (;;) {
- x = tolower(*s); if (x != tolower(*t)) break; if (!x) break; ++s; ++t;
-#ifndef WANT_SMALL_STRING_ROUTINES
- x = tolower(*s); if (x != tolower(*t)) break; if (!x) break; ++s; ++t;
- x = tolower(*s); if (x != tolower(*t)) break; if (!x) break; ++s; ++t;
- x = tolower(*s); if (x != tolower(*t)) break; if (!x) break; ++s; ++t;
-#endif
- }
- return ((int)(unsigned int)(unsigned char) x)
- - ((int)(unsigned int)(unsigned char) *t);
+ while (1) {
+ x2 = *s2++ - 'A'; if (x2 < 26u) x2 += 32;
+ x1 = *s1++ - 'A'; if (x1 < 26u) x1 += 32;
+ if ( x2 != x1 )
+ break;
+ if ( x1 == (unsigned int)-'A' )
+ break;
+ }
+
+ return x1 - x2;
}
diff --git a/mdk-stage1/dietlibc/lib/strchr.c b/mdk-stage1/dietlibc/lib/strchr.c
index 0c2050da6..3a4c9b5b4 100644
--- a/mdk-stage1/dietlibc/lib/strchr.c
+++ b/mdk-stage1/dietlibc/lib/strchr.c
@@ -1,4 +1,5 @@
#include "dietfeatures.h"
+#include <string.h>
char *strchr(register const char *t, int c) {
register char ch;
diff --git a/mdk-stage1/dietlibc/lib/strcmp.c b/mdk-stage1/dietlibc/lib/strcmp.c
index 0db324e66..3892379e5 100644
--- a/mdk-stage1/dietlibc/lib/strcmp.c
+++ b/mdk-stage1/dietlibc/lib/strcmp.c
@@ -14,3 +14,5 @@ int strcmp(register const char *s,register const char *t) {
return ((int)(unsigned int)(unsigned char) x)
- ((int)(unsigned int)(unsigned char) *t);
}
+
+int strcoll(const char *s,const char* t) __attribute__((weak,alias("strcmp")));
diff --git a/mdk-stage1/dietlibc/lib/strcpy.c b/mdk-stage1/dietlibc/lib/strcpy.c
index 49693c30d..444054e71 100644
--- a/mdk-stage1/dietlibc/lib/strcpy.c
+++ b/mdk-stage1/dietlibc/lib/strcpy.c
@@ -3,13 +3,16 @@
char* strcpy(register char* s,register const char* t)
{
char *dest=s;
+#ifndef WANT_SMALL_STRING_ROUTINES
for (;;) {
if (!(*s = *t)) return dest; ++s; ++t;
-#ifndef WANT_SMALL_STRING_ROUTINES
if (!(*s = *t)) return dest; ++s; ++t;
if (!(*s = *t)) return dest; ++s; ++t;
if (!(*s = *t)) return dest; ++s; ++t;
-#endif
}
+#else
+ while ((*dest++=*t++));
+ return s;
+#endif
}
diff --git a/mdk-stage1/dietlibc/lib/strerror.c b/mdk-stage1/dietlibc/lib/strerror.c
index f15b86aae..7cb79d988 100644
--- a/mdk-stage1/dietlibc/lib/strerror.c
+++ b/mdk-stage1/dietlibc/lib/strerror.c
@@ -1,10 +1,20 @@
+#include "dietfeatures.h"
+#include <unistd.h>
#include <string.h>
-extern char *sys_errlist[];
-extern int sys_nerr;
+#define _BSD_SOURCE
+#include <errno.h>
-char *strerror(int errnum) {
- if (errnum>=0 && errnum<sys_nerr)
- return sys_errlist[errnum];
- return "[unknown error]";
+extern const char __sys_err_unknown[];
+
+char*strerror(int errnum) {
+ register const char*message=__sys_err_unknown;
+
+ if ( (unsigned int)errnum < (unsigned int)__SYS_NERR )
+ message=sys_errlist[errnum];
+#if defined(__mips__)
+ if ( errnum == 1133 )
+ message="Quota exceeded";
+#endif
+ return (char*)message;
}
diff --git a/mdk-stage1/dietlibc/lib/strlen.c b/mdk-stage1/dietlibc/lib/strlen.c
index 56c085dac..96da5a540 100644
--- a/mdk-stage1/dietlibc/lib/strlen.c
+++ b/mdk-stage1/dietlibc/lib/strlen.c
@@ -4,7 +4,7 @@
#ifdef WANT_SMALL_STRING_ROUTINES
size_t strlen(const char *s) {
- register int i;
+ register size_t i;
if (!s) return 0;
for (i=0; *s; ++s) ++i;
return i;
diff --git a/mdk-stage1/dietlibc/lib/strncasecmp.c b/mdk-stage1/dietlibc/lib/strncasecmp.c
index 8a5445e53..543fe56ba 100644
--- a/mdk-stage1/dietlibc/lib/strncasecmp.c
+++ b/mdk-stage1/dietlibc/lib/strncasecmp.c
@@ -1,18 +1,22 @@
-#include <ctype.h>
#include <sys/types.h>
-#include <string.h>
+#include <strings.h>
-int strncasecmp(const char *s, const char *t, size_t n) {
- register char x;
- register const char* u=s+n;
- for (;;) {
- x = tolower(*s); if (x!=tolower(*t)) break; if (!x) break; if (++s>=u) return 0; ++t;
-#ifndef WANT_SMALL_STRING_ROUTINES
- x = tolower(*s); if (x!=tolower(*t)) break; if (!x) break; if (++s>=u) return 0; ++t;
- x = tolower(*s); if (x!=tolower(*t)) break; if (!x) break; if (++s>=u) return 0; ++t;
- x = tolower(*s); if (x!=tolower(*t)) break; if (!x) break; if (++s>=u) return 0; ++t;
-#endif
- }
- return ((int)(unsigned int)(unsigned char) x)
- - ((int)(unsigned int)(unsigned char) *t);
+int strncasecmp ( const char* s1, const char* s2, size_t len )
+{
+ register unsigned int x2;
+ register unsigned int x1;
+ register const char* end = s1 + len;
+
+ while (1) {
+ if ( s1 >= end )
+ return 0;
+ x2 = *s2++ - 'A'; if (x2 < 26u) x2 += 32;
+ x1 = *s1++ - 'A'; if (x1 < 26u) x1 += 32;
+ if ( x2 != x1 )
+ break;
+ if ( x1 == (unsigned int)-'A' )
+ break;
+ }
+
+ return x1 - x2;
}
diff --git a/mdk-stage1/dietlibc/lib/strncat.c b/mdk-stage1/dietlibc/lib/strncat.c
index a08e97916..9802d5678 100644
--- a/mdk-stage1/dietlibc/lib/strncat.c
+++ b/mdk-stage1/dietlibc/lib/strncat.c
@@ -9,14 +9,16 @@
* the last written bytes is always '\0'. */
#endif
+/* gcc is broken and has a non-SUSv2 compliant internal prototype.
+ * This causes it to warn about a type mismatch here. Ignore it. */
char *strncat(char *s, const char *t, size_t n) {
char *dest=s;
register char *max;
s+=strlen(s);
#ifdef WANT_NON_COMPLIANT_STRNCAT
- max=s+n-1;
+ if ((max=s+n-1)<=s) goto fini;
#else
- max=s+n;
+ if ((max=s+n)==s) goto fini;
#endif
for (;;) {
if (!(*s = *t)) break; if (++s==max) break; ++t;
@@ -27,5 +29,6 @@ char *strncat(char *s, const char *t, size_t n) {
#endif
}
*s=0;
+fini:
return dest;
}
diff --git a/mdk-stage1/dietlibc/lib/strncmp.c b/mdk-stage1/dietlibc/lib/strncmp.c
index 7c08c0fa7..b3b56cfbb 100644
--- a/mdk-stage1/dietlibc/lib/strncmp.c
+++ b/mdk-stage1/dietlibc/lib/strncmp.c
@@ -1,6 +1,17 @@
#include <sys/types.h>
#include <string.h>
+/* gcc is broken and has a non-SUSv2 compliant internal prototype.
+ * This causes it to warn about a type mismatch here. Ignore it. */
int strncmp(const char *s1, const char *s2, size_t n) {
- return memccmp(s1,s2,0,n);
+ register const char* a=s1;
+ register const char* b=s2;
+ register const char* fini=a+n;
+ while (a<fini) {
+ register int res=*a-*b;
+ if (res) return res;
+ if (!*a) return 0;
+ ++a; ++b;
+ }
+ return 0;
}
diff --git a/mdk-stage1/dietlibc/lib/strncpy.c b/mdk-stage1/dietlibc/lib/strncpy.c
index 531387b7f..31b682a1e 100644
--- a/mdk-stage1/dietlibc/lib/strncpy.c
+++ b/mdk-stage1/dietlibc/lib/strncpy.c
@@ -2,9 +2,14 @@
#define _XOPEN_SOURCE
#include <sys/types.h>
#include <string.h>
+#include "dietfeatures.h"
-char *strncpy(char *dest, const char *src, size_t n)
-{
+/* gcc is broken and has a non-SUSv2 compliant internal prototype.
+ * This causes it to warn about a type mismatch here. Ignore it. */
+char *strncpy(char *dest, const char *src, size_t n) {
+#ifdef WANT_FULL_POSIX_COMPAT
+ memset(dest,0,n);
+#endif
memccpy(dest,src,0,n);
return dest;
}
diff --git a/mdk-stage1/dietlibc/lib/strsep.c b/mdk-stage1/dietlibc/lib/strsep.c
index a1bf1872a..db76f89b5 100644
--- a/mdk-stage1/dietlibc/lib/strsep.c
+++ b/mdk-stage1/dietlibc/lib/strsep.c
@@ -4,6 +4,7 @@ char *strsep(char **stringp, const char *delim) {
register char *tmp=*stringp;
register char *tmp2=tmp;
register const char *tmp3;
+ if (!*stringp) return 0;
for (tmp2=tmp; *tmp2; ++tmp2) {
for (tmp3=delim; *tmp3; ++tmp3)
if (*tmp2==*tmp3) { /* delimiter found */
@@ -12,5 +13,6 @@ char *strsep(char **stringp, const char *delim) {
return tmp;
}
}
- return 0;
+ *stringp=0;
+ return tmp;
}
diff --git a/mdk-stage1/dietlibc/lib/strstr.c b/mdk-stage1/dietlibc/lib/strstr.c
index 641d9d7ac..0632cc28a 100644
--- a/mdk-stage1/dietlibc/lib/strstr.c
+++ b/mdk-stage1/dietlibc/lib/strstr.c
@@ -2,12 +2,14 @@
#include <string.h>
char *strstr(const char *haystack, const char *needle) {
- int nl=strlen(needle);
- int hl=strlen(haystack);
+ size_t nl=strlen(needle);
+ size_t hl=strlen(haystack);
int i;
+ if (!nl) goto found;
if (nl>hl) return 0;
for (i=hl-nl+1; i; --i) {
- if (!memcmp(haystack,needle,nl))
+ if (*haystack==*needle && !memcmp(haystack,needle,nl))
+found:
return (char*)haystack;
++haystack;
}
diff --git a/mdk-stage1/dietlibc/lib/strtod.c b/mdk-stage1/dietlibc/lib/strtod.c
index cbe983d84..5d50cc535 100644
--- a/mdk-stage1/dietlibc/lib/strtod.c
+++ b/mdk-stage1/dietlibc/lib/strtod.c
@@ -1,52 +1,66 @@
#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
-extern char isspace(char c);
-
-#ifdef __GNUC__
-static inline char isdigit(char c) { return (c>='0' && c<='9'); }
-#endif
-
-double strtod(const char *nptr, char **endptr) {
- double d=0;
- register const char *c=nptr;
- char neg=0;
- while (*c && isspace(*c)) ++c;
- switch (*c) {
- case '-': neg=1;
- case '+': c++; break;
- default: break;
- }
- while (isdigit(*c)) {
- d=d*10+(*c-'0');
- ++c;
- }
- if (*c=='.') {
- double factor=.1;
- while (isdigit(*++c)) {
- d=d+(factor*(*c-'0'));
- factor/=10;
+double strtod(const char* s, char** endptr) {
+ register const char* p = s;
+ register long double value = 0.L;
+ int sign = +1;
+ long double factor;
+ unsigned int expo;
+
+ while ( isspace(*p) )
+ p++;
+
+ switch (*p) {
+ case '-': sign = -1;
+ case '+': p++;
+ default : break;
}
- }
- if ((*c|32)=='e') {
- int exp=0;
- double factor=10;
- if (c[1]<'0') {
- switch (c[1]) {
- case '-': factor=0.1;
- case '+': c++; break;
- default:
- d=0;
- c=nptr;
- goto done;
- }
+
+ while ( (unsigned int)(*p - '0') < 10u )
+ value = value*10 + (*p++ - '0');
+
+ if ( *p == '.' ) {
+ factor = 1.;
+
+ p++;
+ while ( (unsigned int)(*p - '0') < 10u ) {
+ factor *= 0.1;
+ value += (*p++ - '0') * factor;
+ }
}
- while (isdigit(*++c))
- exp=exp*10+(*c-'0');
- while (exp) { /* XXX: this introduces rounding errors */
- d*=factor; --exp;
+
+ if ( (*p | 32) == 'e' ) {
+ expo = 0;
+ factor = 10.L;
+
+ switch (*++p) { // ja hier weiß ich nicht, was mindestens nach einem 'E' folgenden MUSS.
+ case '-': factor = 0.1;
+ case '+': p++;
+ break;
+ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+ break;
+ default : value = 0.L;
+ p = s;
+ goto done;
+ }
+
+ while ( (unsigned int)(*p - '0') < 10u )
+ expo = 10 * expo + (*p++ - '0');
+
+ while ( 1 ) {
+ if ( expo & 1 )
+ value *= factor;
+ if ( (expo >>= 1) == 0 )
+ break;
+ factor *= factor;
+ }
}
- }
+
done:
- if (endptr) *endptr=(char*)c;
- return d;
+ if ( endptr != NULL )
+ *endptr = (char*)p;
+
+ return value * sign;
}
diff --git a/mdk-stage1/dietlibc/lib/strtok.c b/mdk-stage1/dietlibc/lib/strtok.c
index 86337da7b..e041703e3 100644
--- a/mdk-stage1/dietlibc/lib/strtok.c
+++ b/mdk-stage1/dietlibc/lib/strtok.c
@@ -1,4 +1,4 @@
-char *strtok_r(char *s, const char *delim, char **ptrptr);
+#include <string.h>
static char *strtok_pos;
diff --git a/mdk-stage1/dietlibc/lib/strtol.c b/mdk-stage1/dietlibc/lib/strtol.c
index ead89f408..2624aca0e 100644
--- a/mdk-stage1/dietlibc/lib/strtol.c
+++ b/mdk-stage1/dietlibc/lib/strtol.c
@@ -1,7 +1,10 @@
#include <ctype.h>
+#include "dietfeatures.h"
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
-extern unsigned long int strtoul(const char *nptr, char **endptr, int base);
-
+#define ABS_LONG_MIN 2147483648UL
long int strtol(const char *nptr, char **endptr, int base)
{
int neg=0;
@@ -9,7 +12,15 @@ long int strtol(const char *nptr, char **endptr, int base)
while(isspace(*nptr)) nptr++;
- if (*nptr == '-' && isdigit(nptr[1])) { neg=-1; nptr++; }
+ if (*nptr == '-') { neg=-1; ++nptr; }
v=strtoul(nptr,endptr,base);
+ if (v>=ABS_LONG_MIN) {
+ if (v==ABS_LONG_MIN && neg) {
+ errno=0;
+ return v;
+ }
+ errno=ERANGE;
+ return (neg?LONG_MIN:LONG_MAX);
+ }
return (neg?-v:v);
}
diff --git a/mdk-stage1/dietlibc/lib/strtoll.c b/mdk-stage1/dietlibc/lib/strtoll.c
index 7b8e28a1d..9e05e740e 100644
--- a/mdk-stage1/dietlibc/lib/strtoll.c
+++ b/mdk-stage1/dietlibc/lib/strtoll.c
@@ -1,8 +1,7 @@
#include <ctype.h>
+#include <stdlib.h>
-extern unsigned long int strtoull(const char *nptr, char **endptr, int base);
-
-long int strtoll(const char *nptr, char **endptr, int base)
+long long int strtoll(const char *nptr, char **endptr, int base)
{
int neg=0;
unsigned long long int v;
diff --git a/mdk-stage1/dietlibc/lib/strtoul.c b/mdk-stage1/dietlibc/lib/strtoul.c
index 3f93962a9..e9c09fb59 100644
--- a/mdk-stage1/dietlibc/lib/strtoul.c
+++ b/mdk-stage1/dietlibc/lib/strtoul.c
@@ -1,32 +1,44 @@
#include <ctype.h>
-
-/* static char *num="0123456789abcdefghijklmnopqrstuvwxyz"; */
+#include "dietfeatures.h"
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
unsigned long int strtoul(const char *nptr, char **endptr, int base)
{
- long int v=0;
+ int neg = 0;
+ unsigned long int v=0;
while(isspace(*nptr)) ++nptr;
-
+ if (*nptr == '-') { neg=1; nptr++; }
if (*nptr == '+') ++nptr;
+ if (base==16 && nptr[0]=='0') goto skip0x;
if (!base) {
if (*nptr=='0') {
base=8;
- if ((*(nptr+1)=='x')||(*(nptr+1)=='X')) {
+skip0x:
+ if (nptr[1]=='x'||nptr[1]=='X') {
nptr+=2;
base=16;
}
- }
- else
+ } else
base=10;
}
while(*nptr) {
register unsigned char c=*nptr;
- c=(c>='a'?c-'a'+10:c>='A'?c-'A'+10:c-'0');
+ c=(c>='a'?c-'a'+10:c>='A'?c-'A'+10:c<='9'?c-'0':0xff);
if (c>=base) break;
- v=v*base+c;
+ {
+ register unsigned long int w=v*base;
+ if (w<v) {
+ errno=ERANGE;
+ return ULONG_MAX;
+ }
+ v=w+c;
+ }
++nptr;
}
if (endptr) *endptr=(char *)nptr;
- return v;
+ errno=0; /* in case v==ULONG_MAX, ugh! */
+ return (neg?-v:v);
}
diff --git a/mdk-stage1/dietlibc/lib/strtoull.c b/mdk-stage1/dietlibc/lib/strtoull.c
index 40818958d..d6073e32a 100644
--- a/mdk-stage1/dietlibc/lib/strtoull.c
+++ b/mdk-stage1/dietlibc/lib/strtoull.c
@@ -1,4 +1,5 @@
#include <ctype.h>
+#include <stdlib.h>
unsigned long long int strtoull(const char *nptr, char **endptr, int base)
{
diff --git a/mdk-stage1/dietlibc/lib/sys_siglist.c b/mdk-stage1/dietlibc/lib/sys_siglist.c
index 80d7b3fb0..a753848d9 100644
--- a/mdk-stage1/dietlibc/lib/sys_siglist.c
+++ b/mdk-stage1/dietlibc/lib/sys_siglist.c
@@ -1,37 +1,174 @@
-const char *const sys_siglist[] =
- {
- "Signal 0",
- "Hangup",
- "Interrupt",
- "Quit",
- "Illegal instruction",
- "Trace/breakpoint trap",
- "IOT trap",
- "EMT trap",
- "Floating point exception",
- "Killed",
- "Bus error",
- "Segmentation fault",
- "Bad system call",
- "Broken pipe",
- "Alarm clock",
- "Terminated",
- "Urgent I/O condition",
- "Stopped (signal)",
- "Stopped",
- "Continued",
- "Child exited",
- "Stopped (tty input)",
- "Stopped (tty output)",
- "I/O possible",
- "CPU time limit exceeded",
- "File size limit exceeded",
- "Virtual timer expired",
- "Profiling timer expired",
- "Window changed",
- "Resource lost",
- "User defined signal 1",
- "User defined signal 2",
- 0
- };
+const char *const sys_siglist[] = {
+ "Signal 0",
+ "Hangup",
+ "Interrupt",
+ "Quit",
+ "Illegal instruction",
+ "Trace/breakpoint trap",
+ "ABRT/IOT trap",
+#if defined(__alpha__) || defined(__sparc__) || defined(__mips__) || defined(__hppa__)
+ "EMT trap",
+#else
+ "Bus error",
+#endif
+ "Floating point exception",
+ "Killed",
+#if defined(__alpha__) || defined(__sparc__) || defined(__mips__) || defined(__hppa__)
+ "Bus error",
+#else
+ "User defined signal 1",
+#endif
+ "Segmentation fault",
+#if defined(__alpha__) || defined(__sparc__) || defined(__mips__) || defined(__hppa__)
+ "Bad system call",
+#else
+ "User defined signal 2",
+#endif
+ "Broken pipe",
+ "Alarm clock",
+ "Terminated",
+#if defined(__hppa__)
+ "User defined signal 1",
+ "User defined signal 2",
+ "Child exited",
+ "Power lost",
+ "Virtual timer expired",
+ "Profiling timer expired",
+ "I/O possible",
+ "Window changed",
+ "Stopped (signal)",
+ "Stopped",
+ "Continued",
+ "Stopped (tty input)",
+ "Stopped (tty output)",
+ "Urgent I/O condition",
+ "Power lost",
+ "Unknown",
+ "Unknown",
+ "CPU time limit exceeded",
+ "File size limit exceeded",
+ "Unknown",
+ "Stack fault",
+#elif defined(__mips__)
+ "User defined signal 1",
+ "User defined signal 2",
+ "Child exited",
+ "Power lost",
+ "Window changed",
+ "Urgent I/O condition",
+ "I/O possible",
+ "Stopped (signal)",
+ "Stopped",
+ "Continued",
+ "Stopped (tty input)",
+ "Stopped (tty output)",
+ "Virtual timer expired",
+ "Profiling timer expired",
+ "CPU time limit exceeded",
+ "File size limit exceeded",
+#elif defined(__alpha__) || defined(__sparc__)
+ "Urgent I/O condition",
+ "Stopped (signal)",
+ "Stopped",
+ "Continued",
+ "Child exited",
+ "Stopped (tty input)",
+ "Stopped (tty output)",
+ "I/O possible",
+ "CPU time limit exceeded",
+ "File size limit exceeded",
+ "Virtual timer expired",
+ "Profiling timer expired",
+ "Window changed",
+ "Power/Resource lost",
+ "User defined signal 1",
+ "User defined signal 2",
+#else
+ "Stack fault",
+ "Child exited",
+ "Continued",
+ "Stopped (signal)",
+ "Stopped",
+ "Stopped (tty input)",
+ "Stopped (tty output)",
+ "Urgent I/O condition",
+ "CPU time limit exceeded",
+ "File size limit exceeded",
+ "Virtual timer expired",
+ "Profiling timer expired",
+ "Window changed",
+ "I/O possible",
+ "Power lost",
+ "Bad system call",
+#endif
+#ifndef __hppa__
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+#endif
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+#ifdef __mips__
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+ "Real time signal",
+#endif
+ 0
+};
diff --git a/mdk-stage1/dietlibc/lib/tcdrain.c b/mdk-stage1/dietlibc/lib/tcdrain.c
index 7a760f643..bb2018fb4 100644
--- a/mdk-stage1/dietlibc/lib/tcdrain.c
+++ b/mdk-stage1/dietlibc/lib/tcdrain.c
@@ -1,5 +1,6 @@
#include <sys/ioctl.h>
+int __libc_tcdrain(int fd);
int __libc_tcdrain(int fd)
{
return ioctl(fd, TCSBRK, 1);
diff --git a/mdk-stage1/dietlibc/lib/tcflush.c b/mdk-stage1/dietlibc/lib/tcflush.c
index a19fe11d1..2e5447728 100644
--- a/mdk-stage1/dietlibc/lib/tcflush.c
+++ b/mdk-stage1/dietlibc/lib/tcflush.c
@@ -1,23 +1,9 @@
-#include <unistd.h>
-#include <termios.h>
#include <sys/ioctl.h>
-#include <asm/errno.h>
-
-extern int errno;
-
-/* Flush pending data on FD. */
-int tcflush(int fd, int queue_selector)
+int __libc_tcflush(int fd, int queue_selector);
+int __libc_tcflush(int fd, int queue_selector)
{
- switch (queue_selector) {
- case TCIFLUSH:
- return ioctl(fd, TCFLSH, 0);
- case TCOFLUSH:
- return ioctl(fd, TCFLSH, 1);
- case TCIOFLUSH:
- return ioctl(fd, TCFLSH, 2);
- default:
- errno = EINVAL;
- return -1;
- }
+ return ioctl(fd, TCFLSH, queue_selector);
}
+
+int tcflush(int fd) __attribute__((weak,alias("__libc_tcflush")));
diff --git a/mdk-stage1/dietlibc/lib/tcgetpgrp.c b/mdk-stage1/dietlibc/lib/tcgetpgrp.c
index f2a290651..8d5d4614a 100644
--- a/mdk-stage1/dietlibc/lib/tcgetpgrp.c
+++ b/mdk-stage1/dietlibc/lib/tcgetpgrp.c
@@ -1,7 +1,12 @@
#include <termios.h>
#include <sys/ioctl.h>
+#include <unistd.h>
int tcgetpgrp(int fildes)
{
- return ioctl(fildes, TIOCGPGRP);
+ int foo;
+ if (ioctl(fildes, TIOCGPGRP, &foo)==-1)
+ return -1;
+ else
+ return foo;
}
diff --git a/mdk-stage1/dietlibc/lib/tcsetattr.c b/mdk-stage1/dietlibc/lib/tcsetattr.c
index cf70354d2..03fe8adee 100644
--- a/mdk-stage1/dietlibc/lib/tcsetattr.c
+++ b/mdk-stage1/dietlibc/lib/tcsetattr.c
@@ -1,27 +1,37 @@
-#define tcsetattr libc_tcsetattr
#include <termios.h>
#include <sys/ioctl.h>
-#undef tcsetattr
+#include <errno.h>
+#include "dietfeatures.h"
-#include <asm/errno.h>
+#if !defined(__powerpc__) && !defined(__sparc__) && !defined(__alpha__) && !defined(__hppa__)
+#if TCSANOW==0 && TCSADRAIN==1 && TCSAFLUSH==2 && TCSETSW-TCSETS==1 && TCSETSF-TCSETS==2
+#define shortcut
+#endif
+#endif
-extern int errno;
+int tcsetattr ( int fildes, int optional_actions, struct termios* termios_p )
+{
+#ifdef shortcut
-/* Hack around a kernel bug; value must correspond to the one used in speed.c */
-#define IBAUD0 020000000000
+ if ( (unsigned int)optional_actions < 3u )
+ return ioctl ( fildes, TCSETS+optional_actions, termios_p );
-int tcsetattr(int fildes, int optional_actions, struct termios *termios_p)
-{
- termios_p->c_iflag &= ~IBAUD0;
- switch (optional_actions) {
- case TCSANOW:
- return ioctl(fildes, TCSETS, termios_p);
- case TCSADRAIN:
- return ioctl(fildes, TCSETSW, termios_p);
- case TCSAFLUSH:
- return ioctl(fildes, TCSETSF, termios_p);
- default:
errno = EINVAL;
return -1;
- }
+
+#else
+
+ switch ( optional_actions ) {
+ case TCSANOW:
+ return ioctl ( fildes, TCSETS , termios_p );
+ case TCSADRAIN:
+ return ioctl ( fildes, TCSETSW, termios_p );
+ case TCSAFLUSH:
+ return ioctl ( fildes, TCSETSF, termios_p );
+ default:
+ errno = EINVAL;
+ return -1;
+ }
+
+#endif
}
diff --git a/mdk-stage1/dietlibc/lib/tcsetpgrp.c b/mdk-stage1/dietlibc/lib/tcsetpgrp.c
index 6c40b5c79..8cf3165c2 100644
--- a/mdk-stage1/dietlibc/lib/tcsetpgrp.c
+++ b/mdk-stage1/dietlibc/lib/tcsetpgrp.c
@@ -1,5 +1,6 @@
#include <termios.h>
#include <sys/ioctl.h>
+#include <unistd.h>
int tcsetpgrp(int fildes, pid_t pgrpid)
{
diff --git a/mdk-stage1/dietlibc/lib/tolower.c b/mdk-stage1/dietlibc/lib/tolower.c
index 4b7c7cf2d..c24932ef4 100644
--- a/mdk-stage1/dietlibc/lib/tolower.c
+++ b/mdk-stage1/dietlibc/lib/tolower.c
@@ -1,6 +1,8 @@
#include <ctype.h>
-inline int tolower(int c) {
- return (c>='A' && c<='Z')?c-'A'+'a':c;
+int tolower(int ch) {
+ if ( (unsigned int)(ch - 'A') < 26u )
+ ch += 'a' - 'A';
+ return ch;
}
diff --git a/mdk-stage1/dietlibc/lib/toupper.c b/mdk-stage1/dietlibc/lib/toupper.c
index c048e60bb..f7d415e95 100644
--- a/mdk-stage1/dietlibc/lib/toupper.c
+++ b/mdk-stage1/dietlibc/lib/toupper.c
@@ -1,6 +1,8 @@
#include <ctype.h>
-inline int toupper(int c) {
- return (c>='a' && c<='z')?c-'a'+'A':c;
+inline int toupper(int ch) {
+ if ( (unsigned int)(ch - 'a') < 26u )
+ ch += 'A' - 'a';
+ return ch;
}
diff --git a/mdk-stage1/dietlibc/lib/ttyname.c b/mdk-stage1/dietlibc/lib/ttyname.c
index a6b479088..2bbc7f2a9 100644
--- a/mdk-stage1/dietlibc/lib/ttyname.c
+++ b/mdk-stage1/dietlibc/lib/ttyname.c
@@ -1,30 +1,35 @@
#include "dietfeatures.h"
#include <unistd.h>
#include <sys/stat.h>
+#include <string.h>
#ifdef __linux__
-extern int __ltostr(char *s, int size, unsigned long i, int base, char UpCase);
+#include <stdlib.h>
char *ttyname(int fd) {
#ifdef SLASH_PROC_OK
char ibuf[20];
static char obuf[20];
+ int len;
+ if (!isatty(fd)) return 0;
strcpy(ibuf,"/proc/self/fd/");
- ibuf[__ltostr(ibuf+14,6,fd,10,0)+14]=0;
- if (readlink(ibuf,obuf,sizeof(obuf)-1)<0) return 0;
+ ibuf[__ltostr(ibuf+14,6,(unsigned long)fd,10,0)+14]=0;
+ if ((len=readlink(ibuf,obuf,sizeof(obuf)-1))<0) return 0;
+ obuf[len]=0;
return obuf;
#else
- static char buf[20]="/dev/tty";
+ static char buf[20];
struct stat s;
char *c=buf+8;
int n;
+ if (!isatty(fd)) return 0;
if (fstat(fd,&s)) return 0;
+ strcpy(buf,"/dev/tty");
if (S_ISCHR(s.st_mode)) {
n=minor(s.st_rdev);
switch (major(s.st_rdev)) {
case 4:
- buf[5]='t'; buf[7]='y';
if (n>63) {
n-=64;
*c='S';
@@ -34,16 +39,18 @@ num:
c[__ltostr(c,6,n,10,0)]=0;
break;
case 2:
- buf[5]='p'; buf[7]='y';
buf[8]='p'-(n>>4);
buf[9]=n%4+'0';
if (buf[9]>'9') *c+='a'-'0';
buf[10]=0;
+ goto duh;
case 136:
case 137:
case 138:
case 139:
- buf[5]='p'; buf[7]='s';
+ buf[7]='s';
+duh:
+ buf[5]='p';
n+=(major(s.st_rdev)-136)<<8;
*c='/'; ++c;
goto num;
diff --git a/mdk-stage1/dietlibc/lib/usleep.c b/mdk-stage1/dietlibc/lib/usleep.c
index 494f99233..8f07416a8 100644
--- a/mdk-stage1/dietlibc/lib/usleep.c
+++ b/mdk-stage1/dietlibc/lib/usleep.c
@@ -1,12 +1,12 @@
-#include <linux/time.h>
#include <time.h>
+#include <unistd.h>
/* nano * 1000 == usecs
* usecs * 1000 == msecs
* msecs * 1000 = secs */
-void usleep(unsigned int usecs) {
+int usleep(unsigned long usecs) {
struct timespec t;
t.tv_sec=usecs/1000000;
t.tv_nsec=(usecs%1000000)*1000;
- nanosleep(&t,&t);
+ return nanosleep(&t,&t);
}
diff --git a/mdk-stage1/dietlibc/lib/vfork.c b/mdk-stage1/dietlibc/lib/vfork.c
index 795cddb05..d54416d5d 100644
--- a/mdk-stage1/dietlibc/lib/vfork.c
+++ b/mdk-stage1/dietlibc/lib/vfork.c
@@ -1,6 +1,4 @@
-#include <linux/types.h>
#include <unistd.h>
-pid_t vfork(void) {
- return fork();
-}
+pid_t vfork() { return fork(); }
+
diff --git a/mdk-stage1/dietlibc/lib/vfprintf.c b/mdk-stage1/dietlibc/lib/vfprintf.c
deleted file mode 100644
index c33a2404b..000000000
--- a/mdk-stage1/dietlibc/lib/vfprintf.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "dietstdarg.h"
-
-int vfprintf(FILE *fstream, const char *format, va_list ap)
-{
- char *tmp;
- va_list cp_ap;
- size_t n = 0;
-
- va_copy(cp_ap, ap);
- n=vsnprintf(0, 1000000, format, cp_ap);
- tmp=alloca(n+2);
- vsnprintf(tmp, n+1, format, ap);
- fwrite(tmp, n,1, fstream);
- return n;
-}
-
diff --git a/mdk-stage1/dietlibc/lib/vprintf.c b/mdk-stage1/dietlibc/lib/vprintf.c
deleted file mode 100644
index 46ecc47a4..000000000
--- a/mdk-stage1/dietlibc/lib/vprintf.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdarg.h>
-#include <linux/types.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-int vsnprintf (char *str,size_t size,const char *format, va_list arg_ptr);
-
-int vprintf(const char *format, va_list ap)
-{
- char tmp[1000000];
- size_t n = vsnprintf(tmp, sizeof(tmp), format, ap);
- write(1, tmp, n);
- return n;
-}
diff --git a/mdk-stage1/dietlibc/lib/vsnprintf.c b/mdk-stage1/dietlibc/lib/vsnprintf.c
index f425066e3..dd06d6483 100644
--- a/mdk-stage1/dietlibc/lib/vsnprintf.c
+++ b/mdk-stage1/dietlibc/lib/vsnprintf.c
@@ -1,238 +1,33 @@
-#include "dietfeatures.h"
#include <stdarg.h>
#include <sys/types.h>
+#include <unistd.h>
#include <stdlib.h>
#include <string.h>
-#include "dietwarning.h"
-
-extern int __ltostr(char *s, int size, unsigned long i, int base, char UpCase);
-extern int __dtostr(double d,char *buf,int maxlen,int prec);
-
-int vsnprintf (char *str, size_t size, const char *format, va_list arg_ptr)
-{
- size_t apos,i;
- char ch,buf[1024];
- char *pb;
- char flag_in_sign;
- char flag_hash,flag_zero,flag_left,flag_space,flag_sign,flag_dot,flag_long;
- long number,width,preci,buf_len,pad;
- char padwith;
-
- size--;
-
- apos=0;
- while (apos<size)
- {
- ch=*format++;
- switch (ch)
- {
- case '%':
- flag_hash=0;
- flag_zero=0;
- flag_left=0;
- flag_space=0;
- flag_sign=0;
- flag_dot=0;
- flag_in_sign=0;
- flag_long=0;
-
- width=0;
- padwith=' ';
-
-inn_vsnprintf:
- if (apos>=size) continue; /* ARGL !!! */
-
- ch=*format++;
- switch (ch)
- {
-/* Format end ?!? */
- case 0:
- return -1;
- break;
-
-/* Format flag chars */
- case '#':
- flag_hash=1;
- goto inn_vsnprintf;
-
- case 'l':
- ++flag_long;
- goto inn_vsnprintf;
-
- case '0':
- padwith='0';
- goto inn_vsnprintf;
-
- case '-':
- flag_left=1;
- goto inn_vsnprintf;
-
- case ' ':
- flag_space=1;
- goto inn_vsnprintf;
-
- case '+':
- flag_sign=1;
- goto inn_vsnprintf;
-
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if(flag_dot) return -1;
- width=strtol(--format,&pb,10);
- format=pb;
- goto inn_vsnprintf;
-
- case '*':
- width=va_arg(arg_ptr,int);
- goto inn_vsnprintf;
-
- case '.':
- flag_dot=1;
- if (*format=='*') {
- preci=va_arg(arg_ptr,int);
- ++format;
- } else {
- preci=strtol(format,&pb,10);
- format=pb;
- }
- goto inn_vsnprintf;
-
-/* Format conversion chars */
- case 'c':
- ch=(char)va_arg(arg_ptr,int);
- case '%':
- if (str) str[apos]=ch; ++apos;
- break;
-
- case 's':
- pb=va_arg(arg_ptr,char *);
-#ifdef WANT_NULL_PRINTF
- if (!pb) pb="(null)";
-#endif
- buf_len=strlen(pb);
- if (flag_dot && buf_len>preci) buf_len=preci;
- if (buf_len>size-apos) buf_len=size-apos;
-
-print_out:
- if (str) {
- if (width && (!flag_left))
- {
- for (pad=width-buf_len; pad>0; --pad) str[apos++]=padwith;
- }
- for(i=0;i<buf_len;++i) { str[apos++]=pb[i]; } /* strncpy */
- if (width && (flag_left))
- {
- for (pad=width-buf_len; pad>0; --pad) str[apos++]=padwith;
- }
- } else {
- if (width) {
- apos+=width>buf_len?width:buf_len;
- } else {
- apos+=size>buf_len?buf_len:size;
- }
- }
-
- break;
-
- /* Numbers */
- case 'b':
- i=2;
- goto num_vsnprintf;
- case 'p':
- flag_hash=1;
- width=sizeof(void *)<<1;
- padwith='0';
- ch='x';
- case 'X':
- case 'x':
- i=16;
- if (flag_hash)
- {
- if (str) {
- str[apos++]='0';
- str[apos++]=ch;
- } else
- apos+=2;
- }
- goto num_vsnprintf;
- case 'd':
- case 'i':
- flag_in_sign=1;
- case 'u':
- i=10;
- goto num_vsnprintf;
- case 'o':
- i=8;
- if (flag_hash) { if (str) str[apos]='0'; ++apos; }
-
-num_vsnprintf:
- if (apos>=size) continue; /* ARGL !!! */
-
- if (flag_long)
- number=va_arg(arg_ptr,long);
- else
- number=va_arg(arg_ptr,int);
-
- if (flag_in_sign && (number<0))
- {
- number*=-1;
- flag_in_sign=2;
- }
-
- buf_len=__ltostr(buf+1,sizeof(buf)-1,(unsigned long) number,i,0);
- pb=buf+1;
-
- if (flag_in_sign==2)
- {
- *(--pb)='-';
- buf_len++;
- }
- else if ((flag_in_sign)&&(flag_sign || flag_space))
- {
- *(--pb)=(flag_sign)?'+':' ';
- buf_len++;
- }
- goto print_out;
-
-#ifdef WANT_FLOATING_POINT_IN_PRINTF
- case 'f':
- case 'g':
- {
- double d=va_arg(arg_ptr,double);
- buf_len=__dtostr(d,buf,sizeof(buf),width?width:6);
- if (flag_dot) {
- char *tmp;
- if ((tmp=strchr(buf,'.'))) {
- while (preci>-1 && *++tmp) --preci;
- *tmp=0;
- }
- }
- pb=buf;
- goto print_out;
- }
-#endif
- default:
- break;
- }
- break;
- case 0:
- if (str) str[apos]=0;
- return apos;
- default:
- if (str) str[apos]=ch; apos++;
- break;
+#include "dietstdio.h"
+
+struct str_data {
+ unsigned char* str;
+ size_t len;
+ size_t size;
+};
+
+static int swrite(void*ptr, size_t nmemb, struct str_data* sd) {
+ size_t tmp=sd->size-sd->len;
+ if (tmp>0) {
+ size_t len=nmemb;
+ if (len>tmp) len=tmp;
+ if (sd->str) {
+ memcpy(sd->str+sd->len,ptr,len);
+ sd->str[sd->len+len]=0;
}
+ sd->len+=len;
}
- if (str) str[apos]=0;
- return apos;
+ return nmemb;
}
-link_warning("vsnprintf","warning: the printf functions add several kilobytes of bloat.")
-
+int vsnprintf(char* str, size_t size, const char *format, va_list arg_ptr) {
+ struct str_data sd = { str, 0, size };
+ struct arg_printf ap = { &sd, (int(*)(void*,size_t,void*)) swrite };
+ if (size) --sd.size;
+ return __v_printf(&ap,format,arg_ptr);
+}
diff --git a/mdk-stage1/dietlibc/lib/vsprintf.c b/mdk-stage1/dietlibc/lib/vsprintf.c
index 10ff04bd7..6cd5a40b1 100644
--- a/mdk-stage1/dietlibc/lib/vsprintf.c
+++ b/mdk-stage1/dietlibc/lib/vsprintf.c
@@ -1,10 +1,12 @@
#include <stdarg.h>
-#include <linux/types.h>
+#include <sys/types.h>
#include <stdlib.h>
-
-int vsnprintf (char *str,size_t size,const char *format, va_list arg_ptr);
+#include <stdio.h>
+#include "dietwarning.h"
int vsprintf(char *dest,const char *format, va_list arg_ptr)
{
- return vsnprintf(dest,1000000,format,arg_ptr);
+ return vsnprintf(dest,(size_t)-1,format,arg_ptr);
}
+
+link_warning("vsprintf","warning: Avoid *sprintf; use *snprintf. It is more secure.")
diff --git a/mdk-stage1/dietlibc/lib/vsscanf.c b/mdk-stage1/dietlibc/lib/vsscanf.c
index 1c4c9b787..329cfd02a 100644
--- a/mdk-stage1/dietlibc/lib/vsscanf.c
+++ b/mdk-stage1/dietlibc/lib/vsscanf.c
@@ -1,304 +1,25 @@
-#include "dietfeatures.h"
#include <stdarg.h>
#include <sys/types.h>
-#include <ctype.h>
#include <stdlib.h>
-#include <string.h>
+#include "dietstdio.h"
+#include <unistd.h>
-const char *skip_ws(const char *str)
-{
- while ((*str)&&(isspace(*str))) str++;
- return str;
+struct str_data {
+ unsigned char* str;
+};
+
+static int sgetc(struct str_data* sd) {
+ register unsigned int ret = *(sd->str++);
+ return (ret)?(int)ret:-1;
}
-extern double strtod(const char *s,char **f);
+static int sputc(int c, struct str_data* sd) {
+ return (*(--sd->str)==c)?c:-1;
+}
-int vsscanf(const char *str, const char *format, va_list arg_ptr)
+int vsscanf(const char* str, const char* format, va_list arg_ptr)
{
- int n=0,div;
- unsigned char ch;
-
- char flag_discard, flag_malloc, flag_half, flag_long, flag_longlong;
- char flag_width;
-
- unsigned long width;
-
- /* arg_ptr tmps */
-#ifdef WANT_FLOATING_POINT_IN_SCANF
- double d,*pd;
- float *pf;
-#endif
-
- long l=0,*pl;
- short *ph;
- int *pi;
- char *s;
-
- while ((*str)&&(*format))
- {
- const char *prevfmt=format;
- format=skip_ws(format);
- ch=*format++;
- if (!ch) continue;
-
- switch (ch)
- {
- case '%':
- div=0;
- flag_discard=0;
- flag_malloc=0;
- flag_half=0;
- flag_long=0;
- flag_longlong=0;
-
- flag_width=0;
- width=-1;
-
-inn_vsscanf:
- ch=*format++;
-
- switch (ch)
- {
- case 0:
- return 0;
-
- case '%':
- if (*(str++)!=ch) return n;
- break;
-
- /* flags */
- case '*':
- flag_discard=1;
- goto inn_vsscanf;
-
- case 'a':
- flag_malloc=1;
- goto inn_vsscanf;
-
- case 'h':
- flag_half=1;
- goto inn_vsscanf;
-
- case 'l':
- if (flag_long) flag_longlong=1;
- flag_long=1;
- goto inn_vsscanf;
-
- /* longlong ? NOT YET ! */
- case 'q':
- case 'L':
- flag_longlong=1;
- goto inn_vsscanf;
-
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- width=strtol(format-1,&s,10);
- format=s;
- flag_width=1;
- goto inn_vsscanf;
-
- /* conversion */
-
- case 'n':
- while (width && *str)
- {
- *(s++)=*(str++);
- --width;
- l++;
- }
- if (!flag_discard)
- {
- pl=(long *)va_arg(arg_ptr,long*);
- *pl=l;
- ++n;
- }
- break;
-
- case 'p':
- case 'X':
- case 'x':
- div+=6;
- case 'd':
- div+=2;
- case 'o':
- div+=8;
- case 'u':
- case 'i':
- if (*(str=skip_ws(str)))
- {
- l=strtol(str,&s,div);
- if (str!=s)
- {
- if (!flag_discard)
- {
- if (flag_long)
- {
- pl=(long *)va_arg(arg_ptr,long*);
- *pl=l;
- }
- else if (flag_half)
- {
- ph=(short *)va_arg(arg_ptr,short*);
- *ph=l;
- }
- else
- {
- pi=(int *)va_arg(arg_ptr,int*);
- *pi=l;
- }
- ++n;
- }
- str=s;
- }
- else
- return n;
- }
- break;
-
-#ifdef WANT_FLOATING_POINT_IN_SCANF
- case 'e':
- case 'E':
- case 'f':
- case 'g':
- if (*(str=skip_ws(str)))
- {
- d=strtod(str,&s);
- if (str!=s)
- {
- if (!flag_discard)
- {
- if (flag_long)
- {
- pd=(double *)va_arg(arg_ptr,double*);
- *pd=d;
- }
- else
- {
- pf=(float *)va_arg(arg_ptr,float*);
- *pf=d;
- }
- ++n;
- }
- str=s;
- }
- else
- return n;
- }
- break;
-#endif
-
- case 'c':
- if (!flag_discard)
- {
- s=(char *)va_arg(arg_ptr,char*);
- ++n;
- }
- if (!flag_width) width=1;
- while (width && *str)
- {
- if (!flag_discard) *(s++)=*(str);
- ++str;
- --width;
- }
- break;
-
- case 's':
- if (!flag_discard)
- {
- s=(char *)va_arg(arg_ptr,char*);
- ++n;
- }
- if (*(str=skip_ws(str)))
- {
- while (width && (!isspace(*str)))
- {
- if (!flag_discard) *(s++)=*(str);
- if (!*str) break;
- ++str;
- --width;
- }
- *s=0;
- }
- break;
-
-#ifdef WANT_CHARACTER_CLASSES_IN_SCANF
- case '[':
- {
- char cset[256];
- int flag_not=0;
- int flag_dash=0;
- memset(cset,0,sizeof(cset));
- ch=*format++;
-
- /* first char specials */
- if (ch=='^')
- {
- flag_not=1;
- ch=*format++;
- }
- if ((ch=='-')||(ch==']'))
- {
- cset[ch]=1;
- ch=*format++;
- }
-
- /* almost all non special chars */
- for (;(*format) && (*format!=']');++format) {
- if (flag_dash)
- {
- register unsigned char tmp=*format;
- for (;ch<=tmp;++ch) cset[ch]=1;
- flag_dash=0;
- ch=*(++format);
- }
- else if (*format=='-') flag_dash=1;
- else
- {
- cset[ch]=1;
- ch=*format;
- }
- }
-
- /* last char specials */
- if (flag_dash) cset['-']=1;
- else cset[ch]=1;
-
- /* like %c or %s */
- if (!flag_discard)
- {
- s=(char *)va_arg(arg_ptr,char*);
- ++n;
- }
- while (width && (cset[(unsigned char)(*str)]-flag_not))
- {
- if (!flag_discard) *(s++)=*(str);
- if (!*str) break;
- ++str;
- --width;
- }
- }
- break;
-#endif
- }
- break;
-
- default:
- if (prevfmt<format) {
- while (prevfmt<format) {
- if (*str!=*prevfmt) return n;
- ++str; ++prevfmt;
- }
- } else
- if (*(str++)!=ch) return n;
- break;
- }
- }
- return n;
+ struct str_data fdat = { (unsigned char*)str };
+ struct arg_scanf farg = { (void*)&fdat, (int(*)(void*))sgetc, (int(*)(int,void*))sputc };
+ return __v_scanf(&farg,format,arg_ptr);
}
diff --git a/mdk-stage1/dietlibc/libcruft/dnscruft.c b/mdk-stage1/dietlibc/libcruft/dnscruft.c
index d7a0efa50..bd8bee79a 100644
--- a/mdk-stage1/dietlibc/libcruft/dnscruft.c
+++ b/mdk-stage1/dietlibc/libcruft/dnscruft.c
@@ -7,51 +7,100 @@
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
+#include <resolv.h>
+#include <net/if.h>
+#include "dietfeatures.h"
int __dns_fd=-1;
+#ifdef WANT_IPV6_DNS
+int __dns_fd6=-1;
+#endif
-void __dns_make_fd() {
+/* the ad-hoc internal API from hell ;-) */
+void __dns_make_fd(void);
+void __dns_make_fd6(void);
+void __dns_readstartfiles(void);
+int __dns_decodename(unsigned char *packet,unsigned int offset,unsigned char *dest,
+ unsigned int maxlen,unsigned char* behindpacket);
+
+void __dns_make_fd(void) {
int tmp;
struct sockaddr_in si;
- if (__dns_fd>0) return;
+ if (__dns_fd>=0) return;
tmp=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
- if (tmp<0) {
- perror("__dns_make_fd!socket");
- return;
- }
+ if (tmp<0) return;
si.sin_family=AF_INET;
si.sin_port=0;
si.sin_addr.s_addr=INADDR_ANY;
- if (bind(tmp,(struct sockaddr*)&si,sizeof(si))) {
- perror("__dns_make_fd!bind");
- return;
- }
+ if (bind(tmp,(struct sockaddr*)&si,sizeof(si))) return;
__dns_fd=tmp;
}
-int __dns_servers=0;
-struct sockaddr __dns_server_ips[8];
+#ifdef WANT_IPV6_DNS
+void __dns_make_fd6(void) {
+ int tmp;
+ struct sockaddr_in6 si;
+ if (__dns_fd6>=0) return;
+ tmp=socket(PF_INET6,SOCK_DGRAM,IPPROTO_UDP);
+ if (tmp<0) return;
+ si.sin6_family=AF_INET6;
+ si.sin6_port=0;
+ memset(&si.sin6_addr,0,16);
+ if (bind(tmp,(struct sockaddr*)&si,sizeof(si))) return;
+ __dns_fd6=tmp;
+}
+#endif
-int __dns_search=0;
+static int parsesockaddr(const char* c,void* x) {
+ struct sockaddr_in to;
+ if (inet_aton(c,&to.sin_addr)) {
+ to.sin_port=htons(53);
+ to.sin_family=AF_INET;
+ memmove(x,&to,sizeof(struct sockaddr_in_pad));
+ return 1;
+#ifdef WANT_IPV6_DNS
+ } else {
+ struct sockaddr_in6 to6;
+ char* d=strchr(c,'%');
+ to6.sin6_flowinfo=to6.sin6_scope_id=0;
+ if (d)
+ to6.sin6_scope_id=if_nametoindex(d+1);
+ if (inet_pton(AF_INET6,c,&to6.sin6_addr)) {
+ to6.sin6_port=htons(53);
+ to6.sin6_family=AF_INET6;
+ memmove(x,&to6,sizeof(struct sockaddr_in_pad));
+ return 1;
+ }
+#endif
+ }
+ return 0;
+}
+
+#ifdef WANT_FULL_RESOLV_CONF
+int __dns_search;
char *__dns_domains[8];
+#endif
-void __dns_readstartfiles() {
+void __dns_readstartfiles(void) {
int fd;
- char *buf=alloca(4096);
+ char __buf[4096];
+ char *buf=__buf;
int len;
- if (__dns_servers>0) return;
+ if (_res.nscount>0) return;
{
struct sockaddr_in to;
+#ifdef WANT_IPV6_DNS
+ struct sockaddr_in6 to6;
+#endif
char *cacheip=getenv("DNSCACHEIP");
- if (cacheip) {
- to.sin_port=htons(53);
- to.sin_family=AF_INET;
- if (inet_aton(cacheip,&to.sin_addr)) {
- memmove(__dns_server_ips,&to,sizeof(struct sockaddr));
- ++__dns_servers;
- }
- }
+#ifdef WANT_FULL_RESOLV_CONF
+ __dns_search=0;
+#endif
+ if (cacheip)
+ if (parsesockaddr(cacheip,_res.nsaddr_list))
+ ++_res.nscount;
}
+ _res.options=RES_RECURSE;
if ((fd=open("/etc/resolv.conf",O_RDONLY))<0) return;
len=read(fd,buf,4096);
close(fd);
@@ -65,21 +114,35 @@ void __dns_readstartfiles() {
{
char *tmp=buf;
struct sockaddr_in i;
+ char save;
while (buf<last && !isspace(*buf)) ++buf;
if (buf>=last) break;
+ save=*buf;
*buf=0;
- if (inet_aton(tmp,&i.sin_addr)) {
- i.sin_family=AF_INET;
- i.sin_port=htons(53);
- memmove(&__dns_server_ips[__dns_servers],&i,sizeof(struct sockaddr));
- if (__dns_servers<8) ++__dns_servers;
- }
+ if (parsesockaddr(tmp,&_res.nsaddr_list[_res.nscount]))
+ if (_res.nscount<MAXNS) ++_res.nscount;
+ *buf=save;
}
}
}
- if (!strncmp(buf,"search",6) || !strncmp(buf,"domain",6)) {
+#ifdef WANT_FULL_RESOLV_CONF
+ else if (!strncmp(buf,"search",6) || !strncmp(buf,"domain",6)) {
buf+=6;
+ while (buf<last && *buf!='\n') {
+ char save;
+ while (buf<last && (*buf==',' || isblank(*buf))) ++buf;
+ __dns_domains[__dns_search]=buf;
+ while (buf<last && (*buf=='.' || *buf=='-' || isalnum(*buf))) ++buf;
+ save=*buf;
+ if (buf<last) *buf=0;
+ if (__dns_domains[__dns_search]<buf &&
+ (__dns_domains[__dns_search]=strdup(__dns_domains[__dns_search])))
+ ++__dns_search;
+ if (buf<last) *buf=save;
+ }
+ continue;
}
+#endif
while (buf<last && *buf!='\n') ++buf;
while (buf<last && *buf=='\n') ++buf;
}
@@ -87,21 +150,24 @@ void __dns_readstartfiles() {
}
/* return length of decoded data or -1 */
-int __dns_decodename(unsigned char *packet,int offset,unsigned char *dest,int maxlen) {
+int __dns_decodename(unsigned char *packet,unsigned int offset,unsigned char *dest,
+ unsigned int maxlen,unsigned char* behindpacket) {
unsigned char *tmp;
unsigned char *max=dest+maxlen;
unsigned char *after=packet+offset;
int ok=0;
for (tmp=after; maxlen>0&&*tmp; ) {
+ if (tmp>=behindpacket) return -1;
if ((*tmp>>6)==3) { /* goofy DNS decompression */
unsigned int ofs=((unsigned int)(*tmp&0x3f)<<8)|*(tmp+1);
- if (ofs>=offset) return -1; /* RFC1035: "pointer to a _prior_ occurrance" */
+ if (ofs>=(unsigned int)offset) return -1; /* RFC1035: "pointer to a _prior_ occurrance" */
if (after<tmp+2) after=tmp+2;
tmp=packet+ofs;
ok=0;
} else {
unsigned int duh;
if (dest+*tmp+1>max) return -1;
+ if (tmp+*tmp+1>=behindpacket) return -1;
for (duh=*tmp; duh>0; --duh)
*dest++=*++tmp;
*dest++='.'; ok=1;
diff --git a/mdk-stage1/dietlibc/libcruft/dnscruft2.c b/mdk-stage1/dietlibc/libcruft/dnscruft2.c
index b59207072..d4e132e42 100644
--- a/mdk-stage1/dietlibc/libcruft/dnscruft2.c
+++ b/mdk-stage1/dietlibc/libcruft/dnscruft2.c
@@ -8,178 +8,166 @@
#include <sys/poll.h>
#include <unistd.h>
#include <errno.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+#include "dietfeatures.h"
+#include "dietdns.h"
-#include <stdio.h>
+extern void __dns_readstartfiles(void);
-extern int h_errno;
-
-static char dnspacket[]="\xfe\xfe\001\000\000\001\000\000\000\000\000\000";
-
-extern void __dns_make_fd();
-extern int __dns_fd;
-
-extern int __dns_servers;
-extern struct sockaddr __dns_server_ips[];
-
-extern void __dns_readstartfiles();
-
-extern int __dns_decodename(unsigned char *packet,int offset,unsigned char *dest,int maxlen);
+extern int __dns_decodename(unsigned char *packet,unsigned int offset,unsigned char *dest,
+ unsigned int maxlen,unsigned char* behindpacket);
/* Oh boy, this interface sucks so badly, there are no words for it.
* Not one, not two, but _three_ error signalling methods! (*h_errnop
* nonzero? return value nonzero? *RESULT zero?) The glibc goons
* really outdid themselves with this one. */
+#ifdef WANT_FULL_RESOLV_CONF
+static int __dns_gethostbyx_r_inner(const char* name, struct hostent* result,
+ char *buf, size_t buflen,
+ struct hostent **RESULT, int *h_errnop, int lookfor);
+
+static int __dns_gethostbyx_r_inner(const char* name, struct hostent* result,
+ char *buf, size_t buflen,
+ struct hostent **RESULT, int *h_errnop, int lookfor) {
+#else
int __dns_gethostbyx_r(const char* name, struct hostent* result,
char *buf, size_t buflen,
struct hostent **RESULT, int *h_errnop, int lookfor) {
+#endif
int names,ips;
unsigned char *cur;
unsigned char *max;
- unsigned char packet[512];
- __dns_make_fd();
+ unsigned char inpkg[1500];
+ char* tmp;
+ int size;
if (lookfor==1) {
- result->h_aliases=(char**)(buf+8*4);
result->h_addrtype=AF_INET;
result->h_length=4;
- result->h_addr_list=(char**)buf;
} else {
- result->h_aliases=(char**)(buf+8*16);
result->h_addrtype=AF_INET6;
result->h_length=16;
- result->h_addr_list=(char**)buf;
}
+ result->h_aliases=(char**)(buf+8*sizeof(char*));
+ result->h_addr_list=(char**)buf;
result->h_aliases[0]=0;
cur=buf+16*sizeof(char*);
max=buf+buflen;
names=ips=0;
- memmove(packet,dnspacket,12);
- *(unsigned short*)packet=rand();
+ if ((size=res_query(name,C_IN,lookfor,inpkg,512))<0) {
+invalidpacket:
+ *h_errnop=HOST_NOT_FOUND;
+ return -1;
+ }
{
- unsigned char* x;
- const char* y,* tmp;
- x=packet+12; y=name;
- while (*y) {
- while (*y=='.') ++y;
- for (tmp=y; *tmp && *tmp!='.'; ++tmp) ;
- *x=tmp-y;
- if (!(tmp-y)) break;
- ++x;
- if (x>=packet+510-(tmp-y)) { *h_errnop=ERANGE; return 1; }
- memmove(x,y,tmp-y);
- x+=tmp-y;
- if (!*tmp) {
- *x=0;
- break;
- }
- y=tmp;
- }
- *++x= 0; *++x= lookfor; /* A */
- *++x= 0; *++x= 1; /* IN */
- ++x;
+ tmp=inpkg+12;
{
- int i; /* current server */
- int j; /* timeout count down */
- struct pollfd duh;
- i=0; j=30;
- __dns_readstartfiles();
- duh.fd=__dns_fd;
- duh.events=POLLIN;
- for (j=30; j>0; --j) {
- sendto(__dns_fd,packet,x-packet,0,(struct sockaddr*)&(__dns_server_ips[i]),sizeof(struct sockaddr));
- if (++i > __dns_servers) i=0;
- if (poll(&duh,1,1) == 1) {
- /* read and parse answer */
- unsigned char inpkg[1500];
- /*int len=*/ read(__dns_fd,inpkg,1500);
-#if 0
- {
- int tft=open("duh",0);
- read(tft,inpkg,1500);
- close(tft);
- }
-#endif
- /* header, question, answer, authority, additional */
- if (inpkg[0]!=packet[0] || inpkg[1]!=packet[1]) continue; /* wrong ID */
- if ((inpkg[2]&0xf9) != 0x81) continue; /* not answer */
- if ((inpkg[3]&0x0f) != 0) break; /* error */
- tmp=inpkg+12;
- {
- char name[257];
- unsigned short q=((unsigned short)inpkg[4]<<8)+inpkg[5];
- while (q>0) {
- while (*tmp) tmp+=*tmp+1;
- tmp+=5;
- --q;
- }
- q=((unsigned short)inpkg[6]<<8)+inpkg[7];
- if (q<1) break;
- while (q>0) {
- int decofs=__dns_decodename(inpkg,tmp-(char*)inpkg,name,256);
- if (decofs<0) break;
- tmp=inpkg+decofs;
- --q;
- if (tmp[0]!=0 || tmp[1]!=lookfor || /* TYPE != A */
- tmp[2]!=0 || tmp[3]!=1) { /* CLASS != IN */
- if (tmp[1]==5) { /* CNAME */
- tmp+=10;
- decofs=__dns_decodename(inpkg,tmp-(char*)inpkg,name,256);
- if (decofs<0) break;
- tmp=inpkg+decofs;
- } else
- break;
- continue;
- }
- tmp+=10; /* skip type, class, TTL and length */
- {
- int slen;
- if (lookfor==1 || lookfor==28) /* A or AAAA*/ {
- slen=strlen(name);
- if (cur+slen+8+(lookfor==28?12:0)>=max) { *h_errnop=NO_RECOVERY; return 1; }
- } else if (lookfor==12) /* PTR */ {
- decofs=__dns_decodename(inpkg,tmp-(char*)inpkg,name,256);
- if (decofs<0) break;
- tmp=inpkg+decofs;
- slen=strlen(name);
- } else
- slen=strlen(name);
- strcpy(cur,name);
- if (names==0)
- result->h_name=cur;
- else
- result->h_aliases[names-1]=cur;
- result->h_aliases[names]=0;
- ++names;
+ char Name[257];
+ unsigned short q=((unsigned short)inpkg[4]<<8)+inpkg[5];
+ while (q>0) {
+ if (tmp>(char*)inpkg+size) goto invalidpacket;
+ while (*tmp) { tmp+=*tmp+1; if (tmp>(char*)inpkg+size) goto invalidpacket; }
+ tmp+=5;
+ --q;
+ }
+ if (tmp>(char*)inpkg+size) goto invalidpacket;
+ q=((unsigned short)inpkg[6]<<8)+inpkg[7];
+ if (q<1) goto nodata;
+ while (q>0) {
+ int decofs=__dns_decodename(inpkg,(size_t)(tmp-(char*)inpkg),Name,256,inpkg+size);
+ if (decofs<0) break;
+ tmp=inpkg+decofs;
+ --q;
+ if (tmp[0]!=0 || tmp[1]!=lookfor || /* TYPE != A */
+ tmp[2]!=0 || tmp[3]!=1) { /* CLASS != IN */
+ if (tmp[1]==5) { /* CNAME */
+ tmp+=10;
+ decofs=__dns_decodename(inpkg,(size_t)(tmp-(char*)inpkg),Name,256,inpkg+size);
+ if (decofs<0) break;
+ tmp=inpkg+decofs;
+ } else
+ break;
+ continue;
+ }
+ tmp+=10; /* skip type, class, TTL and length */
+ {
+ int slen;
+ if (lookfor==1 || lookfor==28) /* A or AAAA*/ {
+ slen=strlen(Name);
+ if (cur+slen+8+(lookfor==28?12:0)>=max) { *h_errnop=NO_RECOVERY; return -1; }
+ } else if (lookfor==12) /* PTR */ {
+ decofs=__dns_decodename(inpkg,(size_t)(tmp-(char*)inpkg),Name,256,inpkg+size);
+ if (decofs<0) break;
+ tmp=inpkg+decofs;
+ slen=strlen(Name);
+ } else
+ slen=strlen(Name);
+ strcpy(cur,Name);
+ if (names==0)
+ result->h_name=cur;
+ else
+ result->h_aliases[names-1]=cur;
+ result->h_aliases[names]=0;
+ if (names<8) ++names;
/* cur+=slen+1; */
- cur+=(slen|3)+1;
- result->h_addr_list[ips++] = cur;
- if (lookfor==1) /* A */ {
- *(int*)cur=*(int*)tmp;
- cur+=4;
- result->h_addr_list[ips]=0;
- } else if (lookfor==28) /* AAAA */ {
- {
- int i;
- for (i=0; i<16; ++i) cur[i]=tmp[i];
- }
- cur+=16;
- result->h_addr_list[ips]=0;
- }
- }
-/* puts(name); */
+ cur+=(slen|3)+1;
+ result->h_addr_list[ips++] = cur;
+ if (lookfor==1) /* A */ {
+ *(int*)cur=*(int*)tmp;
+ cur+=4;
+ result->h_addr_list[ips]=0;
+ } else if (lookfor==28) /* AAAA */ {
+ {
+ int k;
+ for (k=0; k<16; ++k) cur[k]=tmp[k];
}
+ cur+=16;
+ result->h_addr_list[ips]=0;
}
-/* printf("%d answers\n",((unsigned short)inpkg[6]<<8)+inpkg[7]);
- printf("ok\n");*/
- *h_errnop=0;
- *RESULT=result;
- return 0;
}
-/*kaputt:*/
+/* puts(Name); */
}
}
}
- return 1;
+ if (!names) {
+nodata:
+ *h_errnop=NO_DATA;
+ return -1;
+ }
+ *h_errnop=0;
+ *RESULT=result;
+ return 0;
+}
+
+#ifdef WANT_FULL_RESOLV_CONF
+extern int __dns_search;
+extern char *__dns_domains[];
+
+int __dns_gethostbyx_r(const char* name, struct hostent* result,
+ char *buf, size_t buflen,
+ struct hostent **RESULT, int *h_errnop, int lookfor) {
+ const char *tmp=name;
+ char Buf[MAXDNAME+1];
+ int res;
+ size_t len=strlen(name);
+ int count=0;
+ __dns_readstartfiles();
+ memmove(Buf,name,len);
+ Buf[len]=Buf[MAXDNAME]=0;
+// printf("appending %d: %p\n",count,__dns_domains[count]);
+ while ((res=__dns_gethostbyx_r_inner(tmp,result,buf,buflen,RESULT,h_errnop,lookfor))) {
+ if (res==-1 && *h_errnop!=HOST_NOT_FOUND) break;
+ if (count==__dns_search) break;
+ Buf[len]='.';
+// printf("appending %d: %p (%s)\n",count,__dns_domains[count],__dns_domains[count]);
+ memccpy(Buf+len+1,__dns_domains[count],0,MAXDNAME-len-1);
+ tmp=Buf;
+ ++count;
+ }
+ return res;
}
+#endif
+
diff --git a/mdk-stage1/dietlibc/libcruft/entlib.c b/mdk-stage1/dietlibc/libcruft/entlib.c
deleted file mode 100644
index f88b3f057..000000000
--- a/mdk-stage1/dietlibc/libcruft/entlib.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * dietlibc/lib/entlib.c - Generic delimited-line parsing library
- *
- * Copyright 2001 Jeff Garzik <jgarzik@mandrakesoft.com>
- *
- * This is a brand new implementation, based on the interface
- * described in man-pages-1.34-1mdk man pages package.
- */
-
-
-#include "entlib.h" /* this is our only include */
-
-
-/*
- * __ent_start
- *
- * Allocates and zeroes the module's state structure,
- * and open a handle to /etc/passwd.
- *
- * Returns -1 on failure and sets errno, or zero for success.
- */
-
-int __ent_start(const char *pathname, struct __ent_state **st_ref)
-{
- struct __ent_state *st;
-
- if (*st_ref)
- return 0;
-
- st = calloc(1, sizeof(*st));
- if (!st) {
- errno = ENOMEM;
- return -1;
- }
-
- st->fd = open(pathname, O_RDONLY);
- if (st->fd == -1) {
- /* errno should have been set by open(2) */
- free(st);
- st = NULL;
- return -1;
- }
-
- *st_ref = st;
- return 0;
-}
-
-
-/*
- * __ent_get_line
- *
- * Eliminates a previous line from the buffer, if any.
- * Then reads in a new line from /etc/passwd, if necessary.
- *
- * Returns -1 on failure, or zero for success.
- */
-
-int __ent_get_line(struct __ent_state *st)
-{
- int rc;
-
- /* overwrite previous line, by shifting the rest
- * of the rest to the front of the buffer
- */
- if (st->bufptr) {
- unsigned int slop = st->buflen - st->bufptr;
- memmove(st->ent_buf, &st->ent_buf[st->bufptr], slop);
- st->bufptr = 0;
- st->buflen = slop;
- st->ent_buf[st->buflen] = 0; /* null terminate */
- }
-
- if (st->buflen == __ENT_BUFSIZ || strchr(st->ent_buf, '\n'))
- return 0;
-
- rc = read(st->fd, &st->ent_buf[st->buflen], __ENT_BUFSIZ - st->buflen);
- if (rc < 0)
- return -1;
-
- st->buflen += rc;
- if (st->buflen == 0)
- return -1;
-
- return 0;
-}
-
-
-/*
- * __ent_split
- *
- * Splits a string into parts based on a delimiter.
- * Stops processing when \n is reached also.
- *
- * Returns -1 on failure, or zero on success.
- */
-
-int __ent_split(struct __ent_state *st, char **parts,
- int n_parts, int delimiter, int require_exact)
-{
- char *s = &st->ent_buf[st->bufptr];
- int idx = 0;
-
- /* empty list */
- if (!*s) {
- if (!require_exact)
- return 0;
- return -1;
- }
-
- /* scan through string, sticking string pointers
- * into parts[] as delimiters are found
- */
- parts[idx++] = s;
- while (*s) {
- st->bufptr++;
- if (*s == '\n') {
- *s = 0; /* null terminate */
- break;
- }
- if (*s == delimiter) {
- *s = 0; /* null terminate */
- /* boundary error: too many delimiters */
- if (idx == n_parts)
- return -1;
- s++;
- parts[idx++] = s;
- } else {
- s++;
- }
- }
-
- if (!require_exact)
- return 0;
- return (n_parts == idx) ? 0 : -1;
-}
-
-
-void __ent_set(struct __ent_state *st)
-{
- if (!st)
- return;
- st->buflen = st->bufptr = 0;
- lseek(st->fd, 0, SEEK_SET);
-}
-
-
-void __ent_end(struct __ent_state *st)
-{
- if (!st)
- return;
- close(st->fd);
- free(st);
-}
diff --git a/mdk-stage1/dietlibc/libcruft/entlib.h b/mdk-stage1/dietlibc/libcruft/entlib.h
deleted file mode 100644
index 2659d542e..000000000
--- a/mdk-stage1/dietlibc/libcruft/entlib.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * dietlibc/lib/entlib.h - Generic delimited-line parsing library header
- *
- * Copyright 2001 Jeff Garzik <jgarzik@mandrakesoft.com>
- *
- * This is a brand new implementation, based on the interface
- * described in man-pages-1.34-1mdk man pages package.
- */
-
-#ifndef __ENTLIB_H
-#define __ENTLIB_H
-
-#include <sys/types.h> /* for open(2), lseek(2) */
-#include <sys/stat.h> /* for open(2) */
-#include <fcntl.h> /* for open(2) */
-#include <unistd.h> /* for close(2), lseek(2) */
-#include <stdlib.h> /* for calloc(3), free(3) */
-#include <errno.h> /* for errno */
-#include <string.h> /* for memmove(3) */
-#include <stdlib.h> /* for atoi(3) */
-#include <paths.h> /* for the file locations */
-
-#include <pwd.h> /* for struct passwd */
-#include <grp.h> /* for struct group */
-#include <shadow.h> /* for struct spwd */
-
-/* should be a multiple of 64 to create decent alignment */
-#define __ENT_BUFSIZ (64 * 2)
-#define __ENT_RAW_BUFSIZ (__ENT_BUFSIZ + 2) /* some overlap required */
-
-struct __ent_state {
- char ent_buf[__ENT_RAW_BUFSIZ]; /* raw file data buffer */
- unsigned int buflen; /* amount of valid data in ent_buf */
- unsigned int bufptr; /* next valid position in ent_buf */
- int fd; /* /etc/passwd file descriptor */
-};
-
-extern int __ent_start(const char *pathname, struct __ent_state **st_ref);
-extern int __ent_get_line(struct __ent_state *st);
-extern int __ent_split(struct __ent_state *st, char **parts, int n_parts, int delimiter, int require_exact);
-extern void __ent_set(struct __ent_state *st);
-extern void __ent_end(struct __ent_state *st);
-
-#endif /* __ENTLIB_H */
diff --git a/mdk-stage1/dietlibc/libcruft/getgrgid.c b/mdk-stage1/dietlibc/libcruft/getgrgid.c
index 0c223056c..c0daac5e0 100644
--- a/mdk-stage1/dietlibc/libcruft/getgrgid.c
+++ b/mdk-stage1/dietlibc/libcruft/getgrgid.c
@@ -1,14 +1,11 @@
#include <grp.h>
#include <string.h>
-#include <stdlib.h>
+
+extern struct group __group_pw;
+extern char __group_buf[1000];
struct group *getgrgid(gid_t gid) {
struct group *tmp;
- setgrent();
- for (;;) {
- tmp=getgrent();
- if (!tmp) return 0;
- if (tmp->gr_gid == gid)
- return tmp;
- }
+ getgrgid_r(gid,&__group_pw,__group_buf,sizeof(__group_buf),&tmp);
+ return tmp;
}
diff --git a/mdk-stage1/dietlibc/libcruft/getgrnam.c b/mdk-stage1/dietlibc/libcruft/getgrnam.c
index 1bdbb42a8..2664ab3f6 100644
--- a/mdk-stage1/dietlibc/libcruft/getgrnam.c
+++ b/mdk-stage1/dietlibc/libcruft/getgrnam.c
@@ -1,14 +1,11 @@
#include <grp.h>
#include <string.h>
-#include <stdlib.h>
+
+extern struct group __group_pw;
+extern char __group_buf[1000];
struct group *getgrnam(const char* name) {
struct group *tmp;
- setgrent();
- for (;;) {
- tmp=getgrent();
- if (!tmp) return 0;
- if (!strcmp(tmp->gr_name,name))
- return tmp;
- }
+ getgrnam_r(name,&__group_pw,__group_buf,sizeof(__group_buf),&tmp);
+ return tmp;
}
diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyaddr.c b/mdk-stage1/dietlibc/libcruft/gethostbyaddr.c
index a4207d44d..74828df56 100644
--- a/mdk-stage1/dietlibc/libcruft/gethostbyaddr.c
+++ b/mdk-stage1/dietlibc/libcruft/gethostbyaddr.c
@@ -5,34 +5,31 @@
#include <netdb.h>
#include <stdlib.h>
#include <arpa/inet.h>
-#include <sys/poll.h>
#include <unistd.h>
#include <errno.h>
+#include "dietwarning.h"
-extern int h_errno;
+static const int hostentsize=((sizeof(struct hostent)+15)&(-16));
+
+extern size_t __dns_buflen;
+extern char* __dns_buf;
+extern void __dns_makebuf(size_t x);
struct hostent* gethostbyaddr(const void *addr, socklen_t len, int type) {
- static struct hostent hostbuf;
+ struct hostent *hostbuf;
struct hostent *hp;
- size_t hstbuflen;
- char *tmphstbuf;
int res;
- int herr;
-
- hstbuflen = 1024;
- /* Allocate buffer, remember to free it to avoid a memory leakage. */
- tmphstbuf = malloc (hstbuflen);
- while ((res = gethostbyaddr_r (addr, len, type, &hostbuf, tmphstbuf, hstbuflen,
- &hp, &herr)) == ERANGE)
- {
- /* Enlarge the buffer. */
- hstbuflen *= 2;
- tmphstbuf = realloc (tmphstbuf, hstbuflen);
- }
- /* Check for errors. */
- if (res || hp == NULL)
- return NULL;
+ __dns_buflen=512;
+ do {
+ __dns_makebuf(__dns_buflen*2); if (!__dns_buf) return 0;
+ hostbuf=(struct hostent*)__dns_buf;
+ } while ((res = gethostbyaddr_r (addr, len, type, hostbuf,
+ __dns_buf+hostentsize,
+ __dns_buflen-hostentsize, &hp,
+ &h_errno)) == ERANGE);
+ if (res) hp=0;
return hp;
}
+link_warning("gethostbyaddr","warning: gethostbyaddr() leaks memory. Use gethostbyaddr_r instead!")
diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyaddr_r.c b/mdk-stage1/dietlibc/libcruft/gethostbyaddr_r.c
index 37174ab13..d18053c45 100644
--- a/mdk-stage1/dietlibc/libcruft/gethostbyaddr_r.c
+++ b/mdk-stage1/dietlibc/libcruft/gethostbyaddr_r.c
@@ -5,15 +5,10 @@
#include <netdb.h>
#include <stdlib.h>
#include <arpa/inet.h>
-#include <sys/poll.h>
#include <unistd.h>
#include <errno.h>
-
-#include <stdio.h>
-
-extern int __dns_gethostbyx_r(const char* name, struct hostent* result,
- char *buf, size_t buflen,
- struct hostent **RESULT, int *h_errnop, int lookfor);
+#include "dietfeatures.h"
+#include "dietdns.h"
static int i2a(char* dest,unsigned int x) {
register unsigned int tmp=x;
@@ -24,6 +19,10 @@ static int i2a(char* dest,unsigned int x) {
return len+1;
}
+static char hexdigit(char c) {
+ return c>9?c-10+'a':c+'0';
+}
+
/* Oh boy, this interface sucks so badly, there are no words for it.
* Not one, not two, but _three_ error signalling methods! (*h_errnop
* nonzero? return value nonzero? *RESULT zero?) The glibc goons
@@ -31,21 +30,55 @@ static int i2a(char* dest,unsigned int x) {
int gethostbyaddr_r(const char* addr, size_t length, int format,
struct hostent* result, char *buf, size_t buflen,
struct hostent **RESULT, int *h_errnop) {
+ char tmpbuf[100];
+ char* tmp;
+ int res;
+ (void)length; /* shut gcc up about unused length. The length is implicit with format */
+#ifdef WANT_ETC_HOSTS
+ {
+ struct hostent* r;
+ while ((r=gethostent_r(buf,buflen))) {
+ if (r->h_addrtype==format && !memcmp(r->h_addr_list[0],addr,r->h_length)) { /* found it! */
+ memmove(result,r,sizeof(struct hostent));
+ *RESULT=result;
+ *h_errnop=0;
+ return 0;
+ }
+ }
+ endhostent();
+ }
+#endif
if (format==AF_INET) {
- char tmpbuf[50];
- char *tmp;
- int res;
tmp=tmpbuf+i2a(tmpbuf,(unsigned char)addr[3]); *tmp++='.';
tmp+=i2a(tmp,(unsigned char)addr[2]); *tmp++='.';
tmp+=i2a(tmp,(unsigned char)addr[1]); *tmp++='.';
tmp+=i2a(tmp,(unsigned char)addr[0]); strcpy(tmp,".in-addr.arpa");
- res= __dns_gethostbyx_r(tmpbuf,result,buf+4,buflen-4,RESULT,h_errnop,12); /* 12 == ns_t_ptr */
- if (res==0) {
- result->h_addr_list[0]=buf;
- result->h_addr_list[1]=buf;
- *(int*)buf=*(int*)addr;
+ } else if (format==AF_INET6) {
+ int i;
+ tmp=tmpbuf;
+ for (i=15; i>=0; --i) {
+ tmp[0]=hexdigit(addr[i]&0xf);
+ tmp[1]='.';
+ tmp[2]=hexdigit((addr[i]>>4)&0xf);
+ tmp[3]='.';
+ tmp+=4;
+ }
+ strcpy(tmp,".ip6.int");
+ } else return 1;
+ if (buflen<sizeof(struct hostent)+16) {
+ errno=ENOMEM;
+ *h_errnop=NO_RECOVERY;
+ return 1;
+ }
+ res= __dns_gethostbyx_r(tmpbuf,result,buf+16,buflen-16,RESULT,h_errnop,12); /* 12 == ns_t_ptr */
+ if (res==0) {
+ if (format==AF_INET) {
+ result->h_length=4;
+ result->h_addrtype=format;
}
- return res;
+ memcpy(buf,addr,result->h_length);
+ result->h_addr_list[0]=buf;
+ result->h_addr_list[1]=0;
}
- return 1;
+ return res;
}
diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyname.c b/mdk-stage1/dietlibc/libcruft/gethostbyname.c
index 5db5bf3c5..b4849be96 100644
--- a/mdk-stage1/dietlibc/libcruft/gethostbyname.c
+++ b/mdk-stage1/dietlibc/libcruft/gethostbyname.c
@@ -5,35 +5,30 @@
#include <netdb.h>
#include <stdlib.h>
#include <arpa/inet.h>
-#include <sys/poll.h>
#include <unistd.h>
#include <errno.h>
+#include "dietwarning.h"
-extern int h_errno;
+static const int hostentsize=((sizeof(struct hostent)+15)&(-16));
-struct hostent* gethostbyname (const char *host)
-{
- static struct hostent hostbuf;
+extern size_t __dns_buflen;
+extern char* __dns_buf;
+extern void __dns_makebuf(size_t x);
+
+struct hostent* gethostbyname (const char *host) {
+ struct hostent *hostbuf;
struct hostent *hp;
- size_t hstbuflen;
- char *tmphstbuf;
int res;
- int herr;
-
- hstbuflen = 1024;
- /* Allocate buffer, remember to free it to avoid a memory leakage. */
- tmphstbuf = malloc (hstbuflen);
- while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen,
- &hp, &herr)) == ERANGE)
- {
- /* Enlarge the buffer. */
- hstbuflen *= 2;
- tmphstbuf = realloc (tmphstbuf, hstbuflen);
- }
- /* Check for errors. */
- if (res || hp == NULL)
- return NULL;
+ __dns_buflen=512;
+ do {
+ __dns_makebuf(__dns_buflen*2); if (!__dns_buf) return 0;
+ hostbuf=(struct hostent*)__dns_buf;
+ } while ((res = gethostbyname_r (host, hostbuf, __dns_buf+hostentsize,
+ __dns_buflen-hostentsize, &hp,
+ &h_errno)) == ERANGE);
+ if (res) hp=0;
return hp;
}
+link_warning("gethostbyname","warning: gethostbyname() leaks memory. Use gethostbyname_r instead!")
diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyname2.c b/mdk-stage1/dietlibc/libcruft/gethostbyname2.c
index 3d8296616..1ca140dbe 100644
--- a/mdk-stage1/dietlibc/libcruft/gethostbyname2.c
+++ b/mdk-stage1/dietlibc/libcruft/gethostbyname2.c
@@ -1,4 +1,3 @@
-
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -6,35 +5,32 @@
#include <netdb.h>
#include <stdlib.h>
#include <arpa/inet.h>
-#include <sys/poll.h>
#include <unistd.h>
#include <errno.h>
+#include "dietwarning.h"
+
+static const int hostentsize=((sizeof(struct hostent)+15)&(-16));
-extern int h_errno;
+extern size_t __dns_buflen;
+extern char* __dns_buf;
+extern void __dns_makebuf(size_t x);
-struct hostent* gethostbyname2(const char *host,int AF)
-{
- static struct hostent hostbuf;
+struct hostent* gethostbyname2(const char *host,int AF) {
+ struct hostent *hostbuf;
struct hostent *hp;
- size_t hstbuflen;
- char *tmphstbuf;
int res;
int herr;
- hstbuflen = 1024;
- /* Allocate buffer, remember to free it to avoid a memory leakage. */
- tmphstbuf = malloc (hstbuflen);
-
- while ((res = gethostbyname2_r (host, AF,&hostbuf, tmphstbuf, hstbuflen,
- &hp, &herr)) == ERANGE)
- {
- /* Enlarge the buffer. */
- hstbuflen *= 2;
- tmphstbuf = realloc (tmphstbuf, hstbuflen);
- }
- /* Check for errors. */
- if (res || hp == NULL)
- return NULL;
+ __dns_buflen=512;
+ do {
+ __dns_makebuf(__dns_buflen*2); if (!__dns_buf) return 0;
+ hostbuf=(struct hostent*)__dns_buf;
+ } while ((res = gethostbyname2_r (host, AF, hostbuf,
+ __dns_buf+hostentsize,
+ __dns_buflen-hostentsize, &hp,
+ &herr)) == ERANGE);
+ if (res) hp=0;
return hp;
}
+link_warning("gethostbyname2","warning: gethostbyname2() leaks memory. Use gethostbyname2_r instead!")
diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c b/mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c
index b505ccfbc..75da5e320 100644
--- a/mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c
+++ b/mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c
@@ -5,15 +5,10 @@
#include <netdb.h>
#include <stdlib.h>
#include <arpa/inet.h>
-#include <sys/poll.h>
#include <unistd.h>
+#include "dietfeatures.h"
#include <errno.h>
-
-#include <stdio.h>
-
-extern int __dns_gethostbyx_r(const char* name, struct hostent* result,
- char *buf, size_t buflen,
- struct hostent **RESULT, int *h_errnop, int lookfor);
+#include "dietdns.h"
/* Oh boy, this interface sucks so badly, there are no words for it.
* Not one, not two, but _three_ error signalling methods! (*h_errnop
@@ -22,7 +17,7 @@ extern int __dns_gethostbyx_r(const char* name, struct hostent* result,
int gethostbyname2_r(const char* name, int AF, struct hostent* result,
char *buf, size_t buflen,
struct hostent **RESULT, int *h_errnop) {
- int L=strlen(name);
+ size_t L=strlen(name);
int lookfor=0;
switch (AF) {
case AF_INET: lookfor=1; break;
@@ -31,6 +26,30 @@ int gethostbyname2_r(const char* name, int AF, struct hostent* result,
}
result->h_name=buf;
if (buflen<L) { *h_errnop=ERANGE; return 1; }
+#ifdef WANT_ETC_HOSTS
+ {
+ struct hostent* r;
+ while ((r=gethostent_r(buf,buflen))) {
+ if (r->h_addrtype==AF) {
+ int i;
+ if (!strcmp(r->h_name,name)) { /* found it! */
+found:
+ memmove(result,r,sizeof(struct hostent));
+ *RESULT=result;
+ *h_errnop=0;
+ endhostent();
+ return 0;
+ }
+ for (i=0; i<16; ++i) {
+ if (r->h_aliases[i]) {
+ if (!strcmp(r->h_aliases[i],name)) goto found;
+ } else break;
+ }
+ }
+ }
+ endhostent();
+ }
+#endif
strcpy(buf,name);
return __dns_gethostbyx_r(name,result,buf+L,buflen-L,RESULT,h_errnop,lookfor);
}
diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyname_r.c b/mdk-stage1/dietlibc/libcruft/gethostbyname_r.c
index d5a531f0f..d7a713e20 100644
--- a/mdk-stage1/dietlibc/libcruft/gethostbyname_r.c
+++ b/mdk-stage1/dietlibc/libcruft/gethostbyname_r.c
@@ -1,19 +1,15 @@
#include <string.h>
+#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <arpa/inet.h>
-#include <sys/poll.h>
#include <unistd.h>
+#include "dietfeatures.h"
#include <errno.h>
-
-#include <stdio.h>
-
-extern int __dns_gethostbyx_r(const char* name, struct hostent* result,
- char *buf, size_t buflen,
- struct hostent **RESULT, int *h_errnop, int lookfor);
+#include "dietdns.h"
/* Oh boy, this interface sucks so badly, there are no words for it.
* Not one, not two, but _three_ error signalling methods! (*h_errnop
@@ -22,9 +18,51 @@ extern int __dns_gethostbyx_r(const char* name, struct hostent* result,
int gethostbyname_r(const char* name, struct hostent* result,
char *buf, size_t buflen,
struct hostent **RESULT, int *h_errnop) {
- int L=strlen(name);
+ size_t L=strlen(name);
result->h_name=buf;
if (buflen<L) { *h_errnop=ERANGE; return 1; }
strcpy(buf,name);
+#ifdef WANT_INET_ADDR_DNS
+ result->h_addr_list=(char**)(buf+strlen(name)+1);
+ result->h_addr_list+=sizeof(unsigned long)-((unsigned long)(result->h_addr_list)&(sizeof(unsigned long)-1));
+ result->h_addr_list[0]=(char*)&result->h_addr_list[2];
+ if (inet_pton(AF_INET,name,result->h_addr_list[0])) {
+ result->h_addrtype=AF_INET;
+ result->h_length=4;
+commonip:
+ result->h_aliases=result->h_addr_list+2*sizeof(char**);
+ result->h_aliases[0]=0;
+ result->h_addr_list[1]=0;
+ *RESULT=result;
+ *h_errnop=0;
+ return 0;
+ } else if (inet_pton(AF_INET6,name,result->h_addr_list[0])) {
+ result->h_addrtype=AF_INET6;
+ result->h_length=16;
+ goto commonip;
+ }
+#endif
+#ifdef WANT_ETC_HOSTS
+ {
+ struct hostent* r;
+ while ((r=gethostent_r(buf,buflen))) {
+ int i;
+ if (r->h_addrtype==AF_INET && !strcasecmp(r->h_name,name)) { /* found it! */
+found:
+ memmove(result,r,sizeof(struct hostent));
+ *RESULT=result;
+ *h_errnop=0;
+ endhostent();
+ return 0;
+ }
+ for (i=0; i<16; ++i) {
+ if (r->h_aliases[i]) {
+ if (!strcasecmp(r->h_aliases[i],name)) goto found;
+ } else break;
+ }
+ }
+ endhostent();
+ }
+#endif
return __dns_gethostbyx_r(name,result,buf+L,buflen-L,RESULT,h_errnop,1);
}
diff --git a/mdk-stage1/dietlibc/libcruft/getlogin.c b/mdk-stage1/dietlibc/libcruft/getlogin.c
index 359f44d9f..844d68c70 100644
--- a/mdk-stage1/dietlibc/libcruft/getlogin.c
+++ b/mdk-stage1/dietlibc/libcruft/getlogin.c
@@ -1,5 +1,6 @@
#include <stdlib.h>
+#include <unistd.h>
-char* getlogin() {
+char* getlogin(void) {
return getenv("LOGNAME");
}
diff --git a/mdk-stage1/dietlibc/libcruft/getpagesize.c b/mdk-stage1/dietlibc/libcruft/getpagesize.c
index dea4a9693..536d3dcef 100644
--- a/mdk-stage1/dietlibc/libcruft/getpagesize.c
+++ b/mdk-stage1/dietlibc/libcruft/getpagesize.c
@@ -6,6 +6,7 @@
#define PAGE_SIZE 4096
#endif
+size_t __libc_getpagesize(void);
size_t __libc_getpagesize(void) {
return PAGE_SIZE;
}
diff --git a/mdk-stage1/dietlibc/libcruft/getpass.c b/mdk-stage1/dietlibc/libcruft/getpass.c
index 3da7cd2b3..2183284b3 100644
--- a/mdk-stage1/dietlibc/libcruft/getpass.c
+++ b/mdk-stage1/dietlibc/libcruft/getpass.c
@@ -3,30 +3,42 @@
#include <limits.h>
#include <fcntl.h>
#include <string.h>
+#include <errno.h>
+
+static inline int _tcsetattr(int fd,int optional,struct termios *termios_p) {
+ int tmp;
+ for (;;) {
+ if ((tmp=tcsetattr(fd,optional,termios_p)))
+ if (errno==EINTR) continue;
+ break;
+ }
+ return tmp;
+}
char *getpass(const char* prompt) {
struct termios old,tmp;
int out,in=open("/dev/tty",O_RDWR);
int doclose=(in>=0);
static char buf[PASS_MAX];
- if (doclose) { in=0; out=2; } else out=in;
+ if (!doclose) { in=0; out=2; } else out=in;
if (!tcgetattr(in,&old)) {
tmp=old;
tmp.c_lflag &= ~(ECHO|ISIG);
- tcsetattr(in,TCSAFLUSH,&tmp);
+ _tcsetattr(in,TCSAFLUSH,&tmp);
}
write(out,prompt,strlen(prompt));
{
int nread,ofs=0;
for (;;) {
- nread=read(in,buf+ofs,PASS_MAX-ofs);
- if (nread<0) {
+ nread=read(in,buf+ofs,1);
+ if (nread<=0) {
+ if (errno==EINTR) continue;
buf[ofs]=0;
break;
} else if (ofs+nread>=PASS_MAX) {
buf[PASS_MAX-1]=0;
break;
- } else if (buf[ofs+nread-1]=='\n') {
+ } else if (buf[ofs]=='\n') {
buf[ofs+nread-1]=0;
break;
}
@@ -34,7 +46,7 @@ char *getpass(const char* prompt) {
}
write(out,"\n",1);
}
- tcsetattr(in,TCSAFLUSH,&old);
+ _tcsetattr(in,TCSAFLUSH,&old);
if (doclose) close(in);
return buf;
}
diff --git a/mdk-stage1/dietlibc/libcruft/getpwnam.c b/mdk-stage1/dietlibc/libcruft/getpwnam.c
index 53aae74d1..d2e204150 100644
--- a/mdk-stage1/dietlibc/libcruft/getpwnam.c
+++ b/mdk-stage1/dietlibc/libcruft/getpwnam.c
@@ -1,14 +1,11 @@
#include <pwd.h>
#include <string.h>
-#include <stdlib.h>
-struct passwd *getpwnam(const char * name) {
+extern struct passwd __passwd_pw;
+extern char __passwd_buf[1000];
+
+struct passwd *getpwnam(const char* name) {
struct passwd *tmp;
- setpwent();
- for (;;) {
- tmp=getpwent();
- if (!tmp) return 0;
- if (!strcmp(tmp->pw_name,name))
- return tmp;
- }
+ getpwnam_r(name,&__passwd_pw,__passwd_buf,sizeof(__passwd_buf),&tmp);
+ return tmp;
}
diff --git a/mdk-stage1/dietlibc/libcruft/getpwuid.c b/mdk-stage1/dietlibc/libcruft/getpwuid.c
index eef14e6e8..bca6a8a0c 100644
--- a/mdk-stage1/dietlibc/libcruft/getpwuid.c
+++ b/mdk-stage1/dietlibc/libcruft/getpwuid.c
@@ -2,13 +2,11 @@
#include <string.h>
#include <stdlib.h>
+extern struct passwd __passwd_pw;
+extern char __passwd_buf[1000];
+
struct passwd *getpwuid(uid_t uid) {
struct passwd *tmp;
- setpwent();
- for (;;) {
- tmp=getpwent();
- if (!tmp) return 0;
- if (tmp->pw_uid==uid)
- return tmp;
- }
+ getpwuid_r(uid,&__passwd_pw,__passwd_buf,sizeof(__passwd_buf),&tmp);
+ return tmp;
}
diff --git a/mdk-stage1/dietlibc/libcruft/getspnam.c b/mdk-stage1/dietlibc/libcruft/getspnam.c
index e6573345d..a4eafbfb2 100644
--- a/mdk-stage1/dietlibc/libcruft/getspnam.c
+++ b/mdk-stage1/dietlibc/libcruft/getspnam.c
@@ -1,14 +1,11 @@
#include <shadow.h>
#include <string.h>
-#include <stdlib.h>
-struct spwd *getspnam(const char * name) {
+extern struct spwd __shadow_pw;
+extern char __shadow_buf[1000];
+
+struct spwd *getspnam(const char* name) {
struct spwd *tmp;
- setspent();
- for (;;) {
- tmp=getspent();
- if (!tmp) return 0;
- if (!strcmp(tmp->sp_namp,name))
- return tmp;
- }
+ getspnam_r(name,&__shadow_pw,__shadow_buf,sizeof(__shadow_buf),&tmp);
+ return tmp;
}
diff --git a/mdk-stage1/dietlibc/libcruft/grent.c b/mdk-stage1/dietlibc/libcruft/grent.c
deleted file mode 100644
index 0357657de..000000000
--- a/mdk-stage1/dietlibc/libcruft/grent.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * dietlibc/lib/grent.c - getgrent(3)/setgrent(3)/endgrent(3) implementation
- *
- * Copyright 2001 Jeff Garzik <jgarzik@mandrakesoft.com>
- *
- * This is a brand new implementation, based on the interface
- * described in man-pages-1.34-1mdk man pages package.
- */
-
-
-#include "entlib.h" /* this is our only include */
-
-#define MAX_GROUP_MEMBERS 16 /* matches Linux kernel task struct */
-
-static struct __ent_state *st = NULL; /* state held across calls */
-static char *gr_mem[MAX_GROUP_MEMBERS+1];
-static struct group gr;
-
-struct group *getgrent(void)
-{
- char *parts[4], *grouplist;
- unsigned int bufptr;
-
- if (__ent_start(_PATH_GROUP, &st))
- return NULL;
- if (__ent_get_line(st))
- goto err_out;
- if (__ent_split(st, parts, 4, ':', 1) < 0)
- goto err_out;
-
- gr.gr_name = parts[0];
- gr.gr_passwd = parts[1];
- gr.gr_gid = (gid_t) atoi(parts[2]);
- grouplist = parts[3];
-
- memset(&gr_mem, 0, sizeof(gr_mem));
- gr.gr_mem = gr_mem;
-
- /* rewind bufptr to beginning of group list */
- bufptr = st->bufptr;
- st->bufptr = (int) (grouplist - st->ent_buf);
-
- __ent_split(st, gr_mem, MAX_GROUP_MEMBERS, ',', 0);
- st->bufptr = bufptr;
-
- return &gr;
-
-err_out:
- st->buflen = st->bufptr = 0; /* invalidate file data buffer */
- return NULL;
-}
-
-void setgrent(void) { __ent_set(st); }
-void endgrent(void) { __ent_end(st); st=NULL; }
diff --git a/mdk-stage1/dietlibc/libcruft/herrno_location.c b/mdk-stage1/dietlibc/libcruft/herrno_location.c
index 203f73d4b..5908fe212 100644
--- a/mdk-stage1/dietlibc/libcruft/herrno_location.c
+++ b/mdk-stage1/dietlibc/libcruft/herrno_location.c
@@ -1,5 +1,8 @@
-extern int h_errno;
+#include <errno.h>
+#include <resolv.h>
+#include <netdb.h>
-int *__h_errno_location() { return &h_errno; }
+int *__h_errno_location(void);
+int *__h_errno_location(void) { return &h_errno; }
-int *h_errno_location() __attribute__((weak,alias("__h_errno_location")));
+int *h_errno_location(void) __attribute__((weak,alias("__h_errno_location")));
diff --git a/mdk-stage1/dietlibc/libcruft/inet_aton.c b/mdk-stage1/dietlibc/libcruft/inet_aton.c
index ac7d9d007..01adb341e 100644
--- a/mdk-stage1/dietlibc/libcruft/inet_aton.c
+++ b/mdk-stage1/dietlibc/libcruft/inet_aton.c
@@ -24,7 +24,7 @@ int inet_aton(const char *cp, struct in_addr *inp) {
char *tmp=(char*)cp;
for (i=24; ;) {
long j;
- j=strtol(tmp,&tmp,0);
+ j=strtoul(tmp,&tmp,0);
if (*tmp==0) {
ip|=j;
break;
diff --git a/mdk-stage1/dietlibc/libcruft/inet_ntoa.c b/mdk-stage1/dietlibc/libcruft/inet_ntoa.c
index f8c975f7a..632d81424 100644
--- a/mdk-stage1/dietlibc/libcruft/inet_ntoa.c
+++ b/mdk-stage1/dietlibc/libcruft/inet_ntoa.c
@@ -2,8 +2,6 @@
#include <netinet/in.h>
#include <arpa/inet.h>
-extern char *inet_ntoa_r(struct in_addr in,char* buf);
-
char *inet_ntoa(struct in_addr in) {
static char buf[20];
return inet_ntoa_r(in,buf);
diff --git a/mdk-stage1/dietlibc/libcruft/inet_ntop.c b/mdk-stage1/dietlibc/libcruft/inet_ntop.c
index 77c47f239..81bee0a90 100644
--- a/mdk-stage1/dietlibc/libcruft/inet_ntop.c
+++ b/mdk-stage1/dietlibc/libcruft/inet_ntop.c
@@ -1,6 +1,6 @@
+#include <sys/socket.h>
#include <arpa/inet.h>
-
-extern char *inet_ntoa_r(struct in_addr in,char* buf);
+#include <string.h>
static const unsigned char V4mappedprefix[12]={0,0,0,0,0,0,0,0,0,0,0xff,0xff};
@@ -17,8 +17,7 @@ static int fmt_xlong(char* s,unsigned int i) {
return s-bak+1;
}
-unsigned int fmt_ip6(char *s,const char ip[16])
-{
+static unsigned int fmt_ip6(char *s,const char ip[16]) {
unsigned int len;
unsigned int i;
unsigned int temp;
@@ -53,13 +52,16 @@ unsigned int fmt_ip6(char *s,const char ip[16])
}
}
}
+ if (compressing) {
+ *s++=':'; ++len;
+ }
*s=0;
return len;
}
const char* inet_ntop(int AF, const void *CP, char *BUF, size_t LEN) {
char buf[100];
- int len;
+ size_t len;
if (AF==AF_INET) {
inet_ntoa_r(*(struct in_addr*)CP,buf);
len=strlen(buf);
diff --git a/mdk-stage1/dietlibc/libcruft/inet_pton.c b/mdk-stage1/dietlibc/libcruft/inet_pton.c
index d5c17509c..a62785d5f 100644
--- a/mdk-stage1/dietlibc/libcruft/inet_pton.c
+++ b/mdk-stage1/dietlibc/libcruft/inet_pton.c
@@ -1,6 +1,9 @@
#include <stdlib.h>
+#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
+#include <string.h>
+#include "dietfeatures.h"
static unsigned int scan_ip6(const char *s,char ip[16])
{
@@ -9,8 +12,8 @@ static unsigned int scan_ip6(const char *s,char ip[16])
unsigned long u;
char suffix[16];
- int prefixlen=0;
- int suffixlen=0;
+ unsigned int prefixlen=0;
+ unsigned int suffixlen=0;
for (i=0; i<16; i++) ip[i]=0;
@@ -26,7 +29,7 @@ static unsigned int scan_ip6(const char *s,char ip[16])
}
{
char *tmp;
- u=strtol(s,&tmp,16);
+ u=strtoul(s,&tmp,16);
i=tmp-s;
}
@@ -60,7 +63,7 @@ static unsigned int scan_ip6(const char *s,char ip[16])
i=tmp-s;
}
if (!i) {
- len--;
+ if (*s) len--;
break;
}
if (suffixlen+prefixlen<=12 && s[i]=='.') {
@@ -83,12 +86,14 @@ static unsigned int scan_ip6(const char *s,char ip[16])
}
int inet_pton(int AF, const char *CP, void *BUF) {
+ int len;
if (AF==AF_INET) {
if (!inet_aton(CP,(struct in_addr*)BUF))
return 0;
} else if (AF==AF_INET6) {
- if (CP[scan_ip6(CP,BUF)])
- return 0;
+ if (CP[len=scan_ip6(CP,BUF)])
+ if (CP[len]!='%') /* allow "fe80::220:e0ff:fe69:ad92%eth0" */
+ return 0;
} else {
errno=EAFNOSUPPORT;
return -1;
diff --git a/mdk-stage1/dietlibc/libcruft/initgroups.c b/mdk-stage1/dietlibc/libcruft/initgroups.c
index 7d24866e9..932fddfd6 100644
--- a/mdk-stage1/dietlibc/libcruft/initgroups.c
+++ b/mdk-stage1/dietlibc/libcruft/initgroups.c
@@ -3,9 +3,10 @@
#include <string.h>
int initgroups(const char *user, gid_t group) {
- int n=0;
+ int n=1;
gid_t grouplist[32];
struct group *g;
+ grouplist[0]=group;
setgrent();
while ((g=getgrent())) {
char **duh=g->gr_mem;
diff --git a/mdk-stage1/dietlibc/libcruft/mkstemp.c b/mdk-stage1/dietlibc/libcruft/mkstemp.c
index 3b24ecb54..7dc19d4ed 100644
--- a/mdk-stage1/dietlibc/libcruft/mkstemp.c
+++ b/mdk-stage1/dietlibc/libcruft/mkstemp.c
@@ -1,14 +1,21 @@
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
+#include <stdlib.h>
#include <errno.h>
+#include "dietfeatures.h"
+
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW 0
+#endif
int mkstemp(char* template) {
char *tmp=template+strlen(template)-6;
int randfd;
int i,res;
unsigned int random;
- for (i=0; i<6; ++i) if (tmp[i]!='X') { __set_errno(EINVAL); return -1; }
+ if (tmp<template) goto error;
+ for (i=0; i<6; ++i) if (tmp[i]!='X') { error: errno=EINVAL; return -1; }
randfd=open("/dev/urandom",O_RDONLY);
for (;;) {
read(randfd,&random,sizeof(random));
@@ -16,8 +23,9 @@ int mkstemp(char* template) {
int hexdigit=(random>>(i*5))&0x1f;
tmp[i]=hexdigit>9?hexdigit+'a'-10:hexdigit+'0';
}
- res=open(template,O_CREAT|O_RDWR|O_EXCL,0600);
- if (res>=0) return res;
+ res=open(template,O_CREAT|O_RDWR|O_EXCL|O_NOFOLLOW,0600);
+ if (res>=0 || errno!=EEXIST) break;
}
close(randfd);
+ return res;
}
diff --git a/mdk-stage1/dietlibc/libcruft/pwent.c b/mdk-stage1/dietlibc/libcruft/pwent.c
deleted file mode 100644
index 30a8a0957..000000000
--- a/mdk-stage1/dietlibc/libcruft/pwent.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * dietlibc/lib/pwent.c - getpwent(3)/setpwent(3)/endpwent(3) implementation
- *
- * Copyright 2001 Jeff Garzik <jgarzik@mandrakesoft.com>
- *
- * This is a brand new implementation, based on the interface
- * described in man-pages-1.34-1mdk man pages package.
- */
-
-
-#include "entlib.h" /* this is our only include */
-
-static struct __ent_state *st = NULL; /* state held across calls */
-static struct passwd pw;
-
-struct passwd *getpwent(void)
-{
- char *parts[7];
-
- if (__ent_start(_PATH_PASSWD, &st))
- return NULL;
- if (__ent_get_line(st))
- goto err_out;
- if (__ent_split(st, parts, 7, ':', 1) < 0)
- goto err_out;
-
- pw.pw_name = parts[0];
- pw.pw_passwd = parts[1];
- pw.pw_uid = (uid_t) atoi(parts[2]);
- pw.pw_gid = (gid_t) atoi(parts[3]);
- pw.pw_gecos = parts[4];
- pw.pw_dir = parts[5];
- pw.pw_shell = parts[6];
-
- return &pw;
-
-err_out:
- st->buflen = st->bufptr = 0; /* invalidate file data buffer */
- return NULL;
-}
-
-void setpwent(void) { __ent_set(st); }
-void endpwent(void) { __ent_end(st); st=NULL; }
diff --git a/mdk-stage1/dietlibc/libcruft/res_init.c b/mdk-stage1/dietlibc/libcruft/res_init.c
index 9322af298..78baa2b30 100644
--- a/mdk-stage1/dietlibc/libcruft/res_init.c
+++ b/mdk-stage1/dietlibc/libcruft/res_init.c
@@ -1,7 +1,9 @@
-extern int __dns_servers;
+#include <resolv.h>
+
extern void __dns_readstartfiles(void);
int res_init(void) {
- __dns_servers=0;
+ _res.nscount=0;
__dns_readstartfiles();
+ return 0;
}
diff --git a/mdk-stage1/dietlibc/libcruft/spent.c b/mdk-stage1/dietlibc/libcruft/spent.c
deleted file mode 100644
index e4beb81e4..000000000
--- a/mdk-stage1/dietlibc/libcruft/spent.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * dietlibc/lib/spent.c - getspent(3)/setspent(3)/endspent(3) implementation
- *
- * Copyright 2001 Jeff Garzik <jgarzik@mandrakesoft.com>
- *
- * This is a brand new implementation, based on the interface
- * described in man-pages-1.34-1mdk man pages package.
- */
-
-
-#include "entlib.h" /* this is our only include */
-
-static struct __ent_state *st = NULL; /* state held across calls */
-static struct spwd sp;
-
-struct spwd *getspent(void)
-{
- char *parts[9];
-
- if (__ent_start(_PATH_SHADOW, &st))
- return NULL;
- if (__ent_get_line(st))
- goto err_out;
- if (__ent_split(st, parts, 9, ':', 1) < 0)
- goto err_out;
-
- sp.sp_namp = parts[0];
- sp.sp_pwdp = parts[1];
- sp.sp_lstchg = atoi(parts[2]); /* XXX: atol */
- sp.sp_min = atoi(parts[3]);
- sp.sp_max = atoi(parts[4]);
- sp.sp_warn = atoi(parts[5]);
- sp.sp_inact = atoi(parts[6]);
- sp.sp_expire = atoi(parts[7]);
- sp.sp_flag = atoi(parts[8]);
-
- return &sp;
-
-err_out:
- st->buflen = st->bufptr = 0; /* invalidate file data buffer */
- return NULL;
-}
-
-void setspent(void) { __ent_set(st); }
-void endspent(void) { __ent_end(st); st=NULL; }
diff --git a/mdk-stage1/dietlibc/libcrypt/crypt.c b/mdk-stage1/dietlibc/libcrypt/crypt.c
index 933397f5f..3c162d513 100644
--- a/mdk-stage1/dietlibc/libcrypt/crypt.c
+++ b/mdk-stage1/dietlibc/libcrypt/crypt.c
@@ -1,8 +1,9 @@
#include "dietfeatures.h"
#include <unistd.h>
+#include <md5.h>
/* Initial permutation, */
-static char IP[] = {
+static const char IP[] = {
57,49,41,33,25,17, 9, 1,
59,51,43,35,27,19,11, 3,
61,53,45,37,29,21,13, 5,
@@ -14,7 +15,7 @@ static char IP[] = {
};
/* Final permutation, FP = IP^(-1) */
-static char FP[] = {
+static const char FP[] = {
39, 7,47,15,55,23,63,31,
38, 6,46,14,54,22,62,30,
37, 5,45,13,53,21,61,29,
@@ -28,14 +29,14 @@ static char FP[] = {
/* Permuted-choice 1 from the key bits to yield C and D.
* Note that bits 8,16... are left out: They are intended for a parity check.
*/
-static char PC1_C[] = {
+static const char PC1_C[] = {
56,48,40,32,24,16, 8,
0,57,49,41,33,25,17,
9, 1,58,50,42,34,26,
18,10, 2,59,51,43,35
};
-static char PC1_D[] = {
+static const char PC1_D[] = {
62,54,46,38,30,22,14,
6,61,53,45,37,29,21,
13, 5,60,52,44,36,28,
@@ -43,18 +44,18 @@ static char PC1_D[] = {
};
/* Sequence of shifts used for the key schedule. */
-static char shifts[] = { 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 };
+static const char shifts[] = { 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 };
/*
* Permuted-choice 2, to pick out the bits from the CD array that generate
* the key schedule.
*/
-static char PC2_C[] = {
+static const char PC2_C[] = {
13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9,
22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1
};
-static char PC2_D[] = {
+static const char PC2_D[] = {
12, 23, 2, 8, 18, 26, 1, 11, 22, 16, 4, 19,
15, 20, 10, 27, 5, 24, 17, 13, 21, 7, 0, 3
};
@@ -68,7 +69,7 @@ static char KS[16][48];
/* The E bit-selection table. */
static char E[48];
-static char e2[] = {
+static const char e2[] = {
32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,
8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,
@@ -119,7 +120,7 @@ void setkey(const char *key)
/* The 8 selection functions. For some reason, they give a 0-origin index,
* unlike everything else.
*/
-static char S[8][64] = {
+static const char S[8][64] = {
{
14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7,
0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8,
@@ -178,7 +179,7 @@ static char S[8][64] = {
};
/* P is a permutation on the selected combination of the current L and key. */
-static char P[] = {
+static const char P[] = {
15, 6,19,20, 28,11,27,16, 0,14,22,25, 4,17,30, 9,
1, 7,23,13, 31,26, 2, 8, 18,12,29, 5, 21,10, 3,24
};
@@ -192,11 +193,12 @@ static char f[32];
static char preS[48];
/* The payoff: encrypt a block. */
-void encrypt(char block[64], int edflag)
+void encrypt(char block[64],int edflag)
{
int i, ii;
register int t, j, k;
+ (void)edflag;
/* First, permute the bits in the input */
for(j=0; j < 64; j++)
L[j] = block[(int)IP[j]];
@@ -253,7 +255,10 @@ char * crypt(const char *pw, const char *salt)
{
register int i, j, c;
static char block[66], iobuf[16];
-
+#ifdef WANT_CRYPT_MD5
+ if (salt[0]=='$' && salt[1]=='1' && salt[2]=='$')
+ return md5crypt(pw,salt);
+#endif
for(i=0; i < 66; i++)
block[i] = 0;
for(i=0; (c= *pw) && i < 64; pw++) {
@@ -287,7 +292,7 @@ char * crypt(const char *pw, const char *salt)
}
for(i=0; i < 25; i++)
- encrypt(block, 0);
+ encrypt(block,0);
for(i=0; i < 11; i++) {
c = 0;
diff --git a/mdk-stage1/dietlibc/libdl/Makefile b/mdk-stage1/dietlibc/libdl/Makefile
index c0463f887..29164f105 100644
--- a/mdk-stage1/dietlibc/libdl/Makefile
+++ b/mdk-stage1/dietlibc/libdl/Makefile
@@ -1,24 +1,38 @@
# local "test" make file
-SRC = $(wildcard *.c) test/test.c
+CC = gcc
+DCC = diet $(CC)
+
+SRC = $(wildcard *.c) # test/test.c
OBJ = _dl_jump.o $(SRC:.c=.o)
-#CFLAGS = -Wall -O2
-CFLAGS = -g
+#CFLAGS = -Wall -D__OD_CLEAN_ROOM -DNODIETREF -fPIC -g -O
+CFLAGS = -Wall -O2 -D__OD_CLEAN_ROOM -DNODIETREF -fPIC -frerun-loop-opt -fschedule-insns2 $(DEB) # -fomit-frame-pointer
%.o : %.S
- $(HOME)/bin/diet gcc $(CFLAGS) -c -o $@ $^
+ $(DCC) $(CFLAGS) -c -o $@ $^
%.o : %.c
- $(HOME)/bin/diet gcc $(CFLAGS) -c -o $@ $^
+ $(DCC) $(CFLAGS) -c -o $@ $^
+
+it: t.out
+
+a.out: t.out
+ gcc -O -g test/a.c t.out -L/opt/diet/lib-i386 -lc -lgcc -o $@ -Wl,-dynamic-linker=`pwd`/t.out -nostdlib
+
+t.out: _dl_main.o
+ ld -shared -o $@ $? -soname=libdl.so
+
+all: test.out libdl.a
-all: test.out
+libdl.a: $(OBJ)
+ ar cru $@ $^
-test.g: test.c
+test.g: test/test.c
gcc -o $@ $^ -ldl
-test.out: $(OBJ)
- $(HOME)/bin/diet gcc -o $@ $^
+test.out: $(OBJ) test/test.o
+ diet gcc -o $@ $^
clean:
$(RM) *.o *.a *.out *~ # *.so
diff --git a/mdk-stage1/dietlibc/libdl/README b/mdk-stage1/dietlibc/libdl/README
index 5d77bde34..6f1d0e46e 100644
--- a/mdk-stage1/dietlibc/libdl/README
+++ b/mdk-stage1/dietlibc/libdl/README
@@ -1,6 +1,82 @@
-this is the experimental libdl test-pre-pre-alpha code
+this is the experimental libdl
written by Olaf Dreesen
-Shouldn't work yet had some problems with the elf specs...
-and more inconsistencies...
+Fri Nov 15 16:23:28 CET 2002
+
+ fixing the copy-relocation bug.
+
+ TODO as last time.... plus
+ - dlsym with RTLD_NEXT
+
+Wed Nov 6 19:08:00 CET 2002
+
+ Ups.. misunderstood the manual-page of dlopen.
+ now dlopen(0,...) works the way it is described in the susv2, BUT still not
+ complete.
+
+ TODO:
+ - gdb support
+
+ - RTLD_GLOBAL/RTLD_LOCAL
+ at the moment ALL are GLOBAL.
+
+ - open of a shared object ONCE
+ there is no library hard-, symlink detection yet.
+
+ - code for other archs then i386 and arm
+
+
+Fri Sep 13 16:28:42 CEST 2002
+
+ this unified libdl/dynlinker is now the default.
+
+
+Mon Mar 11 19:44:20 CET 2002
+
+ the unified libdl/dynlinker now seems to stand the NORMAL usage so I think
+ it should be tested outside my CLEANROOM :)
+
+ TODO: code for other archs than i386 and arm
+
+
+Thu Nov 1 18:41:36 MET 2001
+
+ ufffff.... now the libdl code can be used in the libdl.so :)
+ Status: it works in my clean room on i386, arm-code started
+
+ TODO: see below :)
+
+
+Wed Jul 4 11:55:00 MEST 2001
+
+ Uwe Ohse pointed to some flaws in my code, I have started to fix them....
+
+ TODO: rebuild the code in a more readable and consistent way.
+ TODO: code for other archs than i386
+
+
+Thu Jun 21 15:32:45 MEST 2001
+
+ It work good enough to make a libdietc.so possible.
+
+ TODO: rebuild the code in a more readable and consistent way.
+ TODO: code for other archs than i386
+
+
+Thu Jun 7 14:10:03 MEST 2001
+
+ Status: test-pre-alpha code
+ the code is now "testable" ...
+ I need a dyn-dietlibc specific ld.so. (in work)
+
+ TODO: rebuild the code in a more readable and consistent way.
+
+
+INITIAL May ? :
+
+ Status: test-pre-pre-alpha code
+
+ Shouldn't work yet. Had and have some problems with the elf specs...
+ and more inconsistencies...
+
diff --git a/mdk-stage1/dietlibc/libdl/_dl_int.h b/mdk-stage1/dietlibc/libdl/_dl_int.h
index 659e6ee0f..1bab10a92 100644
--- a/mdk-stage1/dietlibc/libdl/_dl_int.h
+++ b/mdk-stage1/dietlibc/libdl/_dl_int.h
@@ -1,31 +1,151 @@
#ifndef ___DL_INT_H__
#define ___DL_INT_H__
+#if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__)
+#define ELF_CLASS ELFCLASS64
+#else
+#define ELF_CLASS ELFCLASS32
+#endif
+
#include <elf.h>
+#include <dlfcn.h>
+
+#include "_dl_rel.h"
+
+#if ELF_CLASS == ELFCLASS32
+
+#define Elf_Addr Elf32_Addr
+
+#define Elf_Dyn Elf32_Dyn
+#define Elf_Ehdr Elf32_Ehdr
+#define Elf_Phdr Elf32_Phdr
+#define Elf_Rel Elf32_Rel
+#define Elf_Rela Elf32_Rela
+#define Elf_Sym Elf32_Sym
+
+#define ELF_R_SYM(x) ELF32_R_SYM((x))
+#define ELF_R_TYPE(x) ELF32_R_TYPE((x))
+
+#define ELF_ST_BIND(x) ELF32_ST_BIND((x))
+#define ELF_ST_TYPE(x) ELF32_ST_TYPE((x))
+
+#else
+
+#define Elf_Addr Elf64_Addr
+
+#define Elf_Dyn Elf64_Dyn
+#define Elf_Ehdr Elf64_Ehdr
+#define Elf_Phdr Elf64_Phdr
+#define Elf_Rel Elf64_Rel
+#define Elf_Rela Elf64_Rela
+#define Elf_Sym Elf64_Sym
+
+#define ELF_R_SYM(x) ELF64_R_SYM((x))
+#define ELF_R_TYPE(x) ELF64_R_TYPE((x))
+
+#define ELF_ST_BIND(x) ELF64_ST_BIND((x))
+#define ELF_ST_TYPE(x) ELF64_ST_TYPE((x))
+
+#endif
+
+//#define DEBUG
+#ifdef DEBUG
+#ifndef __DIET_LD_SO__
+#include <stdio.h>
+#define pf(s) write(2,s,strlen(s))
+#define ph(l) fdprintf(2,"%08lx",(l))
+#endif
+#endif
+
+#define RTLD_USER 0x10000000
+#define RTLD_NOSONAME 0x20000000
+#define LDSO_FLAGS (RTLD_LAZY|RTLD_GLOBAL|RTLD_NOSONAME)
struct _dl_handle {
+ char * mem_base; /* base address of maped *.so / or zero if program | Elf_Addr l_addr */
+ char * l_name; /* Abloslute filename of this object */
+ Elf_Dyn* dynamic; /* _DYNAMIC */
+
+ struct _dl_handle *next;
+ struct _dl_handle *prev;
+
+ unsigned int flags; /* FLAGS */
+
+ char * name; /* name of shared object */
+
/* basic */
- void * mem_base; /* base address of maped *.so */
unsigned long mem_size; /* len of mem block */
- unsigned int lnk_count; /* reference count */
+ unsigned long lnk_count; /* reference count (other libraries) */
+
+ /* lazy evaluator data */
+ unsigned long*pltgot; /* PLT/GOT */
/* symbol resolve helper */
unsigned long*hash_tab; /* hash table */
- Elf32_Sym * dyn_sym_tab; /* dynamic symbol table */
char * dyn_str_tab; /* dyn_name table */
+ Elf_Sym * dyn_sym_tab; /* dynamic symbol table */
+ _dl_rel_t* plt_rel; /* PLT relocation table */
- Elf32_Rel * plt_rel; /* PLT relocation table */
-
- /* FINI */
+ /* INIT / FINI */
void (*fini)(void);
};
-#define HASH_BUCKET_LEN(p) ((p))
+/* debug communication (GDB) (dyn-linker only) */
+struct r_debug {
+ int r_version;
+ struct _dl_handle* r_map;
+ unsigned long r_brk;
+ enum {
+ RT_CONSISTENT, /* mapping complete */
+ RT_ADD, /* begin add object */
+ RT_DELETE, /* begin del object */
+ } r_state;
+ unsigned long r_ldbase;
+};
+
+#define HASH_BUCKET_LEN(p) (*((p)))
#define HASH_BUCKET(p) ((p)+2)
-#define HASH_CHAIN_LEN(p) ((p)+1)
+#define HASH_CHAIN_LEN(p) (*((p)+1))
#define HASH_CHAIN(p) ((p)+2+HASH_BUCKET_LEN(p))
-unsigned long elf_hash(const unsigned char *name);
+/* _dl_alloc.c */
+extern struct _dl_handle* _dl_root_handle;
+extern struct _dl_handle* _dl_top_handle;
+extern struct _dl_handle* _dl_free_list;
+#ifndef __DIET_LD_SO__
+void _dl_free_handle(struct _dl_handle* dh);
+struct _dl_handle* _dl_get_handle();
+struct _dl_handle* _dl_find_lib(const char* name);
+
+/* _dl_open.c */
+void *_dl_open(const char* filename, int flags);
+
+/* _dl_load.c */
+void *_dl_load(const char* filename, const char*pathname, int fd, int flags);
+struct _dl_handle* _dl_dyn_scan(struct _dl_handle* dh, void* dyn_addr, int flags);
+
+/* _dl_search.c */
+void _dl_set_rpath(const char *path);
+const char* _dl_get_rpath();
+int _dl_search(char *buf, int len, const char *filename);
+
+/* dlsym.c */
+void *_dlsym(void*dh,char*symbol);
+void *_dl_sym_search_str(struct _dl_handle*h,char*name);
+void *_dl_sym(struct _dl_handle * h, int symbol);
+
+/* _dl_queue.c */
+int _dl_queue_lib(const char* name, int flags);
+int _dl_open_dep();
+
+/* _dl_relocate.c */
+int _dl_relocate(struct _dl_handle* dh, _dl_rel_t *rel, int num);
+
+/* dlerror.c */
+extern unsigned int _dl_error;
+extern const char* _dl_error_location;
+extern const char* _dl_error_data;
+#endif
#endif
diff --git a/mdk-stage1/dietlibc/libdl/_dl_jump.S b/mdk-stage1/dietlibc/libdl/_dl_jump.S
index 134f31ea5..bd7115258 100644
--- a/mdk-stage1/dietlibc/libdl/_dl_jump.S
+++ b/mdk-stage1/dietlibc/libdl/_dl_jump.S
@@ -1,8 +1,55 @@
.text
.global _dl_jump
_dl_jump:
+
+#ifdef __i386__
+.type _dl_jump,@function
+
+ pushl %eax # save register args...
+ pushl %ecx
+ pushl %edx
+
+ pushl %ebx
+
+ pushl 20(%esp) # 2. arg from plt
+ pushl 20(%esp) # 1. arg from plt
+
+#ifdef __DYN_LIB
+ call 1f
+1: popl %ebx
+ addl $_GLOBAL_OFFSET_TABLE_+[.-1b],%ebx
+ call do_rel@PLT
+#else
call do_rel
- pop %edx
- pop %edx
- jmp *%eax
+#endif
+ addl $8, %esp
+
+ popl %ebx
+
+ popl %edx # restore register args...
+ popl %ecx
+
+ xchgl %eax, (%esp) # restore eax and save function pointer (for return)
+
+ ret $8 # remove arguments from plt and jump to REAL function
+
+#endif
+
+#ifdef __arm__
+.type _dl_jump,function
+
+ stmdb sp!, {r0, r1, r2, r3}
+ sub r1, ip, lr
+ sub r1, r1, #4
+ add r1, r1, r1 /* dyntab entry */
+ ldr r0, [lr, #-4] /* dynlib handle */
+#ifdef __DYN_LIB
+ bl do_rel(PLT)
+#else
+ bl do_rel
+#endif
+ mov r12, r0
+ ldmia sp!, {r0, r1, r2, r3, lr}
+ mov pc, r12
+#endif
diff --git a/mdk-stage1/dietlibc/libdl/_dl_open.c b/mdk-stage1/dietlibc/libdl/_dl_open.c
index 1f907db21..f7bd0af95 100644
--- a/mdk-stage1/dietlibc/libdl/_dl_open.c
+++ b/mdk-stage1/dietlibc/libdl/_dl_open.c
@@ -1,207 +1,35 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/mman.h>
+#include <fcntl.h>
#include <dlfcn.h>
-#include <linux/elf.h>
+#include <limits.h>
+#ifndef __DIET_LD_SO__
+#include <string.h>
+#endif
#include "_dl_int.h"
-struct _dl_handle dl_test;
-
-#define _ELF_DWN_ROUND(ps,n) ((n)&(~((ps)-1)))
-#define _ELF_UP_ROUND(ps,n) ((((n)&((ps)-1))?(ps):0)+ _ELF_DWN_ROUND((ps),(n)))
-#define _ELF_RST_ROUND(ps,n) ((n)&((ps)-1))
-
-void _dl_jump();
-
-/*
- * this file is a Q. & D. hack ... don't think this is bug free or meaningfull
- */
-
-static void *do_map_in(void *base, unsigned long length, int flags, int fd, unsigned long offset)
-{
- int perm = 0;
- if (flags & PF_X) perm|=PROT_EXEC;
- if (flags & PF_R) perm|=PROT_READ;
- if (flags & PF_W) perm|=PROT_WRITE;
- return mmap(base, length, perm, MAP_PRIVATE|((base)?MAP_FIXED:0), fd, offset);
-}
-
-unsigned long do_rel(struct _dl_handle * tmp_dl, unsigned long off)
-{
-// struct _dl_handle * tmp_dl = ((void*)*((&off)-1));
- Elf32_Rel *tmp = ((void*)tmp_dl->plt_rel)+off;
- int sym=ELF32_R_SYM(tmp->r_info);
- register unsigned long sym_val;
-
- printf("do_rel %08x %08x\n",tmp_dl,off);
-
- printf ("do_rel %08x+%x\n",tmp_dl->plt_rel,off);
- printf("do_rel @ %08x with type %d -> %d\n",tmp->r_offset,ELF32_R_TYPE(tmp->r_info),sym);
-
- printf("do_rel sym %08x\n",tmp_dl->dyn_sym_tab[sym].st_value);
-
- /* modify GOT for REAL symbol */
- sym_val=((unsigned long)(tmp_dl->mem_base+tmp_dl->dyn_sym_tab[sym].st_value));
- *((unsigned long*)(tmp_dl->mem_base+tmp->r_offset))=sym_val;
-
- printf("do_rel sym %08x\n",sym_val);
- /* HOWTO JUMP ?!? */
- return sym_val;
-}
-
-void *_dl_open(const char*pathname, int fd, int flag)
-{
- int ps=getpagesize();
- int i;
- unsigned char buf[1024];
- char *m=0,*d;
- struct _dl_handle *ret=0;
-
- unsigned long l;
-
- Elf32_Ehdr *eh;
- Elf32_Phdr *ph;
-
- int ld_nr=0;
- Elf32_Phdr *ld[4]={0,0,0,0};
- Elf32_Phdr *dyn=0;
-
- if (fd==-1) return 0;
-
- printf("_dl_open: %s\n",pathname);
-
- read(fd, buf, 1024);
- eh=(Elf32_Ehdr*)buf;
- ph=(Elf32_Phdr*)&buf[eh->e_phoff];
-
- for (i=0; i<eh->e_phnum; i++) {
- if (ph[i].p_type==PT_LOAD) {
- ld[ld_nr++]=ph+i;
- }
- if (ph[i].p_type==PT_DYNAMIC) {
- dyn=ph+i;
- }
+#ifdef __DIET_LD_SO__
+static
+#endif
+void*_dl_open(const char*filename,int flags) {
+ int fd;
+ char buf[PATH_MAX];
+ const char*p=0;
+
+ for (fd=0;filename[fd] && (p==0);++fd) if (filename[fd]=='/') p=filename;
+ if (p) {
+#ifdef __DIET_LD_SO__
+ if ((fd=_dl_sys_open(p,O_RDONLY,0))<0) fd=-1;
+#else
+ fd=open(p,O_RDONLY);
+#endif
+ } else {
+ p=buf;
+ fd=_dl_search(buf,sizeof(buf)-1,filename);
}
-
- if (ld_nr==1) {
- unsigned long offset = _ELF_DWN_ROUND(ps,ld[0]->p_offset);
- unsigned long off = _ELF_RST_ROUND(ps,ld[0]->p_offset);
- unsigned long length = _ELF_UP_ROUND(ps,ld[0]->p_memsz+off);
- m = (char*)do_map_in(0, length, ld[0]->p_flags, fd, offset);
-
- /* zero pad bss */
- l = ld[0]->p_offset+ld[0]->p_filesz;
- memset(m+l,0,length-l);
-
- dl_test.mem_base=m;
- dl_test.mem_size=length;
- dl_test.lnk_count=0;
-
- ret = &dl_test;
- }
- else if (ld_nr==2) { /* aem... yes Quick & Really Dirty / for the avarage 99% */
- //unsigned long text_addr = _ELF_DWN_ROUND(ps,ld[0]->p_vaddr);
- unsigned long text_offset = _ELF_DWN_ROUND(ps,ld[0]->p_offset);
- unsigned long text_off = _ELF_RST_ROUND(ps,ld[0]->p_offset);
- unsigned long text_size = _ELF_UP_ROUND(ps,ld[0]->p_memsz+text_off);
-
- unsigned long data_addr = _ELF_DWN_ROUND(ps,ld[1]->p_vaddr);
- unsigned long data_offset = _ELF_DWN_ROUND(ps,ld[1]->p_offset);
- unsigned long data_off = _ELF_RST_ROUND(ps,ld[1]->p_offset);
- unsigned long data_size = _ELF_UP_ROUND(ps,ld[1]->p_memsz+data_off);
- unsigned long data_fsize = _ELF_UP_ROUND(ps,ld[1]->p_filesz+data_off);
-
- /* mmap all mem_blocks for *.so */
- l = text_size+data_size;
-
- dl_test.mem_size=l;
-
- m = (char*) do_map_in(0,l,ld[0]->p_flags,fd,text_offset);
-
- /* release data,bss part */
- mprotect(m+data_addr, data_size, PROT_NONE);
-
- /* mmap data,bss part */
- d = (char*) do_map_in(m+data_addr,data_fsize,ld[1]->p_flags,fd,data_offset);
-
- /* zero pad bss */
- l = data_off+ld[1]->p_filesz;
- memset(d+l,0,data_size-l);
-
- /* more bss ? */
- if (data_size>data_fsize) {
- l = data_size-data_fsize;
- mmap(d+data_fsize, l, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
- }
-
- dl_test.mem_base=m;
- dl_test.lnk_count=0;
- ret = &dl_test;
- }
-
- printf("_dl_open pre resolv\n");
- if (ret) {
- Elf32_Dyn* dyn_tab = (void*)m+dyn->p_vaddr;
- void (*init)();
- unsigned long* got=0;
- void* jmprel=0;
- int pltreltype=0;
- int pltrelsize=0;
-
- printf("_dl_open IN resolv\n");
- for(i=0;dyn_tab[i].d_tag;i++) {
- if (dyn_tab[i].d_tag==DT_HASH) {
- ret->hash_tab = (unsigned long*)(m+dyn_tab[i].d_un.d_ptr);
- }
- if (dyn_tab[i].d_tag==DT_SYMTAB) {
- ret->dyn_sym_tab = (Elf32_Sym*)(m+dyn_tab[i].d_un.d_ptr);
- }
- if (dyn_tab[i].d_tag==DT_STRTAB) {
- ret->dyn_str_tab = (char*)(m+dyn_tab[i].d_un.d_ptr);
- }
- if (dyn_tab[i].d_tag==DT_FINI) {
- ret->fini = (void(*)(void))(m+dyn_tab[i].d_un.d_val);
- }
- if (dyn_tab[i].d_tag==DT_INIT) {
- init = (void(*)(void))(m+dyn_tab[i].d_un.d_val);
- printf("init @ %08x\n",init);
- }
- if (dyn_tab[i].d_tag==DT_PLTGOT) {
- got=(unsigned long*)(m+dyn_tab[i].d_un.d_val);
- }
- if (dyn_tab[i].d_tag==DT_PLTREL) {
- pltreltype=dyn_tab[i].d_un.d_val;
- }
- if (dyn_tab[i].d_tag==DT_PLTRELSZ) {
- pltrelsize=dyn_tab[i].d_un.d_val;
- }
- if (dyn_tab[i].d_tag==DT_JMPREL) {
- jmprel=(m+dyn_tab[i].d_un.d_val);
- dl_test.plt_rel=jmprel;
- }
- }
- /* GOT */
- got[0]+=(unsigned long)m;
- got[1]=(unsigned long)&dl_test;
-// got[2]=(unsigned long)do_rel;
- got[2]=(unsigned long)(_dl_jump);
- /* */
-
- if (pltreltype == DT_REL) {
- Elf32_Rel *tmp = jmprel;
- for (;(char*)tmp<(((char*)jmprel)+pltrelsize);(char*)tmp=((char*)tmp)+sizeof(Elf32_Rel)) {
- *((unsigned long*)(m+tmp->r_offset))+=(unsigned long)m;
-// *((unsigned long*)(m+tmp->r_offset))+=(unsigned long)do_rel;
- printf("rel @ %08x with type %d -> %d\n",tmp->r_offset,ELF32_R_TYPE(tmp->r_info),ELF32_R_SYM(tmp->r_info));
- }
- }
-
- printf("_dl_open post resolv, pre init\n");
- init();
+ if (fd==-1) {
+ _dl_error_data=filename;
+ _dl_error=1;
+ return 0;
}
- printf("_dl_open post resolv, init\n");
-
- close(fd);
- return ret;
+ return _dl_load(filename,p,fd,flags);
}
diff --git a/mdk-stage1/dietlibc/libdl/_dl_search.c b/mdk-stage1/dietlibc/libdl/_dl_search.c
index 5e3217d46..ccf9c51c5 100644
--- a/mdk-stage1/dietlibc/libdl/_dl_search.c
+++ b/mdk-stage1/dietlibc/libdl/_dl_search.c
@@ -1,68 +1,95 @@
-#include <unistd.h>
#include <stdlib.h>
-#include <string.h>
#include <dlfcn.h>
#include <fcntl.h>
-#include <stdio.h>
+
+#include "_dl_int.h"
#define WANT_LD_SO_CONF_SEARCH
static const char *_dl_search_rpath=0;
+
+#ifndef __DIET_LD_SO__
+#include <unistd.h>
+#include <string.h>
void _dl_set_rpath(const char *path) { _dl_search_rpath=path; }
+const char* _dl_get_rpath() { return _dl_search_rpath; }
+#endif
/* search a colon (semicolon) seperated path for the libraray "filename" */
-static int _dl_search_path(char *buf, int len, const char*path, const int pathlen, const char *filename)
-{
- int fd,l=len,i=1;
- const char *c,*pe=path+pathlen;
+static int _dl_search_path(char*buf,int len,const char*path,const int pathlen,const char*filename) {
+ int fd,i=1,fl=strlen(filename),ml=len-fl;
+ const char*c,*pe=path+pathlen;
if (path) {
- for (c=path; c<pe; c+=i) {
+ for (c=path;c<pe;c+=i) {
+ int l=len-1;
if ((*c==':')||(*c==';')) ++c;
i=strcspn(c,":;");
if (i) {
- strncpy(buf, c, i); buf[i]=0;
- l-=i;
- strncat(buf, "/", l);
+ if (i>ml) continue; /* if len(path-entry)+len(filename)+2 is greater than the buffer ? SKIP */
+ memcpy(buf,c,i);
+ buf[i]='/';
+ l-=++i;
}
- else
- buf[0]=0;
- strncat(buf, filename, --l);
-// printf("_dl_search: %s\n",buf);
+ memcpy(buf+i,filename,fl);
+ buf[i+fl]=0;
+#ifdef DEBUG
+// pf(__func__": "); pf(buf); pf("\n");
+#endif
+#ifdef __DIET_LD_SO__
+ if ((fd=_dl_sys_open(buf,O_RDONLY,0))>-1) return fd;
+#else
if ((fd=open(buf,O_RDONLY))!=-1) return fd;
+#endif
}
}
return -1;
}
/* parse the SMALL file "conf" for lib directories (aem... hang me if you can :) ) */
-static int _dl_search_conf(char *buf, int len, const char *conf, const char *filename)
-{
+static int _dl_search_conf(char*buf,int len,const char*conf,const char*filename) {
char ld_so_conf[1024];
- int i,l,fd=open(conf,O_RDONLY);
- if (fd!=-1) {
+ int i,l,fd;
+#ifdef __DIET_LD_SO__
+ if ((fd=_dl_sys_open(conf,O_RDONLY,0))>-1) {
+ l=_dl_sys_read(fd,ld_so_conf,sizeof(ld_so_conf)-1);
+#else
+ if ((fd=open(conf,O_RDONLY))!=-1) {
l=read(fd,ld_so_conf,sizeof(ld_so_conf)-1);
+#endif
ld_so_conf[sizeof(ld_so_conf)-1]=0;
+#ifdef __DIET_LD_SO__
+ _dl_sys_close(fd);
+#else
close(fd);
- if (ld_so_conf[l-1]=='\n') ld_so_conf[--l]=0;
- for (i=0;i<l;i++) if (ld_so_conf[i]=='\n') ld_so_conf[i]=':';
- if ((fd=_dl_search_path(buf,len,ld_so_conf,l,filename))!=-1) return fd;
+#endif
+ if (l>0) {
+ if (ld_so_conf[l-1]=='\n') ld_so_conf[--l]=0;
+ for (i=0;i<l;i++) if (ld_so_conf[i]=='\n') ld_so_conf[i]=':';
+ if ((fd=_dl_search_path(buf,len,ld_so_conf,l,filename))!=-1) return fd;
+ }
}
return -1;
}
-int _dl_search(char *buf, int len, const char *filename)
-{
+#ifdef __DIET_LD_SO__
+static
+#endif
+int _dl_search(char*buf,int len,const char*filename) {
int fd;
- /* 1. search the LD_RUN_PATH (from the executable */
+ /* 1. search the LD_RUN_PATH (from the executable) */
if (_dl_search_rpath) {
if ((fd=_dl_search_path(buf,len,_dl_search_rpath,strlen(_dl_search_rpath),filename))!=-1) return fd;
}
/* 2. IF we have a "secure" enviroment THEN search LD_LIBRARY_PATH */
- if (getuid()==geteuid()) {
+#ifdef __DIET_LD_SO__
+ if ((at_uid==at_euid)&&(at_gid==at_egid)) {
+#else
+ if ((getuid()==geteuid())&&(getgid()==getegid())) {
+#endif
char *p=getenv("LD_LIBRARY_PATH");
if (p)
if ((fd=_dl_search_path(buf,len,p,strlen(p),filename))!=-1) return fd;
@@ -78,7 +105,7 @@ int _dl_search(char *buf, int len, const char *filename)
/* default path search */
{
- const char* def_path="/usr/lib:/lib";
+ const char def_path[]="/usr/lib:/lib";
return _dl_search_path(buf,len,def_path,strlen(def_path),filename);
}
}
diff --git a/mdk-stage1/dietlibc/libdl/dlclose.c b/mdk-stage1/dietlibc/libdl/dlclose.c
index 384550c47..6fafedcf5 100644
--- a/mdk-stage1/dietlibc/libdl/dlclose.c
+++ b/mdk-stage1/dietlibc/libdl/dlclose.c
@@ -1,14 +1,38 @@
+#include <sys/mman.h>
+
#include "_dl_int.h"
-int dlclose (void *handle)
-{
- if (handle) {
- struct _dl_handle *h = handle;
- if (h->lnk_count) {
- --h->lnk_count;
- return -1;
+static void dec_referenced_libs(struct _dl_handle*dh) {
+ Elf_Dyn* dyn_tab=dh->dynamic;
+ int i;
+ for(i=0;dyn_tab[i].d_tag;i++) {
+ if (dyn_tab[i].d_tag==DT_NEEDED) {
+ char *lib_name=dh->dyn_str_tab+dyn_tab[i].d_un.d_val;
+#ifdef DEBUG
+ pf(__FUNCTION__); pf(": lib: "); pf(lib_name); pf("\n");
+#endif
+ dlclose(_dl_find_lib(lib_name));
}
- if (munmap(h->mem_base,h->mem_size)!=0) return -1;
+ }
+}
+
+int dlclose(void*handle) {
+ _dl_error_location="dlclose";
+ if (handle) {
+ struct _dl_handle*dh=handle;
+ if (--(dh->lnk_count)) return 0; /* not yet unreferenced */
+
+#ifdef DEBUG
+ pf(__FUNCTION__); pf(": "); pf(dh->name); pf("\n");
+#endif
+ if (dh->fini) dh->fini();
+ dec_referenced_libs(dh);
+#ifdef __DIET_LD_SO__
+ if (_dl_sys_munmap(dh->mem_base,dh->mem_size)<0) return -1;
+#else
+ if (munmap(dh->mem_base,dh->mem_size)==-1) return -1;
+#endif
+ _dl_free_handle(handle);
}
return 0;
}
diff --git a/mdk-stage1/dietlibc/libdl/dlerror.c b/mdk-stage1/dietlibc/libdl/dlerror.c
index 1e31bae54..3fea0b75c 100644
--- a/mdk-stage1/dietlibc/libdl/dlerror.c
+++ b/mdk-stage1/dietlibc/libdl/dlerror.c
@@ -1,4 +1,55 @@
-const char *dlerror(void)
-{
- return "HAE ?!?";
+
+#include "_dl_int.h"
+
+#ifdef __DIET_LD_SO__
+static unsigned int _dl_error;
+static const char*_dl_error_location;
+static const char*_dl_error_data;
+#else
+#include <string.h>
+unsigned int _dl_error;
+const char*_dl_error_location;
+const char*_dl_error_data;
+#endif
+
+static struct _dl_err_msg {
+ char*msg;
+ int len;
+} _dl_error_msg[]={
+#define MSG(n) { (n), sizeof((n))-1 }
+ MSG("can't open: "), /* 1 */
+ MSG("can't stat: "), /* 2 */
+ MSG("shared object is not position independent: "), /* 3 */
+ MSG("can't resolve all symbols in: "), /* 4 */
+ MSG("can't find symbol: "), /* 5 */
+ MSG("invalid relocation type in: "), /* 6 */
+ MSG("internal error: layout not yet supported: "), /* 7 */
+};
+
+const char *dlerror(void) {
+ static char buf[1024],*p=buf;
+ register int l,len=sizeof(buf)-1;
+ if (_dl_error==0) return 0;
+
+ buf[0]=0;
+ buf[len]=0;
+ --_dl_error;
+
+ if (_dl_error>=(sizeof(_dl_error_msg)/sizeof(struct _dl_err_msg)))
+ return "HAE ?!?";
+
+ if (_dl_error_location) {
+ l=strlen(_dl_error_location);
+ strncpy(p,_dl_error_location,len); len-=l; p+=l;
+ strncpy(p,": ",len); len-=2; p+=2;
+ }
+ l=_dl_error_msg[_dl_error].len;
+ strncpy(p,_dl_error_msg[_dl_error].msg,len); len-=l; p+=l;
+ strncpy(p,_dl_error_data,len);
+
+ _dl_error_location=0;
+ _dl_error_data="";
+ _dl_error=0;
+
+ return buf;
}
diff --git a/mdk-stage1/dietlibc/libdl/dlopen.c b/mdk-stage1/dietlibc/libdl/dlopen.c
index 1693d889f..79fa7903c 100644
--- a/mdk-stage1/dietlibc/libdl/dlopen.c
+++ b/mdk-stage1/dietlibc/libdl/dlopen.c
@@ -2,20 +2,25 @@
#include <dlfcn.h>
#include <limits.h>
-int _dl_search(char*buf, int bufsize, const char*filename);
-void *_dl_open(const char*pathname, int fd, int flag);
+#include "_dl_int.h"
-void *dlopen (const char *filename, int flag)
-{
- int fd;
- char buf[PATH_MAX];
- const char *p;
- if (*filename=='/')
- fd=open(p=filename,O_RDONLY);
- else {
- p=buf;
- fd=_dl_search(buf,sizeof(buf),filename);
+#ifdef __DIET_LD_SO__
+static
+#endif
+void*_dlopen(const char *filename, int flags) {
+ struct _dl_handle* ret;
+ if (filename) {
+ if ((ret=_dl_find_lib(filename))) {
+ ++(ret->lnk_count); /* add a reference */
+ return ret;
+ }
+ return _dl_open(filename,flags);
}
+ /* return 1 as an indicator for dlsym to search ALL global objects */
+ return RTLD_DEFAULT;
+}
- return _dl_open(p,fd,flag);
+void*dlopen(const char *filename, int flags) {
+ _dl_error_location="dlopen";
+ return _dlopen(filename,flags|RTLD_USER|RTLD_NOSONAME);
}
diff --git a/mdk-stage1/dietlibc/libdl/dlsym.c b/mdk-stage1/dietlibc/libdl/dlsym.c
index 2af940837..c58bb4d11 100644
--- a/mdk-stage1/dietlibc/libdl/dlsym.c
+++ b/mdk-stage1/dietlibc/libdl/dlsym.c
@@ -1,7 +1,92 @@
#include "_dl_int.h"
-void *dlsym(void *handle, char *symbol)
-{
- printf("dlsym(%08x,%s) -> %08x\n",handle,symbol,elf_hash(symbol)%17);
- return 0;
+#include "elf_hash.h"
+
+#ifdef __DIET_LD_SO__
+static
+#endif
+void *_dlsym(void*handle,char*symbol) {
+ unsigned long*sym=0;
+ if (handle) {
+ struct _dl_handle*dh=(struct _dl_handle*)handle;
+ unsigned long hash =elf_hash(symbol);
+ unsigned long bhash=hash%HASH_BUCKET_LEN(dh->hash_tab);
+ unsigned long*chain=HASH_CHAIN(dh->hash_tab);
+ unsigned long ind;
+ char *name=dh->dyn_str_tab;
+
+#ifdef DEBUG
+// pf(__FUNCTION__); pf(": bucket("); ph(bhash); pf(",\""); pf(symbol); pf("\")\n");
+#endif
+
+ ind=HASH_BUCKET(dh->hash_tab)[bhash];
+#ifdef DEBUG
+// pf(__FUNCTION__); pf(": chain ("); ph(ind); pf(",\""); pf(symbol); pf("\")\n");
+#endif
+
+ while(ind) {
+ int ptr=dh->dyn_sym_tab[ind].st_name;
+#ifdef DEBUG
+// pf(__FUNCTION__); pf(": symbol(\""); pf(name+ptr); pf("\",\"); pf(symbol); pf("\")\n");
+#endif
+ if (strcmp(name+ptr,symbol)==0) {
+ if (ELF_ST_TYPE(dh->dyn_sym_tab[ind].st_shndx)!=0) {
+ sym=(long*)(dh->mem_base+dh->dyn_sym_tab[ind].st_value);
+ break; /* ok found ... */
+ }
+ }
+ ind=chain[ind];
+ }
+#ifdef DEBUG
+ pf(__FUNCTION__); pf(": symbol \""); pf(symbol); pf("\" @ "); ph((long)sym); pf("\n");
+#endif
+ }
+ return sym;
+}
+
+#ifdef __DIET_LD_SO__
+static
+#endif
+void*_dl_sym_search_str(struct _dl_handle*dh,char*name) {
+ void *sym=0;
+ struct _dl_handle*tmp;
+#ifdef DEBUG
+ pf(__FUNCTION__); pf(": search for: "); pf(name); pf("\n");
+#endif
+ for (tmp=_dl_root_handle;tmp && (!sym);tmp=tmp->next) {
+// if (!(tmp->flags&RTLD_GLOBAL)) continue;
+#ifdef DEBUG
+ pf(__FUNCTION__); pf(": searching in "); pf(tmp->name); pf("\n");
+#endif
+ sym=_dlsym((void*)tmp,name);
+#ifdef DEBUG
+ if (sym) { pf(__FUNCTION__); pf(": found: "); pf(name); pf(" @ "); ph((long)sym); pf("\n"); }
+#endif
+ }
+ return sym;
+}
+
+#ifdef __DIET_LD_SO__
+static
+#endif
+void*_dl_sym(struct _dl_handle*dh,int symbol) {
+ char *name=dh->dyn_str_tab+dh->dyn_sym_tab[symbol].st_name;
+ void*sym=_dl_sym_search_str(dh,name);
+#ifdef DEBUG
+ pf(__FUNCTION__); pf(": "); ph(symbol); pf(" -> "); ph((long)sym); pf("\n");
+#endif
+ return sym;
+}
+
+void*dlsym(void*handle,char*symbol) {
+ void*h;
+ if (handle==RTLD_DEFAULT || !handle /* RTLD_DEFAULT is NULL on glibc */ )
+ h=_dl_sym_search_str(0,symbol);
+ else h=_dlsym(handle,symbol);
+ if (h==0) {
+ _dl_error_location="dlsym";
+ _dl_error_data=symbol;
+ _dl_error=5;
+ }
+ return h;
}
diff --git a/mdk-stage1/dietlibc/libdl/elf_hash.c b/mdk-stage1/dietlibc/libdl/elf_hash.c
deleted file mode 100644
index 463dba0dd..000000000
--- a/mdk-stage1/dietlibc/libdl/elf_hash.c
+++ /dev/null
@@ -1,12 +0,0 @@
-unsigned long elf_hash(const unsigned char *name)
-{
- unsigned long h=0, g;
-
- while (*name)
- {
- h = (h<<4) + *(name++);
- if (g = h&0xf0000000) h ^= g>>24;
- h &= ~g;
- }
- return h;
-}
diff --git a/mdk-stage1/dietlibc/liblatin1/latin1-iscntrl.c b/mdk-stage1/dietlibc/liblatin1/latin1-iscntrl.c
index b0c3605b0..5a6361442 100644
--- a/mdk-stage1/dietlibc/liblatin1/latin1-iscntrl.c
+++ b/mdk-stage1/dietlibc/liblatin1/latin1-iscntrl.c
@@ -1,5 +1,6 @@
#include <ctype.h>
-int iscntrl(int c) {
+int iscntrl(int x) {
+ unsigned char c=x&0xff;
return (c<32) || (c>=127 && c<=160);
}
diff --git a/mdk-stage1/dietlibc/liblatin1/latin1-isgraph.c b/mdk-stage1/dietlibc/liblatin1/latin1-isgraph.c
index c8d4a5df0..e79a19e52 100644
--- a/mdk-stage1/dietlibc/liblatin1/latin1-isgraph.c
+++ b/mdk-stage1/dietlibc/liblatin1/latin1-isgraph.c
@@ -1,4 +1,7 @@
-int isgraph(int c) {
+#include <ctype.h>
+
+int isgraph(int x) {
+ unsigned char c=x&0xff;
return (c>=33 && c<=126) || (c>=161 && c<=255);
}
diff --git a/mdk-stage1/dietlibc/liblatin1/latin1-islower.c b/mdk-stage1/dietlibc/liblatin1/latin1-islower.c
index cab1a5171..c5ad18d1e 100644
--- a/mdk-stage1/dietlibc/liblatin1/latin1-islower.c
+++ b/mdk-stage1/dietlibc/liblatin1/latin1-islower.c
@@ -1,5 +1,6 @@
#include <ctype.h>
int islower(int c) {
- return (c>='a' && c<='z') || (c>=223 && c<=255 && c!=247);
+ unsigned char x=c&0xff;
+ return (x>='a' && x<='z') || (x>=223 && x<=255 && x!=247);
}
diff --git a/mdk-stage1/dietlibc/liblatin1/latin1-isprint.c b/mdk-stage1/dietlibc/liblatin1/latin1-isprint.c
index f632483a0..9493892b1 100644
--- a/mdk-stage1/dietlibc/liblatin1/latin1-isprint.c
+++ b/mdk-stage1/dietlibc/liblatin1/latin1-isprint.c
@@ -1,4 +1,6 @@
+#include <ctype.h>
-int isprint(int c) {
+int isprint(int x) {
+ unsigned char c=x&0xff;
return (c>=32 && c<=126) || (c>=160 && c<=255);
}
diff --git a/mdk-stage1/dietlibc/liblatin1/latin1-isupper.c b/mdk-stage1/dietlibc/liblatin1/latin1-isupper.c
index 1c1d59db8..a024548fd 100644
--- a/mdk-stage1/dietlibc/liblatin1/latin1-isupper.c
+++ b/mdk-stage1/dietlibc/liblatin1/latin1-isupper.c
@@ -1,5 +1,6 @@
#include <ctype.h>
int isupper(int c) {
- return (c>='A' && c<='Z') || (c>=192 && c<=222 && c!=215);
+ unsigned char x=c&0xff;
+ return (x>='A' && x<='Z') || (x>=192 && x<=222 && x!=215);
}
diff --git a/mdk-stage1/dietlibc/libpthread/CHANGES b/mdk-stage1/dietlibc/libpthread/CHANGES
index d39d990ba..63376623b 100644
--- a/mdk-stage1/dietlibc/libpthread/CHANGES
+++ b/mdk-stage1/dietlibc/libpthread/CHANGES
@@ -1,6 +1,12 @@
This is the pthread implementation of dietlibc.
Written from scratch by Olaf Dreesen.
+Mon Aug 6 15:46:39 MEST 2001
+
+ Ups... did the wrong error handling... the error is returned not put to
+ errno...
+ probably thread_key is not SMP save...
+
Thu Apr 12 16:47:12 MEST 2001
added conditional variables...
diff --git a/mdk-stage1/dietlibc/libpthread/Makefile b/mdk-stage1/dietlibc/libpthread/Makefile
index 06420f43a..f2ab8d8dc 100644
--- a/mdk-stage1/dietlibc/libpthread/Makefile
+++ b/mdk-stage1/dietlibc/libpthread/Makefile
@@ -12,14 +12,14 @@ VPATH=../$(ARCH)/
PTHREAD_OBJS = \
__testandset.o \
\
- thread_internal.o \
- thread_key.o \
+ pthread_internal.o \
+ pthread_key.o \
\
pthread_once.o pthread_spinlock.o \
\
pthread_create.o pthread_detach.o \
pthread_join.o pthread_self.o \
- pthread_exit.o \
+ pthread_exit.o pthread_equal.o \
\
pthread_cleanup_push.o \
pthread_cleanup_pop.o \
@@ -72,6 +72,7 @@ PTHREAD_OBJS = \
pthread_sys_create.o \
pthread_sys_fcntl.o \
pthread_sys_fsync.o \
+ pthread_sys_fdatasync.o \
pthread_sys_nanosleep.o \
pthread_sys_logging.o \
pthread_sys_open.o \
diff --git a/mdk-stage1/dietlibc/libpthread/README b/mdk-stage1/dietlibc/libpthread/README
index 3139c731d..ee85a572d 100644
--- a/mdk-stage1/dietlibc/libpthread/README
+++ b/mdk-stage1/dietlibc/libpthread/README
@@ -3,7 +3,7 @@ LIBPTHREAD
This is the pthread implementation of dietlibc.
Written from scratch by Olaf Dreesen.
-1. STATUS: incomplete but should work (or not... I had a lot of heisen-bugs...)
+1. STATUS: near complete and should work (or not... I had a lot of heisen-bugs...)
On non i386 archs the kernel header have major differences...
NO workaround yet for this problems...
@@ -15,13 +15,7 @@ Nested thread creation is now working fine...
2. HOW-TO make this lib:
- 1. generate the dietlibc in the parent directory.
- and make sure you have WANT_THREAD_SAVE active in the file:
- dietfeatures.h
-
- 2. change back here and type make
-
- and then you should have a libpthread.a
+ it is a standard dietlibc helper lib...
3. NOTES
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_atfork.c b/mdk-stage1/dietlibc/libpthread/pthread_atfork.c
index 2dc612dcc..70ca9f162 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_atfork.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_atfork.c
@@ -36,7 +36,7 @@ int pthread_atfork(void (*prepare)(void),
__pthread_unlock(&__atfork_struct_lock);
__NO_ASYNC_CANCEL_END;
- if (ret) (*(__errno_location()))=ENOMEM;
+ if (ret) ret=ENOMEM;
return ret;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_attr_init.c b/mdk-stage1/dietlibc/libpthread/pthread_attr_init.c
index 726e88fe5..fbcefa3bd 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_attr_init.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_attr_init.c
@@ -1,3 +1,4 @@
+#include <string.h>
#include <unistd.h>
#include <errno.h>
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_attr_setdetachstate.c b/mdk-stage1/dietlibc/libpthread/pthread_attr_setdetachstate.c
index 690ad5f8e..f5eab5816 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_attr_setdetachstate.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_attr_setdetachstate.c
@@ -13,6 +13,5 @@ int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)
attr->__detachstate=detachstate;
return 0;
}
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_attr_setinheritsched.c b/mdk-stage1/dietlibc/libpthread/pthread_attr_setinheritsched.c
index f38e6e35e..0b7a691e7 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_attr_setinheritsched.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_attr_setinheritsched.c
@@ -13,6 +13,5 @@ int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit)
attr->__inheritsched=inherit;
return 0;
}
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_attr_setschedparam.c b/mdk-stage1/dietlibc/libpthread/pthread_attr_setschedparam.c
index 833c0111b..a3e5a9b4a 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_attr_setschedparam.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_attr_setschedparam.c
@@ -12,12 +12,11 @@ int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *p
attr->__schedparam.sched_priority=0;
return 0;
}
- if (((attr->__schedpolicy == SCHED_RR) || (attr->__schedpolicy == SCHED_RR))
+ if (((attr->__schedpolicy == SCHED_RR) || (attr->__schedpolicy == SCHED_FIFO))
&& ((param->sched_priority > 0) && (param->sched_priority < 100))) {
attr->__schedparam.sched_priority=param->sched_priority;
return 0;
}
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_attr_setschedpolicy.c b/mdk-stage1/dietlibc/libpthread/pthread_attr_setschedpolicy.c
index e845bca32..227d3f7ad 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_attr_setschedpolicy.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_attr_setschedpolicy.c
@@ -17,9 +17,8 @@ int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy)
attr->__schedpolicy=policy;
return 0;
}
- (*(__errno_location()))=ENOTSUP;
+ return ENOTSUP;
}
else
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_attr_setscope.c b/mdk-stage1/dietlibc/libpthread/pthread_attr_setscope.c
index 39088c9b2..9be11ca2d 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_attr_setscope.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_attr_setscope.c
@@ -11,8 +11,7 @@ int pthread_attr_setscope(pthread_attr_t *attr, int scope)
if (scope==PTHREAD_SCOPE_SYSTEM) return 0;
if (scope==PTHREAD_SCOPE_PROCESS)
- (*(__errno_location()))=ENOTSUP;
+ return ENOTSUP;
else
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_attr_setstacksize.c b/mdk-stage1/dietlibc/libpthread/pthread_attr_setstacksize.c
index cfbab7747..1a0aae929 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_attr_setstacksize.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_attr_setstacksize.c
@@ -12,6 +12,5 @@ int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize)
attr->__stacksize=stacksize;
return 0;
}
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_cancel.c b/mdk-stage1/dietlibc/libpthread/pthread_cancel.c
index 4c87a3ed1..c0ae60349 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_cancel.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_cancel.c
@@ -14,14 +14,12 @@ int pthread_cancel(pthread_t th)
j=__find_thread_id(th);
if (j==-1) {
- (*(__errno_location()))=ESRCH;
- return -1;
+ return ESRCH;
}
thread = __get_thread_struct(j);
if (thread==0) {
- (*(__errno_location()))=ESRCH;
- return -1;
+ return ESRCH;
}
if (thread->cancelstate!=PTHREAD_CANCEL_DISABLE) {
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_cond_broadcast.c b/mdk-stage1/dietlibc/libpthread/pthread_cond_broadcast.c
index d3c2274f3..776e0adfc 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_cond_broadcast.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_cond_broadcast.c
@@ -10,14 +10,17 @@ int pthread_cond_broadcast(pthread_cond_t *cond)
__THREAD_INIT();
+ __NO_ASYNC_CANCEL_BEGIN;
__pthread_lock(&(cond->lock));
- while ((tmp=cond->wait_chain)) {
- cond->wait_chain=tmp->waitnext;
+
+ for (tmp=cond->wait_chain;tmp;tmp=tmp->waitnext) {
tmp->waitnext=0;
tmp->waiting=0;
}
- __pthread_unlock(&(cond->lock));
+ cond->wait_chain=0;
+ __pthread_unlock(&(cond->lock));
+ __NO_ASYNC_CANCEL_STOP;
return 0;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_cond_destroy.c b/mdk-stage1/dietlibc/libpthread/pthread_cond_destroy.c
index 9a6cc4f0b..b553b41df 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_cond_destroy.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_cond_destroy.c
@@ -1,3 +1,4 @@
+#include <string.h>
#include <unistd.h>
#include <errno.h>
@@ -9,8 +10,7 @@ int pthread_cond_destroy(pthread_cond_t *cond)
__THREAD_INIT();
if (cond->wait_chain) {
- (*__errno_location())=EBUSY;
- return 1;
+ return EBUSY;
}
memset(cond,0,sizeof(pthread_cond_t));
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_cond_init.c b/mdk-stage1/dietlibc/libpthread/pthread_cond_init.c
index 20b38bef2..76dd5cb97 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_cond_init.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_cond_init.c
@@ -1,3 +1,4 @@
+#include <string.h>
#include <unistd.h>
#include <errno.h>
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_cond_signal.c b/mdk-stage1/dietlibc/libpthread/pthread_cond_signal.c
index 60bf2119c..02a3c028e 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_cond_signal.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_cond_signal.c
@@ -10,9 +10,11 @@ int pthread_cond_signal(pthread_cond_t *cond)
__THREAD_INIT();
+ __NO_ASYNC_CANCEL_BEGIN;
__pthread_lock(&(cond->lock));
if ((tmp=cond->wait_chain)) cond->wait_chain=tmp->waitnext;
__pthread_unlock(&(cond->lock));
+ __NO_ASYNC_CANCEL_STOP;
if (tmp) {
tmp->waitnext=0;
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_cond_timedwait.c b/mdk-stage1/dietlibc/libpthread/pthread_cond_timedwait.c
index 6613f2ca9..71d80bdb5 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_cond_timedwait.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_cond_timedwait.c
@@ -9,13 +9,14 @@ int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
{
_pthread_descr tmp;
_pthread_descr this;
- int ret;
+ int ret=0;
__THREAD_INIT();
this=__thread_self();
/* put in wait-chain */
+ __NO_ASYNC_CANCEL_BEGIN;
__pthread_lock(&(cond->lock));
this->waiting=1;
if (cond->wait_chain) {
@@ -23,21 +24,51 @@ int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
tmp->waitnext=this;
} else cond->wait_chain=this;
__pthread_unlock(&(cond->lock));
+ __NO_ASYNC_CANCEL_STOP;
- /* Aeh yeah / wait till signal */
+ /* Aeh yeah / wait till cond-signal OR timeout */
pthread_mutex_unlock(mutex);
- ret=nanosleep(abstime,0);
+ while (this->waiting) {
+ struct timeval tv;
+ gettimeofday(&tv,0);
+ if ((abstime->tv_sec <= tv.tv_sec) && (abstime->tv_nsec <= (tv.tv_usec*1000))) {
+ ret = 1;
+ break;
+ }
+ __thread_wait_some_time();
+ if (this->canceled) break; /* a cancel */
+ }
pthread_mutex_lock(mutex);
- __TEST_CANCEL();
-
- if (ret) {
- if ((*__errno_location())!=EINTR) return -1;
- return 0;
+ __NO_ASYNC_CANCEL_BEGIN;
+ __pthread_lock(&(cond->lock));
+ if (this->waiting) { /* still waiting -> TIMEOUT or SIGNAL */
+ _pthread_descr prev;
+ /* remove from wait-chain */
+ prev=cond->wait_chain;
+ if ((prev=cond->wait_chain)==this) {
+ cond->wait_chain=this->waitnext;
+ } else {
+ for (tmp=prev->waitnext;tmp;prev=tmp,tmp=prev->waitnext) {
+ if (tmp==this) {
+ prev->waitnext=this->waitnext;
+ break;
+ }
+ }
+ }
+ this->waiting=0;
+ this->waitnext=0;
}
+ __pthread_unlock(&(cond->lock));
+ __NO_ASYNC_CANCEL_END;
+
+ if (ret) return ETIMEDOUT;
- (*__errno_location())=ETIMEDOUT;
- return -1;
+ {
+ register int err = (*__errno_location());
+ if (err==EINTR) return err;
+ }
+ return 0;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_cond_wait.c b/mdk-stage1/dietlibc/libpthread/pthread_cond_wait.c
index 0c6c0ae13..8db49e840 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_cond_wait.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_cond_wait.c
@@ -14,6 +14,7 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
this=__thread_self();
/* put in wait-chain */
+ __NO_ASYNC_CANCEL_BEGIN;
__pthread_lock(&(cond->lock));
this->waiting=1;
if (cond->wait_chain) {
@@ -21,16 +22,37 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
tmp->waitnext=this;
} else cond->wait_chain=this;
__pthread_unlock(&(cond->lock));
+ __NO_ASYNC_CANCEL_STOP;
/* Aeh yeah / wait till signal */
pthread_mutex_unlock(mutex);
while (this->waiting) {
__thread_wait_some_time();
- if (this->canceled) this->waiting=0; /* we got a cancel signal */
+ if (this->canceled) break; /* we got a cancel signal */
}
pthread_mutex_lock(mutex);
- __TEST_CANCEL();
+ __NO_ASYNC_CANCEL_BEGIN;
+ __pthread_lock(&(cond->lock));
+ if (this->waiting) { /* still waiting -> SIGNAL */
+ _pthread_descr prev;
+ /* remove from wait-chain */
+ prev=cond->wait_chain;
+ if ((prev=cond->wait_chain)==this) {
+ cond->wait_chain=this->waitnext;
+ } else {
+ for (tmp=prev->waitnext;tmp;prev=tmp,tmp=prev->waitnext) {
+ if (tmp==this) {
+ prev->waitnext=this->waitnext;
+ break;
+ }
+ }
+ }
+ this->waiting=0;
+ this->waitnext=0;
+ }
+ __pthread_unlock(&(cond->lock));
+ __NO_ASYNC_CANCEL_END;
return 0;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_create.c b/mdk-stage1/dietlibc/libpthread/pthread_create.c
index b4a499081..714c2bf4b 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_create.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_create.c
@@ -15,21 +15,20 @@ int pthread_create (pthread_t *thread, const pthread_attr_t *attr,
__THREAD_INIT();
if (start_routine==0) {
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
td = __thread_get_free();
if (td) {
+ td->go.__spinlock=PTHREAD_SPIN_LOCKED;
if (!(attr)) {
pthread_attr_init(&default_attr);
attr=&default_attr;
}
if ((td->policy!=SCHED_OTHER)&&(td->priority==0)) {
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
if (attr->__inheritsched==PTHREAD_INHERIT_SCHED) {
@@ -48,14 +47,17 @@ int pthread_create (pthread_t *thread, const pthread_attr_t *attr,
td->stack_size = attr->__stacksize;
- if (!(td->stack_addr)) {
+ if (!(attr->__stackaddr)) {
char *stack=(char*)malloc(td->stack_size);
if (!(stack)) {
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
td->stack_begin = stack;
+#ifdef __parisc__
+ td->stack_addr = stack;
+#else
td->stack_addr = stack+td->stack_size;
+#endif
} else {
td->stack_begin = 0;
td->stack_addr = attr->__stackaddr;
@@ -65,12 +67,15 @@ int pthread_create (pthread_t *thread, const pthread_attr_t *attr,
if (ret>1)
*thread=ret;
- else
+ else {
+ ++td->exited; /* mark as exited */
__thread_cleanup(td);
+ if (ret<0) return (*(__errno_location()));
+ return EAGAIN;
+ }
}
else
- (*(__errno_location()))=EAGAIN;
+ return EAGAIN;
- if (ret<2) return -1;
- return ret;
+ return 0;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_detach.c b/mdk-stage1/dietlibc/libpthread/pthread_detach.c
index c07280389..2f72b97a7 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_detach.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_detach.c
@@ -13,19 +13,12 @@ int pthread_detach(pthread_t th)
j=__find_thread_id(th);
if (j==-1) {
- (*(__errno_location()))=ESRCH;
- return -1;
+ return ESRCH;
}
thread = __get_thread_struct(j);
- if (thread==0) {
- (*(__errno_location()))=ESRCH;
- return -1;
- }
-
if (thread->detached) {
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
if (!thread->joined) {
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_join.c b/mdk-stage1/dietlibc/libpthread/pthread_join.c
index 5b295bad1..39c076555 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_join.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_join.c
@@ -16,35 +16,24 @@ int pthread_join(pthread_t th, void **thread_return)
j=__find_thread_id(th);
if (j==-1) {
- (*(__errno_location()))=ESRCH;
- return -1;
+ return ESRCH;
}
thread = __get_thread_struct(j);
/* error handling */
if (thread==0) {
- (*(__errno_location()))=ESRCH;
- return -1;
+ return ESRCH;
}
if (this==thread) {
- (*(__errno_location()))=EDEADLK;
- return -1;
+ return EDEADLK;
}
if (thread->detached || thread->joined) {
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
- thread->joined=this;
- this->join=1;
-
- while(this->join) __thread_wait_some_time();
-
- if (thread_return) *thread_return=this->retval;
-
- return 0;
+ return __thread_join(thread,thread_return);
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_key_create.c b/mdk-stage1/dietlibc/libpthread/pthread_key_create.c
index 44fccea6a..9718c695b 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_key_create.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_key_create.c
@@ -1,3 +1,4 @@
+#include <string.h>
#include <unistd.h>
#include <errno.h>
@@ -19,7 +20,7 @@ int pthread_key_create(pthread_key_t *key, void (*destructor)(const void*))
if (!__thread_keys[i].used) {
__thread_keys[i].used=1;
__thread_keys[i].destructor=destructor;
- memset(__thread_keys[i].tkd,0,PTHREAD_THREADS_MAX*sizeof(struct _thread_key));
+ memset(__thread_keys[i].tkd,0,PTHREAD_THREADS_MAX*sizeof(void*));
*key=i;
ret=0;
break;
@@ -29,7 +30,7 @@ int pthread_key_create(pthread_key_t *key, void (*destructor)(const void*))
__pthread_unlock(&__thread_keys_lock);
__NO_ASYNC_CANCEL_END;
- if (ret) (*__errno_location())=EAGAIN;
- return ret;
+ if (ret) return EAGAIN;
+ return 0;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_key_delete.c b/mdk-stage1/dietlibc/libpthread/pthread_key_delete.c
index b1bc366e2..8f7fb577f 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_key_delete.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_key_delete.c
@@ -10,8 +10,7 @@ int pthread_key_delete(pthread_key_t key)
__THREAD_INIT();
if (key>=PTHREAD_KEYS_MAX) {
- (*__errno_location())=EINVAL;
- return -1;
+ return EINVAL;
}
__thread_keys[key].used=0;
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_mutex_destroy.c b/mdk-stage1/dietlibc/libpthread/pthread_mutex_destroy.c
index 33a16abd4..f5d66613c 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_mutex_destroy.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_mutex_destroy.c
@@ -8,9 +8,8 @@ int pthread_mutex_destroy(pthread_mutex_t *mutex)
{
__THREAD_INIT();
- if ((mutex->owner)||(mutex->lock.__spinlock)) {
- (*(__errno_location()))=EBUSY;
- return -1;
+ if ((mutex->owner)||(mutex->lock.__spinlock==PTHREAD_SPIN_LOCKED)) {
+ return EBUSY;
}
return 0;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_mutex_init.c b/mdk-stage1/dietlibc/libpthread/pthread_mutex_init.c
index b1797fb20..65161d0ec 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_mutex_init.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_mutex_init.c
@@ -1,6 +1,6 @@
#include <unistd.h>
#include <errno.h>
-
+#include <string.h>
#include <pthread.h>
#include "thread_internal.h"
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_mutex_lock.c b/mdk-stage1/dietlibc/libpthread/pthread_mutex_lock.c
index 0c3ade9e8..0df2bcd8d 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_mutex_lock.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_mutex_lock.c
@@ -15,19 +15,18 @@ int pthread_mutex_lock(pthread_mutex_t *mutex)
this = __thread_self();
- if (this!=mutex->owner) {
- /* wait for mutex to free */
- __pthread_lock(&(mutex->lock));
-
- mutex->owner=this;
- }
- else if (mutex->kind==PTHREAD_MUTEX_ERRORCHECK_NP)
- {
- (*(__errno_location()))=EDEADLK;
- return -1;
+ if (this==mutex->owner) {
+ if (mutex->kind==PTHREAD_MUTEX_ERRORCHECK_NP)
+ return EDEADLK;
+ if (mutex->kind==PTHREAD_MUTEX_RECURSIVE_NP) {
+ ++(mutex->count);
+ return 0;
+ }
}
- if (mutex->kind==PTHREAD_MUTEX_RECURSIVE_NP) ++(mutex->count);
+ /* wait for mutex to free */
+ __pthread_lock(&(mutex->lock));
+ mutex->owner=this;
return 0;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_mutex_trylock.c b/mdk-stage1/dietlibc/libpthread/pthread_mutex_trylock.c
index fcf63f75e..620d26150 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_mutex_trylock.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_mutex_trylock.c
@@ -18,16 +18,13 @@ int pthread_mutex_trylock(pthread_mutex_t *mutex)
if (this!=mutex->owner) {
/* wait for mutex to free */
if (__pthread_trylock(&(mutex->lock))) {
- (*(__errno_location()))=EBUSY;
- return -1;
+ return EBUSY;
}
mutex->owner=this;
}
- else if (mutex->kind==PTHREAD_MUTEX_ERRORCHECK_NP)
- {
- (*(__errno_location()))=EDEADLK;
- return -1;
+ else if (mutex->kind==PTHREAD_MUTEX_ERRORCHECK_NP) {
+ return EDEADLK;
}
if (mutex->kind==PTHREAD_MUTEX_RECURSIVE_NP) ++(mutex->count);
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_mutex_unlock.c b/mdk-stage1/dietlibc/libpthread/pthread_mutex_unlock.c
index 0b5a1d0f7..0c12282c1 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_mutex_unlock.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_mutex_unlock.c
@@ -17,17 +17,14 @@ int pthread_mutex_unlock(pthread_mutex_t *mutex)
if (this==mutex->owner) {
if (mutex->kind==PTHREAD_MUTEX_RECURSIVE_NP) {
- if (--(mutex->count))
- return 0;
+ if (--(mutex->count)) return 0;
}
mutex->owner=0;
__pthread_unlock(&(mutex->lock));
}
- else if (mutex->kind==PTHREAD_MUTEX_ERRORCHECK_NP)
- {
- (*(__errno_location()))=EPERM;
- return -1;
+ else if (mutex->kind==PTHREAD_MUTEX_ERRORCHECK_NP) {
+ return EPERM;
}
return 0;
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_mutexattr_setkind_np.c b/mdk-stage1/dietlibc/libpthread/pthread_mutexattr_setkind_np.c
index ac600f8ed..8b110fe5a 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_mutexattr_setkind_np.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_mutexattr_setkind_np.c
@@ -13,6 +13,5 @@ int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind)
attr->__mutexkind=kind;
return 0;
}
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_setcancelstate.c b/mdk-stage1/dietlibc/libpthread/pthread_setcancelstate.c
index b906492fb..f832bef70 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_setcancelstate.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_setcancelstate.c
@@ -20,6 +20,5 @@ int pthread_setcancelstate(int state, int *oldstate)
return 0;
}
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_setcanceltype.c b/mdk-stage1/dietlibc/libpthread/pthread_setcanceltype.c
index 03d1f53de..f5669b70d 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_setcanceltype.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_setcanceltype.c
@@ -20,6 +20,5 @@ int pthread_setcanceltype(int type, int *oldtype)
return 0;
}
- (*(__errno_location()))=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_setspecific.c b/mdk-stage1/dietlibc/libpthread/pthread_setspecific.c
index 78339c20b..b66ce31d0 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_setspecific.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_setspecific.c
@@ -15,7 +15,6 @@ int pthread_setspecific(pthread_key_t key, const void *value)
__thread_keys[key].tkd[id]=value;
return 0;
}
- (*__errno_location())=EINVAL;
- return -1;
+ return EINVAL;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_spinlock.c b/mdk-stage1/dietlibc/libpthread/pthread_spinlock.c
index 449782adf..463c186bd 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_spinlock.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_spinlock.c
@@ -2,12 +2,12 @@
#include <pthread.h>
#include "thread_internal.h"
-static void __pthread_acquire(int * spinlock)
+void __pthread_lock(struct _pthread_fastlock * lock)
{
int cnt = 0;
struct timespec tm;
- while (__testandset(spinlock)) {
+ while (__testandset(&lock->__spinlock)) {
if (cnt < MAX_SPIN_COUNT) {
sched_yield();
cnt++;
@@ -20,11 +20,6 @@ static void __pthread_acquire(int * spinlock)
}
}
-void __pthread_lock(struct _pthread_fastlock * lock)
-{
- __pthread_acquire(&lock->__spinlock);
-}
-
int __pthread_trylock(struct _pthread_fastlock * lock)
{
return __testandset(&lock->__spinlock);
@@ -32,7 +27,8 @@ int __pthread_trylock(struct _pthread_fastlock * lock)
int __pthread_unlock(struct _pthread_fastlock * lock)
{
- return (lock->__spinlock = 0);
+ lock->__spinlock = PTHREAD_SPIN_UNLOCKED;
+ return 0;
}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_sys_alloc.c b/mdk-stage1/dietlibc/libpthread/pthread_sys_alloc.c
index 9f7d23d79..9fd4bcd95 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_sys_alloc.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_sys_alloc.c
@@ -3,10 +3,11 @@
#include <pthread.h>
#include "thread_internal.h"
+#include <stdlib.h>
+
static pthread_mutex_t mutex_alloc = PTHREAD_MUTEX_INITIALIZER;
-void free(void *ptr)
-{
+void free(void *ptr) {
__NO_ASYNC_CANCEL_BEGIN;
pthread_mutex_lock(&mutex_alloc);
__libc_free(ptr);
@@ -14,8 +15,7 @@ void free(void *ptr)
__NO_ASYNC_CANCEL_END;
}
-void *malloc(size_t size)
-{
+void *malloc(size_t size) {
register void *ret;
__NO_ASYNC_CANCEL_BEGIN;
pthread_mutex_lock(&mutex_alloc);
@@ -24,3 +24,13 @@ void *malloc(size_t size)
__NO_ASYNC_CANCEL_END;
return ret;
}
+
+void* realloc(void* ptr, size_t size) {
+ register void *ret;
+ __NO_ASYNC_CANCEL_BEGIN;
+ pthread_mutex_lock(&mutex_alloc);
+ ret=__libc_realloc(ptr, size);
+ pthread_mutex_unlock(&mutex_alloc);
+ __NO_ASYNC_CANCEL_END;
+ return ret;
+}
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_sys_fcntl.c b/mdk-stage1/dietlibc/libpthread/pthread_sys_fcntl.c
index 99210a488..c7c3fb884 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_sys_fcntl.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_sys_fcntl.c
@@ -3,6 +3,7 @@
#include <pthread.h>
#include "thread_internal.h"
+int fcntl(int fd, int cmd, void *arg);
int fcntl(int fd, int cmd, void *arg)
{
__TEST_CANCEL();
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_sys_logging.c b/mdk-stage1/dietlibc/libpthread/pthread_sys_logging.c
index 6070ad219..f9f93dce2 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_sys_logging.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_sys_logging.c
@@ -4,6 +4,8 @@
#include <pthread.h>
#include "thread_internal.h"
+#include <syslog.h>
+
static pthread_mutex_t mutex_syslog = PTHREAD_MUTEX_INITIALIZER;
void closelog(void)
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_sys_open.c b/mdk-stage1/dietlibc/libpthread/pthread_sys_open.c
index 513f6a323..8d9fb5523 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_sys_open.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_sys_open.c
@@ -3,6 +3,7 @@
#include <pthread.h>
#include "thread_internal.h"
+int __pthread_open(const char *pathname, int flags, mode_t mode);
int __pthread_open(const char *pathname, int flags, mode_t mode)
{
__TEST_CANCEL();
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_sys_tcdrain.c b/mdk-stage1/dietlibc/libpthread/pthread_sys_tcdrain.c
index 1ac33adfc..d5d94978b 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_sys_tcdrain.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_sys_tcdrain.c
@@ -3,6 +3,8 @@
#include <pthread.h>
#include "thread_internal.h"
+#include <termios.h>
+
int tcdrain(int fd)
{
__TEST_CANCEL();
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_sys_waitpid.c b/mdk-stage1/dietlibc/libpthread/pthread_sys_waitpid.c
index 76d5ddca7..e5020221a 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_sys_waitpid.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_sys_waitpid.c
@@ -3,6 +3,8 @@
#include <pthread.h>
#include "thread_internal.h"
+#include <sys/wait.h>
+
pid_t waitpid(pid_t pid, int *status, int options)
{
__TEST_CANCEL();
diff --git a/mdk-stage1/dietlibc/libpthread/pthread_testcancel.c b/mdk-stage1/dietlibc/libpthread/pthread_testcancel.c
index 68f91e743..4151faca3 100644
--- a/mdk-stage1/dietlibc/libpthread/pthread_testcancel.c
+++ b/mdk-stage1/dietlibc/libpthread/pthread_testcancel.c
@@ -10,7 +10,7 @@ void pthread_testcancel()
thread=__thread_self();
- if (thread->canceled) {
+ if (thread && thread->canceled) {
pthread_exit(PTHREAD_CANCELED);
}
}
diff --git a/mdk-stage1/dietlibc/libpthread/thread_internal.c b/mdk-stage1/dietlibc/libpthread/thread_internal.c
deleted file mode 100644
index a93806203..000000000
--- a/mdk-stage1/dietlibc/libpthread/thread_internal.c
+++ /dev/null
@@ -1,344 +0,0 @@
-#include <signal.h>
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include <sched.h>
-#include <sys/resource.h>
-
-#include <stdio.h>
-#include "thread_internal.h"
-
-static struct _pthread_fastlock __thread_struct_lock = {0};
-static struct _pthread_descr_struct threads[PTHREAD_THREADS_MAX];
-static int _max_used_thread_id=1;
-pthread_once_t __thread_inited;
-
-static struct _pthread_fastlock __manager_thread_signal_lock = {0};
-static struct _pthread_fastlock __manager_thread_data_lock = {1};
-static struct _pthread_fastlock __manager_thread_data_go_lock = {1};
-
-//#define DEBUG
-
-/* find thread */
-int __find_thread_id(int pid)
-{
- register int i;
- for (i=0; i<_max_used_thread_id; i++)
- if (threads[i].pid==pid)
- return i;
- return -1;
-}
-
-/* get thread */
-_pthread_descr __get_thread_struct(int id)
-{
- return threads+id;
-}
-
-/* thread errno location */
-int *__errno_location(void)
-{
- int id=0;
- if (__thread_inited) id=__find_thread_id(getpid());
- if (id<0)
- return 0;
- else
- return &threads[id].errno;
-}
-
-/* thread self */
-_pthread_descr __thread_self()
-{
- register int i=__find_thread_id(getpid());
- if (i<0)
- return 0;
- else
- return threads+i;
-}
-
-/* allocate a thread slot */
-_pthread_descr __thread_get_free()
-{
- _pthread_descr ret=0;
- int i;
-
- __NO_ASYNC_CANCEL_BEGIN;
- __pthread_lock(&__thread_struct_lock);
-
- for (i=0; i<PTHREAD_THREADS_MAX; i++) {
- if (threads[i].pid==0) {
- threads[i].pid=1; /* mark as taken */
- ret = threads+i;
- if (i>=_max_used_thread_id) _max_used_thread_id=i+1;
- break;
- }
- }
-
- __pthread_unlock(&__thread_struct_lock);
- __NO_ASYNC_CANCEL_END;
- return ret;
-}
-
-/* sleep a little (reschedule for this time) */
-void __thread_wait_some_time()
-{
- struct timespec reg;
- reg.tv_sec=0;
- reg.tv_nsec=SPIN_SLEEP_DURATION;
- __libc_nanosleep(&reg,0);
-}
-
-/* cleanup a thread struct */
-void __thread_cleanup(_pthread_descr th)
-{
- /* lib provided stack should be freed */
- if (th->stack_begin) free(th->stack_begin);
-
- /* an other thread has joined this on */
- if (th->joined) {
- th->joined->retval=th->retval;
- th->joined->join=0;
- th->joined=0;
- }
- th->pid=0; /* mark struct as free */
-}
-
-/* SIGHUP handler (thread cnacel) PTHREAD_CANCEL_ASYNCHRONOUS */
-static void __thread_cancel_handler(int sig)
-{
- _pthread_descr this;
- this = __thread_self();
- this->canceled=1;
- if (this->canceltype==PTHREAD_CANCEL_ASYNCHRONOUS)
- pthread_exit(PTHREAD_CANCELED);
- signal( SIGHUP, __thread_cancel_handler );
-}
-
-/* kill ALL threads / other then prime task and manager thread */
-static void __kill_all_threads()
-{
- int i;
-
- for (i=2; i<_max_used_thread_id; i++) {
- if (threads[i].pid>1) {
-#ifdef DEBUG
- printf("CANCEL ! %d\n",threads[i].pid);
-#endif
- threads[i].canceled=1;
- kill(threads[i].pid, SIGHUP); /* cancel thread */
- }
- }
-
- __thread_wait_some_time();
-
- for (i=2; i<_max_used_thread_id; i++) {
- if (threads[i].pid>1) {
-#ifdef DEBUG
- printf("KILL ! %d\n",threads[i].pid);
-#endif
- kill(threads[i].pid, SIGTERM); /* KILL thread */
- }
- }
-}
-
-__attribute__((weak)) volatile void __thread_start__key(int id) { return; }
-__attribute__((weak,alias("__thread_start__key"))) volatile void __thread_exit__key(int id);
-
-/* support for manager */
-static void *__mthread_starter(void *arg)
-{
- _pthread_descr td = (_pthread_descr)arg;
- int i = td->stack_size-4096;
-
- /* just to be sure */
- td->pid=getpid();
-
- /* signal handling for a thread */
- signal(SIGTERM, _exit);
- signal(SIGCHLD, SIG_DFL);
- signal(SIGHUP, __thread_cancel_handler );
-
- /* limit stack so that we NEVER have to worry */
- setrlimit(RLIMIT_STACK, (struct rlimit *)(&i));
-
- /* set scheduler */
- if (td->policy!=SCHED_OTHER) {
- struct sched_param sp;
- sp.sched_priority=td->priority;
- sched_setscheduler(td->pid,td->policy, &sp);
- }
-
- /* thread_key glue */
- __thread_start__key(td-threads);
-
-#ifdef DEBUG
- printf("in starter %d, parameter %8p\n", td->pid, td->func);
-#endif
-
- if (!td->canceled) {
- if (!(setjmp(td->jmp_exit))) {
- td->retval=td->func(td->arg);
-#ifdef DEBUG
- } else {
- printf("pthread_exit called in %d\n", td->pid);
-#endif
- }
- }
- pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,0);
-
- /* thread_key glue */
- __thread_exit__key(td-threads);
-
-#ifdef DEBUG
- printf("end starter %d, retval %8p\n", td->pid, td->retval);
-#endif
-
- /* wake joined thread and put retval */
- if (td->joined) {
- td->joined->retval=td->retval;
- td->joined->join=0;
- td->joined=0;
- }
-
- /* execute all functions on the cleanup-stack */
- for (i=PTHREAD_MAX_CLEANUP;i;) {
- if (td->cleanup_stack[--i].func) {
- td->cleanup_stack[i].func(td->cleanup_stack[i].arg);
- }
- }
-
- return 0;
-}
-
-
-/* manager thread and signal handler */
-static char __manager_thread_stack[12*1024];
-static volatile _pthread_descr __manager_thread_data;
-static void __manager_SIGCHLD(int sig)
-{
- int pid, status, i;
-
- while(1) {
- pid = __libc_waitpid (-1, &status, WNOHANG);
- if (pid <= 0) break;
-
- for (i=0; i<_max_used_thread_id; i++) {
- if (threads[i].pid==pid) {
- __thread_cleanup(threads+i);
- break;
- }
- }
- }
-}
-
-static void __manager_SIGTERM(int sig)
-{
- __kill_all_threads();
- _exit(0);
-}
-
-static void* __manager_thread(void *arg)
-{
- struct sigaction sig_action_chld;
- sig_action_chld.sa_handler = __manager_SIGCHLD;
- sigemptyset(&sig_action_chld.sa_mask);
- sig_action_chld.sa_flags = SA_RESTART;
-
- sigaction(SIGCHLD, &sig_action_chld, 0);
- signal(SIGTERM, __manager_SIGTERM);
- signal(SIGHUP, SIG_IGN);
-
- __pthread_unlock(&__manager_thread_data_go_lock); /* release init */
- while(1) {
- do {
- __thread_wait_some_time();
- if (getppid()<0) __manager_SIGTERM(0);
- } while (__pthread_trylock(&__manager_thread_data_lock));
-
- __manager_thread_data->pid =
- __clone(__mthread_starter,
- __manager_thread_data->stack_addr,
- CLONE_VM | CLONE_FS | CLONE_FILES | SIGCHLD,
- __manager_thread_data);
- __thread_wait_some_time();
-#ifdef DEBUG
- printf("manager new thread %d\n",__manager_thread_data->pid);
-#endif
- __pthread_unlock(&__manager_thread_data_go_lock); /* release sender */
- }
- return 0;
-}
-
-/* pthread_create bottom half */
-int signal_manager_thread(_pthread_descr td)
-{
- __NO_ASYNC_CANCEL_BEGIN;
-
- __pthread_lock(&__manager_thread_signal_lock); /* lock */
-
- __manager_thread_data = td;
- __thread_wait_some_time();
- __pthread_unlock(&__manager_thread_data_lock); /* signal manager to start */
- __thread_wait_some_time();
- __pthread_lock(&__manager_thread_data_go_lock); /* wait for manager */
-
- __pthread_unlock(&__manager_thread_signal_lock); /* unlock */
-
- __NO_ASYNC_CANCEL_END;
-
- return td->pid;
-}
-
-
-/* thread stop */
-static void __thread_main_exit()
-{
- if (getpid()!=threads[0].pid) {
-#ifdef DEBUG
- printf("A THREAD ? %d\n",getpid());
-#endif
- kill(threads[0].pid, SIGTERM);
- while(1) __thread_wait_some_time();
- }
-#ifdef DEBUG
- else
- printf("EXIT ! %d\n",getpid());
-#endif
-
- /* stop ALL threads */
- kill(threads[1].pid, SIGTERM);
- __thread_wait_some_time();
- __kill_all_threads();
-}
-
-/* thread intern init */
-void __thread_init()
-{
- if (atexit(__thread_main_exit)==-1)
- exit(42);
-
-#ifdef DEBUG
- printf("INIT ! %d\n",getpid());
- memset(threads,0,sizeof(threads));
-#endif
-
- threads[0].pid = getpid();
-
- ++_max_used_thread_id;
- threads[1].stack_size=sizeof(__manager_thread_stack);
- threads[1].stack_addr=&__manager_thread_stack[sizeof(__manager_thread_stack)];
- threads[1].stack_begin=0;
- threads[1].func=__manager_thread;
-
- threads[1].pid = __clone(__mthread_starter, threads[1].stack_addr,
- CLONE_VM | CLONE_FS | CLONE_FILES, threads+1);
-
-#ifdef DEBUG
- printf("manager thread @ : %d\n",threads[1].pid);
-#endif
- __pthread_lock(&__manager_thread_data_go_lock); /* wait for manager to be ready */
-}
-
diff --git a/mdk-stage1/dietlibc/libpthread/thread_internal.h b/mdk-stage1/dietlibc/libpthread/thread_internal.h
index 5eb3bbd08..7843fb59d 100644
--- a/mdk-stage1/dietlibc/libpthread/thread_internal.h
+++ b/mdk-stage1/dietlibc/libpthread/thread_internal.h
@@ -9,6 +9,8 @@
#error "the diet libc is not compiled with thread safeness enabled!"
#endif
+#undef errno
+
/* cleanup */
#define PTHREAD_MAX_CLEANUP 8
struct thread_cleanup_t {
@@ -18,15 +20,13 @@ struct thread_cleanup_t {
/* the thread descriptor / internal */
struct _pthread_descr_struct {
- /* runtime handling */
- struct _pthread_descr_struct *joined; /* a joined thread or NULL */
-
/* conditional variables */
struct _pthread_descr_struct *waitnext; /* an other waiting thread or NULL */
int waiting; /* internal waiting "lock" */
/* thread/process data */
int pid; /* Process id */
+ int exited; /* Process is dead */
int policy; /* thread scheduling policy */
int priority; /* thread priority */
@@ -42,7 +42,7 @@ struct _pthread_descr_struct {
/* thread exit handling */
void *retval; /* thread return value */
- int join; /* thread waits for other to return */
+ int joined; /* flag other thread has joined */
jmp_buf jmp_exit; /* pthread_exit jump */
/* thread flags */
@@ -58,7 +58,7 @@ struct _pthread_descr_struct {
void* arg; /* thread argument */
/* create thread / manager thread lock */
- struct _pthread_fastlock *manager_lock;
+ struct _pthread_fastlock go;
/* cleanup stack */
struct thread_cleanup_t cleanup_stack[PTHREAD_MAX_CLEANUP];
@@ -84,12 +84,13 @@ int __clone(void* (*fn)(void*), void* stack, int flags, void *arg);
int __find_thread_id(int pid);
_pthread_descr __get_thread_struct(int id);
-_pthread_descr __thread_get_free();
-_pthread_descr __thread_self();
+_pthread_descr __thread_get_free(void);
+_pthread_descr __thread_self(void);
-void __thread_cleanup(_pthread_descr th);
+int __thread_join(_pthread_descr join, void **return_value);
+#define __thread_cleanup(th) (void)__thread_join((th),0)
-void __thread_wait_some_time();
+void __thread_wait_some_time(void);
#define __NO_ASYNC_CANCEL_BEGIN { int oldtype; pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
#define __NO_ASYNC_CANCEL_END pthread_setcanceltype(oldtype,0); pthread_testcancel(); }
@@ -100,7 +101,7 @@ int signal_manager_thread(_pthread_descr td);
/* init stuff */
extern pthread_once_t __thread_inited;
-void __thread_init();
+void __thread_init(void);
#define __THREAD_INIT() __pthread_once(&__thread_inited, __thread_init)
#define __TEST_CANCEL() pthread_testcancel()
@@ -108,6 +109,7 @@ void __thread_init();
void __libc_free(void *ptr);
void *__libc_malloc(size_t size);
+void *__libc_realloc(void* ptr, size_t size);
void __libc_closelog(void);
void __libc_openlog(const char *ident, int option, int facility);
@@ -119,6 +121,7 @@ int __libc_close(int fd);
int __libc_creat(const char *pathname, mode_t mode);
int __libc_fcntl(int fd, int cmd, void *arg);
int __libc_fsync(int fd);
+int __libc_fdatasync(int fd);
int __libc_nanosleep(const struct timespec *req, struct timespec *rem);
int __libc_open(const char *pathname, int flags, mode_t mode);
int __libc_pause(void);
diff --git a/mdk-stage1/dietlibc/libpthread/thread_key.c b/mdk-stage1/dietlibc/libpthread/thread_key.c
deleted file mode 100644
index b0f719fc9..000000000
--- a/mdk-stage1/dietlibc/libpthread/thread_key.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <unistd.h>
-#include <errno.h>
-
-#include <pthread.h>
-#include "thread_internal.h"
-
-struct _pthread_fastlock __thread_keys_lock;
-struct _thread_key __thread_keys[PTHREAD_KEYS_MAX];
-
-void __thread_start__key(int id)
-{
- int i;
-
- __NO_ASYNC_CANCEL_BEGIN;
- __pthread_lock(&__thread_keys_lock);
-
- for (i=0; i<PTHREAD_KEYS_MAX; i++) {
- __thread_keys[i].tkd[id]=0;
- }
-
- __pthread_unlock(&__thread_keys_lock);
- __NO_ASYNC_CANCEL_END;
-}
-
-void __thread_exit__key(int id)
-{
- int i,try;
-
- __NO_ASYNC_CANCEL_BEGIN;
- __pthread_lock(&__thread_keys_lock);
-
- for (i=0; i<PTHREAD_KEYS_MAX; i++) {
- if ((__thread_keys[i].used) && (__thread_keys[i].destructor)) {
- for (try=0;__thread_keys[i].tkd[id] && (try<PTHREAD_DESTRUCTOR_ITERATIONS);++try)
- __thread_keys[i].destructor(__thread_keys[i].tkd[id]);
- }
- }
-
- __pthread_unlock(&__thread_keys_lock);
- __NO_ASYNC_CANCEL_STOP;
-}
diff --git a/mdk-stage1/dietlibc/libregex/rx.c b/mdk-stage1/dietlibc/libregex/rx.c
index b28358c2e..9bab3e22c 100644
--- a/mdk-stage1/dietlibc/libregex/rx.c
+++ b/mdk-stage1/dietlibc/libregex/rx.c
@@ -1,8 +1,11 @@
+#define NDEBUG
#include <regex.h>
#include <stdlib.h>
+#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <string.h>
+#include <assert.h>
/* this is ugly.
* the idea is to build a parse tree, then do some poor man's OOP with a
@@ -40,7 +43,7 @@ struct regex {
struct atom {
matcher m;
void* next;
- enum { EMPTY, REGEX, BRACKET, ANY, LINESTART, LINEEND, WORDSTART, WORDEND, CHAR, } type;
+ enum { ILLEGAL, EMPTY, REGEX, BRACKET, ANY, LINESTART, LINEEND, WORDSTART, WORDEND, CHAR, } type;
int bnum;
union {
struct regex r;
@@ -64,7 +67,7 @@ struct branch {
};
static void clearcc(unsigned int* x) {
- memset(x,0,sizeof(*x));
+ memset(x,0,sizeof(struct bracketed));
}
static void setcc(unsigned int* x,unsigned int bit) {
@@ -84,9 +87,9 @@ static const char* parsebracketed(struct bracketed*__restrict__ b,const char*__r
if (*t=='^') { negflag=1; ++t; }
do {
if (*t==0) return s;
- setcc(b->cc,rx->cflags&REG_ICASE?*t:tolower(*t));
+ setcc(b->cc,rx->cflags&REG_ICASE?tolower(*t):*t);
if (t[1]=='-' && t[2]!=']') {
- for (i=*t+1; i<=t[2]; ++i) setcc(b->cc,rx->cflags&REG_ICASE?i:tolower(i));
+ for (i=*t+1; i<=t[2]; ++i) setcc(b->cc,rx->cflags&REG_ICASE?tolower(i):i);
t+=2;
}
++t;
@@ -97,55 +100,79 @@ static const char* parsebracketed(struct bracketed*__restrict__ b,const char*__r
static const char* parseregex(struct regex* r,const char* s,regex_t* rx);
-static int matchatom(void*__restrict__ x,const char*__restrict__ s,int ofs,struct __regex_t*__restrict__ preg,int plus,int eflags) {
+static int matchatom(void*__restrict__ x,const unsigned char*__restrict__ s,int ofs,struct __regex_t*__restrict__ preg,int plus,int eflags) {
register struct atom* a=(struct atom*)x;
int matchlen=0;
+ assert(a->type!=ILLEGAL);
switch (a->type) {
case EMPTY:
-// printf("matching EMPTY against \"%s\"\n",s);
- preg->l[a->bnum].rm_so=preg->l[a->bnum].rm_eo=ofs;
+#ifdef DEBUG
+ printf("matching atom EMPTY against \"%s\"\n",s);
+ printf("a->bnum is %d\n",a->bnum);
+#endif
+ if (a->bnum>=0) preg->l[a->bnum].rm_so=preg->l[a->bnum].rm_eo=ofs;
goto match;
case REGEX:
-// printf("matching REGEX against \"%s\"\n",s);
- if ((matchlen=a->u.r.m(a,s,ofs,preg,0,eflags))>=0) {
+#ifdef DEBUG
+ printf("matching atom REGEX against \"%s\"\n",s);
+ printf("a->bnum is %d\n",a->bnum);
+#endif
+ if ((matchlen=a->u.r.m(&a->u.r,s,ofs,preg,0,eflags))>=0) {
+ assert(a->bnum>=0);
preg->l[a->bnum].rm_so=ofs;
preg->l[a->bnum].rm_eo=ofs+matchlen;
goto match;
}
break;
case BRACKET:
-// printf("matching BRACKET against \"%s\"\n",s);
+#ifdef DEBUG
+ printf("matching atom BRACKET against \"%s\"\n",s);
+#endif
matchlen=1;
if (*s=='\n' && (preg->cflags&REG_NEWLINE)) break;
if (*s && issetcc(a->u.b.cc,(preg->cflags&REG_ICASE?tolower(*s):*s)))
goto match;
break;
case ANY:
-// printf("matching ANY against \"%s\"\n",s);
+#ifdef DEBUG
+ printf("matching atom ANY against \"%s\"\n",s);
+#endif
if (*s=='\n' && (preg->cflags&REG_NEWLINE)) break;
matchlen=1;
if (*s) goto match;
break;
case LINESTART:
-// printf("matching LINESTART against \"%s\"\n",s);
+#ifdef DEBUG
+ printf("matching atom LINESTART against \"%s\"\n",s);
+#endif
if (ofs==0 && (eflags&REG_NOTBOL)==0) {
goto match;
}
break;
case LINEEND:
-// printf("matching LINEEND against \"%s\"\n",s);
- if ((*s && *s!='\n') || (eflags&REG_NOTEOL)==0) break;
+#ifdef DEBUG
+ printf("matching atom LINEEND against \"%s\"\n",s);
+#endif
+ if ((*s && *s!='\n') || (eflags&REG_NOTEOL)) break;
goto match;
case WORDSTART:
- if ((ofs==0 || isspace(s[-1])) && !isspace(*s))
+#ifdef DEBUG
+ printf("matching atom WORDSTART against \"%s\"\n",s);
+#endif
+ if ((ofs==0 || !isalnum(s[-1])) && isalnum(*s))
goto match;
break;
case WORDEND:
- if (ofs>0 && !isspace(s[-1]) && isspace(*s))
+#ifdef DEBUG
+ printf("matching atom WORDEND against \"%s\"\n",s);
+#endif
+ if (ofs>0 && isalnum(s[-1]) && !isalnum(*s))
goto match;
break;
case CHAR:
-// printf("matching CHAR %c against \"%s\"\n",a->u.c,s);
+#ifdef DEBUG
+ printf("matching atom CHAR %c against \"%s\"\n",a->u.c,s);
+#endif
matchlen=1;
if (((preg->cflags&REG_ICASE)?tolower(*s):*s)==a->u.c) goto match;
break;
@@ -160,7 +187,7 @@ match:
static const char* parseatom(struct atom*__restrict__ a,const char*__restrict__ s,regex_t*__restrict__ rx) {
const char *tmp;
- a->m=matchatom;
+ a->m=(matcher)matchatom;
a->bnum=-1;
switch (*s) {
case '(':
@@ -203,7 +230,7 @@ static const char* parseatom(struct atom*__restrict__ a,const char*__restrict__
}
default:
a->type=CHAR;
- a->u.c=rx->cflags&REG_ICASE?*s:tolower(*s);
+ a->u.c=rx->cflags&REG_ICASE?tolower(*s):*s;
break;
}
return s+1;
@@ -213,9 +240,15 @@ static const char* parseatom(struct atom*__restrict__ a,const char*__restrict__
static int matchpiece(void*__restrict__ x,const char*__restrict__ s,int ofs,struct __regex_t*__restrict__ preg,int plus,int eflags) {
register struct piece* a=(struct piece*)x;
int matchlen=0;
- int tmp,num=0;
- unsigned int *offsets=alloca(sizeof(int)*a->max);
+ int tmp=0,num=0;
+ unsigned int *offsets;
+ assert(a->max>0 && a->max<1000);
+#ifdef DEBUG
+ printf("alloca(%d)\n",sizeof(int)*a->max);
+#endif
+ offsets=alloca(sizeof(int)*a->max);
offsets[0]=0;
+// printf("allocating %d offsets...\n",a->max);
// printf("matchpiece \"%s\"...\n",s);
/* first, try to match the atom as often as possible, up to a->max times */
if (a->max == 1 && a->min == 1)
@@ -227,6 +260,7 @@ static int matchpiece(void*__restrict__ x,const char*__restrict__ s,int ofs,stru
a->a.next=save;
++num;
matchlen+=tmp;
+// printf("setting offsets[%d] to %d\n",num,tmp);
offsets[num]=tmp;
} else {
a->a.next=save;
@@ -235,12 +269,13 @@ static int matchpiece(void*__restrict__ x,const char*__restrict__ s,int ofs,stru
}
if (num<a->min) return -1; /* already at minimum matches; signal mismatch */
/* then, while the rest does not match, back off */
- for (;;) {
+ for (;num>=0;) {
if (a->next)
tmp=((struct atom*)(a->next))->m(a->next,s+matchlen,ofs+matchlen,preg,plus+matchlen,eflags);
else
tmp=plus+matchlen;
if (tmp>=0) break; /* it did match; don't back off any further */
+// printf("using offsets[%d] (%d)\n",num,offsets[num]);
matchlen-=offsets[num];
--num;
}
@@ -279,6 +314,11 @@ static const char* parsepiece(struct piece*__restrict__ p,const char*__restrict_
static int matchbranch(void*__restrict__ x,const char*__restrict__ s,int ofs,struct __regex_t*__restrict__ preg,int plus,int eflags) {
register struct branch* a=(struct branch*)x;
int tmp;
+#ifdef DEBUG
+ printf("%08p matching branch against \"%s\"\n",a,s);
+ printf("%p %p\n",&a->p->m,a->p->m);
+#endif
+ assert(a->p->m==matchpiece);
tmp=a->p->m(a->p,s,ofs,preg,plus,eflags);
if (tmp>=0) {
if (a->next)
@@ -291,7 +331,7 @@ static int matchbranch(void*__restrict__ x,const char*__restrict__ s,int ofs,str
static const char* parsebranch(struct branch*__restrict__ b,const char*__restrict__ s,regex_t*__restrict__ rx,int*__restrict__ pieces) {
struct piece p;
- const char *tmp;
+ const char *tmp; /* the gcc warning here is bogus */
b->m=matchbranch;
b->num=0; b->p=0;
for (;;) {
@@ -305,9 +345,11 @@ static const char* parsebranch(struct branch*__restrict__ b,const char*__restric
tmp=parsepiece(&p,s,rx);
if (tmp==s) return s;
}
+// printf("b->p from %p to ",b->p);
if (!(b->p=realloc(b->p,++b->num*sizeof(p)))) return s;
+// printf("%p (size %d)\n",b->p,b->num*sizeof(p));
b->p[b->num-1]=p;
- if (*s=='|') { ++tmp; break; }
+ if (*tmp=='|') { break; }
s=tmp;
}
*pieces+=b->num;
@@ -318,7 +360,11 @@ static const char* parsebranch(struct branch*__restrict__ b,const char*__restric
static int matchregex(void*__restrict__ x,const char*__restrict__ s,int ofs,struct __regex_t*__restrict__ preg,int plus,int eflags) {
register struct regex* a=(struct regex*)x;
int i,tmp;
+#ifdef DEBUG
+ printf("%08p matching regex against \"%s\"\n",a,s);
+#endif
for (i=0; i<a->num; ++i) {
+ assert(a->b[i].m==matchbranch);
tmp=a->b[i].m(&a->b[i],s,ofs,preg,plus,eflags);
if (tmp>=0) {
if (a->next)
@@ -335,12 +381,15 @@ static const char* parseregex(struct regex*__restrict__ r,const char*__restrict_
const char *tmp;
r->m=matchregex;
r->num=0; r->b=0; r->pieces=0;
+ p->brackets=0;
for (;;) {
tmp=parsebranch(&b,s,p,&r->pieces);
if (tmp==s) return s;
+// printf("r->b from %p to ",r->b);
if (!(r->b=realloc(r->b,++r->num*sizeof(b)))) return s;
+// printf("%p (size %d)\n",r->b,r->num*sizeof(b));
r->b[r->num-1]=b;
- s=tmp;
+ s=tmp; if (*s=='|') ++s;
}
return tmp;
}
@@ -355,7 +404,7 @@ static void regex_putnext(struct regex* r,void* next);
static void atom_putnext(struct atom*__restrict__ a,void*__restrict__ next) {
a->next=next;
if (a->type==REGEX)
- regex_putnext(&a->u.r,next);
+ regex_putnext(&a->u.r,0);
}
static void piece_putnext(struct piece*__restrict__ p,void*__restrict__ next) {
@@ -365,8 +414,12 @@ static void piece_putnext(struct piece*__restrict__ p,void*__restrict__ next) {
static void branch_putnext(struct branch*__restrict__ b,void*__restrict__ next) {
int i;
- for (i=0; i<b->num-1; ++i)
- piece_putnext(&b->p[i],&b->p[i+1]);
+ for (i=0; i<b->num-1; ++i) {
+ if (b->p[i+1].min==1 && b->p[i+1].max==1)
+ piece_putnext(&b->p[i],&b->p[i+1].a);
+ else
+ piece_putnext(&b->p[i],&b->p[i+1]);
+ }
piece_putnext(&b->p[i],0);
b->next=next;
}
@@ -381,21 +434,29 @@ static void regex_putnext(struct regex*__restrict__ r,void*__restrict__ next) {
int regcomp(regex_t*__restrict__ preg, const char*__restrict__ regex, int cflags) {
- const char* t=parseregex(&preg->r,regex,preg);
+ const char* t;
+ preg->cflags=cflags;
+ t=parseregex(&preg->r,regex,preg);
if (t==regex) return -1;
regex_putnext(&preg->r,0);
- preg->cflags=cflags;
return 0;
}
int regexec(const regex_t*__restrict__ preg, const char*__restrict__ string, size_t nmatch, regmatch_t pmatch[], int eflags) {
int matched;
const char *orig=string;
- ((regex_t*)preg)->l=alloca(sizeof(regmatch_t)*(preg->brackets+1));
+ assert(preg->brackets+1>0 && preg->brackets<1000);
+#ifdef DEBUG
+ printf("alloca(%d)\n",sizeof(regmatch_t)*(preg->brackets+3));
+#endif
+ ((regex_t*)preg)->l=alloca(sizeof(regmatch_t)*(preg->brackets+3));
while (*string) {
matched=preg->r.m((void*)&preg->r,string,string-orig,(regex_t*)preg,0,eflags);
+// printf("ebp on stack = %x\n",stack[1]);
if (matched>=0) {
- if ((preg->cflags&REG_NOSUB)==0) memmove(pmatch,preg->l,nmatch*sizeof(regmatch_t));
+ preg->l[0].rm_so=string-orig;
+ preg->l[0].rm_eo=string-orig+matched;
+ if ((preg->cflags&REG_NOSUB)==0) memcpy(pmatch,preg->l,nmatch*sizeof(regmatch_t));
return 0;
}
++string; eflags|=REG_NOTBOL;
@@ -407,10 +468,9 @@ int regexec(const regex_t*__restrict__ preg, const char*__restrict__ string, siz
void regfree(regex_t* preg) {
int i;
- for (i=0; i<preg->r.num; ++i) {
+ for (i=0; i<preg->r.num; ++i)
free(preg->r.b[i].p);
free(preg->r.b);
- }
}
size_t regerror(int errcode, const regex_t*__restrict__ preg, char*__restrict__ errbuf, size_t errbuf_size) {
diff --git a/mdk-stage1/dietlibc/librpc/auth_none.c b/mdk-stage1/dietlibc/librpc/auth_none.c
index 7a4dffe87..59124bae4 100644
--- a/mdk-stage1/dietlibc/librpc/auth_none.c
+++ b/mdk-stage1/dietlibc/librpc/auth_none.c
@@ -46,14 +46,11 @@ static char sccsid[] =
#include <rpc/auth.h>
#define MAX_MARSHEL_SIZE 20
-/*
- * Authenticator operations routines
- */
static void authnone_verf();
-static void authnone_destroy();
-static bool_t authnone_marshal();
static bool_t authnone_validate();
static bool_t authnone_refresh();
+static void authnone_destroy();
+static bool_t authnone_marshal(AUTH *client, XDR *xdrs);
static struct auth_ops ops = {
authnone_verf,
@@ -66,7 +63,7 @@ static struct auth_ops ops = {
static struct authnone_private {
AUTH no_client;
char marshalled_client[MAX_MARSHEL_SIZE];
- u_int mcnt;
+ unsigned int mcnt;
} *authnone_private;
AUTH *authnone_create()
@@ -86,7 +83,7 @@ AUTH *authnone_create()
ap->no_client.ah_ops = &ops;
xdrs = &xdr_stream;
xdrmem_create(xdrs, ap->marshalled_client,
- (u_int) MAX_MARSHEL_SIZE, XDR_ENCODE);
+ (unsigned int) MAX_MARSHEL_SIZE, XDR_ENCODE);
(void) xdr_opaque_auth(xdrs, &ap->no_client.ah_cred);
(void) xdr_opaque_auth(xdrs, &ap->no_client.ah_verf);
ap->mcnt = XDR_GETPOS(xdrs);
@@ -126,3 +123,4 @@ static bool_t authnone_refresh()
static void authnone_destroy()
{
}
+
diff --git a/mdk-stage1/dietlibc/librpc/auth_unix.c b/mdk-stage1/dietlibc/librpc/auth_unix.c
index 5daeb5f4a..59eb6ff18 100644
--- a/mdk-stage1/dietlibc/librpc/auth_unix.c
+++ b/mdk-stage1/dietlibc/librpc/auth_unix.c
@@ -78,9 +78,9 @@ static struct auth_ops auth_unix_ops = {
struct audata {
struct opaque_auth au_origcred; /* original credentials */
struct opaque_auth au_shcred; /* short hand cred */
- u_long au_shfaults; /* short hand cache faults */
+ unsigned long au_shfaults; /* short hand cache faults */
char au_marshed[MAX_AUTH_BYTES];
- u_int au_mpos; /* xdr pos at end of marshed */
+ unsigned int au_mpos; /* xdr pos at end of marshed */
};
#define AUTH_PRIVATE(auth) ((struct audata *)auth->ah_private)
@@ -121,7 +121,7 @@ AUTH *authunix_create __P ((char *machname, uid_t uid,
}
#endif
auth->ah_ops = &auth_unix_ops;
- auth->ah_private = (caddr_t) au;
+ auth->ah_private = (char*) au;
auth->ah_verf = au->au_shcred = _null_auth;
au->au_shfaults = 0;
@@ -133,7 +133,7 @@ AUTH *authunix_create __P ((char *machname, uid_t uid,
aup.aup_machname = machname;
aup.aup_uid = uid;
aup.aup_gid = gid;
- aup.aup_len = (u_int) len;
+ aup.aup_len = (unsigned int) len;
aup.aup_gids = aup_gids;
/*
@@ -145,14 +145,14 @@ AUTH *authunix_create __P ((char *machname, uid_t uid,
au->au_origcred.oa_length = len = XDR_GETPOS(&xdrs);
au->au_origcred.oa_flavor = AUTH_UNIX;
#ifdef KERNEL
- au->au_origcred.oa_base = mem_alloc((u_int) len);
+ au->au_origcred.oa_base = mem_alloc((unsigned int) len);
#else
- if ((au->au_origcred.oa_base = mem_alloc((u_int) len)) == NULL) {
+ if ((au->au_origcred.oa_base = mem_alloc((unsigned int) len)) == NULL) {
(void) fprintf(stderr, "authunix_create: out of memory\n");
return (NULL);
}
#endif
- bcopy(mymem, au->au_origcred.oa_base, (u_int) len);
+ memmove(au->au_origcred.oa_base, mymem, (unsigned int) len);
/*
* set auth handle to reflect new cred.
@@ -288,7 +288,7 @@ register AUTH *auth;
if (auth->ah_verf.oa_base != NULL)
mem_free(auth->ah_verf.oa_base, auth->ah_verf.oa_length);
- mem_free((caddr_t) auth, sizeof(*auth));
+ mem_free((char*) auth, sizeof(*auth));
}
/*
@@ -311,3 +311,4 @@ register AUTH *auth;
}
XDR_DESTROY(xdrs);
}
+
diff --git a/mdk-stage1/dietlibc/librpc/authunix_prot.c b/mdk-stage1/dietlibc/librpc/authunix_prot.c
index ddcadb808..53897a364 100644
--- a/mdk-stage1/dietlibc/librpc/authunix_prot.c
+++ b/mdk-stage1/dietlibc/librpc/authunix_prot.c
@@ -59,7 +59,7 @@ register struct authunix_parms *p;
&& xdr_string(xdrs, &(p->aup_machname), MAX_MACHINE_NAME)
&& xdr_int(xdrs, &a)
&& xdr_int(xdrs, &b)
- && xdr_array(xdrs, (caddr_t *) & (p->aup_gids),
+ && xdr_array(xdrs, (char* *) & (p->aup_gids),
&(p->aup_len), NGRPS, sizeof(int), (xdrproc_t)xdr_int)) {
p->aup_uid=(uid_t)a;
p->aup_gid=(gid_t)b;
diff --git a/mdk-stage1/dietlibc/librpc/bindresvport.c b/mdk-stage1/dietlibc/librpc/bindresvport.c
index 8b65261dd..1131cc263 100644
--- a/mdk-stage1/dietlibc/librpc/bindresvport.c
+++ b/mdk-stage1/dietlibc/librpc/bindresvport.c
@@ -37,6 +37,7 @@
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
+#include "dietfeatures.h"
/*
* Bind a socket to a privileged IP port
@@ -48,7 +49,6 @@ struct sockaddr_in *sin;
int res;
static short port;
struct sockaddr_in myaddr;
- extern int errno;
int i;
#define STARTPORT 600
@@ -57,7 +57,7 @@ struct sockaddr_in *sin;
if (sin == (struct sockaddr_in *) 0) {
sin = &myaddr;
- bzero(sin, sizeof(*sin));
+ memset(sin,0,sizeof(*sin));
sin->sin_family = AF_INET;
} else if (sin->sin_family != AF_INET) {
errno = EPFNOSUPPORT;
diff --git a/mdk-stage1/dietlibc/librpc/clnt_generic.c b/mdk-stage1/dietlibc/librpc/clnt_generic.c
index 9bb81cc80..5c0b96af9 100644
--- a/mdk-stage1/dietlibc/librpc/clnt_generic.c
+++ b/mdk-stage1/dietlibc/librpc/clnt_generic.c
@@ -44,8 +44,8 @@ static char sccsid[] = "@(#)clnt_generic.c 1.4 87/08/11 (C) 1987 SMI";
* returns client handle. Default options are set, which the user can
* change using the rpc equivalent of ioctl()'s.
*/
-CLIENT *clnt_create __P ((const char *hostname, const u_long prog,
- const u_long vers, const char *proto))
+CLIENT *clnt_create __P ((const char *hostname, const unsigned long prog,
+ const unsigned long vers, const char *proto))
{
struct hostent *h;
struct protoent *p;
@@ -68,14 +68,14 @@ CLIENT *clnt_create __P ((const char *hostname, const u_long prog,
return (NULL);
}
#ifdef __linux__
- bzero((char *) &sin, sizeof(sin));
+ memset((char*)&sin,0,sizeof(sin));
#endif
sin.sin_family = h->h_addrtype;
sin.sin_port = 0;
#ifndef __linux__
- bzero(sin.sin_zero, sizeof(sin.sin_zero));
+ memset(sin.sin_zero,0,sizeof(sin.sin_zero));
#endif
- bcopy(h->h_addr, (char *) &sin.sin_addr, h->h_length);
+ memmove((char *) &sin.sin_addr, h->h_addr, h->h_length);
p = getprotobyname(proto);
if (p == NULL) {
rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
diff --git a/mdk-stage1/dietlibc/librpc/clnt_raw.c b/mdk-stage1/dietlibc/librpc/clnt_raw.c
index 7479b55d6..52ab64421 100644
--- a/mdk-stage1/dietlibc/librpc/clnt_raw.c
+++ b/mdk-stage1/dietlibc/librpc/clnt_raw.c
@@ -54,7 +54,7 @@ static struct clntraw_private {
XDR xdr_stream;
char _raw_buf[UDPMSGSIZE];
char mashl_callmsg[MCALL_MSG_SIZE];
- u_int mcnt;
+ unsigned int mcnt;
} *clntraw_private;
static enum clnt_stat clntraw_call();
@@ -73,14 +73,12 @@ static struct clnt_ops client_ops = {
clntraw_control
};
-void svc_getreq();
-
/*
* Create a client handle for memory based rpc.
*/
CLIENT *clntraw_create(prog, vers)
-u_long prog;
-u_long vers;
+unsigned long prog;
+unsigned long vers;
{
register struct clntraw_private *clp = clntraw_private;
struct rpc_msg call_msg;
@@ -123,11 +121,11 @@ u_long vers;
static enum clnt_stat
clntraw_call(h, proc, xargs, argsp, xresults, resultsp, timeout)
CLIENT *h;
-u_long proc;
+unsigned long proc;
xdrproc_t xargs;
-caddr_t argsp;
+char* argsp;
xdrproc_t xresults;
-caddr_t resultsp;
+char* resultsp;
struct timeval timeout;
{
register struct clntraw_private *clp = clntraw_private;
@@ -202,7 +200,7 @@ static void clntraw_geterr()
static bool_t clntraw_freeres(cl, xdr_res, res_ptr)
CLIENT *cl;
xdrproc_t xdr_res;
-caddr_t res_ptr;
+char* res_ptr;
{
register struct clntraw_private *clp = clntraw_private;
register XDR *xdrs = &clp->xdr_stream;
@@ -228,3 +226,4 @@ static bool_t clntraw_control()
static void clntraw_destroy()
{
}
+
diff --git a/mdk-stage1/dietlibc/librpc/clnt_simple.c b/mdk-stage1/dietlibc/librpc/clnt_simple.c
index f309f86ff..e1f4c5f6c 100644
--- a/mdk-stage1/dietlibc/librpc/clnt_simple.c
+++ b/mdk-stage1/dietlibc/librpc/clnt_simple.c
@@ -54,8 +54,8 @@ static struct callrpc_private {
char *oldhost;
} *callrpc_private;
-int callrpc (const char *host, const u_long prognum,
- const u_long versnum, const u_long procnum,
+int callrpc (const char *host, const unsigned long prognum,
+ const unsigned long versnum, const unsigned long procnum,
const xdrproc_t inproc, const char *in,
const xdrproc_t outproc, char *out)
{
@@ -91,11 +91,11 @@ int callrpc (const char *host, const u_long prognum,
return ((int) RPC_UNKNOWNHOST);
timeout.tv_usec = 0;
timeout.tv_sec = 5;
- bcopy(hp->h_addr, (char *) &server_addr.sin_addr, hp->h_length);
+ memmove((char *) &server_addr.sin_addr, hp->h_addr, hp->h_length);
server_addr.sin_family = AF_INET;
server_addr.sin_port = 0;
- if ((crp->client = clntudp_create(&server_addr, (u_long) prognum,
- (u_long) versnum, timeout,
+ if ((crp->client = clntudp_create(&server_addr, (unsigned long) prognum,
+ (unsigned long) versnum, timeout,
&crp->socket)) == NULL)
return ((int) rpc_createerr.cf_stat);
crp->valid = 1;
diff --git a/mdk-stage1/dietlibc/librpc/clnt_tcp.c b/mdk-stage1/dietlibc/librpc/clnt_tcp.c
index 8c39e8933..f2ebed677 100644
--- a/mdk-stage1/dietlibc/librpc/clnt_tcp.c
+++ b/mdk-stage1/dietlibc/librpc/clnt_tcp.c
@@ -57,11 +57,10 @@ static char sccsid[] = "@(#)clnt_tcp.c 1.37 87/10/05 Copyr 1984 Sun Micro";
#include <errno.h>
#include <rpc/pmap_clnt.h>
#include <unistd.h>
+#include "dietfeatures.h"
#define MCALL_MSG_SIZE 24
-extern int errno;
-
static int readtcp();
static int writetcp();
@@ -89,7 +88,7 @@ struct ct_data {
struct sockaddr_in ct_addr;
struct rpc_err ct_error;
char ct_mcall[MCALL_MSG_SIZE]; /* marshalled callmsg */
- u_int ct_mpos; /* pos after marshal */
+ unsigned int ct_mpos; /* pos after marshal */
XDR ct_xdrs;
};
@@ -109,11 +108,11 @@ struct ct_data {
*/
CLIENT *clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
struct sockaddr_in *raddr;
-u_long prog;
-u_long vers;
+unsigned long prog;
+unsigned long vers;
register int *sockp;
-u_int sendsz;
-u_int recvsz;
+unsigned int sendsz;
+unsigned int recvsz;
{
CLIENT *h;
register struct ct_data *ct;
@@ -139,12 +138,12 @@ u_int recvsz;
* If no port number given ask the pmap for one
*/
if (raddr->sin_port == 0) {
- u_short port;
+ unsigned short port;
if ((port = pmap_getport(raddr, prog, vers, IPPROTO_TCP)) == 0) {
- mem_free((caddr_t) ct, sizeof(struct ct_data));
+ mem_free((char*) ct, sizeof(struct ct_data));
- mem_free((caddr_t) h, sizeof(CLIENT));
+ mem_free((char*) h, sizeof(CLIENT));
return ((CLIENT *) NULL);
}
raddr->sin_port = htons(port);
@@ -161,6 +160,7 @@ u_int recvsz;
sizeof(*raddr)) < 0)) {
rpc_createerr.cf_stat = RPC_SYSTEMERROR;
rpc_createerr.cf_error.re_errno = errno;
+ if (*sockp >= 0)
(void) close(*sockp);
goto fooy;
}
@@ -206,9 +206,9 @@ u_int recvsz;
* and authnone for authentication.
*/
xdrrec_create(&(ct->ct_xdrs), sendsz, recvsz,
- (caddr_t) ct, readtcp, writetcp);
+ (char*) ct, readtcp, writetcp);
h->cl_ops = &tcp_ops;
- h->cl_private = (caddr_t) ct;
+ h->cl_private = (char*) ct;
h->cl_auth = authnone_create();
return (h);
@@ -216,9 +216,9 @@ u_int recvsz;
/*
* Something goofed, free stuff and barf
*/
- mem_free((caddr_t) ct, sizeof(struct ct_data));
+ mem_free((char*) ct, sizeof(struct ct_data));
- mem_free((caddr_t) h, sizeof(CLIENT));
+ mem_free((char*) h, sizeof(CLIENT));
return ((CLIENT *) NULL);
}
@@ -226,18 +226,18 @@ static enum clnt_stat
clnttcp_call(h, proc, xdr_args, args_ptr, xdr_results, results_ptr,
timeout)
register CLIENT *h;
-u_long proc;
+unsigned long proc;
xdrproc_t xdr_args;
-caddr_t args_ptr;
+char* args_ptr;
xdrproc_t xdr_results;
-caddr_t results_ptr;
+char* results_ptr;
struct timeval timeout;
{
register struct ct_data *ct = (struct ct_data *) h->cl_private;
register XDR *xdrs = &(ct->ct_xdrs);
struct rpc_msg reply_msg;
- u_long x_id;
- u_long *msg_x_id = (u_long *) (ct->ct_mcall); /* yuk */
+ unsigned long x_id;
+ uint32_t *msg_x_id = (uint32_t *) (ct->ct_mcall); /* yuk */
register bool_t shipnow;
int refreshes = 2;
@@ -290,7 +290,7 @@ struct timeval timeout;
continue;
return (ct->ct_error.re_status);
}
- if (reply_msg.rm_xid == x_id)
+ if ((uint32_t)reply_msg.rm_xid == (uint32_t)x_id)
break;
}
@@ -332,7 +332,7 @@ struct rpc_err *errp;
static bool_t clnttcp_freeres(cl, xdr_res, res_ptr)
CLIENT *cl;
xdrproc_t xdr_res;
-caddr_t res_ptr;
+char* res_ptr;
{
register struct ct_data *ct = (struct ct_data *) cl->cl_private;
register XDR *xdrs = &(ct->ct_xdrs);
@@ -379,9 +379,9 @@ CLIENT *h;
(void) close(ct->ct_sock);
}
XDR_DESTROY(&(ct->ct_xdrs));
- mem_free((caddr_t) ct, sizeof(struct ct_data));
+ mem_free((char*) ct, sizeof(struct ct_data));
- mem_free((caddr_t) h, sizeof(CLIENT));
+ mem_free((char*) h, sizeof(CLIENT));
}
/*
@@ -391,7 +391,7 @@ CLIENT *h;
*/
static int readtcp(ct, buf, len)
register struct ct_data *ct;
-caddr_t buf;
+char* buf;
register int len;
{
#ifdef FD_SETSIZE
@@ -447,7 +447,7 @@ register int len;
static int writetcp(ct, buf, len)
struct ct_data *ct;
-caddr_t buf;
+char* buf;
int len;
{
register int i, cnt;
@@ -461,3 +461,4 @@ int len;
}
return (len);
}
+
diff --git a/mdk-stage1/dietlibc/librpc/clnt_udp.c b/mdk-stage1/dietlibc/librpc/clnt_udp.c
index 7305d3ff1..962718269 100644
--- a/mdk-stage1/dietlibc/librpc/clnt_udp.c
+++ b/mdk-stage1/dietlibc/librpc/clnt_udp.c
@@ -45,8 +45,7 @@ static char sccsid[] = "@(#)clnt_udp.c 1.39 87/08/11 Copyr 1984 Sun Micro";
#include <errno.h>
#include <rpc/pmap_clnt.h>
#include <unistd.h>
-
-extern int errno;
+#include "dietfeatures.h"
/*
* UDP bases client side rpc operations
@@ -67,6 +66,7 @@ static struct clnt_ops udp_ops = {
clntudp_control
};
+
/*
* Private data kept per client handle
*/
@@ -79,10 +79,10 @@ struct cu_data {
struct timeval cu_total;
struct rpc_err cu_error;
XDR cu_outxdrs;
- u_int cu_xdrpos;
- u_int cu_sendsz;
+ unsigned int cu_xdrpos;
+ unsigned int cu_sendsz;
char *cu_outbuf;
- u_int cu_recvsz;
+ unsigned int cu_recvsz;
char cu_inbuf[1];
};
@@ -105,12 +105,12 @@ struct cu_data {
CLIENT *clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz,
recvsz)
struct sockaddr_in *raddr;
-u_long program;
-u_long version;
+unsigned long program;
+unsigned long version;
struct timeval wait;
register int *sockp;
-u_int sendsz;
-u_int recvsz;
+unsigned int sendsz;
+unsigned int recvsz;
{
CLIENT *cl;
register struct cu_data *cu;
@@ -137,7 +137,7 @@ u_int recvsz;
(void) gettimeofday(&now, (struct timezone *) 0);
if (raddr->sin_port == 0) {
- u_short port;
+ unsigned short port;
if ((port =
pmap_getport(raddr, program, version, IPPROTO_UDP)) == 0) {
@@ -146,7 +146,7 @@ u_int recvsz;
raddr->sin_port = htons(port);
}
cl->cl_ops = &udp_ops;
- cl->cl_private = (caddr_t) cu;
+ cl->cl_private = (char*) cu;
cu->cu_raddr = *raddr;
cu->cu_rlen = sizeof(cu->cu_raddr);
cu->cu_wait = wait;
@@ -186,16 +186,16 @@ u_int recvsz;
return (cl);
fooy:
if (cu)
- mem_free((caddr_t) cu, sizeof(*cu) + sendsz + recvsz);
+ mem_free((char*) cu, sizeof(*cu) + sendsz + recvsz);
if (cl)
- mem_free((caddr_t) cl, sizeof(CLIENT));
+ mem_free((char*) cl, sizeof(CLIENT));
return ((CLIENT *) NULL);
}
CLIENT *clntudp_create(raddr, program, version, wait, sockp)
struct sockaddr_in *raddr;
-u_long program;
-u_long version;
+unsigned long program;
+unsigned long version;
struct timeval wait;
register int *sockp;
{
@@ -207,11 +207,11 @@ register int *sockp;
static enum clnt_stat
clntudp_call(cl, proc, xargs, argsp, xresults, resultsp, utimeout)
register CLIENT *cl; /* client handle */
-u_long proc; /* procedure number */
+unsigned long proc; /* procedure number */
xdrproc_t xargs; /* xdr routine for args */
-caddr_t argsp; /* pointer to args */
+char* argsp; /* pointer to args */
xdrproc_t xresults; /* xdr routine for results */
-caddr_t resultsp; /* pointer to results */
+char* resultsp; /* pointer to results */
struct timeval utimeout; /* seconds to wait before giving up */
{
register struct cu_data *cu = (struct cu_data *) cl->cl_private;
@@ -250,7 +250,7 @@ struct timeval utimeout; /* seconds to wait before giving up */
/*
* the transaction is the first thing in the out buffer
*/
- (*(u_short *) (cu->cu_outbuf))++;
+ (*(uint32_t *) (cu->cu_outbuf))++;
if ((!XDR_PUTLONG(xdrs, (long *) &proc)) ||
(!AUTH_MARSHALL(cl->cl_auth, xdrs)) || (!(*xargs) (xdrs, argsp)))
return (cu->cu_error.re_status = RPC_CANTENCODEARGS);
@@ -324,10 +324,10 @@ struct timeval utimeout; /* seconds to wait before giving up */
cu->cu_error.re_errno = errno;
return (cu->cu_error.re_status = RPC_CANTRECV);
}
- if (inlen < sizeof(u_long))
+ if (inlen < 4)
continue;
/* see if reply transaction id matches sent id */
- if (*((u_long *) (cu->cu_inbuf)) != *((u_long *) (cu->cu_outbuf)))
+ if (*((uint32_t *) (cu->cu_inbuf)) != *((uint32_t *) (cu->cu_outbuf)))
continue;
/* we now assume we have the proper reply */
break;
@@ -336,7 +336,7 @@ struct timeval utimeout; /* seconds to wait before giving up */
/*
* now decode and validate the response
*/
- xdrmem_create(&reply_xdrs, cu->cu_inbuf, (u_int) inlen, XDR_DECODE);
+ xdrmem_create(&reply_xdrs, cu->cu_inbuf, (unsigned int) inlen, XDR_DECODE);
ok = xdr_replymsg(&reply_xdrs, &reply_msg);
/* XDR_DESTROY(&reply_xdrs); save a few cycles on noop destroy */
if (ok) {
@@ -380,7 +380,7 @@ struct rpc_err *errp;
static bool_t clntudp_freeres(cl, xdr_res, res_ptr)
CLIENT *cl;
xdrproc_t xdr_res;
-caddr_t res_ptr;
+char* res_ptr;
{
register struct cu_data *cu = (struct cu_data *) cl->cl_private;
register XDR *xdrs = &(cu->cu_outxdrs);
@@ -432,6 +432,7 @@ CLIENT *cl;
(void) close(cu->cu_sock);
}
XDR_DESTROY(&(cu->cu_outxdrs));
- mem_free((caddr_t) cu, (sizeof(*cu) + cu->cu_sendsz + cu->cu_recvsz));
- mem_free((caddr_t) cl, sizeof(CLIENT));
+ mem_free((char*) cu, (sizeof(*cu) + cu->cu_sendsz + cu->cu_recvsz));
+ mem_free((char*) cl, sizeof(CLIENT));
}
+
diff --git a/mdk-stage1/dietlibc/librpc/get_myaddress.c b/mdk-stage1/dietlibc/librpc/get_myaddress.c
index cd63383d0..1ce2c2b32 100644
--- a/mdk-stage1/dietlibc/librpc/get_myaddress.c
+++ b/mdk-stage1/dietlibc/librpc/get_myaddress.c
@@ -64,6 +64,6 @@ void get_myaddress(struct sockaddr_in* addr)
exit(1);
}
addr->sin_family = AF_INET;
- bcopy((char *) hp->h_addr, (char *) &addr->sin_addr, hp->h_length);
+ memmove((char *) &addr->sin_addr, (char *) hp->h_addr, hp->h_length);
addr->sin_port = htons(PMAPPORT);
}
diff --git a/mdk-stage1/dietlibc/librpc/getrpcent.c b/mdk-stage1/dietlibc/librpc/getrpcent.c
index 5e7f694d2..71774a2eb 100644
--- a/mdk-stage1/dietlibc/librpc/getrpcent.c
+++ b/mdk-stage1/dietlibc/librpc/getrpcent.c
@@ -44,6 +44,7 @@ static char sccsid[] =
#include <netdb.h>
#include <sys/socket.h>
#include <string.h>
+#include <arpa/inet.h>
/*
* Internet version.
@@ -60,9 +61,7 @@ struct rpcdata {
char *domain;
} *rpcdata;
-static struct rpcent *interpret();
-struct hostent *gethostent();
-char *inet_ntoa();
+static struct rpcent *interpret(const char* val, size_t len);
#ifndef __linux__
static char *index();
@@ -195,7 +194,7 @@ char *s;
}
#endif
-static struct rpcent *interpret(const char* val, int len)
+static struct rpcent *interpret(const char* val, size_t len)
{
register struct rpcdata *d = _rpcdata();
char *p;
@@ -203,7 +202,7 @@ static struct rpcent *interpret(const char* val, int len)
if (d == 0)
return 0;
- strncpy(d->line, val, len);
+ strncpy(d->line, val, (size_t)len);
p = d->line;
d->line[len] = '\n';
if (*p == '#')
diff --git a/mdk-stage1/dietlibc/librpc/getrpcport.c b/mdk-stage1/dietlibc/librpc/getrpcport.c
index a7085cbe7..7b6e50a7d 100644
--- a/mdk-stage1/dietlibc/librpc/getrpcport.c
+++ b/mdk-stage1/dietlibc/librpc/getrpcport.c
@@ -42,15 +42,15 @@ static char sccsid[] = "@(#)getrpcport.c 1.3 87/08/11 SMI";
#include <string.h>
#include <rpc/pmap_clnt.h>
-extern int getrpcport (const char * host, u_long prognum,
- u_long versnum, u_int proto)
+extern int getrpcport (const char * host, unsigned long prognum,
+ unsigned long versnum, unsigned int proto)
{
struct sockaddr_in addr;
struct hostent *hp;
if ((hp = gethostbyname(host)) == NULL)
return (0);
- bcopy(hp->h_addr, (char *) &addr.sin_addr, hp->h_length);
+ memmove((char *) &addr.sin_addr, hp->h_addr, hp->h_length);
addr.sin_family = AF_INET;
addr.sin_port = 0;
return (pmap_getport(&addr, prognum, versnum, proto));
diff --git a/mdk-stage1/dietlibc/librpc/pmap_clnt.c b/mdk-stage1/dietlibc/librpc/pmap_clnt.c
index 428675656..9dbf3f624 100644
--- a/mdk-stage1/dietlibc/librpc/pmap_clnt.c
+++ b/mdk-stage1/dietlibc/librpc/pmap_clnt.c
@@ -48,18 +48,15 @@ static char sccsid[] =
static struct timeval timeout = { 5, 0 };
static struct timeval tottimeout = { 60, 0 };
-void clnt_perror();
-
-
/*
* Set a mapping between program,version and port.
* Calls the pmap service remotely to do the mapping.
*/
bool_t pmap_set(program, version, protocol, port)
-u_long program;
-u_long version;
+unsigned long program;
+unsigned long version;
int protocol;
-u_short port;
+unsigned short port;
{
struct sockaddr_in myaddress;
int socket = -1;
@@ -77,7 +74,7 @@ u_short port;
parms.pm_vers = version;
parms.pm_prot = protocol;
parms.pm_port = port;
- if (CLNT_CALL(client, PMAPPROC_SET, (xdrproc_t)xdr_pmap, (caddr_t)&parms, (xdrproc_t)xdr_bool, (caddr_t)&rslt,
+ if (CLNT_CALL(client, PMAPPROC_SET, (xdrproc_t)xdr_pmap, (char*)&parms, (xdrproc_t)xdr_bool, (void*)&rslt,
tottimeout) != RPC_SUCCESS) {
clnt_perror(client, "Cannot register service");
return (FALSE);
@@ -92,8 +89,8 @@ u_short port;
* Calls the pmap service remotely to do the un-mapping.
*/
bool_t pmap_unset(program, version)
-u_long program;
-u_long version;
+unsigned long program;
+unsigned long version;
{
struct sockaddr_in myaddress;
int socket = -1;
@@ -110,7 +107,7 @@ u_long version;
parms.pm_prog = program;
parms.pm_vers = version;
parms.pm_port = parms.pm_prot = 0;
- CLNT_CALL(client, PMAPPROC_UNSET, (xdrproc_t)xdr_pmap, (caddr_t)&parms, (xdrproc_t)xdr_bool, (caddr_t)&rslt,
+ CLNT_CALL(client, PMAPPROC_UNSET, (xdrproc_t)xdr_pmap, (char*)&parms, (xdrproc_t)xdr_bool, (void*)&rslt,
tottimeout);
CLNT_DESTROY(client);
(void) close(socket);
diff --git a/mdk-stage1/dietlibc/librpc/pmap_getmaps.c b/mdk-stage1/dietlibc/librpc/pmap_getmaps.c
index 6940783fb..de51a733a 100644
--- a/mdk-stage1/dietlibc/librpc/pmap_getmaps.c
+++ b/mdk-stage1/dietlibc/librpc/pmap_getmaps.c
@@ -48,14 +48,13 @@ static char sccsid[] =
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
+#include <netinet/in.h>
//#include <net/if.h>
#include <sys/ioctl.h>
#define NAMELEN 255
#define MAX_BROADCAST_SIZE 1400
#include <unistd.h>
-extern int errno;
-
/*
* Get a copy of the current port maps.
* Calls the pmap service remotely to do get the maps.
@@ -74,7 +73,7 @@ struct sockaddr_in *address;
client = clnttcp_create(address, PMAPPROG, PMAPVERS, &socket, 50, 500);
if (client != (CLIENT *) NULL) {
if (CLNT_CALL(client, PMAPPROC_DUMP, (xdrproc_t)xdr_void, NULL, (xdrproc_t)xdr_pmaplist,
- (caddr_t)&head, minutetimeout) != RPC_SUCCESS) {
+ (char*)&head, minutetimeout) != RPC_SUCCESS) {
clnt_perror(client, "pmap_getmaps rpc problem");
}
CLNT_DESTROY(client);
diff --git a/mdk-stage1/dietlibc/librpc/pmap_getport.c b/mdk-stage1/dietlibc/librpc/pmap_getport.c
index 174dca41a..f26cb7621 100644
--- a/mdk-stage1/dietlibc/librpc/pmap_getport.c
+++ b/mdk-stage1/dietlibc/librpc/pmap_getport.c
@@ -55,28 +55,32 @@ static struct timeval tottimeout = { 60, 0 };
* Calls the pmap service remotely to do the lookup.
* Returns 0 if no map exists.
*/
-u_short pmap_getport(address, program, version, protocol)
+unsigned short pmap_getport(address, program, version, protocol)
struct sockaddr_in *address;
-u_long program;
-u_long version;
-u_int protocol;
+unsigned long program;
+unsigned long version;
+unsigned int protocol;
{
- u_short port = 0;
+ unsigned short port = 0;
int socket = -1;
register CLIENT *client;
struct pmap parms;
- address->sin_port = htons(PMAPPORT);
- client = clntudp_bufcreate(address, PMAPPROG,
- PMAPVERS, timeout, &socket, RPCSMALLMSGSIZE,
+ address->sin_port = htons((unsigned short)PMAPPORT);
+ if (protocol == IPPROTO_TCP)
+ client = clnttcp_create(address, PMAPPROG, PMAPVERS, &socket,
+ RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
+ else
+ client = clntudp_bufcreate(address, PMAPPROG, PMAPVERS, timeout,
+ &socket, RPCSMALLMSGSIZE,
RPCSMALLMSGSIZE);
if (client != (CLIENT *) NULL) {
parms.pm_prog = program;
parms.pm_vers = version;
parms.pm_prot = protocol;
parms.pm_port = 0; /* not needed or used */
- if (CLNT_CALL(client, PMAPPROC_GETPORT, (xdrproc_t)xdr_pmap, (caddr_t)&parms,
- (xdrproc_t)xdr_u_short, (caddr_t)&port, tottimeout) != RPC_SUCCESS) {
+ if (CLNT_CALL(client, PMAPPROC_GETPORT, (xdrproc_t)xdr_pmap, (char*)&parms,
+ (xdrproc_t)xdr_u_short, (char*)&port, tottimeout) != RPC_SUCCESS) {
rpc_createerr.cf_stat = RPC_PMAPFAILURE;
clnt_geterr(client, &rpc_createerr.cf_error);
} else if (port == 0) {
diff --git a/mdk-stage1/dietlibc/librpc/pmap_prot2.c b/mdk-stage1/dietlibc/librpc/pmap_prot2.c
index 870c844ed..cd2deb036 100644
--- a/mdk-stage1/dietlibc/librpc/pmap_prot2.c
+++ b/mdk-stage1/dietlibc/librpc/pmap_prot2.c
@@ -107,8 +107,8 @@ bool_t xdr_pmaplist(XDR* xdrs, struct pmaplist** rp)
*/
if (freeing)
next = &((*rp)->pml_next);
- if (!xdr_reference(xdrs, (caddr_t *) rp,
- (u_int) sizeof(struct pmaplist), (xdrproc_t)xdr_pmap))
+ if (!xdr_reference(xdrs, (char* *) rp,
+ (unsigned int) sizeof(struct pmaplist), (xdrproc_t)xdr_pmap))
return (FALSE);
rp = (freeing) ? next : &((*rp)->pml_next);
diff --git a/mdk-stage1/dietlibc/librpc/pmap_rmt.c b/mdk-stage1/dietlibc/librpc/pmap_rmt.c
index 02efcf91c..390bd736e 100644
--- a/mdk-stage1/dietlibc/librpc/pmap_rmt.c
+++ b/mdk-stage1/dietlibc/librpc/pmap_rmt.c
@@ -49,11 +49,12 @@ static char sccsid[] = "@(#)pmap_rmt.c 1.21 87/08/27 Copyr 1984 Sun Micro";
//#include <net/if.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
+#include <netinet/in.h>
#define MAX_BROADCAST_SIZE 1400
#include <unistd.h>
#include <string.h>
+#include "dietfeatures.h"
-extern int errno;
static struct timeval timeout = { 3, 0 };
@@ -64,42 +65,40 @@ static struct timeval timeout = { 3, 0 };
* remotely call that routine with the given parameters. This allows
* programs to do a lookup and call in one step.
*/
-enum clnt_stat
-pmap_rmtcall(addr, prog, vers, proc, xdrargs, argsp, xdrres, resp, tout,
- port_ptr)
-struct sockaddr_in *addr;
-u_long prog, vers, proc;
-xdrproc_t xdrargs, xdrres;
-caddr_t argsp, resp;
-struct timeval tout;
-u_long *port_ptr;
-{
- int socket = -1;
- register CLIENT *client;
- struct rmtcallargs a;
- struct rmtcallres r;
- enum clnt_stat stat;
+enum clnt_stat pmap_rmtcall (struct sockaddr_in *addr,
+ const unsigned long prog,
+ const unsigned long vers,
+ const unsigned long proc,
+ xdrproc_t xdrargs,
+ char* argsp, xdrproc_t xdrres,
+ char* resp, struct timeval tout,
+ unsigned long *port_ptr) {
+ int socket = -1;
+ register CLIENT *client;
+ struct rmtcallargs a;
+ struct rmtcallres r;
+ enum clnt_stat stat;
- addr->sin_port = htons(PMAPPORT);
- client = clntudp_create(addr, PMAPPROG, PMAPVERS, timeout, &socket);
- if (client != (CLIENT *) NULL) {
- a.prog = prog;
- a.vers = vers;
- a.proc = proc;
- a.args_ptr = argsp;
- a.xdr_args = xdrargs;
- r.port_ptr = port_ptr;
- r.results_ptr = resp;
- r.xdr_results = xdrres;
- stat = CLNT_CALL(client, PMAPPROC_CALLIT, (xdrproc_t)xdr_rmtcall_args, (caddr_t)&a,
- (xdrproc_t)xdr_rmtcallres, (caddr_t)&r, tout);
- CLNT_DESTROY(client);
- } else {
- stat = RPC_FAILED;
- }
- (void) close(socket);
- addr->sin_port = 0;
- return (stat);
+ addr->sin_port = htons((short)PMAPPORT);
+ client = clntudp_create(addr, PMAPPROG, PMAPVERS, timeout, &socket);
+ if (client != (CLIENT *) NULL) {
+ a.prog = prog;
+ a.vers = vers;
+ a.proc = proc;
+ a.args_ptr = argsp;
+ a.xdr_args = xdrargs;
+ r.port_ptr = port_ptr;
+ r.results_ptr = resp;
+ r.xdr_results = xdrres;
+ stat = CLNT_CALL(client, PMAPPROC_CALLIT, (xdrproc_t)xdr_rmtcall_args, (char*)&a,
+ (xdrproc_t)xdr_rmtcallres, (char*)&r, tout);
+ CLNT_DESTROY(client);
+ } else {
+ stat = RPC_FAILED;
+ }
+ (void) close(socket);
+ addr->sin_port = 0;
+ return (stat);
}
@@ -109,7 +108,7 @@ u_long *port_ptr;
*/
bool_t xdr_rmtcall_args(XDR* xdrs, struct rmtcallargs* cap)
{
- u_int lenposition, argposition, position;
+ unsigned int lenposition, argposition, position;
if (xdr_u_long(xdrs, &(cap->prog)) &&
xdr_u_long(xdrs, &(cap->vers)) && xdr_u_long(xdrs, &(cap->proc))) {
@@ -120,7 +119,7 @@ bool_t xdr_rmtcall_args(XDR* xdrs, struct rmtcallargs* cap)
if (!(*(cap->xdr_args)) (xdrs, cap->args_ptr))
return (FALSE);
position = XDR_GETPOS(xdrs);
- cap->arglen = (u_long) position - (u_long) argposition;
+ cap->arglen = (unsigned long) position - (unsigned long) argposition;
XDR_SETPOS(xdrs, lenposition);
if (!xdr_u_long(xdrs, &(cap->arglen)))
return (FALSE);
@@ -136,12 +135,12 @@ bool_t xdr_rmtcall_args(XDR* xdrs, struct rmtcallargs* cap)
*/
bool_t xdr_rmtcallres(XDR* xdrs, struct rmtcallres* crp)
{
- caddr_t port_ptr;
+ char* port_ptr;
- port_ptr = (caddr_t) crp->port_ptr;
- if (xdr_reference(xdrs, &port_ptr, sizeof(u_long),
+ port_ptr = (char*) crp->port_ptr;
+ if (xdr_reference(xdrs, &port_ptr, sizeof(unsigned long),
(xdrproc_t)xdr_u_long) && xdr_u_long(xdrs, &crp->resultslen)) {
- crp->port_ptr = (u_long *) port_ptr;
+ crp->port_ptr = (unsigned long *) port_ptr;
return ((*(crp->xdr_results)) (xdrs, crp->results_ptr));
}
return (FALSE);
@@ -222,13 +221,13 @@ char *buf; /* why allocxate more when we can use existing... */
enum clnt_stat
clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp,
eachresult)
-u_long prog; /* program number */
-u_long vers; /* version number */
-u_long proc; /* procedure number */
+unsigned long prog; /* program number */
+unsigned long vers; /* version number */
+unsigned long proc; /* procedure number */
xdrproc_t xargs; /* xdr routine for args */
-caddr_t argsp; /* pointer to args */
+char* argsp; /* pointer to args */
xdrproc_t xresults; /* xdr routine for results */
-caddr_t resultsp; /* pointer to results */
+char* resultsp; /* pointer to results */
resultproc_t eachresult; /* call with each result obtained */
{
enum clnt_stat stat;
@@ -248,8 +247,8 @@ resultproc_t eachresult; /* call with each result obtained */
#endif /* def FD_SETSIZE */
register int i;
bool_t done = FALSE;
- register u_long xid;
- u_long port;
+ register unsigned long xid;
+ unsigned long port;
struct in_addr addrs[20];
struct sockaddr_in baddr, raddr; /* broadcast and response addresses */
struct rmtcallargs a;
@@ -281,9 +280,9 @@ resultproc_t eachresult; /* call with each result obtained */
mask = (1 << sock);
#endif /* def FD_SETSIZE */
nets = getbroadcastnets(addrs, sock, inbuf);
- bzero((char *) &baddr, sizeof(baddr));
+ memset((char*)&baddr,0,sizeof(baddr));
baddr.sin_family = AF_INET;
- baddr.sin_port = htons(PMAPPORT);
+ baddr.sin_port = htons((short)PMAPPORT);
baddr.sin_addr.s_addr = htonl(INADDR_ANY);
/* baddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); */
(void) gettimeofday(&t, (struct timezone *) 0);
@@ -318,7 +317,7 @@ resultproc_t eachresult; /* call with each result obtained */
for (t.tv_sec = 4; t.tv_sec <= 14; t.tv_sec += 2) {
for (i = 0; i < nets; i++) {
baddr.sin_addr = addrs[i];
- if (sendto(sock, outbuf, outlen, 0,
+ if (sendto(sock, outbuf, (size_t)outlen, 0,
(struct sockaddr *) &baddr,
sizeof(struct sockaddr)) != outlen) {
perror("Cannot send broadcast packet");
@@ -332,7 +331,7 @@ resultproc_t eachresult; /* call with each result obtained */
}
recv_again:
msg.acpted_rply.ar_verf = _null_auth;
- msg.acpted_rply.ar_results.where = (caddr_t) & r;
+ msg.acpted_rply.ar_results.where = (char*) & r;
msg.acpted_rply.ar_results.proc = (xdrproc_t)xdr_rmtcallres;
readfds = mask;
switch (select(_rpc_dtablesize(), &readfds, 0, 0, &t)) {
@@ -361,18 +360,18 @@ resultproc_t eachresult; /* call with each result obtained */
stat = RPC_CANTRECV;
goto done_broad;
}
- if (inlen < sizeof(u_long))
+ if ((size_t)inlen < sizeof(unsigned long))
goto recv_again;
/*
* see if reply transaction id matches sent id.
* If so, decode the results.
*/
- xdrmem_create(xdrs, inbuf, (u_int) inlen, XDR_DECODE);
+ xdrmem_create(xdrs, inbuf, (unsigned int) inlen, XDR_DECODE);
if (xdr_replymsg(xdrs, &msg)) {
if ((msg.rm_xid == xid) &&
(msg.rm_reply.rp_stat == MSG_ACCEPTED) &&
(msg.acpted_rply.ar_stat == SUCCESS)) {
- raddr.sin_port = htons((u_short) port);
+ raddr.sin_port = htons((unsigned short) port);
done = (*eachresult) (resultsp, &raddr);
}
/* otherwise, we just ignore the errors ... */
diff --git a/mdk-stage1/dietlibc/librpc/rpc_callmsg.c b/mdk-stage1/dietlibc/librpc/rpc_callmsg.c
index 4b3a9880e..a3514f41c 100644
--- a/mdk-stage1/dietlibc/librpc/rpc_callmsg.c
+++ b/mdk-stage1/dietlibc/librpc/rpc_callmsg.c
@@ -83,14 +83,14 @@ register struct rpc_msg *cmsg;
IXDR_PUT_ENUM(buf, oa->oa_flavor);
IXDR_PUT_LONG(buf, oa->oa_length);
if (oa->oa_length) {
- bcopy(oa->oa_base, (caddr_t) buf, oa->oa_length);
+ memmove((char*) buf, oa->oa_base, oa->oa_length);
buf += RNDUP(oa->oa_length) / sizeof(long);
}
oa = &cmsg->rm_call.cb_verf;
IXDR_PUT_ENUM(buf, oa->oa_flavor);
IXDR_PUT_LONG(buf, oa->oa_length);
if (oa->oa_length) {
- bcopy(oa->oa_base, (caddr_t) buf, oa->oa_length);
+ memmove((char*) buf, oa->oa_base, oa->oa_length);
/* no real need....
buf += RNDUP(oa->oa_length) / sizeof (long);
*/
@@ -122,7 +122,7 @@ register struct rpc_msg *cmsg;
return (FALSE);
}
if (oa->oa_base == NULL) {
- oa->oa_base = (caddr_t)
+ oa->oa_base = (char*)
mem_alloc(oa->oa_length);
}
buf = XDR_INLINE(xdrs, RNDUP(oa->oa_length));
@@ -132,7 +132,7 @@ register struct rpc_msg *cmsg;
return (FALSE);
}
} else {
- bcopy((caddr_t) buf, oa->oa_base, oa->oa_length);
+ memmove(oa->oa_base, (char*) buf, oa->oa_length);
/* no real need....
buf += RNDUP(oa->oa_length) /
sizeof (long);
@@ -155,7 +155,7 @@ register struct rpc_msg *cmsg;
return (FALSE);
}
if (oa->oa_base == NULL) {
- oa->oa_base = (caddr_t)
+ oa->oa_base = (char*)
mem_alloc(oa->oa_length);
}
buf = XDR_INLINE(xdrs, RNDUP(oa->oa_length));
@@ -165,7 +165,7 @@ register struct rpc_msg *cmsg;
return (FALSE);
}
} else {
- bcopy((caddr_t) buf, oa->oa_base, oa->oa_length);
+ memmove(oa->oa_base, (char*) buf, oa->oa_length);
/* no real need...
buf += RNDUP(oa->oa_length) /
sizeof (long);
diff --git a/mdk-stage1/dietlibc/librpc/rpc_prot.c b/mdk-stage1/dietlibc/librpc/rpc_prot.c
index 19a4db27f..d5ca5ab77 100644
--- a/mdk-stage1/dietlibc/librpc/rpc_prot.c
+++ b/mdk-stage1/dietlibc/librpc/rpc_prot.c
@@ -74,7 +74,7 @@ bool_t xdr_des_block(xdrs, blkp)
register XDR *xdrs;
register des_block *blkp;
{
- return (xdr_opaque(xdrs, (caddr_t) blkp, sizeof(des_block)));
+ return (xdr_opaque(xdrs, (char*) blkp, sizeof(des_block)));
}
/* * * * * * * * * * * * * * XDR RPC MESSAGE * * * * * * * * * * * * * * * */
@@ -146,7 +146,7 @@ register struct rpc_msg *rmsg;
xdr_enum(xdrs, (enum_t *) & (rmsg->rm_direction)) &&
(rmsg->rm_direction == REPLY))
return (xdr_union(xdrs, (enum_t *) & (rmsg->rm_reply.rp_stat),
- (caddr_t) & (rmsg->rm_reply.ru), reply_dscrm,
+ (char*) & (rmsg->rm_reply.ru), reply_dscrm,
NULL_xdrproc_t));
return (FALSE);
}
diff --git a/mdk-stage1/dietlibc/librpc/svc.c b/mdk-stage1/dietlibc/librpc/svc.c
index 4fcdb5216..b430deb4a 100644
--- a/mdk-stage1/dietlibc/librpc/svc.c
+++ b/mdk-stage1/dietlibc/librpc/svc.c
@@ -44,12 +44,11 @@ static char sccsid[] = "@(#)svc.c 1.41 87/10/13 Copyr 1984 Sun Micro";
#include <errno.h>
#include <rpc/rpc.h>
#include <rpc/pmap_clnt.h>
+#include <string.h>
#ifdef __linux__
#include <sys/types.h>
#endif
-extern int errno;
-
#ifdef FD_SETSIZE
static SVCXPRT **xports;
#else
@@ -69,8 +68,8 @@ static SVCXPRT *xports[NOFILE];
*/
static struct svc_callout {
struct svc_callout *sc_next;
- u_long sc_prog;
- u_long sc_vers;
+ unsigned long sc_prog;
+ unsigned long sc_vers;
void (*sc_dispatch) ();
} *svc_head;
@@ -135,8 +134,8 @@ SVCXPRT *xprt;
*/
bool_t svc_register(xprt, prog, vers, dispatch, protocol)
SVCXPRT *xprt;
-u_long prog;
-u_long vers;
+unsigned long prog;
+unsigned long vers;
void (*dispatch) ();
rpcprot_t protocol;
{
@@ -170,8 +169,8 @@ rpcprot_t protocol;
* Remove a service program from the callout list.
*/
void svc_unregister(prog, vers)
-u_long prog;
-u_long vers;
+unsigned long prog;
+unsigned long vers;
{
struct svc_callout *prev;
register struct svc_callout *s;
@@ -184,7 +183,7 @@ u_long vers;
prev->sc_next = s->sc_next;
}
s->sc_next = NULL_SVC;
- mem_free((char *) s, (u_int) sizeof(struct svc_callout));
+ mem_free((char *) s, (unsigned int) sizeof(struct svc_callout));
/* now unregister the information with the local binder service */
(void) pmap_unset(prog, vers);
@@ -195,8 +194,8 @@ u_long vers;
* struct.
*/
static struct svc_callout *svc_find(prog, vers, prev)
-u_long prog;
-u_long vers;
+unsigned long prog;
+unsigned long vers;
struct svc_callout **prev;
{
register struct svc_callout *s, *p;
@@ -220,7 +219,7 @@ struct svc_callout **prev;
bool_t svc_sendreply(xprt, xdr_results, xdr_location)
register SVCXPRT *xprt;
xdrproc_t xdr_results;
-caddr_t xdr_location;
+char* xdr_location;
{
struct rpc_msg rply;
@@ -324,8 +323,8 @@ register SVCXPRT *xprt;
*/
void svcerr_progvers(xprt, low_vers, high_vers)
register SVCXPRT *xprt;
-u_long low_vers;
-u_long high_vers;
+unsigned long low_vers;
+unsigned long high_vers;
{
struct rpc_msg rply;
@@ -389,13 +388,13 @@ int *readfds;
enum xprt_stat stat;
struct rpc_msg msg;
int prog_found;
- u_long low_vers;
- u_long high_vers;
+ unsigned long low_vers;
+ unsigned long high_vers;
struct svc_req r;
register SVCXPRT *xprt;
- register u_long mask;
+ register unsigned long mask;
register int bit;
- register u_long *maskp;
+ register unsigned long *maskp;
register int setsize;
register int sock;
char cred_area[2 * MAX_AUTH_BYTES + RQCRED_SIZE];
@@ -409,9 +408,9 @@ int *readfds;
setsize = _rpc_dtablesize();
#ifdef __linux__
/*#define NFDBITS 32*/
- maskp = (u_long *) readfds;
+ maskp = (unsigned long *) readfds;
#else
- maskp = (u_long *) readfds->fds_bits;
+ maskp = (unsigned long *) readfds->fds_bits;
#endif
for (sock = 0; sock < setsize; sock += NFDBITS) {
for (mask = *maskp++; (bit = ffs(mask)); mask ^= (1 << (bit - 1))) {
diff --git a/mdk-stage1/dietlibc/librpc/svc_auth_unix.c b/mdk-stage1/dietlibc/librpc/svc_auth_unix.c
index 7e0305f0a..e81eba7d9 100644
--- a/mdk-stage1/dietlibc/librpc/svc_auth_unix.c
+++ b/mdk-stage1/dietlibc/librpc/svc_auth_unix.c
@@ -64,7 +64,7 @@ register struct rpc_msg *msg;
char area_machname[MAX_MACHINE_NAME + 1];
gid_t area_gids[NGRPS];
} *area;
- u_int auth_len;
+ unsigned int auth_len;
int str_len, gid_len;
register int i;
@@ -72,7 +72,7 @@ register struct rpc_msg *msg;
aup = &area->area_aup;
aup->aup_machname = area->area_machname;
aup->aup_gids = area->area_gids;
- auth_len = (u_int) msg->rm_call.cb_cred.oa_length;
+ auth_len = (unsigned int) msg->rm_call.cb_cred.oa_length;
xdrmem_create(&xdrs, msg->rm_call.cb_cred.oa_base, auth_len,
XDR_DECODE);
buf = XDR_INLINE(&xdrs, auth_len);
@@ -83,7 +83,7 @@ register struct rpc_msg *msg;
stat = AUTH_BADCRED;
goto done;
}
- bcopy((caddr_t) buf, aup->aup_machname, (u_int) str_len);
+ memmove(aup->aup_machname, (char*) buf, (unsigned int) str_len);
aup->aup_machname[str_len] = 0;
str_len = RNDUP(str_len);
buf += str_len / sizeof(long);
diff --git a/mdk-stage1/dietlibc/librpc/svc_raw.c b/mdk-stage1/dietlibc/librpc/svc_raw.c
index c13ea5e06..eebb433ee 100644
--- a/mdk-stage1/dietlibc/librpc/svc_raw.c
+++ b/mdk-stage1/dietlibc/librpc/svc_raw.c
@@ -69,6 +69,7 @@ static struct xp_ops server_ops = {
svcraw_destroy
};
+
SVCXPRT *svcraw_create()
{
register struct svcraw_private *srp = svcraw_private;
@@ -130,7 +131,7 @@ struct rpc_msg *msg;
static bool_t svcraw_getargs(xprt, xdr_args, args_ptr)
SVCXPRT *xprt;
xdrproc_t xdr_args;
-caddr_t args_ptr;
+char* args_ptr;
{
register struct svcraw_private *srp = svcraw_private;
@@ -142,7 +143,7 @@ caddr_t args_ptr;
static bool_t svcraw_freeargs(xprt, xdr_args, args_ptr)
SVCXPRT *xprt;
xdrproc_t xdr_args;
-caddr_t args_ptr;
+char* args_ptr;
{
register struct svcraw_private *srp = svcraw_private;
register XDR *xdrs;
@@ -157,3 +158,4 @@ caddr_t args_ptr;
static void svcraw_destroy()
{
}
+
diff --git a/mdk-stage1/dietlibc/librpc/svc_run.c b/mdk-stage1/dietlibc/librpc/svc_run.c
index c7150e357..506b37942 100644
--- a/mdk-stage1/dietlibc/librpc/svc_run.c
+++ b/mdk-stage1/dietlibc/librpc/svc_run.c
@@ -39,6 +39,7 @@ static char sccsid[] = "@(#)svc_run.c 1.1 87/10/13 Copyr 1984 Sun Micro";
#include <rpc/rpc.h>
#include <errno.h>
#include <unistd.h>
+#include "dietfeatures.h"
void svc_run()
{
@@ -47,7 +48,6 @@ void svc_run()
#else
int readfds;
#endif /* def FD_SETSIZE */
- extern int errno;
for (;;) {
#ifdef FD_SETSIZE
diff --git a/mdk-stage1/dietlibc/librpc/svc_simple.c b/mdk-stage1/dietlibc/librpc/svc_simple.c
index 0bb9a19eb..d2310de1e 100644
--- a/mdk-stage1/dietlibc/librpc/svc_simple.c
+++ b/mdk-stage1/dietlibc/librpc/svc_simple.c
@@ -73,8 +73,8 @@ int registerrpc(int prognum, int versnum, int procnum, char *(*progname)(), xdrp
return (-1);
}
}
- (void) pmap_unset((u_long) prognum, (u_long) versnum);
- if (!svc_register(transp, (u_long) prognum, (u_long) versnum,
+ (void) pmap_unset((unsigned long) prognum, (unsigned long) versnum);
+ if (!svc_register(transp, (unsigned long) prognum, (unsigned long) versnum,
universal, IPPROTO_UDP)) {
(void) fprintf(stderr, "couldn't register prog %d vers %d\n",
prognum, versnum);
@@ -120,7 +120,7 @@ SVCXPRT *transp;
for (pl = proglst; pl != NULL; pl = pl->p_nxt)
if (pl->p_prognum == prog && pl->p_procnum == proc) {
/* decode arguments into a CLEAN buffer */
- bzero(xdrbuf, sizeof(xdrbuf)); /* required ! */
+ memset(xdrbuf, 0, sizeof(xdrbuf)); /* required ! */
if (!svc_getargs(transp, pl->p_inproc, xdrbuf)) {
svcerr_decode(transp);
return;
diff --git a/mdk-stage1/dietlibc/librpc/svc_tcp.c b/mdk-stage1/dietlibc/librpc/svc_tcp.c
index 6edafa1b1..0444bc0d0 100644
--- a/mdk-stage1/dietlibc/librpc/svc_tcp.c
+++ b/mdk-stage1/dietlibc/librpc/svc_tcp.c
@@ -48,6 +48,7 @@ static char sccsid[] = "@(#)svc_tcp.c 1.21 87/08/11 Copyr 1984 Sun Micro";
#include <errno.h>
#include <string.h>
#include <unistd.h>
+#include "dietfeatures.h"
/*
* Ops vector for TCP/IP based rpc service handle
@@ -59,14 +60,7 @@ static bool_t svctcp_reply();
static bool_t svctcp_freeargs();
static void svctcp_destroy();
-static struct xp_ops svctcp_op = {
- svctcp_recv,
- svctcp_stat,
- svctcp_getargs,
- svctcp_reply,
- svctcp_freeargs,
- svctcp_destroy
-};
+static struct xp_ops svctcp_op;
/*
* Ops vector for TCP/IP rendezvous handler
@@ -87,13 +81,13 @@ static int readtcp(), writetcp();
static SVCXPRT *makefd_xprt();
struct tcp_rendezvous { /* kept in xprt->xp_p1 */
- u_int sendsize;
- u_int recvsize;
+ unsigned int sendsize;
+ unsigned int recvsize;
};
struct tcp_conn { /* kept in xprt->xp_p1 */
enum xprt_stat strm_stat;
- u_long x_id;
+ unsigned long x_id;
XDR xdrs;
char verf_body[MAX_AUTH_BYTES];
};
@@ -120,8 +114,8 @@ struct tcp_conn { /* kept in xprt->xp_p1 */
*/
SVCXPRT *svctcp_create(sock, sendsize, recvsize)
register int sock;
-u_int sendsize;
-u_int recvsize;
+unsigned int sendsize;
+unsigned int recvsize;
{
bool_t madesock = FALSE;
register SVCXPRT *xprt;
@@ -136,7 +130,7 @@ u_int recvsize;
}
madesock = TRUE;
}
- bzero((char *) &addr, sizeof(addr));
+ memset((char *) &addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
if (bindresvport(sock, &addr)) {
addr.sin_port = 0;
@@ -162,7 +156,7 @@ u_int recvsize;
return (NULL);
}
xprt->xp_p2 = NULL;
- xprt->xp_p1 = (caddr_t) r;
+ xprt->xp_p1 = (char*) r;
xprt->xp_verf = _null_auth;
xprt->xp_ops = &svctcp_rendezvous_op;
xprt->xp_port = ntohs(addr.sin_port);
@@ -177,8 +171,8 @@ u_int recvsize;
*/
SVCXPRT *svcfd_create(fd, sendsize, recvsize)
int fd;
-u_int sendsize;
-u_int recvsize;
+unsigned int sendsize;
+unsigned int recvsize;
{
return (makefd_xprt(fd, sendsize, recvsize));
@@ -186,8 +180,8 @@ u_int recvsize;
static SVCXPRT *makefd_xprt(fd, sendsize, recvsize)
int fd;
-u_int sendsize;
-u_int recvsize;
+unsigned int sendsize;
+unsigned int recvsize;
{
register SVCXPRT *xprt;
register struct tcp_conn *cd;
@@ -207,9 +201,9 @@ u_int recvsize;
}
cd->strm_stat = XPRT_IDLE;
xdrrec_create(&(cd->xdrs), sendsize, recvsize,
- (caddr_t) xprt, readtcp, writetcp);
+ (char*) xprt, readtcp, writetcp);
xprt->xp_p2 = NULL;
- xprt->xp_p1 = (caddr_t) cd;
+ xprt->xp_p1 = (char*) cd;
xprt->xp_verf.oa_base = cd->verf_body;
xprt->xp_addrlen = 0;
xprt->xp_ops = &svctcp_op; /* truely deals with calls */
@@ -267,9 +261,9 @@ register SVCXPRT *xprt;
/* an actual connection socket */
XDR_DESTROY(&(cd->xdrs));
}
- mem_free((caddr_t) cd, sizeof(struct tcp_conn));
+ mem_free((char*) cd, sizeof(struct tcp_conn));
- mem_free((caddr_t) xprt, sizeof(SVCXPRT));
+ mem_free((char*) xprt, sizeof(SVCXPRT));
}
/*
@@ -285,7 +279,7 @@ static struct timeval wait_per_try = { 35, 0 };
*/
static int readtcp(xprt, buf, len)
register SVCXPRT *xprt;
-caddr_t buf;
+char* buf;
register int len;
{
register int sock = xprt->xp_sock;
@@ -327,7 +321,7 @@ register int len;
*/
static int writetcp(xprt, buf, len)
register SVCXPRT *xprt;
-caddr_t buf;
+char* buf;
int len;
{
register int i, cnt;
@@ -372,7 +366,7 @@ register struct rpc_msg *msg;
static bool_t svctcp_getargs(xprt, xdr_args, args_ptr)
SVCXPRT *xprt;
xdrproc_t xdr_args;
-caddr_t args_ptr;
+char* args_ptr;
{
return ((*xdr_args)
@@ -382,7 +376,7 @@ caddr_t args_ptr;
static bool_t svctcp_freeargs(xprt, xdr_args, args_ptr)
SVCXPRT *xprt;
xdrproc_t xdr_args;
-caddr_t args_ptr;
+char* args_ptr;
{
register XDR *xdrs = &(((struct tcp_conn *) (xprt->xp_p1))->xdrs);
@@ -404,3 +398,13 @@ register struct rpc_msg *msg;
(void) xdrrec_endofrecord(xdrs, TRUE);
return (stat);
}
+
+static struct xp_ops svctcp_op = {
+ svctcp_recv,
+ svctcp_stat,
+ svctcp_getargs,
+ svctcp_reply,
+ svctcp_freeargs,
+ svctcp_destroy
+};
+
diff --git a/mdk-stage1/dietlibc/librpc/svc_udp.c b/mdk-stage1/dietlibc/librpc/svc_udp.c
index 1cdb5ce91..af22f289f 100644
--- a/mdk-stage1/dietlibc/librpc/svc_udp.c
+++ b/mdk-stage1/dietlibc/librpc/svc_udp.c
@@ -45,10 +45,9 @@ static char sccsid[] = "@(#)svc_udp.c 1.24 87/08/11 Copyr 1984 Sun Micro";
#include <errno.h>
#include <string.h>
#include <unistd.h>
-
+#include "dietfeatures.h"
#define rpc_buffer(xprt) ((xprt)->xp_p1)
-#define MAX(a, b) ((a > b) ? a : b)
static bool_t svcudp_recv();
static bool_t svcudp_reply();
@@ -57,23 +56,14 @@ static bool_t svcudp_getargs();
static bool_t svcudp_freeargs();
static void svcudp_destroy();
-static struct xp_ops svcudp_op = {
- svcudp_recv,
- svcudp_stat,
- svcudp_getargs,
- svcudp_reply,
- svcudp_freeargs,
- svcudp_destroy
-};
-
-extern int errno;
+static struct xp_ops svcudp_op;
/*
* kept in xprt->xp_p2
*/
struct svcudp_data {
- u_int su_iosz; /* byte size of send.recv buffer */
- u_long su_xid; /* transaction id */
+ unsigned int su_iosz; /* byte size of send.recv buffer */
+ unsigned long su_xid; /* transaction id */
XDR su_xdrs; /* XDR handle */
char su_verfbody[MAX_AUTH_BYTES]; /* verifier body */
char *su_cache; /* cached data, NULL if no cache */
@@ -81,8 +71,8 @@ struct svcudp_data {
#define su_data(xprt) ((struct svcudp_data *)(xprt->xp_p2))
-static int cache_get(SVCXPRT* xprt, struct rpc_msg* msg, char** replyp, u_long* replylenp);
-static void cache_set(SVCXPRT* xprt, u_long replylen);
+static int cache_get(SVCXPRT* xprt, struct rpc_msg* msg, char** replyp, unsigned long* replylenp);
+static void cache_set(SVCXPRT* xprt, unsigned long replylen);
/*
* Usage:
@@ -99,7 +89,7 @@ static void cache_set(SVCXPRT* xprt, u_long replylen);
*/
SVCXPRT *svcudp_bufcreate(sock, sendsz, recvsz)
register int sock;
-u_int sendsz, recvsz;
+unsigned int sendsz, recvsz;
{
bool_t madesock = FALSE;
register SVCXPRT *xprt;
@@ -114,7 +104,7 @@ u_int sendsz, recvsz;
}
madesock = TRUE;
}
- bzero((char *) &addr, sizeof(addr));
+ memset((char *) &addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
if (bindresvport(sock, &addr)) {
addr.sin_port = 0;
@@ -144,7 +134,7 @@ u_int sendsz, recvsz;
xdrmem_create(&(su->su_xdrs), rpc_buffer(xprt), su->su_iosz,
XDR_DECODE);
su->su_cache = NULL;
- xprt->xp_p2 = (caddr_t) su;
+ xprt->xp_p2 = (char*) su;
xprt->xp_verf.oa_base = su->su_verfbody;
xprt->xp_ops = &svcudp_op;
xprt->xp_port = ntohs(addr.sin_port);
@@ -175,7 +165,7 @@ struct rpc_msg *msg;
register XDR *xdrs = &(su->su_xdrs);
register int rlen;
char *reply;
- u_long replylen;
+ unsigned long replylen;
again:
xprt->xp_addrlen = sizeof(struct sockaddr_in);
@@ -185,7 +175,7 @@ struct rpc_msg *msg;
&(xprt->xp_addrlen));
if (rlen == -1 && errno == EINTR)
goto again;
- if (rlen < 4 * sizeof(u_long))
+ if (rlen < 4 * sizeof(unsigned long))
return (FALSE);
xdrs->x_op = XDR_DECODE;
XDR_SETPOS(xdrs, 0);
@@ -222,7 +212,7 @@ struct rpc_msg *msg;
== slen) {
stat = TRUE;
if (su->su_cache && slen >= 0) {
- cache_set(xprt, (u_long) slen);
+ cache_set(xprt, (unsigned long) slen);
}
}
}
@@ -232,7 +222,7 @@ struct rpc_msg *msg;
static bool_t svcudp_getargs(xprt, xdr_args, args_ptr)
SVCXPRT *xprt;
xdrproc_t xdr_args;
-caddr_t args_ptr;
+char* args_ptr;
{
return ((*xdr_args) (&(su_data(xprt)->su_xdrs), args_ptr));
@@ -241,7 +231,7 @@ caddr_t args_ptr;
static bool_t svcudp_freeargs(xprt, xdr_args, args_ptr)
SVCXPRT *xprt;
xdrproc_t xdr_args;
-caddr_t args_ptr;
+char* args_ptr;
{
register XDR *xdrs = &(su_data(xprt)->su_xdrs);
@@ -258,9 +248,9 @@ register SVCXPRT *xprt;
(void) close(xprt->xp_sock);
XDR_DESTROY(&(su->su_xdrs));
mem_free(rpc_buffer(xprt), su->su_iosz);
- mem_free((caddr_t) su, sizeof(struct svcudp_data));
+ mem_free((char*) su, sizeof(struct svcudp_data));
- mem_free((caddr_t) xprt, sizeof(SVCXPRT));
+ mem_free((char*) xprt, sizeof(SVCXPRT));
}
@@ -281,7 +271,7 @@ register SVCXPRT *xprt;
(type *) mem_alloc((unsigned) (sizeof(type) * (size)))
#define BZERO(addr, type, size) \
- bzero((char *) addr, sizeof(type) * (int) (size))
+ memset((char *) addr, 0, sizeof(type) * (int) (size))
/*
* An entry in the cache
@@ -291,16 +281,16 @@ struct cache_node {
/*
* Index into cache is xid, proc, vers, prog and address
*/
- u_long cache_xid;
- u_long cache_proc;
- u_long cache_vers;
- u_long cache_prog;
+ unsigned long cache_xid;
+ unsigned long cache_proc;
+ unsigned long cache_vers;
+ unsigned long cache_prog;
struct sockaddr_in cache_addr;
/*
* The cached reply and length
*/
char *cache_reply;
- u_long cache_replylen;
+ unsigned long cache_replylen;
/*
* Next node on the list, if there is a collision
*/
@@ -313,13 +303,13 @@ struct cache_node {
* The entire cache
*/
struct udp_cache {
- u_long uc_size; /* size of cache */
+ unsigned long uc_size; /* size of cache */
cache_ptr *uc_entries; /* hash table of entries in cache */
cache_ptr *uc_fifo; /* fifo list of entries in cache */
- u_long uc_nextvictim; /* points to next victim in fifo list */
- u_long uc_prog; /* saved program number */
- u_long uc_vers; /* saved version number */
- u_long uc_proc; /* saved procedure number */
+ unsigned long uc_nextvictim; /* points to next victim in fifo list */
+ unsigned long uc_prog; /* saved program number */
+ unsigned long uc_vers; /* saved version number */
+ unsigned long uc_proc; /* saved procedure number */
struct sockaddr_in uc_addr; /* saved caller's address */
};
@@ -335,7 +325,7 @@ struct udp_cache {
* Enable use of the cache.
* Note: there is no disable.
*/
-int svcudp_enablecache(SVCXPRT* transp, u_long size)
+int svcudp_enablecache(SVCXPRT* transp, unsigned long size)
{
struct svcudp_data *su = su_data(transp);
struct udp_cache *uc;
@@ -371,13 +361,13 @@ int svcudp_enablecache(SVCXPRT* transp, u_long size)
/*
* Set an entry in the cache
*/
-static void cache_set(SVCXPRT* xprt, u_long replylen)
+static void cache_set(SVCXPRT* xprt, unsigned long replylen)
{
register cache_ptr victim;
register cache_ptr *vicp;
register struct svcudp_data *su = su_data(xprt);
struct udp_cache *uc = (struct udp_cache *) su->su_cache;
- u_int loc;
+ unsigned int loc;
char *newbuf;
/*
@@ -434,14 +424,14 @@ static void cache_set(SVCXPRT* xprt, u_long replylen)
* Try to get an entry from the cache
* return 1 if found, 0 if not found
*/
-static int cache_get(SVCXPRT* xprt, struct rpc_msg* msg, char** replyp, u_long* replylenp)
+static int cache_get(SVCXPRT* xprt, struct rpc_msg* msg, char** replyp, unsigned long* replylenp)
{
- u_int loc;
+ unsigned int loc;
register cache_ptr ent;
register struct svcudp_data *su = su_data(xprt);
register struct udp_cache *uc = (struct udp_cache *) su->su_cache;
-# define EQADDR(a1, a2) (bcmp((char*)&a1, (char*)&a2, sizeof(a1)) == 0)
+# define EQADDR(a1, a2) (memcmp((char*)&a1, (char*)&a2, sizeof(a1)) == 0)
loc = CACHE_LOC(xprt, su->su_xid);
for (ent = uc->uc_entries[loc]; ent != NULL; ent = ent->cache_next) {
@@ -465,3 +455,13 @@ static int cache_get(SVCXPRT* xprt, struct rpc_msg* msg, char** replyp, u_long*
uc->uc_addr = xprt->xp_raddr;
return (0);
}
+
+static struct xp_ops svcudp_op = {
+ svcudp_recv,
+ svcudp_stat,
+ svcudp_getargs,
+ svcudp_reply,
+ svcudp_freeargs,
+ svcudp_destroy
+};
+
diff --git a/mdk-stage1/dietlibc/librpc/xdr.c b/mdk-stage1/dietlibc/librpc/xdr.c
index 864b47dea..8849dde7a 100644
--- a/mdk-stage1/dietlibc/librpc/xdr.c
+++ b/mdk-stage1/dietlibc/librpc/xdr.c
@@ -52,7 +52,7 @@ static char sccsid[] = "@(#)xdr.c 1.35 87/08/12";
*/
#define XDR_FALSE ((long) 0)
#define XDR_TRUE ((long) 1)
-#define LASTUNSIGNED ((u_int) 0-1)
+#define LASTUNSIGNED ((unsigned int) 0-1)
/*
* for unit alignment
@@ -76,7 +76,7 @@ void xdr_free(xdrproc_t proc, char* objp)
*/
bool_t xdr_void( /* xdrs, addr */ )
/* XDR *xdrs; */
- /* caddr_t addr; */
+ /* char* addr; */
{
return (TRUE);
@@ -87,17 +87,25 @@ bool_t xdr_void( /* xdrs, addr */ )
*/
bool_t xdr_int(XDR* xdrs, int* ip)
{
-
-#ifdef lint
- (void) (xdr_short(xdrs, (short *) ip));
- return (xdr_long(xdrs, (long *) ip));
-#else
if (sizeof(int) == sizeof(long)) {
return (xdr_long(xdrs, (long *) ip));
+ } else if (sizeof(int) < sizeof(long)) {
+ long l;
+ switch (xdrs->x_op) {
+ case XDR_ENCODE:
+ l = (long) *ip;
+ return XDR_PUTLONG(xdrs, &l);
+ case XDR_DECODE:
+ if (!XDR_GETLONG(xdrs, &l))
+ return FALSE;
+ *ip = (int) l;
+ case XDR_FREE:
+ return TRUE;
+ }
+ return FALSE;
} else {
return (xdr_short(xdrs, (short *) ip));
}
-#endif
}
/*
@@ -105,17 +113,25 @@ bool_t xdr_int(XDR* xdrs, int* ip)
*/
bool_t xdr_u_int(XDR* xdrs, unsigned int* up)
{
-
-#ifdef lint
- (void) (xdr_short(xdrs, (short *) up));
- return (xdr_u_long(xdrs, (u_long *) up));
-#else
- if (sizeof(u_int) == sizeof(u_long)) {
- return (xdr_u_long(xdrs, (u_long *) up));
+ if (sizeof(unsigned int) == sizeof(unsigned long)) {
+ return (xdr_u_long(xdrs, (unsigned long *) up));
+ } else if (sizeof(unsigned int) < sizeof(unsigned long)) {
+ unsigned long l;
+ switch (xdrs->x_op) {
+ case XDR_ENCODE:
+ l = (unsigned long) *up;
+ return XDR_PUTLONG(xdrs, &l);
+ case XDR_DECODE:
+ if (!XDR_GETLONG(xdrs, &l))
+ return FALSE;
+ *up = (unsigned int) l;
+ case XDR_FREE:
+ return TRUE;
+ }
+ return FALSE;
} else {
return (xdr_short(xdrs, (short *) up));
}
-#endif
}
/*
@@ -125,7 +141,9 @@ bool_t xdr_u_int(XDR* xdrs, unsigned int* up)
bool_t xdr_long(XDR* xdrs, long* lp)
{
- if (xdrs->x_op == XDR_ENCODE)
+ if (xdrs->x_op == XDR_ENCODE
+ && (sizeof(int32_t) == sizeof(long)
+ || (int32_t) *lp == *lp))
return (XDR_PUTLONG(xdrs, lp));
if (xdrs->x_op == XDR_DECODE)
@@ -144,12 +162,25 @@ bool_t xdr_long(XDR* xdrs, long* lp)
bool_t xdr_u_long(XDR* xdrs, unsigned long* ulp)
{
- if (xdrs->x_op == XDR_DECODE)
- return (XDR_GETLONG(xdrs, (long *) ulp));
- if (xdrs->x_op == XDR_ENCODE)
+ if (xdrs->x_op == XDR_DECODE) {
+ long l;
+ if (XDR_GETLONG(xdrs, &l) == FALSE)
+ return FALSE;
+ *ulp = (uint32_t) l;
+ return TRUE;
+ }
+
+ if (xdrs->x_op == XDR_ENCODE) {
+ if (sizeof(uint32_t) != sizeof(unsigned long)
+ && (uint32_t) *ulp != *ulp)
+ return FALSE;
+
return (XDR_PUTLONG(xdrs, (long *) ulp));
+ }
+
if (xdrs->x_op == XDR_FREE)
return (TRUE);
+
return (FALSE);
}
@@ -184,19 +215,19 @@ bool_t xdr_short(XDR* xdrs, short* sp)
*/
bool_t xdr_u_short(XDR* xdrs, unsigned short* usp)
{
- u_long l;
+ unsigned long l;
switch (xdrs->x_op) {
case XDR_ENCODE:
- l = (u_long) * usp;
+ l = (unsigned long) * usp;
return (XDR_PUTLONG(xdrs, &l));
case XDR_DECODE:
if (!XDR_GETLONG(xdrs, &l)) {
return (FALSE);
}
- *usp = (u_short) l;
+ *usp = (unsigned short) l;
return (TRUE);
case XDR_FREE:
@@ -226,7 +257,7 @@ bool_t xdr_char(XDR* xdrs, char* cp)
*/
bool_t xdr_u_char(XDR* xdrs, unsigned char* cp)
{
- u_int u;
+ unsigned int u;
u = (*cp);
if (!xdr_u_int(xdrs, &u)) {
@@ -271,7 +302,6 @@ bool_t xdr_enum(xdrs, ep)
XDR *xdrs;
enum_t *ep;
{
-#ifndef lint
enum sizecheck { SIZEVAL }; /* used to find the size of an enum */
/*
@@ -279,15 +309,25 @@ enum_t *ep;
*/
if (sizeof(enum sizecheck) == sizeof(long)) {
return (xdr_long(xdrs, (long *) ep));
+ } else if (sizeof(enum sizecheck) == sizeof(int)) {
+ long l;
+ switch (xdrs->x_op) {
+ case XDR_ENCODE:
+ l = *ep;
+ return XDR_PUTLONG(xdrs, &l);
+ case XDR_DECODE:
+ if (!XDR_GETLONG(xdrs, &l))
+ return FALSE;
+ *ep = l;
+ case XDR_FREE:
+ return TRUE;
+ }
+ return FALSE;
} else if (sizeof(enum sizecheck) == sizeof(short)) {
return (xdr_short(xdrs, (short *) ep));
} else {
return (FALSE);
}
-#else
- (void) (xdr_short(xdrs, (short *) ep));
- return (xdr_long(xdrs, (long *) ep));
-#endif
}
/*
@@ -297,10 +337,10 @@ enum_t *ep;
*/
bool_t xdr_opaque(xdrs, cp, cnt)
register XDR *xdrs;
-caddr_t cp;
-register u_int cnt;
+char* cp;
+register unsigned int cnt;
{
- register u_int rndup;
+ register unsigned int rndup;
static char crud[BYTES_PER_XDR_UNIT];
/*
@@ -349,11 +389,11 @@ register u_int cnt;
bool_t xdr_bytes(xdrs, cpp, sizep, maxsize)
register XDR *xdrs;
char **cpp;
-register u_int *sizep;
-u_int maxsize;
+register unsigned int *sizep;
+unsigned int maxsize;
{
register char *sp = *cpp; /* sp is the actual string pointer */
- register u_int nodesize;
+ register unsigned int nodesize;
/*
* first deal with the length since xdr bytes are counted
@@ -465,11 +505,11 @@ bool_t xdr_union(XDR* xdrs, enum_t* dscmp, char* unp, const struct xdr_discrim*
bool_t xdr_string(xdrs, cpp, maxsize)
register XDR *xdrs;
char **cpp;
-u_int maxsize;
+unsigned int maxsize;
{
register char *sp = *cpp; /* sp is the actual string pointer */
- u_int size;
- u_int nodesize;
+ unsigned int size;
+ unsigned int nodesize;
/*
* first deal with the length since xdr strings are counted-strings
diff --git a/mdk-stage1/dietlibc/librpc/xdr_array.c b/mdk-stage1/dietlibc/librpc/xdr_array.c
index f8ae12b19..f0c9bbbb3 100644
--- a/mdk-stage1/dietlibc/librpc/xdr_array.c
+++ b/mdk-stage1/dietlibc/librpc/xdr_array.c
@@ -48,7 +48,7 @@ static char sccsid[] =
#include <rpc/xdr.h>
#include <string.h>
-#define LASTUNSIGNED ((u_int)0-1)
+#define LASTUNSIGNED ((unsigned int)0-1)
/*
@@ -60,17 +60,17 @@ static char sccsid[] =
*/
bool_t xdr_array(xdrs, addrp, sizep, maxsize, elsize, elproc)
register XDR *xdrs;
-caddr_t *addrp; /* array pointer */
-u_int *sizep; /* number of elements */
-u_int maxsize; /* max numberof elements */
-u_int elsize; /* size in bytes of each element */
+char* *addrp; /* array pointer */
+unsigned int *sizep; /* number of elements */
+unsigned int maxsize; /* max numberof elements */
+unsigned int elsize; /* size in bytes of each element */
xdrproc_t elproc; /* xdr routine to handle each element */
{
- register u_int i;
- register caddr_t target = *addrp;
- register u_int c; /* the actual element count */
+ register unsigned int i;
+ register char* target = *addrp;
+ register unsigned int c; /* the actual element count */
register bool_t stat = TRUE;
- register u_int nodesize;
+ register unsigned int nodesize;
/* like strings, arrays are really counted arrays */
if (!xdr_u_int(xdrs, sizep)) {
@@ -80,7 +80,17 @@ xdrproc_t elproc; /* xdr routine to handle each element */
if ((c > maxsize) && (xdrs->x_op != XDR_FREE)) {
return (FALSE);
}
- nodesize = c * elsize;
+ /* duh, look for integer overflow (fefe) */
+ {
+ unsigned int i;
+ nodesize = 0;
+ for (i=c; i; --i) {
+ unsigned int tmp=nodesize+elsize;
+ if (tmp<nodesize) /* overflow */
+ return FALSE;
+ nodesize=tmp;
+ }
+ }
/*
* if we are deserializing, we may need to allocate an array.
@@ -96,7 +106,7 @@ xdrproc_t elproc; /* xdr routine to handle each element */
(void) fprintf(stderr, "xdr_array: out of memory\n");
return (FALSE);
}
- bzero(target, nodesize);
+ memset(target, 0, nodesize);
break;
case XDR_FREE:
@@ -134,11 +144,11 @@ xdrproc_t elproc; /* xdr routine to handle each element */
bool_t xdr_vector(xdrs, basep, nelem, elemsize, xdr_elem)
register XDR *xdrs;
register char *basep;
-register u_int nelem;
-register u_int elemsize;
+register unsigned int nelem;
+register unsigned int elemsize;
register xdrproc_t xdr_elem;
{
- register u_int i;
+ register unsigned int i;
register char *elptr;
elptr = basep;
diff --git a/mdk-stage1/dietlibc/librpc/xdr_mem.c b/mdk-stage1/dietlibc/librpc/xdr_mem.c
index 755f6abf1..c21121183 100644
--- a/mdk-stage1/dietlibc/librpc/xdr_mem.c
+++ b/mdk-stage1/dietlibc/librpc/xdr_mem.c
@@ -42,20 +42,20 @@ static char sccsid[] = "@(#)xdr_mem.c 1.19 87/08/11 Copyr 1984 Sun Micro";
*
*/
-
#include <rpc/types.h>
#include <rpc/xdr.h>
#include <netinet/in.h>
#include <string.h>
+#include <limits.h>
-static bool_t xdrmem_getlong();
-static bool_t xdrmem_putlong();
-static bool_t xdrmem_getbytes();
-static bool_t xdrmem_putbytes();
-static u_int xdrmem_getpos();
-static bool_t xdrmem_setpos();
-static int32_t *xdrmem_inline();
-static void xdrmem_destroy();
+static bool_t xdrmem_getlong (XDR *, long *);
+static bool_t xdrmem_putlong (XDR *, const long *);
+static bool_t xdrmem_getbytes (XDR *, char *, unsigned int);
+static bool_t xdrmem_putbytes (XDR *, const char *, unsigned int);
+static unsigned int xdrmem_getpos (const XDR *);
+static bool_t xdrmem_setpos (XDR *, unsigned int);
+static int32_t *xdrmem_inline (XDR *, unsigned int);
+static void xdrmem_destroy (XDR *);
static struct xdr_ops xdrmem_ops = {
xdrmem_getlong,
@@ -68,106 +68,91 @@ static struct xdr_ops xdrmem_ops = {
xdrmem_destroy
};
+
/*
* The procedure xdrmem_create initializes a stream descriptor for a
* memory buffer.
*/
-void xdrmem_create(xdrs, addr, size, op)
-register XDR *xdrs;
-caddr_t addr;
-u_int size;
-enum xdr_op op;
+void
+xdrmem_create (XDR *xdrs, const char* addr, unsigned int size, enum xdr_op op)
{
-
xdrs->x_op = op;
xdrs->x_ops = &xdrmem_ops;
- xdrs->x_private = xdrs->x_base = addr;
+ xdrs->x_private = xdrs->x_base = (char*)addr;
xdrs->x_handy = size;
}
-static void xdrmem_destroy( /*xdrs */ )
- /*XDR *xdrs; */
+static void
+xdrmem_destroy (XDR *xdrs)
{
}
-static bool_t xdrmem_getlong(xdrs, lp)
-register XDR *xdrs;
-long *lp;
+static bool_t
+xdrmem_getlong (XDR *xdrs, long *lp)
{
+ if (xdrs->x_handy < 4) return FALSE;
+ xdrs->x_handy -= 4;
- if ((xdrs->x_handy -= sizeof(long)) < 0)
- return (FALSE);
-
- *lp = (long) ntohl((u_long) (*((long *) (xdrs->x_private))));
- xdrs->x_private += sizeof(long);
-
- return (TRUE);
+ *lp = (int32_t) ntohl((*((int32_t *) (xdrs->x_private))));
+ xdrs->x_private += 4;
+ return TRUE;
}
-static bool_t xdrmem_putlong(xdrs, lp)
-register XDR *xdrs;
-long *lp;
+static bool_t
+xdrmem_putlong (XDR *xdrs, const long *lp)
{
+ if (xdrs->x_handy < 4) return FALSE;
+ xdrs->x_handy -= 4;
- if ((xdrs->x_handy -= sizeof(long)) < 0)
- return (FALSE);
-
- *(long *) xdrs->x_private = (long) htonl((u_long) (*lp));
- xdrs->x_private += sizeof(long);
-
- return (TRUE);
+ *(int32_t *) xdrs->x_private = htonl(*lp);
+ xdrs->x_private += 4;
+ return (TRUE);
}
-static bool_t xdrmem_getbytes(xdrs, addr, len)
-register XDR *xdrs;
-caddr_t addr;
-register u_int len;
+static bool_t
+xdrmem_getbytes (XDR *xdrs, char *addr, unsigned int len)
{
-
- if ((xdrs->x_handy -= len) < 0)
- return (FALSE);
- bcopy(xdrs->x_private, addr, len);
- xdrs->x_private += len;
- return (TRUE);
+ if (xdrs->x_handy < len) return FALSE;
+ xdrs->x_handy -= len;
+ memmove(addr, xdrs->x_private, len);
+ xdrs->x_private += len;
+ return TRUE;
}
-static bool_t xdrmem_putbytes(xdrs, addr, len)
-register XDR *xdrs;
-caddr_t addr;
-register u_int len;
+static bool_t
+xdrmem_putbytes (XDR *xdrs, const char *addr, unsigned int len)
{
-
- if ((xdrs->x_handy -= len) < 0)
- return (FALSE);
- bcopy(addr, xdrs->x_private, len);
- xdrs->x_private += len;
- return (TRUE);
+ if (xdrs->x_handy < len) return FALSE;
+ xdrs->x_handy -= len;
+ memmove(xdrs->x_private, addr, len);
+ xdrs->x_private += len;
+ return (TRUE);
}
-static u_int xdrmem_getpos(xdrs)
-register XDR *xdrs;
+static unsigned int
+xdrmem_getpos (const XDR *xdrs)
{
-
- return ((u_int) xdrs->x_private - (u_int) xdrs->x_base);
+ return ((unsigned long) xdrs->x_private - (unsigned long) xdrs->x_base);
}
static bool_t xdrmem_setpos(xdrs, pos)
register XDR *xdrs;
-u_int pos;
+unsigned int pos;
{
- register caddr_t newaddr = xdrs->x_base + pos;
- register caddr_t lastaddr = xdrs->x_private + xdrs->x_handy;
-
- if ((long) newaddr > (long) lastaddr)
- return (FALSE);
- xdrs->x_private = newaddr;
- xdrs->x_handy = (int) lastaddr - (int) newaddr;
- return (TRUE);
+ register char* newaddr = xdrs->x_base + pos;
+ register char* lastaddr = xdrs->x_private + xdrs->x_handy;
+
+ if ((long) newaddr > (long) lastaddr
+ || (UINT_MAX < LONG_MAX
+ && (long) UINT_MAX < (long) lastaddr - (long) newaddr))
+ return (FALSE);
+ xdrs->x_private = newaddr;
+ xdrs->x_handy = (long) lastaddr - (long) newaddr;
+ return (TRUE);
}
-static int32_t *xdrmem_inline(xdrs, len)
-register XDR *xdrs;
-int len;
+static int32_t *
+xdrmem_inline (XDR *xdrs, unsigned int len)
{
int32_t *buf = 0;
@@ -178,3 +163,4 @@ int len;
}
return (buf);
}
+
diff --git a/mdk-stage1/dietlibc/librpc/xdr_rec.c b/mdk-stage1/dietlibc/librpc/xdr_rec.c
index 83e800f5e..ab0b6fd8d 100644
--- a/mdk-stage1/dietlibc/librpc/xdr_rec.c
+++ b/mdk-stage1/dietlibc/librpc/xdr_rec.c
@@ -42,7 +42,7 @@ static char sccsid[] = "@(#)xdr_rec.c 1.21 87/08/11 Copyr 1984 Sun Micro";
* and the tcp transport level. A record is composed on one or more
* record fragments. A record fragment is a thirty-two bit header followed
* by n bytes of data, where n is contained in the header. The header
- * is represented as a htonl(u_long). Thegh order bit encodes
+ * is represented as a htonl(unsigned long). Thegh order bit encodes
* whether or not the fragment is the last fragment of the record
* (1 => fragment is last, 0 => more fragments to follow.
* The other 31 bits encode the byte length of the fragment.
@@ -53,19 +53,18 @@ static char sccsid[] = "@(#)xdr_rec.c 1.21 87/08/11 Copyr 1984 Sun Micro";
#include <rpc/xdr.h>
#include <netinet/in.h>
#include <string.h>
+#include <unistd.h>
-extern long lseek();
+static unsigned int fix_buf_size (unsigned int);
-static u_int fix_buf_size();
-
-static bool_t xdrrec_getlong();
-static bool_t xdrrec_putlong();
-static bool_t xdrrec_getbytes();
-static bool_t xdrrec_putbytes();
-static u_int xdrrec_getpos();
-static bool_t xdrrec_setpos();
-static int32_t *xdrrec_inline();
-static void xdrrec_destroy();
+static bool_t xdrrec_getlong (XDR *, long *);
+static bool_t xdrrec_putlong (XDR *, const long *);
+static bool_t xdrrec_getbytes (XDR *, char *, unsigned int);
+static bool_t xdrrec_putbytes (XDR *, const char *, unsigned int);
+static unsigned int xdrrec_getpos (const XDR *);
+static bool_t xdrrec_setpos (XDR *, unsigned int);
+static int32_t *xdrrec_inline (XDR *, unsigned int);
+static void xdrrec_destroy (XDR *);
static struct xdr_ops xdrrec_ops = {
xdrrec_getlong,
@@ -78,6 +77,7 @@ static struct xdr_ops xdrrec_ops = {
xdrrec_destroy
};
+
/*
* A record is composed of one or more record fragments.
* A record fragment is a two-byte header followed by zero to
@@ -91,32 +91,32 @@ static struct xdr_ops xdrrec_ops = {
* meet the needs of xdr and rpc based on tcp.
*/
-#define LAST_FRAG ((u_long)(1 << 31))
+#define LAST_FRAG ((unsigned long)(1 << 31))
typedef struct rec_strm {
- caddr_t tcp_handle;
- caddr_t the_buffer;
+ char* tcp_handle;
+ char* the_buffer;
/*
* out-goung bits
*/
- int (*writeit) ();
- caddr_t out_base; /* output buffer (points to frag header) */
- caddr_t out_finger; /* next output position */
- caddr_t out_boundry; /* data cannot up to this address */
- u_long *frag_header; /* beginning of curren fragment */
+ int (*writeit) (char *, char *, int);
+ char* out_base; /* output buffer (points to frag header) */
+ char* out_finger; /* next output position */
+ char* out_boundry; /* data cannot up to this address */
+ uint32_t *frag_header; /* beginning of curren fragment */
bool_t frag_sent; /* true if buffer sent in middle of record */
/*
* in-coming bits
*/
- int (*readit) ();
- u_long in_size; /* fixed size of the input buffer */
- caddr_t in_base;
- caddr_t in_finger; /* location of next byte to be had */
- caddr_t in_boundry; /* can read up to this location */
+ int (*readit) (char *, char *, int);
+ unsigned long in_size; /* fixed size of the input buffer */
+ char* in_base;
+ char* in_finger; /* location of next byte to be had */
+ char* in_boundry; /* can read up to this location */
long fbtbc; /* fragment bytes to be consumed */
bool_t last_frag;
- u_int sendsize;
- u_int recvsize;
+ unsigned int sendsize;
+ unsigned int recvsize;
} RECSTREAM;
@@ -129,13 +129,11 @@ typedef struct rec_strm {
* write respectively. They are like the system
* calls expect that they take an opaque handle rather than an fd.
*/
-void xdrrec_create(xdrs, sendsize, recvsize, tcp_handle, readit, writeit)
-register XDR *xdrs;
-register u_int sendsize;
-register u_int recvsize;
-caddr_t tcp_handle;
-int (*readit) (); /* like read, but pass it a tcp_handle, not sock */
-int (*writeit) (); /* like write, but pass it a tcp_handle, not sock */
+void
+xdrrec_create (XDR *xdrs, unsigned int sendsize,
+ unsigned int recvsize, char *tcp_handle,
+ int (*readit) (char *, char *, int),
+ int (*writeit) (char *, char *, int))
{
register RECSTREAM *rstrm = (RECSTREAM *) mem_alloc(sizeof(RECSTREAM));
@@ -159,20 +157,20 @@ int (*writeit) (); /* like write, but pass it a tcp_handle, not sock */
return;
}
for (rstrm->out_base = rstrm->the_buffer;
- (u_int) rstrm->out_base % BYTES_PER_XDR_UNIT != 0;
+ (unsigned long) rstrm->out_base % BYTES_PER_XDR_UNIT != 0;
rstrm->out_base++);
rstrm->in_base = rstrm->out_base + sendsize;
/*
* now the rest ...
*/
xdrs->x_ops = &xdrrec_ops;
- xdrs->x_private = (caddr_t) rstrm;
+ xdrs->x_private = (char*) rstrm;
rstrm->tcp_handle = tcp_handle;
rstrm->readit = readit;
rstrm->writeit = writeit;
rstrm->out_finger = rstrm->out_boundry = rstrm->out_base;
- rstrm->frag_header = (u_long *) rstrm->out_base;
- rstrm->out_finger += sizeof(u_long);
+ rstrm->frag_header = (uint32_t *) rstrm->out_base;
+ rstrm->out_finger += 4;
rstrm->out_boundry += sendsize;
rstrm->frag_sent = FALSE;
rstrm->in_size = recvsize;
@@ -188,25 +186,24 @@ int (*writeit) (); /* like write, but pass it a tcp_handle, not sock */
* xdr handle filled in by xdrrec_create.
*/
-static bool_t xdrrec_getlong(xdrs, lp)
-XDR *xdrs;
-long *lp;
+static bool_t
+xdrrec_getlong (XDR *xdrs, long *lp)
{
register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
- register long *buflp = (long *) (rstrm->in_finger);
- long mylong;
+ register int32_t *buflp = (int32_t *) (rstrm->in_finger);
+ int32_t mylong;
/* first try the inline, fast case */
- if ((rstrm->fbtbc >= sizeof(long)) &&
- (((int) rstrm->in_boundry - (int) buflp) >= sizeof(long))) {
- *lp = (long) ntohl((u_long) (*buflp));
- rstrm->fbtbc -= sizeof(long);
- rstrm->in_finger += sizeof(long);
+ if ((rstrm->fbtbc >= BYTES_PER_XDR_UNIT) &&
+ ((rstrm->in_boundry - (char *) buflp) >= BYTES_PER_XDR_UNIT)) {
+ *lp = (int32_t) ntohl(*buflp);
+ rstrm->fbtbc -= BYTES_PER_XDR_UNIT;
+ rstrm->in_finger += BYTES_PER_XDR_UNIT;
} else {
- if (!xdrrec_getbytes(xdrs, (caddr_t) & mylong, sizeof(long)))
+ if (!xdrrec_getbytes(xdrs, (char*) & mylong, BYTES_PER_XDR_UNIT))
return (FALSE);
- *lp = (long) ntohl((u_long) mylong);
+ *lp = (int32_t) ntohl(mylong);
}
return (TRUE);
}
@@ -216,17 +213,18 @@ long *lp;
*/
static bool_t flush_out(RECSTREAM* rstrm, bool_t eor)
{
- register u_long eormask = (eor == TRUE) ? LAST_FRAG : 0;
- register u_long len = (u_long) (rstrm->out_finger) -
- (u_long) (rstrm->frag_header) - sizeof(u_long);
+ register unsigned long eormask = (eor == TRUE) ? LAST_FRAG : 0;
+ register unsigned long len = (rstrm->out_finger
+ - (char *) rstrm->frag_header
+ - BYTES_PER_XDR_UNIT);
*(rstrm->frag_header) = htonl(len | eormask);
- len = (u_long) (rstrm->out_finger) - (u_long) (rstrm->out_base);
+ len = rstrm->out_finger - rstrm->out_base;
if ((*(rstrm->writeit)) (rstrm->tcp_handle, rstrm->out_base, (int) len)
!= (int) len)
return (FALSE);
- rstrm->frag_header = (u_long *) rstrm->out_base;
- rstrm->out_finger = (caddr_t) rstrm->out_base + sizeof(u_long);
+ rstrm->frag_header = (uint32_t *) rstrm->out_base;
+ rstrm->out_finger = (char*) rstrm->out_base + BYTES_PER_XDR_UNIT;
return (TRUE);
}
@@ -235,12 +233,12 @@ static bool_t
fill_input_buf(rstrm)
register RECSTREAM *rstrm;
{
- register caddr_t where;
- u_int i;
+ register char* where;
+ unsigned int i;
register int len;
where = rstrm->in_base;
- i = (u_int) rstrm->in_boundry % BYTES_PER_XDR_UNIT;
+ i = (unsigned long) rstrm->in_boundry % BYTES_PER_XDR_UNIT;
where += i;
len = rstrm->in_size - i;
if ((len = (*(rstrm->readit)) (rstrm->tcp_handle, where, len)) == -1)
@@ -255,20 +253,20 @@ static bool_t
/* knows nothing about records! Only about input buffers */
get_input_bytes(rstrm, addr, len)
register RECSTREAM *rstrm;
-register caddr_t addr;
+register char* addr;
register int len;
{
register int current;
while (len > 0) {
- current = (int) rstrm->in_boundry - (int) rstrm->in_finger;
+ current = rstrm->in_boundry - rstrm->in_finger;
if (current == 0) {
if (!fill_input_buf(rstrm))
return (FALSE);
continue;
}
current = (len < current) ? len : current;
- bcopy(rstrm->in_finger, addr, current);
+ memmove(addr, rstrm->in_finger, current);
rstrm->in_finger += current;
addr += current;
len -= current;
@@ -281,12 +279,24 @@ static bool_t
set_input_fragment(rstrm)
register RECSTREAM *rstrm;
{
- u_long header;
+ uint32_t header;
- if (!get_input_bytes(rstrm, (caddr_t) & header, sizeof(header)))
+ if (!get_input_bytes(rstrm, (char*) & header, sizeof(header)))
return (FALSE);
- header = (long) ntohl(header);
+ header = ntohl(header);
rstrm->last_frag = ((header & LAST_FRAG) == 0) ? FALSE : TRUE;
+ /*
+ * Sanity check. Try not to accept wildly incorrect fragment
+ * sizes. Unfortunately, only a size of zero can be identified as
+ * 'wildely incorrect', and this only, if it is not the last
+ * fragment of a message. Ridiculously large fragment sizes may look
+ * wrong, but we don't have any way to be certain that they aren't
+ * what the client actually intended to send us. Many existing RPC
+ * implementations may sent a fragment of size zero as the last
+ * fragment of a message.
+ */
+ if (header == 0)
+ return FALSE;
rstrm->fbtbc = header & (~LAST_FRAG);
return (TRUE);
}
@@ -300,7 +310,7 @@ long cnt;
register int current;
while (cnt > 0) {
- current = (int) rstrm->in_boundry - (int) rstrm->in_finger;
+ current = rstrm->in_boundry - rstrm->in_finger;
if (current == 0) {
if (!fill_input_buf(rstrm))
return (FALSE);
@@ -313,47 +323,43 @@ long cnt;
return (TRUE);
}
-static u_int fix_buf_size(s)
-register u_int s;
+static unsigned int
+fix_buf_size (unsigned int s)
{
if (s < 100)
s = 4000;
return (RNDUP(s));
}
-static bool_t xdrrec_putlong(xdrs, lp)
-XDR *xdrs;
-long *lp;
+
+static bool_t
+xdrrec_putlong (XDR *xdrs, const long *lp)
{
register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
- register long *dest_lp = ((long *) (rstrm->out_finger));
+ register int32_t *dest_lp = (int32_t *) rstrm->out_finger;
- if ((rstrm->out_finger += sizeof(long)) > rstrm->out_boundry) {
+ if ((rstrm->out_finger += BYTES_PER_XDR_UNIT) > rstrm->out_boundry) {
/*
* this case should almost never happen so the code is
* inefficient
*/
- rstrm->out_finger -= sizeof(long);
+ rstrm->out_finger -= BYTES_PER_XDR_UNIT;
rstrm->frag_sent = TRUE;
if (!flush_out(rstrm, FALSE))
return (FALSE);
- dest_lp = ((long *) (rstrm->out_finger));
- rstrm->out_finger += sizeof(long);
+ dest_lp = ((int32_t *) (rstrm->out_finger));
+ rstrm->out_finger += BYTES_PER_XDR_UNIT;
}
- *dest_lp = (long) htonl((u_long) (*lp));
+ *dest_lp = htonl(*lp);
return (TRUE);
}
-static bool_t
-/* must manage buffers, fragments, and records */
-xdrrec_getbytes(xdrs, addr, len)
-XDR *xdrs;
-register caddr_t addr;
-register u_int len;
+static bool_t /* must manage buffers, fragments, and records */
+xdrrec_getbytes (XDR *xdrs, char *addr, unsigned int len)
{
register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
- register int current;
+ register unsigned int current;
while (len > 0) {
current = rstrm->fbtbc;
@@ -374,18 +380,16 @@ register u_int len;
return (TRUE);
}
-static bool_t xdrrec_putbytes(xdrs, addr, len)
-XDR *xdrs;
-register caddr_t addr;
-register u_int len;
+static bool_t
+xdrrec_putbytes (XDR *xdrs, const char *addr, unsigned int len)
{
register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
- register int current;
+ register unsigned int current;
while (len > 0) {
- current = (u_int) rstrm->out_boundry - (u_int) rstrm->out_finger;
+ current = rstrm->out_boundry - rstrm->out_finger;
current = (len < current) ? len : current;
- bcopy(addr, rstrm->out_finger, current);
+ memmove(rstrm->out_finger, addr, current);
rstrm->out_finger += current;
addr += current;
len -= current;
@@ -398,13 +402,13 @@ register u_int len;
return (TRUE);
}
-static u_int xdrrec_getpos(xdrs)
-register XDR *xdrs;
+static unsigned int
+xdrrec_getpos (const XDR *xdrs)
{
register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
register long pos;
- pos = lseek((int) rstrm->tcp_handle, (long) 0, 1);
+ pos = lseek((int)((long) rstrm->tcp_handle), (long) 0, 1);
if (pos != -1)
switch (xdrs->x_op) {
@@ -417,27 +421,26 @@ register XDR *xdrs;
break;
default:
- pos = (u_int) - 1;
+ pos = (unsigned int) - 1;
break;
}
- return ((u_int) pos);
+ return ((unsigned int) pos);
}
-static bool_t xdrrec_setpos(xdrs, pos)
-register XDR *xdrs;
-u_int pos;
+static bool_t
+xdrrec_setpos (XDR *xdrs, unsigned int pos)
{
register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
- u_int currpos = xdrrec_getpos(xdrs);
+ unsigned int currpos = xdrrec_getpos(xdrs);
int delta = currpos - pos;
- caddr_t newpos;
+ char* newpos;
if ((int) currpos != -1)
switch (xdrs->x_op) {
case XDR_ENCODE:
newpos = rstrm->out_finger - delta;
- if ((newpos > (caddr_t) (rstrm->frag_header)) &&
+ if ((newpos > (char*) (rstrm->frag_header)) &&
(newpos < rstrm->out_boundry)) {
rstrm->out_finger = newpos;
return (TRUE);
@@ -458,9 +461,7 @@ u_int pos;
return (FALSE);
}
-static int32_t *xdrrec_inline(xdrs, len)
-register XDR *xdrs;
-int len;
+static int32_t *xdrrec_inline(XDR* xdrs, unsigned int len)
{
register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
int32_t *buf = NULL;
@@ -486,14 +487,14 @@ int len;
return (buf);
}
-static void xdrrec_destroy(xdrs)
-register XDR *xdrs;
+static void
+xdrrec_destroy (XDR *xdrs)
{
register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
mem_free(rstrm->the_buffer,
rstrm->sendsize + rstrm->recvsize + BYTES_PER_XDR_UNIT);
- mem_free((caddr_t) rstrm, sizeof(RECSTREAM));
+ mem_free((char*) rstrm, sizeof(RECSTREAM));
}
@@ -554,20 +555,18 @@ XDR *xdrs;
bool_t sendnow;
{
register RECSTREAM *rstrm = (RECSTREAM *) (xdrs->x_private);
- register u_long len; /* fragment length */
+ register unsigned long len; /* fragment length */
if (sendnow || rstrm->frag_sent ||
- ((u_long) rstrm->out_finger + sizeof(u_long) >=
- (u_long) rstrm->out_boundry)) {
+ (rstrm->out_finger + BYTES_PER_XDR_UNIT >= rstrm->out_boundry)) {
rstrm->frag_sent = FALSE;
return (flush_out(rstrm, TRUE));
}
- len = (u_long) (rstrm->out_finger) - (u_long) (rstrm->frag_header) -
- sizeof(u_long);
- *(rstrm->frag_header) = htonl((u_long) len | LAST_FRAG);
- rstrm->frag_header = (u_long *) rstrm->out_finger;
- rstrm->out_finger += sizeof(u_long);
+ len = rstrm->out_finger - (char *)rstrm->frag_header -
+ BYTES_PER_XDR_UNIT;
+ *(rstrm->frag_header) = htonl((unsigned long) len | LAST_FRAG);
+ rstrm->frag_header = (uint32_t *) rstrm->out_finger;
+ rstrm->out_finger += BYTES_PER_XDR_UNIT;
return (TRUE);
}
-
diff --git a/mdk-stage1/dietlibc/librpc/xdr_reference.c b/mdk-stage1/dietlibc/librpc/xdr_reference.c
index 7715d821c..3e42d12f3 100644
--- a/mdk-stage1/dietlibc/librpc/xdr_reference.c
+++ b/mdk-stage1/dietlibc/librpc/xdr_reference.c
@@ -45,7 +45,7 @@ static char sccsid[] = "@(#)xdr_reference.c 1.11 87/08/11 SMI";
#include <rpc/xdr.h>
#include <string.h>
-#define LASTUNSIGNED ((u_int)0-1)
+#define LASTUNSIGNED ((unsigned int)0-1)
/*
* XDR an indirect pointer
@@ -58,11 +58,11 @@ static char sccsid[] = "@(#)xdr_reference.c 1.11 87/08/11 SMI";
*/
bool_t xdr_reference(xdrs, pp, size, proc)
register XDR *xdrs;
-caddr_t *pp; /* the pointer to work on */
-u_int size; /* size of the object pointed to */
+char* *pp; /* the pointer to work on */
+unsigned int size; /* size of the object pointed to */
xdrproc_t proc; /* xdr routine to handle the object */
{
- register caddr_t loc = *pp;
+ register char* loc = *pp;
register bool_t stat;
if (loc == NULL)
@@ -71,12 +71,12 @@ xdrproc_t proc; /* xdr routine to handle the object */
return (TRUE);
case XDR_DECODE:
- *pp = loc = (caddr_t) mem_alloc(size);
+ *pp = loc = (char*) mem_alloc(size);
if (loc == NULL) {
(void) fprintf(stderr, "xdr_reference: out of memory\n");
return (FALSE);
}
- bzero(loc, (int) size);
+ memset(loc, 0, (int) size);
break;
}
@@ -112,7 +112,7 @@ xdrproc_t proc; /* xdr routine to handle the object */
bool_t xdr_pointer(xdrs, objpp, obj_size, xdr_obj)
register XDR *xdrs;
char **objpp;
-u_int obj_size;
+unsigned int obj_size;
xdrproc_t xdr_obj;
{
diff --git a/mdk-stage1/dietlibc/librpc/xdr_stdio.c b/mdk-stage1/dietlibc/librpc/xdr_stdio.c
index e3190e0a9..405cc6a69 100644
--- a/mdk-stage1/dietlibc/librpc/xdr_stdio.c
+++ b/mdk-stage1/dietlibc/librpc/xdr_stdio.c
@@ -51,7 +51,7 @@ static bool_t xdrstdio_getlong();
static bool_t xdrstdio_putlong();
static bool_t xdrstdio_getbytes();
static bool_t xdrstdio_putbytes();
-static u_int xdrstdio_getpos();
+static unsigned int xdrstdio_getpos();
static bool_t xdrstdio_setpos();
static int32_t *xdrstdio_inline();
static void xdrstdio_destroy();
@@ -70,6 +70,7 @@ static struct xdr_ops xdrstdio_ops = {
xdrstdio_destroy /* destroy stream */
};
+
/*
* Initialize a stdio xdr stream.
* Sets the xdr stream handle xdrs for use on the stream file.
@@ -83,7 +84,7 @@ enum xdr_op op;
xdrs->x_op = op;
xdrs->x_ops = &xdrstdio_ops;
- xdrs->x_private = (caddr_t) file;
+ xdrs->x_private = (char*) file;
xdrs->x_handy = 0;
xdrs->x_base = 0;
}
@@ -104,7 +105,7 @@ XDR *xdrs;
register long *lp;
{
- if (fread((caddr_t) lp, sizeof(long), 1, (FILE *) xdrs->x_private) !=
+ if (fread((char*) lp, sizeof(long), 1, (FILE *) xdrs->x_private) !=
1) return (FALSE);
#ifndef mc68000
@@ -123,7 +124,7 @@ long *lp;
lp = &mycopy;
#endif
- if (fwrite((caddr_t) lp, sizeof(long), 1, (FILE *) xdrs->x_private) !=
+ if (fwrite((char*) lp, sizeof(long), 1, (FILE *) xdrs->x_private) !=
1) return (FALSE);
return (TRUE);
@@ -131,8 +132,8 @@ long *lp;
static bool_t xdrstdio_getbytes(xdrs, addr, len)
XDR *xdrs;
-caddr_t addr;
-u_int len;
+char* addr;
+unsigned int len;
{
if ((len != 0)
@@ -143,8 +144,8 @@ u_int len;
static bool_t xdrstdio_putbytes(xdrs, addr, len)
XDR *xdrs;
-caddr_t addr;
-u_int len;
+char* addr;
+unsigned int len;
{
if ((len != 0)
@@ -153,25 +154,23 @@ u_int len;
return (TRUE);
}
-static u_int xdrstdio_getpos(xdrs)
+static unsigned int xdrstdio_getpos(xdrs)
XDR *xdrs;
{
- return ((u_int) ftell((FILE *) xdrs->x_private));
+ return ((unsigned int) ftell((FILE *) xdrs->x_private));
}
static bool_t xdrstdio_setpos(xdrs, pos)
XDR *xdrs;
-u_int pos;
+unsigned int pos;
{
return ((fseek((FILE *) xdrs->x_private, (long) pos, 0) < 0) ?
FALSE : TRUE);
}
-static int32_t *xdrstdio_inline(xdrs, len)
-XDR *xdrs;
-u_int len;
+static int32_t *xdrstdio_inline(XDR* xdrs, unsigned int len)
{
/*
@@ -185,3 +184,4 @@ u_int len;
*/
return (NULL);
}
+
diff --git a/mdk-stage1/dietlibc/libshell/fnmatch.c b/mdk-stage1/dietlibc/libshell/fnmatch.c
index 4e7664510..ef43735f6 100644
--- a/mdk-stage1/dietlibc/libshell/fnmatch.c
+++ b/mdk-stage1/dietlibc/libshell/fnmatch.c
@@ -1,5 +1,6 @@
#include <ctype.h>
#include <fnmatch.h>
+#include <string.h>
#define NOTFIRST 128
@@ -11,6 +12,7 @@ static int match(char c,char d,int flags) {
}
int fnmatch(const char *pattern, const char *string, int flags) {
+ /*printf("fnmatch(\"%s\",\"%s\")\n",pattern,string);*/
if (*string==0) {
while (*pattern=='*') ++pattern;
return (!!*pattern);
@@ -18,31 +20,36 @@ int fnmatch(const char *pattern, const char *string, int flags) {
if (*string=='.' && *pattern!='.' && (flags&FNM_PERIOD)) {
/* don't match if FNM_PERIOD and this is the first char */
if ((flags&FNM_PERIOD) && (!(flags&NOTFIRST)))
- return 1;
+ return FNM_NOMATCH;
/* don't match if FNM_PERIOD and FNM_FILE_NAME and previous was '/' */
if ((flags&(FNM_FILE_NAME|FNM_PERIOD)) && string[-1]=='/')
- return 1;
+ return FNM_NOMATCH;
}
flags|=NOTFIRST;
switch (*pattern) {
case '[':
- ++pattern;
- while (*pattern && *pattern!=']') {
- if (flags&FNM_PATHNAME || *string!='/') {
+ {
+ int neg=0;
+ ++pattern;
+ if (*string=='/' && flags&FNM_PATHNAME) return FNM_NOMATCH;
+ if (*pattern=='^') { neg=1; ++pattern; }
+ while (*pattern && *pattern!=']') {
int res=0;
if (pattern[1]=='-') {
if (*string>=*pattern && *string<=pattern[2]) res=1;
if (flags&FNM_CASEFOLD) {
if (tolower(*string)>=tolower(*pattern) && tolower(*string)<=tolower(pattern[2])) res=1;
}
- } else
+ pattern+=3;
+ } else {
res=match(*pattern,*string,flags);
- if (res) {
+ ++pattern;
+ }
+ if (res ^ neg) {
while (*pattern && *pattern!=']') ++pattern;
return fnmatch(pattern+1,string+1,flags);
}
}
- ++pattern;
}
break;
case '\\':
@@ -55,12 +62,9 @@ int fnmatch(const char *pattern, const char *string, int flags) {
}
break;
case '*':
- if (!pattern[1] || fnmatch(pattern+1,string,flags)==0)
- return 0;
- else
- if (*string!='/')
- return fnmatch(pattern,string+1,flags);
- break;
+ if ((*string=='/' && flags&FNM_PATHNAME) || fnmatch(pattern,string+1,flags))
+ return fnmatch(pattern+1,string,flags);
+ return 0;
case 0:
if (*string==0 || (*string=='/' && (flags&FNM_LEADING_DIR)))
return 0;
@@ -70,5 +74,5 @@ int fnmatch(const char *pattern, const char *string, int flags) {
return fnmatch(pattern+1,string+1,flags);
break;
}
- return 1;
+ return FNM_NOMATCH;
}
diff --git a/mdk-stage1/dietlibc/libshell/glob.c b/mdk-stage1/dietlibc/libshell/glob.c
index 34d09d87a..def55f8dc 100644
--- a/mdk-stage1/dietlibc/libshell/glob.c
+++ b/mdk-stage1/dietlibc/libshell/glob.c
@@ -24,6 +24,7 @@
#include <fnmatch.h>
#include <dirent.h>
#include <pwd.h>
+#include "dietfeatures.h"
#include <glob.h>
@@ -38,7 +39,7 @@ static int cmp_func(const void * a, const void * b)
return 1;
if (s2 == NULL)
return -1;
- return strcmp(s1, s2);
+ return strcoll(s1, s2);
}
@@ -47,6 +48,38 @@ static int cmp_func(const void * a, const void * b)
The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done.
The GLOB_APPEND flag is assumed to be set (always appends).
Prepends DIRECTORY in constructed PGLOB. */
+static void close_dir_keep_errno(DIR* dp) {
+ int save = errno;
+ if (dp)
+ closedir (dp);
+ errno=save;
+}
+
+static int add_entry(const char* name,glob_t *pglob,int* nfound) {
+ pglob->gl_pathv = (char **) realloc(pglob->gl_pathv,
+ (pglob->gl_pathc + pglob->gl_offs + 2)
+ * sizeof (char *));
+ if (pglob->gl_pathv == NULL)
+ return 1;
+ pglob->gl_pathv[pglob->gl_offs + pglob->gl_pathc] = strdup(name);
+ pglob->gl_pathv[pglob->gl_offs + pglob->gl_pathc + 1] = NULL;
+ pglob->gl_pathc++;
+ (*nfound)++;
+ return 0;
+}
+
+static void build_fullname(char * fullname, const char * directory, const char * filename) {
+ char *dest=fullname;
+ if (directory[0]=='/' && !directory[1]) {
+ *dest='/'; ++dest;
+ } else if (directory[0]!='.' || directory[1]) {
+ strcpy(dest,directory);
+ dest=strchr(dest,0);
+ *dest='/'; ++dest;
+ }
+ strcpy(dest,filename);
+}
+
static int glob_in_dir(const char *pattern, const char *directory, int flags,
int errfunc(const char * epath, int eerrno),
glob_t *pglob)
@@ -57,33 +90,6 @@ static int glob_in_dir(const char *pattern, const char *directory, int flags,
int i;
char * ptr;
- void close_dir_keep_errno(void) {
- int save = errno;
- if (dp)
- closedir (dp);
- __set_errno(save);
- }
- int add_entry(const char * name) {
- pglob->gl_pathv = (char **) realloc(pglob->gl_pathv,
- (pglob->gl_pathc + pglob->gl_offs + 2)
- * sizeof (char *));
- if (pglob->gl_pathv == NULL)
- return 1;
- pglob->gl_pathv[pglob->gl_offs + pglob->gl_pathc] = strdup(name);
- pglob->gl_pathv[pglob->gl_offs + pglob->gl_pathc + 1] = NULL;
- pglob->gl_pathc++;
- nfound++;
- return 0;
- }
- void build_fullname(char * fullname, int fullnamesize, const char * directory, const char * filename) {
- if (!strcmp(directory, "/"))
- snprintf(fullname, fullnamesize, "/%s", filename);
- else if (!strcmp(directory, "."))
- snprintf(fullname, fullnamesize, "%s", filename);
- else
- snprintf(fullname, fullnamesize, "%s/%s", directory, filename);
- }
-
if (!dp) {
if (errno != ENOTDIR
&& ((errfunc != NULL && (*errfunc) (directory, errno))
@@ -96,19 +102,19 @@ static int glob_in_dir(const char *pattern, const char *directory, int flags,
while ((ep = readdir(dp))) {
i = strlen(directory) + strlen(ep->d_name) + 2;
ptr = (char *) alloca(i);
- build_fullname(ptr, i, directory, ep->d_name);
+ build_fullname(ptr, directory, ep->d_name);
if (flags & GLOB_ONLYDIR) {
struct stat statr;
if (stat(ptr, &statr) || !S_ISDIR(statr.st_mode))
continue;
}
if (fnmatch(pattern, ep->d_name, fnm_flags) == 0)
- if (add_entry(ptr))
+ if (add_entry(ptr,pglob,&nfound))
goto memory_error;
}
}
- close_dir_keep_errno();
+ close_dir_keep_errno(dp);
if (nfound != 0)
pglob->gl_flags = flags;
@@ -116,8 +122,8 @@ static int glob_in_dir(const char *pattern, const char *directory, int flags,
/* nfound == 0 */
i = strlen(directory) + strlen(pattern) + 2;
ptr = (char *) alloca(i);
- build_fullname(ptr, i, directory, pattern);
- if (add_entry(ptr))
+ build_fullname(ptr, directory, pattern);
+ if (add_entry(ptr,pglob,&nfound))
goto memory_error;
}
@@ -127,7 +133,7 @@ static int glob_in_dir(const char *pattern, const char *directory, int flags,
/* We're in trouble since we can't free the already allocated memory. [allocated from strdup(filame)]
* Well, after all, when malloc returns NULL we're already in a bad mood, and no doubt the
* program will manage to segfault by itself very soon :-). */
- close_dir_keep_errno();
+ close_dir_keep_errno(dp);
return GLOB_NOSPACE;
}
@@ -146,7 +152,7 @@ int glob(const char *pattern, int flags, int errfunc(const char * epath, int eer
char * ptr, * ptr2;
if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0) {
- __set_errno (EINVAL);
+ errno=EINVAL;
return -1;
}
@@ -196,10 +202,10 @@ int glob(const char *pattern, int flags, int errfunc(const char * epath, int eer
if (filename == NULL) {
/* We have no '/' in the pattern */
filename = pattern_;
- dirname = ".";
+ dirname = (char*)".";
} else if (filename == pattern_) {
/* "/pattern". */
- dirname = "/";
+ dirname = (char*)"/";
filename++;
} else {
dirname = pattern_;
@@ -293,13 +299,13 @@ int glob(const char *pattern, int flags, int errfunc(const char * epath, int eer
}
/* okay now we add the new entry */
- k = strlen(dirs.gl_pathv[i]) + 1 + strlen(filename) + 1;
+ k = strlen(dirs.gl_pathv[i]) + strlen(filename) + 2;
if ((pglob->gl_pathv[j] = malloc(k)) == NULL) {
globfree(&dirs);
globfree(pglob);
return GLOB_NOSPACE;
}
- snprintf(pglob->gl_pathv[j], k, "%s/%s", dirs.gl_pathv[i], filename);
+ build_fullname(pglob->gl_pathv[j], dirs.gl_pathv[i], filename);
pglob->gl_pathc++;
pglob->gl_pathv[j+1] = NULL;
}
diff --git a/mdk-stage1/dietlibc/libshell/realpath.c b/mdk-stage1/dietlibc/libshell/realpath.c
index 1377018e5..9aee2c585 100644
--- a/mdk-stage1/dietlibc/libshell/realpath.c
+++ b/mdk-stage1/dietlibc/libshell/realpath.c
@@ -5,21 +5,21 @@
#include <string.h>
#include "dietfeatures.h"
-char *realpath(const char *path, char *resolved_path) {
+char* realpath(const char *path, char *resolved_path) {
int fd=open(".",O_RDONLY);
- char *tmp="";
+ char* tmp=(char*)"";
+ if (fd<0) return 0;
if (chdir(path)) {
-#ifdef WANT_THREAD_SAFE
- if (*__errno_location()==ENOTDIR)
-#else
- if (errno==ENOTDIR)
-#endif
- {
- if ((tmp=strrchr(path,'/'))) {
+ if (errno==ENOTDIR) {
+ char* match;
+ if ((match=strrchr(path,'/'))) {
+ tmp=match;
memmove(resolved_path,path,tmp-path);
resolved_path[tmp-path]=0;
if (chdir(resolved_path)) { resolved_path=0; goto abort; }
}
+ } else {
+ resolved_path=0; goto abort;
}
}
if (!getcwd(resolved_path,PATH_MAX)) { resolved_path=0; goto abort; }
diff --git a/mdk-stage1/dietlibc/libstdio/fclose.c b/mdk-stage1/dietlibc/libstdio/fclose.c
index a955c6086..491ed2522 100644
--- a/mdk-stage1/dietlibc/libstdio/fclose.c
+++ b/mdk-stage1/dietlibc/libstdio/fclose.c
@@ -4,14 +4,9 @@
int fclose(FILE *stream) {
int res;
-#ifdef WANT_BUFFERED_STDIO
FILE *f,*fl;
-#endif
- if (!stream)
- return EOF;
fflush(stream);
res=close(stream->fd);
-#ifdef WANT_BUFFERED_STDIO
for (fl=0,f=__stdio_root; f; fl=f,f=f->next)
if (f==stream) {
if (fl)
@@ -20,7 +15,8 @@ int fclose(FILE *stream) {
__stdio_root=f->next;
break;
}
-#endif
+ if ((!(stream->flags&STATICBUF))&&(stream->buf))
+ free(stream->buf);
free(stream);
return res;
}
diff --git a/mdk-stage1/dietlibc/libstdio/fdglue.c b/mdk-stage1/dietlibc/libstdio/fdglue.c
index 1c3918f1f..9542711e2 100644
--- a/mdk-stage1/dietlibc/libstdio/fdglue.c
+++ b/mdk-stage1/dietlibc/libstdio/fdglue.c
@@ -1,13 +1,9 @@
-#include "dietstdio.h"
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
-
-#ifdef WANT_BUFFERED_STDIO
-extern int __stdio_atexit;
-extern void __stdio_flushall();
-#endif
+#include <pthread.h>
+#include "dietstdio.h"
int __stdio_parse_mode(const char *mode) {
int f=0;
@@ -24,29 +20,3 @@ int __stdio_parse_mode(const char *mode) {
}
}
-FILE* __stdio_init_file(int fd) {
- FILE *tmp=(FILE*)malloc(sizeof(FILE));
- if (!tmp) {
- close(fd);
- errno=ENOMEM;
- return 0;
- }
- tmp->fd=fd;
-#ifdef WANT_BUFFERED_STDIO
- tmp->bm=0;
- tmp->bs=0;
-#endif
-#ifdef WANT_UNGETC
- tmp->ungotten = 0;
-#endif
- tmp->flags=0;
-#ifdef WANT_BUFFERED_STDIO
- if (__stdio_atexit==0) {
- __stdio_atexit=1;
- atexit(__stdio_flushall);
- }
- tmp->next=__stdio_root;
- __stdio_root=tmp;
-#endif
- return tmp;
-}
diff --git a/mdk-stage1/dietlibc/libstdio/fdopen.c b/mdk-stage1/dietlibc/libstdio/fdopen.c
index aee14fb0c..748b716eb 100644
--- a/mdk-stage1/dietlibc/libstdio/fdopen.c
+++ b/mdk-stage1/dietlibc/libstdio/fdopen.c
@@ -1,21 +1,13 @@
+#include <errno.h>
+#include "dietfeatures.h"
#include <sys/types.h>
#include <dietstdio.h>
#include <unistd.h>
-#define SEEK_END 2
-
-int __stdio_parse_mode(const char *mode);
-FILE* __stdio_init_file(int fd);
-
-FILE *fdopen (int filedes, const char *mode) {
+FILE *fdopen(int filedes, const char *mode) {
int f=0; /* O_RDONLY, O_WRONLY or O_RDWR */
- int fd;
f=__stdio_parse_mode(mode);
- if ((fd=filedes)<0) return 0;
- {
- FILE * ret = __stdio_init_file(fd);
- ret->flags |= UNSEEKABLE;
- return ret;
- }
+ if (filedes<0) { errno=EBADF; return 0; }
+ return __stdio_init_file(filedes,0);
}
diff --git a/mdk-stage1/dietlibc/libstdio/feof.c b/mdk-stage1/dietlibc/libstdio/feof.c
index b7e86fe3b..bf2267fcf 100644
--- a/mdk-stage1/dietlibc/libstdio/feof.c
+++ b/mdk-stage1/dietlibc/libstdio/feof.c
@@ -1,9 +1,7 @@
#include <dietstdio.h>
int feof(FILE *stream) {
-#ifdef WANT_UNGETC
/* yuck!!! */
if (stream->ungotten) return 0;
-#endif
return (stream->flags&EOFINDICATOR);
}
diff --git a/mdk-stage1/dietlibc/libstdio/fflush.c b/mdk-stage1/dietlibc/libstdio/fflush.c
index 7078e04f4..e0e23b3ba 100644
--- a/mdk-stage1/dietlibc/libstdio/fflush.c
+++ b/mdk-stage1/dietlibc/libstdio/fflush.c
@@ -1,21 +1,16 @@
-#include "dietstdio.h"
#include <unistd.h>
#include <stdlib.h>
#include "dietwarning.h"
+#include "dietstdio.h"
FILE *__stdio_root;
-#ifdef WANT_BUFFERED_STDIO
int __stdio_atexit=0;
-void __stdio_flushall() {
+void __stdio_flushall(void) {
fflush(0);
}
-extern int __fflush_stdin();
-extern int __fflush_stdout();
-extern int __fflush_stderr();
-
int fflush(FILE *stream) {
if (stream==0) {
int res;
@@ -28,15 +23,20 @@ int fflush(FILE *stream) {
res=-1;
return res;
}
+// if (stream->flags&NOBUF) return 0;
if (stream->flags&BUFINPUT) {
register int tmp;
- if ((tmp=stream->bm-stream->bs)) lseek(stream->fd,tmp,SEEK_CUR);
- } else
- if (stream->bm && write(stream->fd,stream->buf,stream->bm)!=stream->bm) {
+ if ((tmp=stream->bm-stream->bs)) {
+ lseek(stream->fd,tmp,SEEK_CUR);
+ }
+ stream->bs=stream->bm=0;
+ } else {
+ if (stream->bm && write(stream->fd,stream->buf,stream->bm)!=(int)stream->bm) {
stream->flags|=ERRORINDICATOR;
return -1;
}
- stream->bm=0;
+ stream->bm=0;
+ }
return 0;
}
@@ -50,13 +50,15 @@ int __fflush4(FILE *stream,int next) {
stream->flags=(stream->flags&~BUFINPUT)|next;
return res;
}
+ if (stream->fd==0) __fflush_stdout();
return 0;
}
-#else
-int fflush(FILE *stream) {
- return 0;
+/* Internal function, has no prototype.
+ * This is defined here because of the weak symbol ELF semantics */
+int __stdio_outs(const char *s,size_t len);
+int __stdio_outs(const char *s,size_t len) {
+ return fwrite(s,1,(size_t)len,stdout)==len?1:0;
}
-#endif
-link_warning("fflush","warning: your code uses stdio (several kilobytes of bloat).")
+link_warning("fflush","warning: your code uses stdio (7+k bloat).")
diff --git a/mdk-stage1/dietlibc/libstdio/fgetc.c b/mdk-stage1/dietlibc/libstdio/fgetc.c
deleted file mode 100644
index 90d83961a..000000000
--- a/mdk-stage1/dietlibc/libstdio/fgetc.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "dietstdio.h"
-#include <unistd.h>
-
-extern int feof(FILE *stream);
-
-int fgetc(FILE *stream) {
- unsigned char c;
-#ifdef WANT_UNGETC
- if (stream->ungotten) {
- stream->ungotten=0;
- return stream->ungetbuf;
- }
-#endif
- if (feof(stream))
- return EOF;
-#ifdef WANT_BUFFERED_STDIO
- if (__fflush4(stream,BUFINPUT)) return EOF;
- if (stream->bm>=stream->bs) {
- int len=read(stream->fd,stream->buf,BUFSIZE);
- if (len==0) {
- stream->flags|=EOFINDICATOR;
- return EOF;
- } else if (len<0) {
- stream->flags|=ERRORINDICATOR;
- return EOF;
- }
- stream->bm=0;
- stream->bs=len;
- }
- c=stream->buf[stream->bm];
- ++stream->bm;
- return c;
-#else
- if (read(stream->fd,&c,1)!=1) {
- stream->flags|=ERRORINDICATOR;
- return EOF;
- }
- return c;
-#endif
-}
diff --git a/mdk-stage1/dietlibc/libstdio/fgets.c b/mdk-stage1/dietlibc/libstdio/fgets.c
index c613d452d..d2ce4195d 100644
--- a/mdk-stage1/dietlibc/libstdio/fgets.c
+++ b/mdk-stage1/dietlibc/libstdio/fgets.c
@@ -1,11 +1,9 @@
#include "dietstdio.h"
-extern int ferror(FILE *stream);
-
char *fgets(char *s, int size, FILE *stream) {
char *orig=s;
int l;
- for (l=size; l>0;) {
+ for (l=size; l>1;) {
int c=fgetc(stream);
if (c==EOF) break;
*s=c;
diff --git a/mdk-stage1/dietlibc/libstdio/fopen.c b/mdk-stage1/dietlibc/libstdio/fopen.c
index aac17be42..3d9c28198 100644
--- a/mdk-stage1/dietlibc/libstdio/fopen.c
+++ b/mdk-stage1/dietlibc/libstdio/fopen.c
@@ -2,13 +2,7 @@
#include <dietstdio.h>
#include <unistd.h>
-#define SEEK_END 2
-
extern int __stdio_atexit;
-extern void __stdio_flushall();
-
-extern int __stdio_parse_mode(const char *mode);
-extern FILE* __stdio_init_file(int fd);
FILE *fopen (const char *path, const char *mode) {
int f=0; /* O_RDONLY, O_WRONLY or O_RDWR */
@@ -17,5 +11,5 @@ FILE *fopen (const char *path, const char *mode) {
f=__stdio_parse_mode(mode);
if ((fd=open(path,f,0666))<0)
return 0;
- return __stdio_init_file(fd);
+ return __stdio_init_file(fd,1);
}
diff --git a/mdk-stage1/dietlibc/libstdio/fprintf.c b/mdk-stage1/dietlibc/libstdio/fprintf.c
index 237fd1e51..6b3849a33 100644
--- a/mdk-stage1/dietlibc/libstdio/fprintf.c
+++ b/mdk-stage1/dietlibc/libstdio/fprintf.c
@@ -1,23 +1,13 @@
#include <stdarg.h>
-#include <linux/types.h>
+#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
-extern int vsnprintf (char *str,size_t size,const char *format, va_list arg_ptr);
-
int fprintf(FILE *f,const char *format,...) {
int n;
- char *printf_buf;
-/* char printf_buf[1024]; */
va_list arg_ptr;
- va_start(arg_ptr, format);
- n=vsnprintf(0,1000000,format,arg_ptr);
-/* write(1,printf_buf,strlen(printf_buf)); */
- va_end (arg_ptr);
- va_start (arg_ptr, format);
- printf_buf=alloca(n+2);
- n=vsnprintf(printf_buf,n+1,format,arg_ptr);
- va_end (arg_ptr);
- fwrite(printf_buf,n,1,f);
+ va_start(arg_ptr,format);
+ n=vfprintf(f,format,arg_ptr);
+ va_end(arg_ptr);
return n;
}
diff --git a/mdk-stage1/dietlibc/libstdio/fputc.c b/mdk-stage1/dietlibc/libstdio/fputc.c
deleted file mode 100644
index b816f7c4d..000000000
--- a/mdk-stage1/dietlibc/libstdio/fputc.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <dietstdio.h>
-#ifndef WANT_BUFFERED_STDIO
-#include <unistd.h>
-#endif
-
-int fputc(int c, FILE *stream) {
-#ifdef WANT_BUFFERED_STDIO
- if (__fflush4(stream,0)) return EOF;
- if (stream->bm>=BUFSIZE-1)
- if (fflush(stream)) return EOF;
- stream->buf[stream->bm]=c;
- ++stream->bm;
- if ((stream->flags&BUFLINEWISE) && c=='\n') /* puke */
- if (fflush(stream)) return EOF;
-#else
- write(stream->fd,&c,1);
-#endif
- return 0;
-}
diff --git a/mdk-stage1/dietlibc/libstdio/fread.c b/mdk-stage1/dietlibc/libstdio/fread.c
index 29afa1489..813a98fb2 100644
--- a/mdk-stage1/dietlibc/libstdio/fread.c
+++ b/mdk-stage1/dietlibc/libstdio/fread.c
@@ -4,48 +4,43 @@
size_t fread( void *ptr, size_t size, size_t nmemb, FILE *stream) {
int res;
-#ifdef WANT_BUFFERED_STDIO
unsigned long i,j;
j=size*nmemb;
-#ifdef WANT_UNGETC
+ i=0;
+
+ if (!j || j/nmemb!=size) return 0;
if (stream->ungotten) {
+ stream->ungotten=0;
*(char*)ptr=stream->ungetbuf;
- ptr=((char*)ptr)+1;
- --j;
+ ++i;
}
if (!j) return 1;
+
+#ifdef WANT_FREAD_OPTIMIZATION
+ if ( !(stream->flags&FDPIPE) && (j>stream->buflen)) {
+ size_t tmp=j-i;
+ int res;
+ fflush(stream);
+ while ((res=read(stream->fd,ptr+i,tmp))<(int)tmp) {
+ if (res==-1) {
+ stream->flags|=ERRORINDICATOR;
+ goto exit;
+ } else if (!res) {
+ stream->flags|=EOFINDICATOR;
+ goto exit;
+ }
+ i+=res; tmp-=res;
+ }
+ return nmemb;
+ }
#endif
- for (i=0; i<j; ++i) {
+ for (; i<j; ++i) {
res=fgetc(stream);
if (res==EOF)
+exit:
return i/size;
else
((unsigned char*)ptr)[i]=(unsigned char)res;
}
return nmemb;
-#else
-#ifdef WANT_UNGETC
- unsigned long j=size*nmemb;
-#endif
- fflush(stream);
-#ifdef WANT_UNGETC
- if (stream->ungotten) {
- *(char*)ptr=stream->ungetbuf;
- ptr=((char*)ptr)+1;
- --j;
- }
- if (!j) return 1;
- res=read(stream->fd,ptr,j);
-#else
- res=read(stream->fd,ptr,size*nmemb);
-#endif
- if (res<0) {
- stream->flags|=ERRORINDICATOR;
- return 0;
- } else if (res<size*nmemb)
- if (!(stream->flags & UNSEEKABLE)
- || ((stream->flags & UNSEEKABLE) && res == 0))
- stream->flags|=EOFINDICATOR;
- return res/size;
-#endif
}
diff --git a/mdk-stage1/dietlibc/libstdio/fseek.c b/mdk-stage1/dietlibc/libstdio/fseek.c
index 5bb96bc6e..a49230f0a 100644
--- a/mdk-stage1/dietlibc/libstdio/fseek.c
+++ b/mdk-stage1/dietlibc/libstdio/fseek.c
@@ -1,11 +1,10 @@
#include <dietstdio.h>
#include <unistd.h>
-long fseek(FILE *stream, long offset, int whence) {
+int fseek(FILE *stream, long offset, int whence) {
fflush(stream);
-#ifdef WANT_BUFFERED_STDIO
stream->bm=0; stream->bs=0;
-#endif
stream->flags&=~(ERRORINDICATOR|EOFINDICATOR);
- return (lseek(stream->fd,offset,whence));
+ stream->ungotten=0;
+ return lseek(stream->fd,offset,whence)!=-1?0:-1;
}
diff --git a/mdk-stage1/dietlibc/libstdio/ftell.c b/mdk-stage1/dietlibc/libstdio/ftell.c
index 42d2c9f26..48f74858a 100644
--- a/mdk-stage1/dietlibc/libstdio/ftell.c
+++ b/mdk-stage1/dietlibc/libstdio/ftell.c
@@ -3,5 +3,5 @@
long ftell(FILE *stream) {
fflush(stream);
- return (lseek(stream->fd,0,SEEK_CUR));
+ return (lseek(stream->fd,0,SEEK_CUR)-stream->ungotten);
}
diff --git a/mdk-stage1/dietlibc/libstdio/fwrite.c b/mdk-stage1/dietlibc/libstdio/fwrite.c
index 5691661a5..e2536ccfb 100644
--- a/mdk-stage1/dietlibc/libstdio/fwrite.c
+++ b/mdk-stage1/dietlibc/libstdio/fwrite.c
@@ -1,30 +1,28 @@
#include <sys/types.h>
#include "dietstdio.h"
#include <unistd.h>
+#include <errno.h>
-size_t fwrite( const void *ptr, size_t size, size_t nmemb, FILE *stream) {
+size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) {
int res;
-#ifdef WANT_BUFFERED_STDIO
- long len=size*nmemb;
+ unsigned long len=size*nmemb;
long i;
- if (len>BUFSIZE || (stream->flags&NOBUF)) {
- if (!(stream->flags&NOBUF)) fflush(stream);
- res=write(stream->fd,ptr,size*nmemb);
+ if (!nmemb || len/nmemb!=size) return 0; /* check for integer overflow */
+ if (len>stream->buflen || (stream->flags&NOBUF)) {
+ fflush(stream);
+ do {
+ res=write(stream->fd,ptr,size*nmemb);
+ } while (res==-1 && errno==EINTR);
} else {
register const unsigned char *c=ptr;
- for (i=size*nmemb; i>0; --i,++c)
- if (fputc(*c,stream)) {
- res=-1;
- break;
- }
- res=size*nmemb;
+ for (i=len; i>0; --i,++c)
+ if (fputc(*c,stream)) { res=len-i; goto abort; }
+ res=len;
}
-#else
- res=write(stream->fd,ptr,size*nmemb);
-#endif
if (res<0) {
stream->flags|=ERRORINDICATOR;
return 0;
}
+abort:
return size?res/size:0;
}
diff --git a/mdk-stage1/dietlibc/libstdio/printf.c b/mdk-stage1/dietlibc/libstdio/printf.c
index 571420dc3..5af172c58 100644
--- a/mdk-stage1/dietlibc/libstdio/printf.c
+++ b/mdk-stage1/dietlibc/libstdio/printf.c
@@ -1,29 +1,15 @@
#include <stdarg.h>
-#include <linux/types.h>
+#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include "dietstdio.h"
-int vsnprintf (char *str,size_t size,const char *format, va_list arg_ptr);
-
int printf(const char *format,...)
{
int n;
- char *printf_buf;
-/* char printf_buf[1024]; */
va_list arg_ptr;
va_start(arg_ptr, format);
- n=vsnprintf(0,1000000,format,arg_ptr);
-/* write(1,printf_buf,strlen(printf_buf)); */
- va_end (arg_ptr);
- va_start (arg_ptr, format);
- printf_buf=alloca(n+2);
- n=vsnprintf(printf_buf,n+1,format,arg_ptr);
-#ifdef WANT_BUFFERED_STDIO
- fwrite(printf_buf,n,1,stdout);
-#else
- write(1,printf_buf,n);
-#endif
- va_end (arg_ptr);
+ n=vprintf(format, arg_ptr);
+ va_end(arg_ptr);
return n;
}
diff --git a/mdk-stage1/dietlibc/libstdio/setvbuf.c b/mdk-stage1/dietlibc/libstdio/setvbuf.c
index d0b1b7640..b8b50addf 100644
--- a/mdk-stage1/dietlibc/libstdio/setvbuf.c
+++ b/mdk-stage1/dietlibc/libstdio/setvbuf.c
@@ -1,18 +1,34 @@
#include <sys/types.h>
#include "dietstdio.h"
#include <unistd.h>
+#include <stdlib.h>
#include "dietwarning.h"
-int setvbuf(FILE *stream, char *buf, int flags , size_t size) {
-#ifdef WANT_BUFFERED_STDIO
+static int set_flags (FILE *stream, int flags) {
switch (flags) {
- case _IONBF: stream->flags = (stream->flags & ~(BUFLINEWISE)) | NOBUF; break;
- case _IOLBF: stream->flags = (stream->flags & ~(BUFLINEWISE|NOBUF)) | BUFLINEWISE; break;
- case _IOFBF: stream->flags = stream->flags & ~(NOBUF | BUFLINEWISE); break;
- default: return -1;
+ case _IONBF: stream->flags = (stream->flags & ~(BUFLINEWISE)) | NOBUF; break;
+ case _IOLBF: stream->flags = (stream->flags & ~(NOBUF)) | BUFLINEWISE; break;
+ case _IOFBF: stream->flags = stream->flags & ~(NOBUF | BUFLINEWISE); break;
+ default: return -1;
}
-#endif
return 0;
}
-link_warning("setvbuf","setvbuf does not implement changing the buffer in diet libc.")
+int setvbuf(FILE *stream, char *buf, int flags, size_t size) {
+ if (buf) {
+ if (!(stream->flags&STATICBUF)) free(stream->buf);
+ stream->buf=buf;
+ }
+ else {
+ char *tmp;
+ if (!size) {
+ return set_flags(stream,flags);
+ }
+ if (!(tmp=malloc(size))) return -1;
+ if (!(stream->flags&STATICBUF)) free(stream->buf);
+ stream->buf=tmp;
+ }
+ stream->buflen=size;
+ stream->bm=stream->bs=0;
+ return set_flags(stream,flags);
+}
diff --git a/mdk-stage1/dietlibc/libstdio/stderr.c b/mdk-stage1/dietlibc/libstdio/stderr.c
index a82b1b727..a9a34fd7e 100644
--- a/mdk-stage1/dietlibc/libstdio/stderr.c
+++ b/mdk-stage1/dietlibc/libstdio/stderr.c
@@ -1,13 +1,22 @@
#include <dietstdio.h>
-#ifdef WANT_BUFFERED_STDIO
-static FILE __stderr = { 2, NOBUF, 0, 0 };
-
-int __fflush_stderr() {
- return fflush(stderr);
-}
-#else
-static FILE __stderr = { 2, 0 };
+static FILE __stderr = {
+ .fd=2,
+ .flags=NOBUF,
+ .bs=0, .bm=0,
+ .buflen=0,
+ .buf=0,
+ .next=0,
+ .popen_kludge=0,
+ .ungetbuf=0,
+ .ungotten=0
+#ifdef WANT_THREAD_SAFE
+ , .m=PTHREAD_MUTEX_INITIALIZER
#endif
+};
FILE *stderr=&__stderr;
+
+int __fflush_stderr(void) {
+ return fflush(stderr);
+}
diff --git a/mdk-stage1/dietlibc/libstdio/stdin.c b/mdk-stage1/dietlibc/libstdio/stdin.c
index 2db82f9ab..217f3f609 100644
--- a/mdk-stage1/dietlibc/libstdio/stdin.c
+++ b/mdk-stage1/dietlibc/libstdio/stdin.c
@@ -1,13 +1,23 @@
#include <dietstdio.h>
-#ifdef WANT_BUFFERED_STDIO
-static FILE __stdin = { 0, BUFINPUT, 0, 0 };
-
-int __fflush_stdin() {
- return fflush(stdin);
-}
-#else
-static FILE __stdin = { 0, 0 };
+static char __stdin_buf[BUFSIZE];
+static FILE __stdin = {
+ .fd=0,
+ .flags=BUFINPUT|STATICBUF,
+ .bs=0, .bm=0,
+ .buflen=BUFSIZE,
+ .buf=__stdin_buf,
+ .next=0,
+ .popen_kludge=0,
+ .ungetbuf=0,
+ .ungotten=0
+#ifdef WANT_THREAD_SAFE
+ , .m=PTHREAD_MUTEX_INITIALIZER
#endif
+};
FILE *stdin=&__stdin;
+
+int __fflush_stdin(void) {
+ return fflush(stdin);
+}
diff --git a/mdk-stage1/dietlibc/libstdio/stdout.c b/mdk-stage1/dietlibc/libstdio/stdout.c
index 481fb1014..08054d0d4 100644
--- a/mdk-stage1/dietlibc/libstdio/stdout.c
+++ b/mdk-stage1/dietlibc/libstdio/stdout.c
@@ -1,14 +1,23 @@
#include <dietstdio.h>
-#ifdef WANT_BUFFERED_STDIO
-static FILE __stdout = { 1, BUFLINEWISE, 0, 0 };
-
-int __fflush_stdout() {
- return fflush(stdout);
-}
-#else
-static FILE __stdout = { 1, 0 };
+static char __stdout_buf[BUFSIZE];
+static FILE __stdout = {
+ .fd=1,
+ .flags=BUFLINEWISE|STATICBUF,
+ .bs=0, .bm=0,
+ .buflen=BUFSIZE,
+ .buf=__stdout_buf,
+ .next=0,
+ .popen_kludge=0,
+ .ungetbuf=0,
+ .ungotten=0
+#ifdef WANT_THREAD_SAFE
+ , .m=PTHREAD_MUTEX_INITIALIZER
#endif
+};
FILE *stdout=&__stdout;
+int __fflush_stdout(void) {
+ return fflush(stdout);
+}
diff --git a/mdk-stage1/dietlibc/libstdio/ungetc.c b/mdk-stage1/dietlibc/libstdio/ungetc.c
index ae03e9381..133e92820 100644
--- a/mdk-stage1/dietlibc/libstdio/ungetc.c
+++ b/mdk-stage1/dietlibc/libstdio/ungetc.c
@@ -1,11 +1,10 @@
#include "dietstdio.h"
-#ifdef WANT_UNGETC
int ungetc(int c, FILE *stream) {
- if (stream->ungotten)
+ if (stream->ungotten || c<0 || c>255)
return EOF;
stream->ungotten=1;
- stream->ungetbuf=(char)(unsigned char)c;
+ stream->ungetbuf=(unsigned char)c;
+ stream->flags&=~(ERRORINDICATOR|EOFINDICATOR);
return c;
}
-#endif
diff --git a/mdk-stage1/dietlibc/libugly/asctime_r.c b/mdk-stage1/dietlibc/libugly/asctime_r.c
index 46325927c..43c5e2cb2 100644
--- a/mdk-stage1/dietlibc/libugly/asctime_r.c
+++ b/mdk-stage1/dietlibc/libugly/asctime_r.c
@@ -16,7 +16,7 @@ char *asctime_r(const struct tm *t, char *buf) {
if (buf[8]=='0') buf[8]=' ';
buf[10]=' ';
num2str(buf+11,t->tm_hour);
- if (buf[11]=='0') buf[11]=' ';
+// if (buf[11]=='0') buf[11]=' ';
buf[13]=':';
num2str(buf+14,t->tm_min);
buf[16]=':';
diff --git a/mdk-stage1/dietlibc/libugly/asprintf.c b/mdk-stage1/dietlibc/libugly/asprintf.c
index d10c20b4a..9db1f67c7 100644
--- a/mdk-stage1/dietlibc/libugly/asprintf.c
+++ b/mdk-stage1/dietlibc/libugly/asprintf.c
@@ -1,21 +1,18 @@
#include <stdarg.h>
-#include <linux/types.h>
+#include <sys/types.h>
#include <stdlib.h>
+#include <stdio.h>
#include "dietwarning.h"
-extern int vsnprintf (char *str,size_t size,const char *format, va_list arg_ptr);
-
int asprintf(char **s, const char *format,...)
{
int n;
va_list arg_ptr;
va_start(arg_ptr, format);
n=vsnprintf(0,1000000,format,arg_ptr);
- va_end (arg_ptr);
va_start (arg_ptr, format);
- if ((*s=malloc(n+2))) {
+ if ((*s=malloc(n+1))) {
n=vsnprintf(*s,n+1,format,arg_ptr);
- va_end(arg_ptr);
return n;
}
return -1;
diff --git a/mdk-stage1/dietlibc/libugly/daemon.c b/mdk-stage1/dietlibc/libugly/daemon.c
deleted file mode 100644
index 6748cc3c9..000000000
--- a/mdk-stage1/dietlibc/libugly/daemon.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <paths.h>
-
-#include "daemon.h"
-
-int daemon (int nochdir,int noclose)
-{
- int fd;
- switch (fork ())
- {
- case -1:
- return (-1);
- case 0:
- break;
- default:
- _exit (0);
- }
- if (setsid () == -1)
- return (-1);
- if (!nochdir) chdir ("/");
- if (!noclose)
- {
- fd = open (_PATH_DEVNULL,O_RDWR,0);
- if (fd == -1) return (-1);
- dup2 (fd,STDIN_FILENO);
- dup2 (fd,STDOUT_FILENO);
- dup2 (fd,STDERR_FILENO);
- close (fd);
- }
- return (0);
-}
-
diff --git a/mdk-stage1/dietlibc/libugly/getmntent.c b/mdk-stage1/dietlibc/libugly/getmntent.c
index 250a77b7f..1a1bdca24 100644
--- a/mdk-stage1/dietlibc/libugly/getmntent.c
+++ b/mdk-stage1/dietlibc/libugly/getmntent.c
@@ -5,11 +5,11 @@
struct mntent *getmntent(FILE *filep) {
static struct mntent m;
- char buf[1024];
+ static char buf[1024];
do {
char *tmp=buf;
int num;
- fgets(buf,1024,filep);
+ if (!fgets(buf,1024,filep)) return 0;
/* "/dev/ide/host0/bus0/target0/lun0/part2 / reiserfs defaults 1 1" */
for (num=0; num<6; ++num) {
switch (num) {
@@ -17,12 +17,13 @@ struct mntent *getmntent(FILE *filep) {
case 1: m.mnt_dir=tmp; break;
case 2: m.mnt_type=tmp; break;
case 3: m.mnt_opts=tmp; break;
- case 4: m.mnt_freq=strtol(tmp,&tmp,0); if (*tmp!=' ') continue; break;
+ case 4: m.mnt_freq=strtol(tmp,&tmp,0); if (*tmp!=' ' && *tmp!='\t') continue; break;
case 5: m.mnt_passno=strtol(tmp,&tmp,0); if (*tmp=='\n') return &m; break;
}
- if ((tmp=strchr(tmp,' '))) {
+ while (*tmp && *tmp!=' ' && *tmp!='\n' && *tmp!='\t') ++tmp;
+ if (*tmp) {
if (num<4) *tmp++=0;
- while (*tmp==' ') ++tmp;
+ while (*tmp==' ' || *tmp=='\t') ++tmp;
} else
continue;
}
diff --git a/mdk-stage1/dietlibc/libugly/getprotoent.c b/mdk-stage1/dietlibc/libugly/getprotoent.c
index a648e2307..3f0fd4d41 100644
--- a/mdk-stage1/dietlibc/libugly/getprotoent.c
+++ b/mdk-stage1/dietlibc/libugly/getprotoent.c
@@ -1,130 +1,10 @@
-#include <unistd.h>
-#include <fcntl.h>
#include <netdb.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include <netinet/in.h>
-#include <string.h>
-#include <ctype.h>
-static int protofd=-1;
-static char* protomap;
-static unsigned int protolen;
+extern struct protoent __protoent_pw;
+extern char __protoent_buf[1000];
-static char* aliases[10];
-
-static char *cur;
-
-/* ip 0 IP # internet protocol, pseudo protocol number */
struct protoent *getprotoent(void) {
- static struct protoent pe;
- char *last;
- int aliasidx;
- if (protofd<0) {
- protofd=open(_PATH_SERVICES,O_RDONLY);
- if (protofd<0) return 0;
- protolen=lseek(protofd,0,SEEK_END);
- protomap=mmap(0,protolen,PROT_READ|PROT_WRITE,MAP_PRIVATE,protofd,0);
- if ((long)protomap==(-1)) goto error;
- cur=protomap;
- }
- last=protomap+protolen;
-again:
- pe.p_name=0;
- pe.p_aliases=aliases; aliases[0]=0;
- pe.p_proto=0;
- if (cur>=last) return 0;
- if (*cur=='#' || *cur=='\n') goto parseerror;
- /* first, the primary name */
- if (!isalpha(*cur)) goto parseerror;
- pe.p_name=cur;
- pe.p_aliases=aliases;
- while (cur<last && isalnum(*cur)) cur++;
- if (cur>=last) return 0;
- if (*cur=='\n') goto parseerror;
- *cur=0; cur++;
- /* second, the protocol number */
- while (cur<last && isblank(*cur)) cur++;
- while (cur<last && isdigit(*cur)) {
- pe.p_proto=pe.p_proto*10+*cur-'0';
- cur++;
- }
-/* pe.p_proto=htons(pe.s_proto); */
- if (cur>=last) return 0;
- if (*cur=='\n') { *cur++=0; return &pe; }
- *cur=0; cur++;
- /* now the aliases */
- for (aliasidx=0;aliasidx<10;++aliasidx) {
- while (cur<last && isblank(*cur)) ++cur;
- aliases[aliasidx]=cur;
- while (cur<last && isalpha(*cur)) ++cur;
- if (*cur=='\n') { *cur++=0; ++aliasidx; break; }
- if (cur>=last || !isblank(*cur)) break;
- *cur++=0;
- }
- aliases[aliasidx]=0;
- return &pe;
-parseerror:
- while (cur<last && *cur!='\n') cur++;
- cur++;
- goto again;
-error:
- if (protomap!=(char*)-1) munmap(protomap,protolen);
- if (protofd!=-1) close(protofd);
- protomap=(char*)-1;
- protofd=-1;
- errno=ENOMEM;
- return 0;
-}
-
-void setprotoent(int stayopen) {
- cur=protomap;
-}
-
-struct protoent *getprotobyname(const char *name) {
- struct protoent *s;
- setprotoent(0);
- for (s=getprotoent(); s; s=getprotoent()) {
- char **tmp;
-#if 0
- write(1,"found ",6);
- write(1,s->p_name,strlen(s->p_name));
- write(1,"/",1);
- write(1,s->p_proto,strlen(s->p_proto));
- write(1,"\n",1);
- if (!strcmp(name,"auth")) {
- tmp=s->p_aliases;
- write(1," aka ",5);
- while (*tmp) {
- write(1,*tmp,strlen(*tmp));
- write(1,", ",2);
- ++tmp;
- }
- write(1,"\n",1);
- }
-#endif
- if (!strcmp(name,s->p_name))
- return s;
- tmp=s->p_aliases;
- while (*tmp)
- if (!strcmp(name,*tmp++)) return s;
- }
- return 0;
+ struct protoent* tmp;
+ getprotoent_r(&__protoent_pw,__protoent_buf,sizeof(__protoent_buf),&tmp);
+ return tmp;
}
-
-struct protoent *getprotobynumber(int proto) {
- struct protoent *s;
- for (s=getprotoent(); s; s=getprotoent()) {
- if (proto==s->p_proto)
- return s;
- }
- return 0;
-}
-
-void endprotoent(void) {
- if (protomap!=(char*)-1) munmap(protomap,protolen);
- if (protofd!=-1) close(protofd);
- protomap=(char*)-1;
- protofd=-1;
-}
-
diff --git a/mdk-stage1/dietlibc/libugly/gmtime_r.c b/mdk-stage1/dietlibc/libugly/gmtime_r.c
index c102d10fa..6bc0bb5b2 100644
--- a/mdk-stage1/dietlibc/libugly/gmtime_r.c
+++ b/mdk-stage1/dietlibc/libugly/gmtime_r.c
@@ -3,7 +3,7 @@
/* seconds per day */
#define SPD 24*60*60
-extern unsigned int __spm[];
+extern short __spm[];
struct tm *gmtime_r(const time_t *timep, struct tm *r) {
time_t i;
@@ -14,7 +14,7 @@ struct tm *gmtime_r(const time_t *timep, struct tm *r) {
r->tm_wday=(4+work)%7;
for (i=1970; ; ++i) {
register time_t k=__isleap(i)?366:365;
- if (work>k)
+ if (work>=k)
work-=k;
else
break;
@@ -28,7 +28,7 @@ struct tm *gmtime_r(const time_t *timep, struct tm *r) {
work-=1;
}
- for (i=11; i && __spm[i]>work; --i) ;
+ for (i=11; i && (__spm[i]>work); --i) ;
r->tm_mon=i;
r->tm_mday+=work-__spm[i];
return r;
diff --git a/mdk-stage1/dietlibc/libugly/isleap.c b/mdk-stage1/dietlibc/libugly/isleap.c
index dcfa1ced6..d83712792 100644
--- a/mdk-stage1/dietlibc/libugly/isleap.c
+++ b/mdk-stage1/dietlibc/libugly/isleap.c
@@ -1,3 +1,5 @@
+#include <time.h>
+
int __isleap(int year) {
/* every fourth year is a leap year except for century years that are
* not divisible by 400. */
diff --git a/mdk-stage1/dietlibc/libugly/localtime_r.c b/mdk-stage1/dietlibc/libugly/localtime_r.c
index d4bc073ce..5d420303c 100644
--- a/mdk-stage1/dietlibc/libugly/localtime_r.c
+++ b/mdk-stage1/dietlibc/libugly/localtime_r.c
@@ -3,8 +3,11 @@
#include <sys/time.h>
#ifdef WANT_TZFILE_PARSER
-extern void __maplocaltime();
+extern void __maplocaltime(void);
extern time_t __tzfile_map(time_t t, int *isdst);
+#else
+extern long int timezone;
+extern int daylight;
#endif
struct tm* localtime_r(const time_t* t, struct tm* r) {
@@ -15,7 +18,8 @@ struct tm* localtime_r(const time_t* t, struct tm* r) {
#else
struct timezone tz;
gettimeofday(0, &tz);
- tmp=*t-tz.tz_minuteswest*60L;
+ timezone=tz.tz_minuteswest*60L;
+ tmp=*t+timezone;
#endif
return gmtime_r(&tmp,r);
}
diff --git a/mdk-stage1/dietlibc/libugly/logging.c b/mdk-stage1/dietlibc/libugly/logging.c
index 69c2c2337..680a1f850 100644
--- a/mdk-stage1/dietlibc/libugly/logging.c
+++ b/mdk-stage1/dietlibc/libugly/logging.c
@@ -1,3 +1,4 @@
+#include <errno.h>
#include "dietfeatures.h"
#include <stdio.h>
@@ -5,7 +6,6 @@
#include <stdarg.h>
#include <errno.h>
#include <unistd.h>
-#include <asm/socket.h>
#include <fcntl.h>
#include <syslog.h>
#include <string.h>
@@ -14,9 +14,9 @@
#include <signal.h>
#define _PATH_CONSOLE "/dev/console"
-#define BUF_SIZE 512 /* messagebuffer size (>= 200) */
+#define BUF_SIZE 2048 /* messagebuffer size (>= 200) */
-#define MAX_LOGTAG 80
+#define MAX_LOGTAG 1000
/* those have to be global *sigh* */
static volatile int connected = 0; /* have done connect */
@@ -37,13 +37,15 @@ static void closelog_intern(void)
connected = 0;
}
-void closelog(void)
+void __libc_closelog(void);
+void __libc_closelog(void)
{
closelog_intern();
LogTag[0]=0;
LogType = SOCK_DGRAM;
}
+void closelog(void) __attribute__((weak,alias("__libc_closelog")));
static void openlog_intern(int option, int facility)
{
@@ -63,27 +65,15 @@ static void openlog_intern(int option, int facility)
}
}
if ((LogFile != -1) && !connected) {
-#ifdef WANT_THREAD_SAFE
- int old_errno = (*(__errno_location()));
-#else
int old_errno=errno;
-#endif
if(connect(LogFile, &SyslogAddr, sizeof(SyslogAddr)) == -1) {
-#ifdef WANT_THREAD_SAFE
- int saved_errno = (*(__errno_location()));
-#else
int saved_errno=errno;
-#endif
close(LogFile);
LogFile = -1;
if((LogType == SOCK_DGRAM) && (saved_errno == EPROTOTYPE)) {
/* retry with SOCK_STREAM instead of SOCK_DGRAM */
LogType = SOCK_STREAM;
-#ifdef WANT_THREAD_SAFE
- (*(__errno_location()))=old_errno;
-#else
errno=old_errno;
-#endif
continue;
}
}
@@ -94,7 +84,8 @@ static void openlog_intern(int option, int facility)
}
/* has to be secured against multiple, simultanious call's in threaded environment */
-void openlog(const char *ident, int option, int facility)
+void __libc_openlog(const char *ident, int option, int facility);
+void __libc_openlog(const char *ident, int option, int facility)
{
if (ident) {
strncpy(LogTag,ident,MAX_LOGTAG);
@@ -102,6 +93,7 @@ void openlog(const char *ident, int option, int facility)
}
openlog_intern(option, facility);
}
+void openlog(const char *ident, int option, int facility) __attribute__((weak,alias("__libc_openlog")));
int setlogmask(int mask)
{
@@ -110,7 +102,8 @@ int setlogmask(int mask)
return old;
}
-void vsyslog(int priority, const char *format, va_list arg_ptr)
+void __libc_vsyslog(int priority, const char *format, va_list arg_ptr);
+void __libc_vsyslog(int priority, const char *format, va_list arg_ptr)
{
char buffer[BUF_SIZE];
char time_buf[20];
@@ -122,11 +115,7 @@ void vsyslog(int priority, const char *format, va_list arg_ptr)
int sigpipe;
struct sigaction action, oldaction;
struct sigaction *oldaction_ptr = NULL;
-#ifdef WANT_THREAD_SAFE
- int saved_errno = (*(__errno_location()));
-#else
int saved_errno = errno;
-#endif
/* check for invalid priority/facility bits */
if (priority & ~(LOG_PRIMASK|LOG_FACMASK)) {
@@ -156,11 +145,7 @@ void vsyslog(int priority, const char *format, va_list arg_ptr)
buflen = 41;
}
else {
-#ifdef WANT_THREAD_SAFE
- (*(__errno_location()))=saved_errno;
-#else
errno=saved_errno;
-#endif
buflen = vsnprintf(buffer+headerlen, BUF_SIZE - headerlen, format, arg_ptr);
}
if (LogStat & LOG_PERROR) {
@@ -201,6 +186,7 @@ void vsyslog(int priority, const char *format, va_list arg_ptr)
if (sigpipe == 0)
sigaction(SIGPIPE, &oldaction, (struct sigaction *) NULL);
}
+void vsyslog(int priority, const char *format, va_list arg_ptr) __attribute__((weak,alias("__libc_vsyslog")));
void syslog(int priority, const char *format, ...)
{
diff --git a/mdk-stage1/dietlibc/libugly/mktime.c b/mdk-stage1/dietlibc/libugly/mktime.c
index ee4dab6c1..348068e1d 100644
--- a/mdk-stage1/dietlibc/libugly/mktime.c
+++ b/mdk-stage1/dietlibc/libugly/mktime.c
@@ -1,21 +1,53 @@
#include <time.h>
-/* seconds per day */
-#define SPD 24*60*60
-
-extern unsigned int __spm[];
-
-time_t mktime(struct tm *t) {
- time_t x=0;
- unsigned int i;
- if (t->tm_year<70) return (time_t)(-1);
- for (i=70; i<t->tm_year; ++i) {
- x+=__isleap(i+1900)?366:365;
- }
- t->tm_yday=__spm[t->tm_mon] + t->tm_mday-1 + ((t->tm_mon>2) && __isleap(t->tm_year)?1:0);
- x+=t->tm_yday;
- /* x is now the number of days since Jan 1 1970 */
- t->tm_wday=(4+x)%7;
- x = x*SPD + t->tm_hour*60*60 + t->tm_min*60 + t->tm_sec;
- return x;
+extern const short __spm [];
+
+time_t mktime ( register struct tm* const t )
+{
+ register time_t day;
+ register time_t i;
+
+ if ( t->tm_year < 70 )
+ return (time_t) -1;
+
+ day = t->tm_yday = __spm [t->tm_mon] + t->tm_mday-1 + ( __isleap (t->tm_year+1900) & (t->tm_mon > 1) );
+
+ for ( i = 70; i < t->tm_year; i++ )
+ day += 365 + __isleap (i+1900);
+
+ /* day is now the number of days since 'Jan 1 1970' */
+ i = 7;
+ t->tm_wday = (day + 4) % i; /* Sunday=0, Monday=1, ..., Saturday=6 */
+
+ i = 24;
+ day *= i;
+ i = 60;
+ return ((day + t->tm_hour) * i + t->tm_min) * i + t->tm_sec;
+}
+
+#if 0
+
+#include <math.h>
+
+main()
+{
+ int i, j, k;
+ static char *s[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+
+ for (i=70; i<200; i++)
+ for (j=0; j<12; j++)
+ for (k=1; k<=31; k++) {
+ struct tm t;
+ double x;
+ t.tm_year = i;
+ t.tm_mon = j;
+ t.tm_mday = k;
+ t.tm_hour = 0;
+ t.tm_min = 0;
+ t.tm_sec = 0;
+ x = mktime (&t);
+ printf ("%4d.%5.0f %2u.%02u.%04u %s\n", (int)floor(x/86400), x-86400.*(int)floor(x/86400), k, j+1, 1900+i, s[t.tm_wday] );
+ }
+
}
+#endif
diff --git a/mdk-stage1/dietlibc/libugly/popen.c b/mdk-stage1/dietlibc/libugly/popen.c
index e0e441495..aa9a2cde0 100644
--- a/mdk-stage1/dietlibc/libugly/popen.c
+++ b/mdk-stage1/dietlibc/libugly/popen.c
@@ -1,32 +1,38 @@
#include "dietstdio.h"
#include <unistd.h>
+#include <fcntl.h>
+#include "binshstr.h"
extern char **environ;
FILE *popen(const char *command, const char *type) {
int pfd[2];
int fd0;
+ FILE* f;
pid_t pid;
+
if (pipe(pfd)<0) return 0;
fd0=(*type=='r');
- if ((pid=vfork())<0) {
+ if (!(f=fdopen(pfd[!fd0],type))) {
+ close(pfd[0]); /* malloc failed */
+ close(pfd[1]);
+ return 0;
+ }
+ if ((pid=fork())<0) {
close(pfd[0]);
close(pfd[1]);
return 0;
}
if (!pid) { /* child */
- char *argv[]={"sh","-c",0,0};
+ const char *argv[]={__sh,"-c",0,0};
close(pfd[!fd0]); close(fd0);
dup2(pfd[fd0],fd0); close(pfd[fd0]);
- argv[2]=(char*)command;
- execve("/bin/sh",argv,environ);
- _exit(255);
+ argv[2]=command;
+ execve(__binsh,(char*const*)argv,environ);
+ _exit(127);
}
close(pfd[fd0]);
- {
- register FILE* f;
- if ((f=fdopen(pfd[!fd0],type)))
- f->popen_kludge=pid;
- return f;
- }
+ fcntl (pfd[!fd0], F_SETFD, FD_CLOEXEC);
+ f->popen_kludge=pid;
+ return f;
}
diff --git a/mdk-stage1/dietlibc/libugly/setenv.c b/mdk-stage1/dietlibc/libugly/setenv.c
index bf47cdb79..c65910471 100644
--- a/mdk-stage1/dietlibc/libugly/setenv.c
+++ b/mdk-stage1/dietlibc/libugly/setenv.c
@@ -5,13 +5,15 @@
link_warning("setenv","setenv calls malloc. Avoid it in small programs.");
int setenv(const char *name, const char *value, int overwrite) {
- char *c=malloc(strlen(name)+strlen(value)+3);
if (getenv(name)) {
if (!overwrite) return 0;
unsetenv(name);
}
- strcpy(c,name);
- strcat(c,"=");
- strcat(c,value);
- return putenv(c);
+ {
+ char *c=malloc(strlen(name)+strlen(value)+3);
+ strcpy(c,name);
+ strcat(c,"=");
+ strcat(c,value);
+ return putenv(c);
+ }
}
diff --git a/mdk-stage1/dietlibc/libugly/strftime.c b/mdk-stage1/dietlibc/libugly/strftime.c
index b7e750ab1..365d0c84f 100644
--- a/mdk-stage1/dietlibc/libugly/strftime.c
+++ b/mdk-stage1/dietlibc/libugly/strftime.c
@@ -1,182 +1,118 @@
#include <sys/types.h>
#include <time.h>
-
-static char *sweekdays[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-static char *weekdays[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
-static char *smonths[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
-static char *months[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
-static char *ampm[]={"am","pm","AM","PM"};
-
-static int i2a(char* dest,unsigned int x) {
- register unsigned int tmp=x;
- register int len=0;
- *dest++=tmp/10+'0'; tmp=tmp%10; ++len;
- *dest++=tmp+'0';
- return 2;
+#include "dietfeatures.h"
+
+static const char sweekdays [7] [4] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+};
+static const char weekdays [7] [10] = {
+ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
+};
+static const char smonths [12] [4] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+};
+static const char* months [12] = {
+ "January", "February", "March", "April", smonths[5-1], "June",
+ "July", "August", "September", "October", "November", "December"
+};
+static const char ampm [4] [3] = {
+ "am", "pm",
+ "AM", "PM"
+};
+
+static int i2a ( char* dest,unsigned int x )
+{
+ int div = 10;
+ *dest++ = x/div + '0';
+ *dest++ = x%div + '0';
+ *dest++ = '\0';
+ return 2;
}
-static int i2as(char* dest,unsigned int x) {
- int len=i2a(dest,x);
- if (*dest=='0') *dest=' ';
- return len;
-}
-
-size_t strftime(char *s, size_t max, const char *format, const struct tm *tm) {
- char *t=s;
- const char *src;
- char buf[5];
- while (*format) {
- switch (*format) {
- case 0: break;
- case '%':
- switch (*++format) {
- case '%': *t='%'; ++t; break;
- case 'a': src=sweekdays[tm->tm_wday]; goto append;
- case 'A': src=weekdays[tm->tm_wday]; goto append;
- case 'h':
- case 'b': src=smonths[tm->tm_mon]; goto append;
- case 'B': src=months[tm->tm_mon]; goto append;
- case 'c': t+=strftime(t,max-(t-s),"%b %a %d %k:%M:%S %Z %Y",tm); break;
- case 'C': buf[i2a(buf,(tm->tm_year+1900)/100)]=0; src=buf; goto append;
- case 'd': buf[i2a(buf,tm->tm_mday)]=0; src=buf; goto append;
- case 'e': buf[i2as(buf,tm->tm_mday)]=0; src=buf; goto append;
- case 'H': buf[i2a(buf,tm->tm_hour)]=0; src=buf; goto append;
- case 'I': buf[i2a(buf,tm->tm_hour%12)]=0; src=buf; goto append;
- case 'j': buf[i2a(buf,tm->tm_yday)]=0; src=buf; goto append;
- case 'k': buf[i2as(buf,tm->tm_hour)]=0; src=buf; goto append;
- case 'l': buf[i2as(buf,tm->tm_hour%12)]=0; src=buf; goto append;
- case 'm': buf[i2a(buf,tm->tm_mon+1)]=0; src=buf; goto append;
- case 'M': buf[i2a(buf,tm->tm_min)]=0; src=buf; goto append;
- case 'n': *t='\n'; break;
- case 'p': src=ampm[tm->tm_hour>11?3:2]; goto append;
- case 'P': src=ampm[tm->tm_hour>11?1:0]; goto append;
- case 'r': t+=strftime(t,max-(t-s),"%I:%M:%S %p",tm); break;
- case 'R': t+=strftime(t,max-(t-s),"%H:%M",tm); break;
- case 'S': buf[i2a(buf,tm->tm_sec)]=0; src=buf; goto append;
- case 't': *t='\t'; break;
- case 'T': t+=strftime(t,max-(t-s),"%H:%M:%S",tm); break;
- case 'u': buf[i2a(buf,tm->tm_wday?tm->tm_wday:7)]=0; src=buf; goto append;
- case 'w': buf[i2a(buf,tm->tm_wday)]=0; src=buf; goto append;
- case 'x': t+=strftime(t,max-(t-s),"%b %a %d",tm); break;
- case 'X': t+=strftime(t,max-(t-s),"%k:%M:%S",tm); break;
- case 'y': buf[i2a(buf,tm->tm_year%100)]=0; src=buf; goto append;
- case 'Y': i2a(buf,(tm->tm_year+1900)/100); buf[i2a(buf+2,(tm->tm_year%100))+2]=0; src=buf; goto append;
- case 'Z': src="GMT"; goto append; /* hehe */
-append:
- while (*src && t<s+max) { *t=*src; ++t; ++src; }
- };
- break;
- default:
- *t=*format; ++t;
+size_t strftime ( char* dst, size_t max, const char* format, const struct tm* tm )
+{
+ char* p = dst;
+ const char* src;
+ unsigned int no;
+ char buf [5];
+
+
+ for ( ; *format != '\0'; format++ ) {
+ if (*format == '%') {
+ if (*++format == '%') {
+ *p++ = '%';
+ }
+ else
+again:
+ switch (*format) {
+// case '%': *p++ = '%'; break; // reduce size of jump table
+ case 'n': *p++ = '\n'; break;
+ case 't': *p++ = '\t'; break;
+ case 'O': case 'E': ++format; goto again;
+ case 'c': src = "%b %a %d %k:%M:%S %Z %Y"; goto _strf;
+ case 'r': src = "%I:%M:%S %p"; goto _strf;
+ case 'R': src = "%H:%M"; goto _strf;
+ case 'x': src = "%b %a %d"; goto _strf;
+ case 'X': src = "%k:%M:%S"; goto _strf;
+ case 'D': src = "%m/%d/%y"; goto _strf;
+ case 'T': src = "%H:%M:%S";
+ _strf: p += strftime (p, (size_t)(dst+max-p), src, tm); break;
+ case 'a': src = sweekdays [tm->tm_wday]; goto _str;
+ case 'A': src = weekdays [tm->tm_wday]; goto _str;
+ case 'h':
+ case 'b': src = smonths [tm->tm_mon]; goto _str;
+ case 'B': src = months [tm->tm_mon]; goto _str;
+ case 'p': src = ampm [tm->tm_hour > 12 ? 3 : 2]; goto _str;
+ case 'P': src = ampm [tm->tm_hour > 12 ? 1 : 0]; goto _str;
+ case 'C': no = tm->tm_year/100 + 19; goto _no;
+ case 'd': no = tm->tm_mday; goto _no;
+ case 'e': no = tm->tm_mday; goto _nos;
+ case 'H': no = tm->tm_hour; goto _no;
+ case 'I': no = tm->tm_hour % 12; goto _no;
+ case 'j': no = tm->tm_yday; goto _no;
+ case 'k': no = tm->tm_hour; goto _nos;
+ case 'l': no = tm->tm_hour % 12; goto _nos;
+ case 'm': no = tm->tm_mon + 1; goto _no;
+ case 'M': no = tm->tm_min; goto _no;
+ case 'S': no = tm->tm_sec; goto _no;
+ case 'u': no = tm->tm_wday ? tm->tm_wday : 7; goto _no;
+ case 'w': no = tm->tm_wday; goto _no;
+ case 'U': no = (tm->tm_yday - tm->tm_wday + 7) / 7; goto _no;
+ case 'W': no = (tm->tm_yday - (tm->tm_wday - 1 + 7) % 7 + 7) / 7; goto _no;
+ case 'Z':
+#ifdef WANT_TZFILE_PARSER
+ tzset(); src = tzname[0];
+#else
+ src = "[unknown timezone]";
+#endif
+ goto _str;
+ case 'Y': i2a ( buf+0, (unsigned int)(tm->tm_year / 100 + 19) );
+ i2a ( buf+2, (unsigned int)(tm->tm_year % 100) );
+ src = buf;
+ goto _str;
+ case 'y': no = tm->tm_year % 100; goto _no;
+ _no: i2a ( buf, no ); /* append number 'no' */
+ src = buf;
+ goto _str;
+ _nos: i2a ( buf, no ); /* the same, but '0'->' ' */
+ if (buf[0] == '0')
+ buf[0] = ' ';
+ src = buf;
+ _str: while (*src && p < dst+max) /* append string */
+ *p++ = *src++;
+ break;
+ };
+ } else {
+ *p++ = *format;
+ }
+
+ if (p >= dst+max)
+ break;
}
- ++format;
- if (t>=s+max) break;
- continue;
- }
- *t=0; return t-s;
+
+ *p = '\0';
+ return p - dst;
}
-
-/*
- %u The day of the week as a decimal, range 1 to 7,
- Monday being 1. See also %w. (SU)
-
- %U The week number of the current year as a decimal
- number, range 00 to 53, starting with the first
- Sunday as the first day of week 01. See also %V and
- %W.
-
- %V The ISO 8601:1988 week number of the current year
- as a decimal number, range 01 to 53, where week 1
- is the first week that has at least 4 days in the
- current year, and with Monday as the first day of
- the week. See also %U and %W. (SU)
-
- %w The day of the week as a decimal, range 0 to 6,
- Sunday being 0. See also %u.
-
- %W The week number of the current year as a decimal
- number, range 00 to 53, starting with the first
- Monday as the first day of week 01.
-
- %x The preferred date representation for the current
- locale without the time.
-
- %X The preferred time representation for the current
- locale without the date.
-
- %y The year as a decimal number without a century
- (range 00 to 99).
-
- %Y The year as a decimal number including the century.
-
- %z The time-zone as hour offset from GMT. Required to
- emit RFC822-conformant dates (using "%a, %d %b %Y
- %H:%M:%S %z"). (GNU)
-
- %Z The time zone or name or abbreviation.
-
- %+ The date and time in date(1) format. (TZ)
-
- %% A literal `%' character.
-
- Some conversion specifiers can be modified by preceding
- them by the E or O modifier to indicate that an alterna­
- tive format should be used. If the alternative format or
- specification does not exist for the current locale, the
- behaviour will be as if the unmodified conversion specifi­
- cation were used. (SU) The Single Unix Specification men­
- tions %Ec, %EC, %Ex, %EX, %Ry, %EY, %Od, %Oe, %OH, %OI,
- %Om, %OM, %OS, %Ou, %OU, %OV, %Ow, %OW, %Oy, where the
- effect of the O modifier is to use alternative numeric
- symbols (say, roman numerals), and that of the E modifier
-
-
-
-GNU 29 March 1999 3
-
-
-
-
-
-STRFTIME(3) Linux Programmer's Manual STRFTIME(3)
-
-
- is to use a locale-dependent alternative representation.
-
- The broken-down time structure tm is defined in <time.h>.
- See also ctime(3).
-
-
-RETURN VALUE
- The strftime() function returns the number of characters
- placed in the array s, not including the terminating NUL
- character, provided the string, including the terminating
- NUL, fits. Otherwise, it returns 0, and the contents of
- the array is undefined. (Thus at least since libc 4.4.4;
- very old versions of libc, such as libc 4.4.1, would
- return max if the array was too small.)
-
- Note that the return value 0 does not necessarily indicate
- an error; for example, in many locales %p yields an empty
- string.
-
-ENVIRONMENT
- The environment variables TZ and LC_TIME are used.
-
-CONFORMING TO
- ANSI C, SVID 3, ISO 9899. There are strict inclusions
- between the set of conversions given in ANSI C (unmarked),
- those given in the Single Unix Specification (marked SU),
- those given in Olson's timezone package (marked TZ), and
- those given in glibc (marked GNU), except that %+ is not
- supported in glibc2. On the other hand glibc2 has several
- more extensions. POSIX.1 only refers to ANSI C; POSIX.2
- describes under date(1) several extensions that could
- apply to strftime as well.
-
-SEE ALSO
- date(1), time(2), ctime(3), setlocale(3), sprintf(3)
-
-*/
diff --git a/mdk-stage1/dietlibc/libugly/strsignal.c b/mdk-stage1/dietlibc/libugly/strsignal.c
index 54314d2c7..d72777571 100644
--- a/mdk-stage1/dietlibc/libugly/strsignal.c
+++ b/mdk-stage1/dietlibc/libugly/strsignal.c
@@ -1,92 +1,10 @@
+#define _GNU_SOURCE
+#include <string.h>
#include <signal.h>
-/* F....ng Kernel haeder is damn broken... */
-#ifndef _NSIG
-#define _NSIG 64
-#endif
-#include <asm/signal.h>
-char * strsignal(int sig) {
- if (sig==SIGHUP)
- return "Hangup";
- else if (sig==SIGINT)
- return "Interrupt";
- else if (sig==SIGQUIT)
- return "Quit";
- else if (sig==SIGILL)
- return "Illegal instruction";
- else if (sig==SIGTRAP)
- return "Trace/breakpoint trap";
- else if (sig==SIGABRT)
- return "Aborted";
- else if (sig==SIGFPE)
- return "Floating point exception";
- else if (sig==SIGKILL)
- return "Killed";
- else if (sig==SIGBUS)
- return "Bus error";
- else if (sig==SIGSEGV)
- return "Segmentation fault";
- else if (sig==SIGPIPE)
- return "Broken pipe";
- else if (sig==SIGALRM)
- return "Alarm clock";
- else if (sig==SIGTERM)
- return "Terminated";
- else if (sig==SIGURG)
- return "Urgent I/O condition";
- else if (sig==SIGSTOP)
- return "Stopped (signal)";
- else if (sig==SIGTSTP)
- return "Stopped";
- else if (sig==SIGCONT)
- return "Continue";
- else if (sig==SIGCHLD)
- return "Child exited";
- else if (sig==SIGTTIN)
- return "Stopped (tty input)";
- else if (sig==SIGTTOU)
- return "Stopped (tty output)";
- else if (sig==SIGIO)
- return "I/O possible";
- else if (sig==SIGXCPU)
- return "CPU time limit exceeded";
- else if (sig==SIGXFSZ)
- return "File size limit exceeded";
- else if (sig==SIGVTALRM)
- return "Virtual timer expired";
- else if (sig==SIGPROF)
- return "Profiling timer expired";
- else if (sig==SIGWINCH)
- return "Window changed";
- else if (sig==SIGUSR1)
- return "User defined signal 1";
- else if (sig==SIGUSR2)
- return "User defined signal 1";
-#ifdef SIGEMT
- else if (sig==SIGEMT)
- return "EMT trap";
-#endif
-#ifdef SIGSYS
- else if (sig==SIGSYS)
- return "Bad system call";
-#endif
-#ifdef SIGSTKFLT
- else if (sig==SIGSTKFLT)
- return "Stack fault";
-#endif
-#ifdef SIGINFO
- else if (sig==SIGINFO)
- return "Information request";
-#elif defined(SIGPWR) && (!defined(SIGLOST) || (SIGPWR!=SIGLOST))
- else if (sig==SIGPWR)
- return "Power falure";
-#endif
-#ifdef SIGLOST
- else if (sig==SIGLOST)
- return "Resource lost";
-#endif
- else if ((sig>=SIGRTMIN)&&(sig<=SIGRTMAX))
- return "Real time signal";
+const char* strsignal(int sig) {
+ if (sig<=SIGRTMAX)
+ return sys_siglist[sig];
else
return "(unknown signal)";
}
diff --git a/mdk-stage1/dietlibc/libugly/system.c b/mdk-stage1/dietlibc/libugly/system.c
index b9eea20eb..714aad056 100644
--- a/mdk-stage1/dietlibc/libugly/system.c
+++ b/mdk-stage1/dietlibc/libugly/system.c
@@ -1,23 +1,19 @@
#include <signal.h>
-#include <asm/errno.h>
#include <errno.h>
#include <unistd.h>
+#include <sys/wait.h>
#include "dietwarning.h"
-
-#define SHELL_PATH "/bin/sh" /* Path of the shell. */
-#define SHELL_NAME "sh" /* Name to give it. */
+#include "dietfeatures.h"
+#include "binshstr.h"
extern char **environ;
-int __libc_fork();
-int __libc_waitpid(int pid, int *status, int options);
-int execve(const char*filename, char *const argv[], char *const envp[]);
-void __set_errno(int errno);
-int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
+int __libc_system (const char *line);
int __libc_system (const char *line)
{
struct sigaction sa, intr, quit;
+ sigset_t block,omask;
int save,pid,ret=-1;
if (line == 0) return __libc_system("exit 0") == 0;
@@ -29,38 +25,48 @@ int __libc_system (const char *line)
if (sigaction(SIGINT, &sa, &intr)<0) return -1;
if (sigaction(SIGQUIT, &sa, &quit)<0) {
save = errno;
+undo:
sigaction (SIGINT, &intr, (struct sigaction*)0);
- __set_errno (save);
+ errno=save;
return -1;
}
+ sigemptyset(&block);
+ sigaddset(&block,SIGCHLD);
+ if (sigprocmask(SIG_BLOCK,&block,&omask)<0) {
+ save=errno;
+ sigaction (SIGQUIT, &quit, (struct sigaction*)0);
+ goto undo;
+ }
- pid=__libc_fork();
+ pid=fork();
if (pid>0)
{ /* parent */
int n;
do
- n=__libc_waitpid(pid, &ret, 0);
+ n=waitpid(pid, &ret, 0);
while ((n==-1) && (errno==EINTR));
if (n!=pid) ret=-1;
}
else if (!pid)
{ /* child */
const char *nargs[4];
- nargs[0] = SHELL_NAME;
+ nargs[0] = __sh;
nargs[1] = "-c";
nargs[2] = line;
nargs[3] = 0;
sigaction(SIGINT, &intr, (struct sigaction*)0);
sigaction(SIGQUIT, &quit, (struct sigaction*)0);
+ sigprocmask(SIG_SETMASK,&omask,0);
- execve(SHELL_PATH,(char *const *)nargs, environ);
+ execve(__binsh,(char *const *)nargs, environ);
_exit(127);
}
save = errno;
sigaction (SIGINT, &intr, (struct sigaction *)0);
sigaction (SIGQUIT, &quit, (struct sigaction *)0);
- __set_errno(save);
+ sigprocmask(SIG_SETMASK,&omask,0);
+ errno=save;
return ret;
}
diff --git a/mdk-stage1/dietlibc/libugly/time_table_spd.c b/mdk-stage1/dietlibc/libugly/time_table_spd.c
index bfe1cf86d..6850d76c4 100644
--- a/mdk-stage1/dietlibc/libugly/time_table_spd.c
+++ b/mdk-stage1/dietlibc/libugly/time_table_spd.c
@@ -1,6 +1,7 @@
+#include <time.h>
-/* seconds per month -- nonleap! */
-const unsigned int __spm[12] =
+/* days per month -- nonleap! */
+const short __spm[12] =
{ 0,
(31),
(31+28),
diff --git a/mdk-stage1/dietlibc/libugly/tzfile.c b/mdk-stage1/dietlibc/libugly/tzfile.c
index 5702d4bea..e0e8f7846 100644
--- a/mdk-stage1/dietlibc/libugly/tzfile.c
+++ b/mdk-stage1/dietlibc/libugly/tzfile.c
@@ -3,28 +3,30 @@
#include <fcntl.h>
#include <sys/mman.h>
#include <netinet/in.h>
+#include <time.h>
-#include <stdio.h>
+/* #include <stdio.h> */
+
+char* tzname[2]={"GMT","GMT"};
#ifdef WANT_TZFILE_PARSER
static char *tzfile=0;
static int tzlen=-1;
-void __maplocaltime() {
+void __maplocaltime(void);
+void __maplocaltime(void) {
int fd;
unsigned int len;
if (tzlen>=0) return;
tzlen=0;
if ((fd=open("/etc/localtime",O_RDONLY))<0) return;
len=lseek(fd,0,SEEK_END);
- if ((tzfile=mmap(0,len,PROT_READ,MAP_SHARED,fd,0))==MAP_FAILED) return;
+ if ((tzfile=mmap(0,len,PROT_READ,MAP_PRIVATE,fd,0))==MAP_FAILED) return;
close(fd);
if (ntohl(*(int*)tzfile) != 0x545a6966) return;
tzlen=len;
}
-char *tzset(void) __attribute__((weak,alias("__maplocaltime")));
-
static unsigned long __myntohl(const unsigned char* c) {
return (((unsigned long)c[0])<<24) +
(((unsigned long)c[1])<<16) +
@@ -32,6 +34,7 @@ static unsigned long __myntohl(const unsigned char* c) {
((unsigned long)c[3]);
}
+time_t __tzfile_map(time_t t, int *isdst);
time_t __tzfile_map(time_t t, int *isdst) {
/* "TZif" plus 16 reserved bytes. */
char *tmp;
@@ -64,23 +67,41 @@ time_t __tzfile_map(time_t t, int *isdst) {
printf("%s(%lu,%d,%d)",i?", ":"",ntohl(*(int*)tmp),tmp[4],tmp[5]); tmp+=6;
}
printf("\n");
+ for (i=0; i<tzh_charcnt; ++i) {
+ printf("%s\"%s\"",i?", ":"",tmp);
+ tmp+=strlen(tmp);
+ }
+ printf("\n");
#endif
tmp=tzfile+20+6*4;
- for (i=0; i<tzh_timecnt; ++i)
+ daylight=(tzh_timecnt>0);
+ for (i=0; i<tzh_timecnt; ++i) {
if ((time_t)__myntohl(tmp+i*4) >= t) {
+ char* tz=tmp;
/* printf("match at %d\n",i); */
tmp+=tzh_timecnt*4;
i=tmp[i-1];
/* printf("using index %d\n",i); */
tmp+=tzh_timecnt;
+ tz+=tzh_timecnt*5+tzh_leapcnt*4+tzh_typecnt*6;
tmp+=i*6;
/* printf("(%lu,%d,%d)\n",ntohl(*(int*)tmp),tmp[4],tmp[5]); */
*isdst=tmp[4];
- return t+__myntohl(tmp);
+ tzname[0]=tz+tmp[5];
+ timezone=-(__myntohl(tmp));
+ return t-timezone;
}
+ }
return t;
}
+
+void tzset(void) {
+ int isdst;
+ __maplocaltime();
+ __tzfile_map(time(0),&isdst);
+}
+
#else
-void tzset(void) __attribute__((weak,alias("return0")));
+void tzset(void) __attribute__((weak,alias("__nop")));
#endif
diff --git a/mdk-stage1/dietlibc/ppc/__testandset.S b/mdk-stage1/dietlibc/ppc/__testandset.S
index a6063fbb2..146982337 100644
--- a/mdk-stage1/dietlibc/ppc/__testandset.S
+++ b/mdk-stage1/dietlibc/ppc/__testandset.S
@@ -2,10 +2,11 @@
.type __testandset,@function
.align 2
__testandset:
- lwarx 5,0,3
- add 0,4,5
- stwcx 0,0,3
- bne __testandset
+1: lwarx 5,0,3
+ li 0,1
+ stwcx. 0,0,3
+ bne- 1b
+ mr 3,5
blr
.size __testandset,.-__testandset
diff --git a/mdk-stage1/dietlibc/ppc/mmap.c b/mdk-stage1/dietlibc/ppc/mmap.c
index 25d2926b2..d03e87089 100644
--- a/mdk-stage1/dietlibc/ppc/mmap.c
+++ b/mdk-stage1/dietlibc/ppc/mmap.c
@@ -1,5 +1,7 @@
-#include <linux/types.h>
-#include <linux/unistd.h>
+#include "dietfeatures.h"
+#include <sys/types.h>
+#include <errno.h>
+#include "syscalls.h"
int mmap(void*start,size_t length,int prot,int flags,int fd,off_t offset) {
unsigned long __sc_ret, __sc_err;
@@ -29,9 +31,10 @@ int mmap(void*start,size_t length,int prot,int flags,int fd,off_t offset) {
"r" (__sc_6),
"r" (__sc_7),
"r" (__sc_8)
- : __syscall_clobbers);
+ : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
__sc_ret = __sc_3;
__sc_err = __sc_0;
}
- __syscall_return (int);
+ return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0),
+ (int) __sc_ret;
}
diff --git a/mdk-stage1/dietlibc/ppc/start.S b/mdk-stage1/dietlibc/ppc/start.S
index c7afeecd2..7b2aed7fb 100644
--- a/mdk-stage1/dietlibc/ppc/start.S
+++ b/mdk-stage1/dietlibc/ppc/start.S
@@ -1,21 +1,17 @@
-#include "start.h"
-
-#ifdef __powerpc__
-
.text
.global _start
.type _start,@function
_start:
/* Save the stack pointer, in case we're statically linked under Linux. */
- mr 9,1
+ mr 9,1
/* Set up an initial stack frame, and clear the LR. */
- clrrwi 1,1,4
- li 0,0
- stwu 1,-16(1)
- mtlr 0
- stw 0,0(1)
+ clrrwi 1,1,4
+ li 0,0
+ stwu 1,-16(1)
+ mtlr 0
+ stw 0,0(1)
- /* r9 enthält den initialen Stackpointer.
+ /* r9 contains the initial stack pointer
argc = (r9)
argv = (r9+4)
envp = argv+(argc+1)*4 */
@@ -27,18 +23,20 @@ _start:
slwi 5,5,2 /* (argc+1)*4 */
add 5,5,4 /* argv+(argc+1)*4 */
- lis 6,environ@ha
- stw 5,environ@l(6)
+ lis 14,environ@ha
+ stw 5,environ@l(14)
+#ifdef WANT_DYNAMIC
+ mr 6,7
+ bl _dyn_start
+#else
bl main
+#endif
b exit
.size _start,.-_start
/* Define a symbol for the first piece of initialized data. */
- .section ".data"
+ .section ".data"
__data_start:
-
-#endif
-
diff --git a/mdk-stage1/dietlibc/ppc/unified.S b/mdk-stage1/dietlibc/ppc/unified.S
index d2b419f0b..eb136a96b 100644
--- a/mdk-stage1/dietlibc/ppc/unified.S
+++ b/mdk-stage1/dietlibc/ppc/unified.S
@@ -1,21 +1,40 @@
#include <dietfeatures.h>
+#include "syscalls.h"
.text
+.type exit,@function
+.weak exit
+exit:
+.type _exit,@function
+.global _exit
+_exit:
+ li 0,__NR_exit
.global __unified_syscall
__unified_syscall:
sc
- mfcr 0
- andis. 9,0,4096
- mr 0,3
- beq .L1
-#ifdef WANT_THREAD_SAVE
- bl __set_errno
+ bnslr+
+
+.global error_unified_syscall
+error_unified_syscall:
+#ifdef WANT_THREAD_SAFE
+ stwu 1,-16(1)
+ mflr 0
+ stw 0,20(1)
+ stw 3,12(1)
+ bl __errno_location
+ lwz 0,12(1)
+ stw 0,0(3)
+ lwz 0,20(1)
+ mtlr 0
+ addi 1,1,16
#else
lis 9,errno@ha
stw 3,errno@l(9)
#endif
- li 0,-1
-.L1:
- mr 3,0
+ li 3,-1
+
+/* here we go and "reuse" the return for weak-void functions */
+#include "dietuglyweaks.h"
+
blr
diff --git a/mdk-stage1/dietlibc/sparc/Makefile.add b/mdk-stage1/dietlibc/sparc/Makefile.add
index 0de05b1db..102175bc5 100644
--- a/mdk-stage1/dietlibc/sparc/Makefile.add
+++ b/mdk-stage1/dietlibc/sparc/Makefile.add
@@ -1,3 +1,4 @@
CFLAGS+=-mcpu=supersparc -Os
VPATH:=sparc:syscalls.s:$(VPATH)
+LIBOBJ+=$(OBJDIR)/udiv.o $(OBJDIR)/umul.o $(OBJDIR)/urem.o
diff --git a/mdk-stage1/dietlibc/sparc/__longjmp.S b/mdk-stage1/dietlibc/sparc/__longjmp.S
index 72e001a2f..6550d2b5c 100644
--- a/mdk-stage1/dietlibc/sparc/__longjmp.S
+++ b/mdk-stage1/dietlibc/sparc/__longjmp.S
@@ -10,6 +10,7 @@
.text
.global __longjmp
+.type __longjmp,function
__longjmp:
/* Store our arguments in global registers so we can still
use them while unwinding frames and their register windows. */
diff --git a/mdk-stage1/dietlibc/sparc/clone.S b/mdk-stage1/dietlibc/sparc/clone.S
index 58b438249..fd8d1d126 100644
--- a/mdk-stage1/dietlibc/sparc/clone.S
+++ b/mdk-stage1/dietlibc/sparc/clone.S
@@ -1,10 +1,11 @@
-#include <asm/errno.h>
-#include <asm/unistd.h>
+#include <errno.h>
+#include "syscalls.h"
.text
.align 4
.weak clone
clone:
+.type __clone,#function
.global __clone
__clone:
save %sp, -96, %sp
diff --git a/mdk-stage1/dietlibc/sparc/fork.S b/mdk-stage1/dietlibc/sparc/fork.S
index 869c9b30c..a54cab2a9 100644
--- a/mdk-stage1/dietlibc/sparc/fork.S
+++ b/mdk-stage1/dietlibc/sparc/fork.S
@@ -10,7 +10,7 @@ __libc_fork:
bcc,a 1f
nop
save %sp, -96, %sp
-#ifdef WANT_THREAD_SAVE
+#ifdef WANT_THREAD_SAFE
call __errno_location
nop
#else
diff --git a/mdk-stage1/dietlibc/sparc/mmap.c b/mdk-stage1/dietlibc/sparc/mmap.c
index 25ebdc24e..5342bac4e 100644
--- a/mdk-stage1/dietlibc/sparc/mmap.c
+++ b/mdk-stage1/dietlibc/sparc/mmap.c
@@ -1,5 +1,5 @@
-#include <linux/types.h>
-#include <linux/unistd.h>
+#include <sys/types.h>
+#include "syscalls.h"
#define __SYSCALL_STRING \
"ta 0x10;" \
diff --git a/mdk-stage1/dietlibc/sparc/pipe.S b/mdk-stage1/dietlibc/sparc/pipe.S
index 820da2570..076822765 100644
--- a/mdk-stage1/dietlibc/sparc/pipe.S
+++ b/mdk-stage1/dietlibc/sparc/pipe.S
@@ -9,7 +9,7 @@ pipe:
bcc,a 1f
nop
save %sp, -96, %sp
-#ifdef WANT_THREAD_SAVE
+#ifdef WANT_THREAD_SAFE
call __errno_location
nop
#else
diff --git a/mdk-stage1/dietlibc/sparc/setjmp.S b/mdk-stage1/dietlibc/sparc/setjmp.S
index efc5a7013..579df757c 100644
--- a/mdk-stage1/dietlibc/sparc/setjmp.S
+++ b/mdk-stage1/dietlibc/sparc/setjmp.S
@@ -6,32 +6,34 @@
#define ST_FLUSH_WINDOWS 0x03
-.section .rodata
.text
.globl __setjmp
+.type __setjmp,function
__setjmp:
- b 1f
- set 0, %o1
+ b 1f
+ set 0, %o1
.size __setjmp,.-__setjmp
.globl setjmp
+.type setjmp,function
setjmp:
- set 1, %o1
+ set 1, %o1
.size setjmp,.-setjmp
.globl __sigsetjmp
+.type __sigsetjmp,function
__sigsetjmp:
1:
- /* Save our PC, SP and FP. Save the signal mask if requested with
- a tail-call for simplicity; it always returns zero. */
- ta ST_FLUSH_WINDOWS
+ /* Save our PC, SP and FP. Save the signal mask if requested with
+ a tail-call for simplicity; it always returns zero. */
+ ta ST_FLUSH_WINDOWS
- st %o7, [%o0 + (JB_PC * 4)]
- st %sp, [%o0 + (JB_SP * 4)]
- st %fp, [%o0 + (JB_FP * 4)]
+ st %o7, [%o0 + (JB_PC * 4)]
+ st %sp, [%o0 + (JB_SP * 4)]
+ st %fp, [%o0 + (JB_FP * 4)]
- mov %o7, %g1
- call __sigjmp_save
- mov %g1, %o7
+ mov %o7, %g1
+ call __sigjmp_save
+ mov %g1, %o7
.size __sigsetjmp,.-__sigsetjmp
diff --git a/mdk-stage1/dietlibc/sparc/shmat.c b/mdk-stage1/dietlibc/sparc/shmat.c
index 73b2d89a9..b7dce2e83 100644
--- a/mdk-stage1/dietlibc/sparc/shmat.c
+++ b/mdk-stage1/dietlibc/sparc/shmat.c
@@ -1,7 +1,7 @@
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
-#include <asm/ipc.h>
+#include <unistd.h>
extern void* __ipc();
diff --git a/mdk-stage1/dietlibc/sparc/start.S b/mdk-stage1/dietlibc/sparc/start.S
index e948aaddc..c6408ee8f 100644
--- a/mdk-stage1/dietlibc/sparc/start.S
+++ b/mdk-stage1/dietlibc/sparc/start.S
@@ -1,46 +1,50 @@
-#include "start.h"
-
-#ifdef __sparc__
- .section ".text"
- .align 4
- .global _start
- .type _start,@function
+ .section ".text"
+ .align 4
+ .global _start
+ .type _start,@function
_start:
- /* Terminate the stack frame, and reserve space for functions to
- drop their arguments. */
- mov %g0, %fp
- sub %sp, 6*4, %sp
+/* Terminate the stack frame, and reserve space for functions to
+ drop their arguments. */
+ mov %g0, %fp
+ sub %sp, 6*4, %sp
- /* Extract the arguments and environment as encoded on the stack. The
- argument info starts after one register window (16 words) past the SP. */
- ld [%sp+22*4], %o0
- add %sp, 23*4, %o1
+/* Extract the arguments and environment as encoded on the stack. The
+ argument info starts after one register window (16 words) past the SP. */
+ ld [%sp+22*4], %o0
+ add %sp, 23*4, %o1
add %o1, %o0, %o2
add %o2, %o0, %o2
add %o2, %o0, %o2
add %o2, %o0, %o2
add %o2, 4, %o2
- sethi %hi(environ), %o3
- or %o3, %lo(environ), %o3
+ sethi %hi(environ), %o3
+ or %o3, %lo(environ), %o3
st %o2, [%o3]
- /* When starting a binary via the dynamic linker, %g1 contains the
- address of the shared library termination function, which will be
- registered with atexit(). If we are statically linked, this will
- be NULL. */
+/* When starting a binary via the dynamic linker, %g1 contains the
+ address of the shared library termination function, which will be
+ registered with atexit(). If we are statically linked, this will
+ be NULL. */
- /* Let libc do the rest of the initialization, and call main. */
+/* Let libc do the rest of the initialization, and call main. */
+#ifdef WANT_DYNAMIC
+ call dyn_start
+#else
call main
- mov %g1, %o5
+#endif
+ mov %g1, %o3
b exit
mov %o0, %i0
- /* Die very horribly if exit returns. */
- unimp
+/* Die very horribly if exit returns. */
- .size _start, .-_start
-#endif
+/* here we go and "reuse" the return for weak-void functions */
+#include "dietuglyweaks.h"
+ ret
+ nop
+
+ .size _start, .-_start
diff --git a/mdk-stage1/dietlibc/sparc/udiv.S b/mdk-stage1/dietlibc/sparc/udiv.S
index 87479e7bd..fe8d04969 100644
--- a/mdk-stage1/dietlibc/sparc/udiv.S
+++ b/mdk-stage1/dietlibc/sparc/udiv.S
@@ -48,8 +48,6 @@
C_LABEL(name);\
.type name,@function;
-#define LOC(name) . ## L ## name
-
#define END(name) \
.size name, . - name
@@ -70,11 +68,11 @@ ENTRY(.udiv)
1:
cmp %o3, %o5 ! if %o1 exceeds %o0, done
- blu LOC(got_result) ! (and algorithm fails otherwise)
+ blu .Lgot_result ! (and algorithm fails otherwise)
clr %o2
sethi %hi(1 << (32 - 4 - 1)), %g1
cmp %o3, %g1
- blu LOC(not_really_big)
+ blu .Lnot_really_big
clr %o4
! Here the dividend is >= 2**(31-N) or so. We must be careful here,
@@ -92,7 +90,7 @@ ENTRY(.udiv)
! Now compute %g2.
2: addcc %o5, %o5, %o5
- bcc LOC(not_too_big)
+ bcc .Lnot_too_big
add %g2, 1, %g2
! We get here if the %o1 overflowed while shifting.
@@ -101,14 +99,14 @@ ENTRY(.udiv)
sll %g1, 4, %g1 ! high order bit
srl %o5, 1, %o5 ! rest of %o5
add %o5, %g1, %o5
- b LOC(do_single_div)
+ b .Ldo_single_div
sub %g2, 1, %g2
- LOC(not_too_big):
+ .Lnot_too_big:
3: cmp %o5, %o3
blu 2b
nop
- be LOC(do_single_div)
+ be .Ldo_single_div
nop
/* NB: these are commented out in the V8-Sparc manual as well */
/* (I do not understand this) */
@@ -123,15 +121,15 @@ ENTRY(.udiv)
! order bit set in the first step, just falling into the regular
! division loop will mess up the first time around.
! So we unroll slightly...
- LOC(do_single_div):
+ .Ldo_single_div:
subcc %g2, 1, %g2
- bl LOC(end_regular_divide)
+ bl .Lend_regular_divide
nop
sub %o3, %o5, %o3
mov 1, %o2
- b LOC(end_single_divloop)
+ b .Lend_single_divloop
nop
- LOC(single_divloop):
+ .Lsingle_divloop:
sll %o2, 1, %o2
bl 1f
srl %o5, 1, %o5
@@ -143,66 +141,66 @@ ENTRY(.udiv)
add %o3, %o5, %o3
sub %o2, 1, %o2
2:
- LOC(end_single_divloop):
+ .Lend_single_divloop:
subcc %g2, 1, %g2
- bge LOC(single_divloop)
+ bge .Lsingle_divloop
tst %o3
- b,a LOC(end_regular_divide)
+ b,a .Lend_regular_divide
-LOC(not_really_big):
+.Lnot_really_big:
1:
sll %o5, 4, %o5
cmp %o5, %o3
bleu 1b
addcc %o4, 1, %o4
- be LOC(got_result)
+ be .Lgot_result
sub %o4, 1, %o4
tst %o3 ! set up for initial iteration
-LOC(divloop):
+.Ldivloop:
sll %o2, 4, %o2
! depth 1, accumulated bits 0
- bl LOC(1.16)
+ bl .L1.16
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 2, accumulated bits 1
- bl LOC(2.17)
+ bl .L2.17
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 3, accumulated bits 3
- bl LOC(3.19)
+ bl .L3.19
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 4, accumulated bits 7
- bl LOC(4.23)
+ bl .L4.23
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (7*2+1), %o2
-LOC(4.23):
+.L4.23:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (7*2-1), %o2
-LOC(3.19):
+.L3.19:
! remainder is negative
addcc %o3,%o5,%o3
! depth 4, accumulated bits 5
- bl LOC(4.21)
+ bl .L4.21
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (5*2+1), %o2
-LOC(4.21):
+.L4.21:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
@@ -210,41 +208,41 @@ LOC(4.21):
-LOC(2.17):
+.L2.17:
! remainder is negative
addcc %o3,%o5,%o3
! depth 3, accumulated bits 1
- bl LOC(3.17)
+ bl .L3.17
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 4, accumulated bits 3
- bl LOC(4.19)
+ bl .L4.19
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (3*2+1), %o2
-LOC(4.19):
+.L4.19:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (3*2-1), %o2
-LOC(3.17):
+.L3.17:
! remainder is negative
addcc %o3,%o5,%o3
! depth 4, accumulated bits 1
- bl LOC(4.17)
+ bl .L4.17
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (1*2+1), %o2
-LOC(4.17):
+.L4.17:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
@@ -253,46 +251,46 @@ LOC(4.17):
-LOC(1.16):
+.L1.16:
! remainder is negative
addcc %o3,%o5,%o3
! depth 2, accumulated bits -1
- bl LOC(2.15)
+ bl .L2.15
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 3, accumulated bits -1
- bl LOC(3.15)
+ bl .L3.15
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 4, accumulated bits -1
- bl LOC(4.15)
+ bl .L4.15
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (-1*2+1), %o2
-LOC(4.15):
+.L4.15:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-1*2-1), %o2
-LOC(3.15):
+.L3.15:
! remainder is negative
addcc %o3,%o5,%o3
! depth 4, accumulated bits -3
- bl LOC(4.13)
+ bl .L4.13
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (-3*2+1), %o2
-LOC(4.13):
+.L4.13:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
@@ -300,41 +298,41 @@ LOC(4.13):
-LOC(2.15):
+.L2.15:
! remainder is negative
addcc %o3,%o5,%o3
! depth 3, accumulated bits -3
- bl LOC(3.13)
+ bl .L3.13
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 4, accumulated bits -5
- bl LOC(4.11)
+ bl .L4.11
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (-5*2+1), %o2
-LOC(4.11):
+.L4.11:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-5*2-1), %o2
-LOC(3.13):
+.L3.13:
! remainder is negative
addcc %o3,%o5,%o3
! depth 4, accumulated bits -7
- bl LOC(4.9)
+ bl .L4.9
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (-7*2+1), %o2
-LOC(4.9):
+.L4.9:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
@@ -344,16 +342,16 @@ LOC(4.9):
9:
-LOC(end_regular_divide):
+.Lend_regular_divide:
subcc %o4, 1, %o4
- bge LOC(divloop)
+ bge .Ldivloop
tst %o3
- bl,a LOC(got_result)
+ bl,a .Lgot_result
! non-restoring fixup here (one instruction only!)
sub %o2, 1, %o2
-LOC(got_result):
+.Lgot_result:
retl
mov %o2, %o0
diff --git a/mdk-stage1/dietlibc/sparc/umul.S b/mdk-stage1/dietlibc/sparc/umul.S
index 15038ab2a..5d7d60f2b 100644
--- a/mdk-stage1/dietlibc/sparc/umul.S
+++ b/mdk-stage1/dietlibc/sparc/umul.S
@@ -25,8 +25,6 @@
C_LABEL(name);\
.type name,@function;
-#define LOC(name) . ## L ## name
-
#define END(name) \
.size name, . - name
@@ -34,7 +32,7 @@ ENTRY(.umul)
or %o0, %o1, %o4
mov %o0, %y ! multiplier -> Y
andncc %o4, 0xfff, %g0 ! test bits 12..31 of *both* args
- be LOC(mul_shortway) ! if zero, can do it the short way
+ be .Lmul_shortway ! if zero, can do it the short way
andcc %g0, %g0, %o4 ! zero the partial product; clear N & V
/*
@@ -124,7 +122,7 @@ ENTRY(.umul)
addcc %o4, %o2, %o1 ! add compensation and put upper half in place
#endif
-LOC(mul_shortway):
+.Lmul_shortway:
/*
* Short multiply. 12 steps, followed by a final shift step.
* The resulting bits are off by 12 and (32-12) = 20 bit positions,
diff --git a/mdk-stage1/dietlibc/sparc/unified.S b/mdk-stage1/dietlibc/sparc/unified.S
index 3cd609da5..873a522df 100644
--- a/mdk-stage1/dietlibc/sparc/unified.S
+++ b/mdk-stage1/dietlibc/sparc/unified.S
@@ -1,6 +1,14 @@
#include <dietfeatures.h>
+#include "syscalls.h"
.text
+.weak exit
+.type exit,function
+exit:
+.global _exit
+.type _exit,function
+_exit:
+ mov __NR_exit, %g1
.global __unified_syscall
__unified_syscall:
ta 0x10
@@ -14,7 +22,7 @@ __unified_syscall:
cmp %l2, 0xfe
bgu 2f
neg %i0, %l3
-#ifdef WANT_THREAD_SAVE
+#ifdef WANT_THREAD_SAFE
call __errno_location
nop
#else
diff --git a/mdk-stage1/dietlibc/sparc/urem.S b/mdk-stage1/dietlibc/sparc/urem.S
index 943cb7873..f7a9fd394 100644
--- a/mdk-stage1/dietlibc/sparc/urem.S
+++ b/mdk-stage1/dietlibc/sparc/urem.S
@@ -48,8 +48,6 @@
C_LABEL(name);\
.type name,@function;
-#define LOC(name) . ## L ## name
-
#define END(name) \
.size name, . - name
@@ -70,11 +68,11 @@ ENTRY(.urem)
1:
cmp %o3, %o5 ! if %o1 exceeds %o0, done
- blu LOC(got_result) ! (and algorithm fails otherwise)
+ blu .Lgot_result ! (and algorithm fails otherwise)
clr %o2
sethi %hi(1 << (32 - 4 - 1)), %g1
cmp %o3, %g1
- blu LOC(not_really_big)
+ blu .Lnot_really_big
clr %o4
! Here the dividend is >= 2**(31-N) or so. We must be careful here,
@@ -92,7 +90,7 @@ ENTRY(.urem)
! Now compute %g2.
2: addcc %o5, %o5, %o5
- bcc LOC(not_too_big)
+ bcc .Lnot_too_big
add %g2, 1, %g2
! We get here if the %o1 overflowed while shifting.
@@ -101,14 +99,14 @@ ENTRY(.urem)
sll %g1, 4, %g1 ! high order bit
srl %o5, 1, %o5 ! rest of %o5
add %o5, %g1, %o5
- b LOC(do_single_div)
+ b .Ldo_single_div
sub %g2, 1, %g2
- LOC(not_too_big):
+ .Lnot_too_big:
3: cmp %o5, %o3
blu 2b
nop
- be LOC(do_single_div)
+ be .Ldo_single_div
nop
/* NB: these are commented out in the V8-Sparc manual as well */
/* (I do not understand this) */
@@ -123,15 +121,15 @@ ENTRY(.urem)
! order bit set in the first step, just falling into the regular
! division loop will mess up the first time around.
! So we unroll slightly...
- LOC(do_single_div):
+ .Ldo_single_div:
subcc %g2, 1, %g2
- bl LOC(end_regular_divide)
+ bl .Lend_regular_divide
nop
sub %o3, %o5, %o3
mov 1, %o2
- b LOC(end_single_divloop)
+ b .Lend_single_divloop
nop
- LOC(single_divloop):
+ .Lsingle_divloop:
sll %o2, 1, %o2
bl 1f
srl %o5, 1, %o5
@@ -143,66 +141,66 @@ ENTRY(.urem)
add %o3, %o5, %o3
sub %o2, 1, %o2
2:
- LOC(end_single_divloop):
+ .Lend_single_divloop:
subcc %g2, 1, %g2
- bge LOC(single_divloop)
+ bge .Lsingle_divloop
tst %o3
- b,a LOC(end_regular_divide)
+ b,a .Lend_regular_divide
-LOC(not_really_big):
+.Lnot_really_big:
1:
sll %o5, 4, %o5
cmp %o5, %o3
bleu 1b
addcc %o4, 1, %o4
- be LOC(got_result)
+ be .Lgot_result
sub %o4, 1, %o4
tst %o3 ! set up for initial iteration
-LOC(divloop):
+.Ldivloop:
sll %o2, 4, %o2
! depth 1, accumulated bits 0
- bl LOC(1.16)
+ bl .L1.16
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 2, accumulated bits 1
- bl LOC(2.17)
+ bl .L2.17
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 3, accumulated bits 3
- bl LOC(3.19)
+ bl .L3.19
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 4, accumulated bits 7
- bl LOC(4.23)
+ bl .L4.23
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (7*2+1), %o2
-LOC(4.23):
+.L4.23:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (7*2-1), %o2
-LOC(3.19):
+.L3.19:
! remainder is negative
addcc %o3,%o5,%o3
! depth 4, accumulated bits 5
- bl LOC(4.21)
+ bl .L4.21
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (5*2+1), %o2
-LOC(4.21):
+.L4.21:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
@@ -210,41 +208,41 @@ LOC(4.21):
-LOC(2.17):
+.L2.17:
! remainder is negative
addcc %o3,%o5,%o3
! depth 3, accumulated bits 1
- bl LOC(3.17)
+ bl .L3.17
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 4, accumulated bits 3
- bl LOC(4.19)
+ bl .L4.19
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (3*2+1), %o2
-LOC(4.19):
+.L4.19:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (3*2-1), %o2
-LOC(3.17):
+.L3.17:
! remainder is negative
addcc %o3,%o5,%o3
! depth 4, accumulated bits 1
- bl LOC(4.17)
+ bl .L4.17
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (1*2+1), %o2
-LOC(4.17):
+.L4.17:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
@@ -253,46 +251,46 @@ LOC(4.17):
-LOC(1.16):
+.L1.16:
! remainder is negative
addcc %o3,%o5,%o3
! depth 2, accumulated bits -1
- bl LOC(2.15)
+ bl .L2.15
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 3, accumulated bits -1
- bl LOC(3.15)
+ bl .L3.15
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 4, accumulated bits -1
- bl LOC(4.15)
+ bl .L4.15
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (-1*2+1), %o2
-LOC(4.15):
+.L4.15:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-1*2-1), %o2
-LOC(3.15):
+.L3.15:
! remainder is negative
addcc %o3,%o5,%o3
! depth 4, accumulated bits -3
- bl LOC(4.13)
+ bl .L4.13
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (-3*2+1), %o2
-LOC(4.13):
+.L4.13:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
@@ -300,41 +298,41 @@ LOC(4.13):
-LOC(2.15):
+.L2.15:
! remainder is negative
addcc %o3,%o5,%o3
! depth 3, accumulated bits -3
- bl LOC(3.13)
+ bl .L3.13
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
! depth 4, accumulated bits -5
- bl LOC(4.11)
+ bl .L4.11
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (-5*2+1), %o2
-LOC(4.11):
+.L4.11:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
add %o2, (-5*2-1), %o2
-LOC(3.13):
+.L3.13:
! remainder is negative
addcc %o3,%o5,%o3
! depth 4, accumulated bits -7
- bl LOC(4.9)
+ bl .L4.9
srl %o5,1,%o5
! remainder is positive
subcc %o3,%o5,%o3
b 9f
add %o2, (-7*2+1), %o2
-LOC(4.9):
+.L4.9:
! remainder is negative
addcc %o3,%o5,%o3
b 9f
@@ -344,16 +342,16 @@ LOC(4.9):
9:
-LOC(end_regular_divide):
+.Lend_regular_divide:
subcc %o4, 1, %o4
- bge LOC(divloop)
+ bge .Ldivloop
tst %o3
- bl,a LOC(got_result)
+ bl,a .Lgot_result
! non-restoring fixup here (one instruction only!)
add %o3, %o1, %o3
-LOC(got_result):
+.Lgot_result:
retl
mov %o3, %o0
diff --git a/mdk-stage1/dietlibc/start.h b/mdk-stage1/dietlibc/start.h
deleted file mode 100644
index 7f9e6be28..000000000
--- a/mdk-stage1/dietlibc/start.h
+++ /dev/null
@@ -1,14 +0,0 @@
-.section ".bss"
-.align 8
-
-.weak errno
-errno:
-.global __errno
-__errno:
- .long 0
-
-.weak environ
-environ:
-.global __environ
-__environ:
- .long 0
diff --git a/mdk-stage1/dietlibc/syscalls.c/_llseek.c b/mdk-stage1/dietlibc/syscalls.c/_llseek.c
deleted file mode 100644
index fdf49eba5..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/_llseek.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <unistd.h>
-#include <sys/types.h>
-#include "syscalls.h"
-
-_syscall5(int,_llseek,uint,fd,ulong,hi,ulong,lo,loff_t*,res,uint,wh);
diff --git a/mdk-stage1/dietlibc/syscalls.c/_newselect.c b/mdk-stage1/dietlibc/syscalls.c/_newselect.c
deleted file mode 100644
index cb42193bd..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/_newselect.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <linux/types.h>
-#include <linux/time.h>
-#include "syscalls.h"
-
-_syscall5(int,_newselect,int,n,fd_set *,rd,fd_set *,wr,fd_set *,ex,struct timeval *,timeval);
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/access.c b/mdk-stage1/dietlibc/syscalls.c/access.c
deleted file mode 100644
index 80944733a..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/access.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,access,const char*,pathname,int,mode)
diff --git a/mdk-stage1/dietlibc/syscalls.c/chdir.c b/mdk-stage1/dietlibc/syscalls.c/chdir.c
deleted file mode 100644
index a679f528d..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/chdir.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,chdir,void*,path)
diff --git a/mdk-stage1/dietlibc/syscalls.c/chmod.c b/mdk-stage1/dietlibc/syscalls.c/chmod.c
deleted file mode 100644
index 80ad33b40..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/chmod.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,chmod,const char * ,path,mode_t,mode)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/chown.c b/mdk-stage1/dietlibc/syscalls.c/chown.c
deleted file mode 100644
index 5a9352684..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/chown.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall3(int,chown,char*,path,uid_t,owner,gid_t,group)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/chroot.c b/mdk-stage1/dietlibc/syscalls.c/chroot.c
deleted file mode 100644
index ab39f7ebe..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/chroot.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,chroot,void*,path)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/clone.c b/mdk-stage1/dietlibc/syscalls.c/clone.c
deleted file mode 100644
index 985eee4c8..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/clone.c
+++ /dev/null
@@ -1 +0,0 @@
-#warning "No CLONE support yet"
diff --git a/mdk-stage1/dietlibc/syscalls.c/close.c b/mdk-stage1/dietlibc/syscalls.c/close.c
deleted file mode 100644
index a7d7f0076..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/close.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,close,int,fd)
diff --git a/mdk-stage1/dietlibc/syscalls.c/dup.c b/mdk-stage1/dietlibc/syscalls.c/dup.c
deleted file mode 100644
index 9c28f0bd6..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/dup.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,dup,int,fd)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/dup2.c b/mdk-stage1/dietlibc/syscalls.c/dup2.c
deleted file mode 100644
index 399314aa8..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/dup2.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,dup2,int,one,int,two)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/execve.c b/mdk-stage1/dietlibc/syscalls.c/execve.c
deleted file mode 100644
index c2bac0117..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/execve.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,execve,const char *,fn,void *,argv,void *,envp)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/exit.c b/mdk-stage1/dietlibc/syscalls.c/exit.c
deleted file mode 100644
index 87087c939..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/exit.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,exit,int,exitcode)
diff --git a/mdk-stage1/dietlibc/syscalls.c/fchdir.c b/mdk-stage1/dietlibc/syscalls.c/fchdir.c
deleted file mode 100644
index b3a41dc7a..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/fchdir.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,fchdir,int,fd)
diff --git a/mdk-stage1/dietlibc/syscalls.c/fchmod.c b/mdk-stage1/dietlibc/syscalls.c/fchmod.c
deleted file mode 100644
index 09e52b6c7..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/fchmod.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,fchmod,int,filedes,mode_t,mode)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/fchown.c b/mdk-stage1/dietlibc/syscalls.c/fchown.c
deleted file mode 100644
index 58923a137..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/fchown.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall3(int,fchown,int,fd,uid_t,owner,gid_t,group)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/fcntl.c b/mdk-stage1/dietlibc/syscalls.c/fcntl.c
deleted file mode 100644
index b21be9531..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/fcntl.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,fcntl,int,fd,int,cmd,long,arg)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/flock.c b/mdk-stage1/dietlibc/syscalls.c/flock.c
deleted file mode 100644
index 6fcb336ef..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/flock.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,flock,int,fd,int,op)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/fork.c b/mdk-stage1/dietlibc/syscalls.c/fork.c
deleted file mode 100644
index 1d4b892b6..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/fork.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "syscalls.h"
-
-#ifndef __sparc__
-
-_syscall0(int,fork)
-#endif
diff --git a/mdk-stage1/dietlibc/syscalls.c/fsync.c b/mdk-stage1/dietlibc/syscalls.c/fsync.c
deleted file mode 100644
index db6198b8a..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/fsync.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,fsync,int,fd)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/ftruncate.c b/mdk-stage1/dietlibc/syscalls.c/ftruncate.c
deleted file mode 100644
index 5f002a899..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/ftruncate.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <sys/types.h>
-#include "syscalls.h"
-
-_syscall2(int,ftruncate,int,fd,off_t,length)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getcwd.c b/mdk-stage1/dietlibc/syscalls.c/getcwd.c
deleted file mode 100644
index 9e5e4a3e2..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getcwd.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "syscalls.h"
-
-/* this syscall exists since Linux 2.1.92 */
-
-_syscall2(int,getcwd,char*,buf,unsigned long,size)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getdents.c b/mdk-stage1/dietlibc/syscalls.c/getdents.c
deleted file mode 100644
index be941b21e..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getdents.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int, getdents, unsigned int, fd, void *, dirp, unsigned int, count);
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/getegid.c b/mdk-stage1/dietlibc/syscalls.c/getegid.c
deleted file mode 100644
index 3213d640c..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getegid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall0(gid_t,getegid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/geteuid.c b/mdk-stage1/dietlibc/syscalls.c/geteuid.c
deleted file mode 100644
index 5b31a3cca..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/geteuid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall0(uid_t,geteuid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getgid.c b/mdk-stage1/dietlibc/syscalls.c/getgid.c
deleted file mode 100644
index 2f7d96286..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getgid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall0(gid_t,getgid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getgroups.c b/mdk-stage1/dietlibc/syscalls.c/getgroups.c
deleted file mode 100644
index 3e4d6797a..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getgroups.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,getgroups,int,size,int*,list)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getpgid.c b/mdk-stage1/dietlibc/syscalls.c/getpgid.c
deleted file mode 100644
index 0b4ff528b..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getpgid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall1(pid_t,getpgid,pid_t,pid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getpid.c b/mdk-stage1/dietlibc/syscalls.c/getpid.c
deleted file mode 100644
index d60a8db9a..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getpid.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall0(int,getpid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getppid.c b/mdk-stage1/dietlibc/syscalls.c/getppid.c
deleted file mode 100644
index ee87a8eae..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getppid.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall0(int,getppid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getpriority.c b/mdk-stage1/dietlibc/syscalls.c/getpriority.c
deleted file mode 100644
index 6f94bcf42..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getpriority.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,getpriority,int,which,int,who)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/getresgid.c b/mdk-stage1/dietlibc/syscalls.c/getresgid.c
deleted file mode 100644
index 264ec7dce..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getresgid.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-#ifdef __NR_getresgid
-
-_syscall3(int,getresgid,gid_t*,rgid,gid_t*,egid,gid_t*,sgid)
-
-#endif
diff --git a/mdk-stage1/dietlibc/syscalls.c/getresuid.c b/mdk-stage1/dietlibc/syscalls.c/getresuid.c
deleted file mode 100644
index 74e2daec2..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getresuid.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-#ifdef __getresuid
-
-_syscall3(int,getresuid,uid_t*,ruid,uid_t*,euid,uid_t*,suid)
-
-#endif
diff --git a/mdk-stage1/dietlibc/syscalls.c/getrlimit.c b/mdk-stage1/dietlibc/syscalls.c/getrlimit.c
deleted file mode 100644
index 635b2baf4..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getrlimit.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,getrlimit,int,resource,void*,rlim)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getrusage.c b/mdk-stage1/dietlibc/syscalls.c/getrusage.c
deleted file mode 100644
index 815d3e617..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getrusage.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,getrusage,int,who,void*,rusage)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getsid.c b/mdk-stage1/dietlibc/syscalls.c/getsid.c
deleted file mode 100644
index 69974c36c..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getsid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall1(pid_t,getsid,pid_t,pid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/gettimeofday.c b/mdk-stage1/dietlibc/syscalls.c/gettimeofday.c
deleted file mode 100644
index 5f4931a0c..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/gettimeofday.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include <linux/time.h>
-#include "syscalls.h"
-
-_syscall2(int,gettimeofday,struct timeval *,tv,void *,tz)
diff --git a/mdk-stage1/dietlibc/syscalls.c/getuid.c b/mdk-stage1/dietlibc/syscalls.c/getuid.c
deleted file mode 100644
index bf38447a6..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/getuid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall0(uid_t,getuid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/ioctl.c b/mdk-stage1/dietlibc/syscalls.c/ioctl.c
deleted file mode 100644
index 1612109d3..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/ioctl.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,ioctl,int,fd,int,request,void *,argp)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/kill.c b/mdk-stage1/dietlibc/syscalls.c/kill.c
deleted file mode 100644
index e56b0ac1b..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/kill.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,kill,pid_t,pid,int,sig)
diff --git a/mdk-stage1/dietlibc/syscalls.c/lchown.c b/mdk-stage1/dietlibc/syscalls.c/lchown.c
deleted file mode 100644
index 976d2ee1f..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/lchown.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall3(int,lchown,char*,path,uid_t,owner,gid_t,group)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/link.c b/mdk-stage1/dietlibc/syscalls.c/link.c
deleted file mode 100644
index ab9b427d9..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/link.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,link,const char *,a,const char *,b)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/lseek.c b/mdk-stage1/dietlibc/syscalls.c/lseek.c
deleted file mode 100644
index 9925a2185..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/lseek.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(unsigned long,lseek,int,fd,unsigned long,offset,int,whence)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/mkdir.c b/mdk-stage1/dietlibc/syscalls.c/mkdir.c
deleted file mode 100644
index aac682c99..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/mkdir.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,mkdir,void*,path,mode_t,mode)
diff --git a/mdk-stage1/dietlibc/syscalls.c/mknod.c b/mdk-stage1/dietlibc/syscalls.c/mknod.c
deleted file mode 100644
index 00e836b73..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/mknod.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall3(int,mknod,const char*,pathname,mode_t,mode,dev_t,dev)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/mount.c b/mdk-stage1/dietlibc/syscalls.c/mount.c
deleted file mode 100644
index 2d71ee812..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/mount.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall5(int,mount,const char *,spec,const char *,dir,const char *,type,unsigned long,rwflag,const void *,data);
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/mprotect.c b/mdk-stage1/dietlibc/syscalls.c/mprotect.c
deleted file mode 100644
index 634a12089..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/mprotect.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall3(int,mprotect,const void *,addr, size_t, len, int, prot)
diff --git a/mdk-stage1/dietlibc/syscalls.c/mremap.c b/mdk-stage1/dietlibc/syscalls.c/mremap.c
deleted file mode 100644
index 37d066bac..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/mremap.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall4(int,mremap,void*,old_address,size_t,old_size,size_t,new_size,unsigned long,flags)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/munmap.c b/mdk-stage1/dietlibc/syscalls.c/munmap.c
deleted file mode 100644
index 40bc98270..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/munmap.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,munmap,void*,start,size_t,len)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/nanosleep.c b/mdk-stage1/dietlibc/syscalls.c/nanosleep.c
deleted file mode 100644
index 71aca1f09..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/nanosleep.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include <linux/time.h>
-#include "syscalls.h"
-
-_syscall2(int,nanosleep,struct timeval *,in,struct timeval *,out)
diff --git a/mdk-stage1/dietlibc/syscalls.c/open.c b/mdk-stage1/dietlibc/syscalls.c/open.c
deleted file mode 100644
index 8b3ccfcc3..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/open.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall3(int,open,const char *,fn,int,flags,mode_t,mode)
diff --git a/mdk-stage1/dietlibc/syscalls.c/pipe.c b/mdk-stage1/dietlibc/syscalls.c/pipe.c
deleted file mode 100644
index 42197c881..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/pipe.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall1(int,pipe,int *,filedes)
diff --git a/mdk-stage1/dietlibc/syscalls.c/poll.c b/mdk-stage1/dietlibc/syscalls.c/poll.c
deleted file mode 100644
index 10d0d1f78..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/poll.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall3(int,poll,void *,ufds,int,nfds,int,timeout)
diff --git a/mdk-stage1/dietlibc/syscalls.c/read.c b/mdk-stage1/dietlibc/syscalls.c/read.c
deleted file mode 100644
index f5532054e..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/read.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,read,int,fd,const char *,buf,unsigned long,count)
diff --git a/mdk-stage1/dietlibc/syscalls.c/readlink.c b/mdk-stage1/dietlibc/syscalls.c/readlink.c
deleted file mode 100644
index 482f8fe27..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/readlink.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "syscalls.h"
-#include <linux/types.h>
-
-_syscall3(int,readlink,char*,path,char*,buf,size_t,bufsiz)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/reboot.c b/mdk-stage1/dietlibc/syscalls.c/reboot.c
deleted file mode 100644
index 0ad474894..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/reboot.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,reboot,int,magic,int,magic_too,int,flag)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/rename.c b/mdk-stage1/dietlibc/syscalls.c/rename.c
deleted file mode 100644
index f86d50728..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/rename.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,rename,char*,oldpath,char*,newpath)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/rmdir.c b/mdk-stage1/dietlibc/syscalls.c/rmdir.c
deleted file mode 100644
index 303885264..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/rmdir.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,rmdir,void*,path)
diff --git a/mdk-stage1/dietlibc/syscalls.c/setdomainname.c b/mdk-stage1/dietlibc/syscalls.c/setdomainname.c
deleted file mode 100644
index 83d3aa8b8..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setdomainname.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,setdomainname,const char *,name,int,len)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/setgid.c b/mdk-stage1/dietlibc/syscalls.c/setgid.c
deleted file mode 100644
index 1f7263aeb..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setgid.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,setgid,int,gid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/setgroups.c b/mdk-stage1/dietlibc/syscalls.c/setgroups.c
deleted file mode 100644
index fed3b85c1..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setgroups.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,setgroups,int,size,const int*,list)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/sethostname.c b/mdk-stage1/dietlibc/syscalls.c/sethostname.c
deleted file mode 100644
index e4b736f87..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/sethostname.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,sethostname,const char *,name,int,len)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/setitimer.c b/mdk-stage1/dietlibc/syscalls.c/setitimer.c
deleted file mode 100644
index 28935cab7..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setitimer.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,setitimer,int,which,void *,value,void *,ovalue)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/setpgid.c b/mdk-stage1/dietlibc/syscalls.c/setpgid.c
deleted file mode 100644
index 66fbf82dd..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setpgid.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,setpgid,int,name,int,len)
diff --git a/mdk-stage1/dietlibc/syscalls.c/setpriority.c b/mdk-stage1/dietlibc/syscalls.c/setpriority.c
deleted file mode 100644
index bc04227d2..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setpriority.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,setpriority,int,which,int,who,int,prio)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/setregid.c b/mdk-stage1/dietlibc/syscalls.c/setregid.c
deleted file mode 100644
index c6911aca8..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setregid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,setregid,gid_t,rgid,gid_t,egid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/setresgid.c b/mdk-stage1/dietlibc/syscalls.c/setresgid.c
deleted file mode 100644
index 817fd2942..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setresgid.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-#ifdef __NR_setresgid
-
-_syscall3(int,setresgid,gid_t*,rgid,gid_t*,egid,gid_t*,sgid)
-
-#endif
diff --git a/mdk-stage1/dietlibc/syscalls.c/setresuid.c b/mdk-stage1/dietlibc/syscalls.c/setresuid.c
deleted file mode 100644
index 7073d8ac2..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setresuid.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-#ifdef __NR_setresuid
-
-_syscall3(int,setresuid,uid_t*,ruid,uid_t*,euid,uid_t*,suid)
-
-#endif
diff --git a/mdk-stage1/dietlibc/syscalls.c/setreuid.c b/mdk-stage1/dietlibc/syscalls.c/setreuid.c
deleted file mode 100644
index c0c23a12d..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setreuid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,setreuid,uid_t,ruid,uid_t,euid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/setrlimit.c b/mdk-stage1/dietlibc/syscalls.c/setrlimit.c
deleted file mode 100644
index 213234282..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setrlimit.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,setrlimit,int,resource,void*,rlim)
diff --git a/mdk-stage1/dietlibc/syscalls.c/setsid.c b/mdk-stage1/dietlibc/syscalls.c/setsid.c
deleted file mode 100644
index 4b35a1316..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setsid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall0(pid_t,setsid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/setuid.c b/mdk-stage1/dietlibc/syscalls.c/setuid.c
deleted file mode 100644
index 620876c9f..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/setuid.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,setuid,int,uid)
diff --git a/mdk-stage1/dietlibc/syscalls.c/sigaction.c b/mdk-stage1/dietlibc/syscalls.c/sigaction.c
deleted file mode 100644
index cfa5c683f..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/sigaction.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,sigaction,int,signum,void*,act,void*,oldact)
diff --git a/mdk-stage1/dietlibc/syscalls.c/signal.c b/mdk-stage1/dietlibc/syscalls.c/signal.c
deleted file mode 100644
index 1a913be45..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/signal.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,signal,int,num,void *,len)
diff --git a/mdk-stage1/dietlibc/syscalls.c/sigpending.c b/mdk-stage1/dietlibc/syscalls.c/sigpending.c
deleted file mode 100644
index 08fb23991..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/sigpending.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,sigpending,void*,set)
diff --git a/mdk-stage1/dietlibc/syscalls.c/sigprocmask.c b/mdk-stage1/dietlibc/syscalls.c/sigprocmask.c
deleted file mode 100644
index e9dcc2d67..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/sigprocmask.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,sigprocmask,int,how,void*,set,void*,oldset)
diff --git a/mdk-stage1/dietlibc/syscalls.c/sigsuspend.c b/mdk-stage1/dietlibc/syscalls.c/sigsuspend.c
deleted file mode 100644
index 0fe90e623..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/sigsuspend.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,sigsuspend,void*,mask)
diff --git a/mdk-stage1/dietlibc/syscalls.c/socketcall.c b/mdk-stage1/dietlibc/syscalls.c/socketcall.c
deleted file mode 100644
index eee1ae86d..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/socketcall.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,socketcall,int,code,unsigned long *, args)
diff --git a/mdk-stage1/dietlibc/syscalls.c/swapoff.c b/mdk-stage1/dietlibc/syscalls.c/swapoff.c
deleted file mode 100644
index e1daa89a9..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/swapoff.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,swapoff,const char *,fn)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/swapon.c b/mdk-stage1/dietlibc/syscalls.c/swapon.c
deleted file mode 100644
index 543e41e79..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/swapon.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,swapon,const char*,path,int,swapflags)
diff --git a/mdk-stage1/dietlibc/syscalls.c/symlink.c b/mdk-stage1/dietlibc/syscalls.c/symlink.c
deleted file mode 100644
index b3f4d0b1c..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/symlink.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,symlink,const char *,a,const char *,b)
diff --git a/mdk-stage1/dietlibc/syscalls.c/sync.c b/mdk-stage1/dietlibc/syscalls.c/sync.c
deleted file mode 100644
index cca17461f..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/sync.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall0(int,sync)
diff --git a/mdk-stage1/dietlibc/syscalls.c/syslog.c b/mdk-stage1/dietlibc/syscalls.c/syslog.c
deleted file mode 100644
index aace870ea..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/syslog.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,syslog,int, type, char *, buf, int, len);
diff --git a/mdk-stage1/dietlibc/syscalls.c/time.c b/mdk-stage1/dietlibc/syscalls.c/time.c
deleted file mode 100644
index dc15b28f9..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/time.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall1(time_t,time,time_t*,path)
diff --git a/mdk-stage1/dietlibc/syscalls.c/truncate.c b/mdk-stage1/dietlibc/syscalls.c/truncate.c
deleted file mode 100644
index 721bd7134..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/truncate.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall2(int,truncate,const char*,path,off_t,length)
diff --git a/mdk-stage1/dietlibc/syscalls.c/umask.c b/mdk-stage1/dietlibc/syscalls.c/umask.c
deleted file mode 100644
index 506038243..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/umask.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall1(int,umask,mode_t,mask)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/umount.c b/mdk-stage1/dietlibc/syscalls.c/umount.c
deleted file mode 100644
index 4d3ef7637..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/umount.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,umount,const char *,dir)
diff --git a/mdk-stage1/dietlibc/syscalls.c/uname.c b/mdk-stage1/dietlibc/syscalls.c/uname.c
deleted file mode 100644
index 68f135007..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/uname.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall1(int,uname,void *,utsname)
-
diff --git a/mdk-stage1/dietlibc/syscalls.c/unlink.c b/mdk-stage1/dietlibc/syscalls.c/unlink.c
deleted file mode 100644
index 860ccebbf..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/unlink.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall1(int,unlink,const char *,fn)
diff --git a/mdk-stage1/dietlibc/syscalls.c/utime.c b/mdk-stage1/dietlibc/syscalls.c/utime.c
deleted file mode 100644
index 185bdf9e8..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/utime.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall2(int,utime,void*,filename,void*,buf)
diff --git a/mdk-stage1/dietlibc/syscalls.c/vhangup.c b/mdk-stage1/dietlibc/syscalls.c/vhangup.c
deleted file mode 100644
index bb0669765..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/vhangup.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall0(int,vhangup)
diff --git a/mdk-stage1/dietlibc/syscalls.c/wait4.c b/mdk-stage1/dietlibc/syscalls.c/wait4.c
deleted file mode 100644
index 4ae7eabcd..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/wait4.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall4(int,wait4,pid_t,pid,int *,status,int,opts,void *,rusage)
diff --git a/mdk-stage1/dietlibc/syscalls.c/waitpid.c b/mdk-stage1/dietlibc/syscalls.c/waitpid.c
deleted file mode 100644
index b7167f9ce..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/waitpid.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/types.h>
-#include "syscalls.h"
-
-_syscall3(int,waitpid,int,pid,int *,status,int,options)
diff --git a/mdk-stage1/dietlibc/syscalls.c/write.c b/mdk-stage1/dietlibc/syscalls.c/write.c
deleted file mode 100644
index d1f7347d5..000000000
--- a/mdk-stage1/dietlibc/syscalls.c/write.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-_syscall3(int,write,int,fd,const char *,buf,unsigned long,count)
diff --git a/mdk-stage1/dietlibc/syscalls.h b/mdk-stage1/dietlibc/syscalls.h
index eba7a3c00..aa62f67a9 100644
--- a/mdk-stage1/dietlibc/syscalls.h
+++ b/mdk-stage1/dietlibc/syscalls.h
@@ -1,142 +1,35 @@
-#ifdef __ASSEMBLER__
+#if defined(__i386__)
+#include "i386/syscalls.h"
-#include <asm/unistd.h>
+#elif defined(__x86_64__)
+#include "x86_64/syscalls.h"
+#elif defined(__sparc__)
+#if defined(__arch64__)
+#include "sparc64/syscalls.h"
#else
-
-#include <linux/unistd.h>
-
-#endif
-
-#ifdef __i386__
-
-#define syscall_weak(name,wsym,sym) \
-.text; \
-.weak wsym; \
-wsym: ; \
-.global sym; \
-sym: \
- movb $__NR_##name,%al; \
- jmp __unified_syscall
-
-#define syscall(name,sym) \
-.text; \
-.global sym; \
-sym: \
- movb $__NR_##name,%al; \
- jmp __unified_syscall
-
+#include "sparc/syscalls.h"
#endif
-#ifdef __sparc__
-
-#define syscall_weak(name,wsym,sym) \
-.text; \
-.weak wsym; \
-wsym: ; \
-.global sym; \
-sym: \
- b __unified_syscall; \
- mov __NR_##name, %g1
-
-#define syscall(name,sym) \
-.text; \
-.global sym; \
-sym: \
- b __unified_syscall; \
- mov __NR_##name, %g1
-
-#endif
-
-#ifdef __powerpc__
-
-#define syscall_weak(name,wsym,sym) \
-.text; \
-.weak wsym; \
-wsym: ; \
-.global sym; \
-sym: \
- li 0,__NR_##name; \
- b __unified_syscall
+#elif defined(__powerpc__)
+#include "ppc/syscalls.h"
-#define syscall(name,sym) \
-.text; \
-.global sym; \
-sym: \
- li 0,__NR_##name; \
- b __unified_syscall
+#elif defined(__mips__)
+#include "mips/syscalls.h"
-#endif
-
-
-#ifdef __mips__
-
-#define syscall_weak(name,wsym,sym) \
-.text; \
-.weak wsym; \
-wsym: ; \
-.global sym; \
-.ent sym; \
-sym: \
- li $2,__NR_##name; \
- la $25,__unified_syscall; \
- jr $25; \
-.end sym
-
-#define syscall(name,sym) \
-.text; \
-.global sym; \
-.ent sym; \
-sym: \
- li $2,__NR_##name; \
- la $25,__unified_syscall; \
- jr $25; \
-.end sym
-
-#endif
-
-#ifdef __arm__
-
-#define syscall_weak(name,wsym,sym) \
-.text; \
-.weak wsym; \
-wsym: ; \
-.global sym; \
-sym: \
- swi __NR_##name; \
- b __unified_syscall
-
-#define syscall(name,sym) \
-.text; \
-.global sym; \
-sym: \
- swi __NR_##name; \
- b __unified_syscall
-
-#endif
+#elif defined(__arm__)
+#include "arm/syscalls.h"
+#elif defined(__s390__)
+#include "s390/syscalls.h"
-#ifdef __alpha__
+#elif defined(__alpha__)
+#include "alpha/syscalls.h"
-#define syscall_weak(name,wsym,sym) \
-.text ; \
-.align 2 ; \
-.weak wsym; \
-.type wsym,@function ; \
-wsym: ; \
-.global sym ; \
-.type sym,@function ; \
-sym: ; \
- lda $0, __NR_##name($31) ; \
- br __unified_syscall
+#elif defined(__hppa__)
+#include "parisc/syscalls.h"
-#define syscall(name,sym) \
-.text ; \
-.align 2 ; \
-.global sym ; \
-.type sym,@function ; \
-sym: ; \
- lda $0, __NR_##name($31) ; \
- br __unified_syscall
+#elif defined(__ia64__)
+#include "ia64/syscalls.h"
#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/__pread.S b/mdk-stage1/dietlibc/syscalls.s/__pread.S
index ad47c7873..ae2068352 100644
--- a/mdk-stage1/dietlibc/syscalls.s/__pread.S
+++ b/mdk-stage1/dietlibc/syscalls.s/__pread.S
@@ -1,3 +1,3 @@
#include "syscalls.h"
-syscall_weak(pread,__pread,__libc__pread)
+syscall(pread,__pread)
diff --git a/mdk-stage1/dietlibc/syscalls.s/_llseek.S b/mdk-stage1/dietlibc/syscalls.s/_llseek.S
index 3e240d822..68d021168 100644
--- a/mdk-stage1/dietlibc/syscalls.s/_llseek.S
+++ b/mdk-stage1/dietlibc/syscalls.s/_llseek.S
@@ -1,3 +1,7 @@
#include "syscalls.h"
+#ifdef __NR__llseek
+.global llseek
+llseek:
syscall(_llseek,_llseek)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/exit.S b/mdk-stage1/dietlibc/syscalls.s/exit.S
deleted file mode 100644
index 11c989529..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/exit.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall_weak(exit,exit,_exit)
diff --git a/mdk-stage1/dietlibc/syscalls.s/fstat64.S b/mdk-stage1/dietlibc/syscalls.s/fstat64.S
index 0c7a41609..f034ddf5b 100644
--- a/mdk-stage1/dietlibc/syscalls.s/fstat64.S
+++ b/mdk-stage1/dietlibc/syscalls.s/fstat64.S
@@ -1,8 +1,10 @@
#include "dietfeatures.h"
#include "syscalls.h"
+#ifdef __NR_fstat64
#ifdef WANT_LARGEFILE_BACKCOMPAT
syscall(fstat64,__dietlibc_fstat64)
#else
syscall(fstat64,fstat64)
#endif
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/getdents64.S b/mdk-stage1/dietlibc/syscalls.s/getdents64.S
index 16859addf..691d8f650 100644
--- a/mdk-stage1/dietlibc/syscalls.s/getdents64.S
+++ b/mdk-stage1/dietlibc/syscalls.s/getdents64.S
@@ -1,3 +1,4 @@
+#include "dietfeatures.h"
#include "syscalls.h"
#ifdef __NR_getdents64
diff --git a/mdk-stage1/dietlibc/syscalls.s/getresuid.S b/mdk-stage1/dietlibc/syscalls.s/getresuid.S
index 62f6d764f..95c5505a8 100644
--- a/mdk-stage1/dietlibc/syscalls.s/getresuid.S
+++ b/mdk-stage1/dietlibc/syscalls.s/getresuid.S
@@ -1,7 +1,7 @@
#include "syscalls.h"
-#ifdef __getresuid
+#ifdef __NR_getresuid
-syscall(getresuid)
+syscall(getresuid,getresuid)
#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/ioperm.S b/mdk-stage1/dietlibc/syscalls.s/ioperm.S
index 0acfde07a..74a51fc4b 100644
--- a/mdk-stage1/dietlibc/syscalls.s/ioperm.S
+++ b/mdk-stage1/dietlibc/syscalls.s/ioperm.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_ioperm
syscall(ioperm,ioperm)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/ipc.S b/mdk-stage1/dietlibc/syscalls.s/ipc.S
index 40479400d..476878e52 100644
--- a/mdk-stage1/dietlibc/syscalls.s/ipc.S
+++ b/mdk-stage1/dietlibc/syscalls.s/ipc.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_ipc
syscall(ipc,__ipc)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/llseek.S b/mdk-stage1/dietlibc/syscalls.s/llseek.S
deleted file mode 100644
index 0318b492e..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/llseek.S
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "dietfeatures.h"
-#include "syscalls.h"
-
-#ifdef __NR__llseek
-syscall(_llseek,llseek)
-#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/lstat64.S b/mdk-stage1/dietlibc/syscalls.s/lstat64.S
index 33fd5ab94..021cb0578 100644
--- a/mdk-stage1/dietlibc/syscalls.s/lstat64.S
+++ b/mdk-stage1/dietlibc/syscalls.s/lstat64.S
@@ -1,8 +1,10 @@
#include "dietfeatures.h"
#include "syscalls.h"
+#ifdef __NR_lstat64
#ifdef WANT_LARGEFILE_BACKCOMPAT
syscall(lstat64,__dietlibc_lstat64)
#else
syscall(lstat64,lstat64)
#endif
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/nice.S b/mdk-stage1/dietlibc/syscalls.s/nice.S
index 7d3f740b2..4dad30edb 100644
--- a/mdk-stage1/dietlibc/syscalls.s/nice.S
+++ b/mdk-stage1/dietlibc/syscalls.s/nice.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_nice
syscall(nice,nice)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/pause.S b/mdk-stage1/dietlibc/syscalls.s/pause.S
index cdf42cabd..d154f1538 100644
--- a/mdk-stage1/dietlibc/syscalls.s/pause.S
+++ b/mdk-stage1/dietlibc/syscalls.s/pause.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_pause
syscall_weak(pause,pause,__libc_pause)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/ptrace.s b/mdk-stage1/dietlibc/syscalls.s/ptrace.s
deleted file mode 100644
index 392e6a4ed..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/ptrace.s
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall(ptrace,ptrace)
diff --git a/mdk-stage1/dietlibc/syscalls.s/pwrite.S b/mdk-stage1/dietlibc/syscalls.s/pwrite.S
deleted file mode 100644
index f52ead7b2..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/pwrite.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall(pwrite,__pwrite)
diff --git a/mdk-stage1/dietlibc/syscalls.s/sendfile.S b/mdk-stage1/dietlibc/syscalls.s/sendfile.S
index 12d6195dd..4dcb0ef69 100644
--- a/mdk-stage1/dietlibc/syscalls.s/sendfile.S
+++ b/mdk-stage1/dietlibc/syscalls.s/sendfile.S
@@ -3,4 +3,4 @@
syscall_weak(sendfile,sendfile,__libc_sendfile)
-link_warning(sendfile,"sendfile is not portable and does not support large files")
+link_warning(sendfile,"sendfile is not portable")
diff --git a/mdk-stage1/dietlibc/syscalls.s/setresgid.S b/mdk-stage1/dietlibc/syscalls.s/setresgid.S
index 64cbac94e..2277cbaf4 100644
--- a/mdk-stage1/dietlibc/syscalls.s/setresgid.S
+++ b/mdk-stage1/dietlibc/syscalls.s/setresgid.S
@@ -1,7 +1,7 @@
#include "syscalls.h"
-#ifdef __setresgid
+#ifdef __NR_setresgid
-syscall(setresgid)
+syscall(setresgid,setresgid)
#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/setresuid.S b/mdk-stage1/dietlibc/syscalls.s/setresuid.S
index 20b6abee9..cd322b77e 100644
--- a/mdk-stage1/dietlibc/syscalls.s/setresuid.S
+++ b/mdk-stage1/dietlibc/syscalls.s/setresuid.S
@@ -1,7 +1,7 @@
#include "syscalls.h"
-#ifdef __setresuid
+#ifdef __NR_setresuid
-syscall(setresuid)
+syscall(setresuid,setresuid)
#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/sigaction.S b/mdk-stage1/dietlibc/syscalls.s/sigaction.S
deleted file mode 100644
index 32382870c..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/sigaction.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall(sigaction,sigaction)
diff --git a/mdk-stage1/dietlibc/syscalls.s/signal.S b/mdk-stage1/dietlibc/syscalls.s/signal.S
deleted file mode 100644
index 86c4d5db0..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/signal.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall(signal,signal)
diff --git a/mdk-stage1/dietlibc/syscalls.s/sigpending.S b/mdk-stage1/dietlibc/syscalls.s/sigpending.S
deleted file mode 100644
index 08715bef5..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/sigpending.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall(sigpending,sigpending)
diff --git a/mdk-stage1/dietlibc/syscalls.s/sigprocmask.S b/mdk-stage1/dietlibc/syscalls.s/sigprocmask.S
deleted file mode 100644
index 07f5b9d26..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/sigprocmask.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall_weak(sigprocmask,sigprocmask,__sigprocmask)
diff --git a/mdk-stage1/dietlibc/syscalls.s/sigsuspend.S b/mdk-stage1/dietlibc/syscalls.s/sigsuspend.S
deleted file mode 100644
index 062264ab6..000000000
--- a/mdk-stage1/dietlibc/syscalls.s/sigsuspend.S
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "syscalls.h"
-
-syscall_weak(sigsuspend,sigsuspend,__libc_sigsuspend)
diff --git a/mdk-stage1/dietlibc/syscalls.s/socketcall.S b/mdk-stage1/dietlibc/syscalls.s/socketcall.S
index 5837c049a..b97b37f0c 100644
--- a/mdk-stage1/dietlibc/syscalls.s/socketcall.S
+++ b/mdk-stage1/dietlibc/syscalls.s/socketcall.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_socketcall
syscall(socketcall,socketcall)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/stat64.S b/mdk-stage1/dietlibc/syscalls.s/stat64.S
index 734fcab20..7dc54d955 100644
--- a/mdk-stage1/dietlibc/syscalls.s/stat64.S
+++ b/mdk-stage1/dietlibc/syscalls.s/stat64.S
@@ -1,8 +1,10 @@
#include "dietfeatures.h"
#include "syscalls.h"
+#ifdef __NR_stat64
#ifdef WANT_LARGEFILE_BACKCOMPAT
syscall(stat64,__dietlibc_stat64)
#else
syscall(stat64,stat64)
#endif
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/stime.S b/mdk-stage1/dietlibc/syscalls.s/stime.S
index 9d9f5bf0a..281809c27 100644
--- a/mdk-stage1/dietlibc/syscalls.s/stime.S
+++ b/mdk-stage1/dietlibc/syscalls.s/stime.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_stime
syscall(stime,stime)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/syslog.S b/mdk-stage1/dietlibc/syscalls.s/syslog.S
index 6af3c4eac..4ebd81a39 100644
--- a/mdk-stage1/dietlibc/syscalls.s/syslog.S
+++ b/mdk-stage1/dietlibc/syscalls.s/syslog.S
@@ -1,3 +1,3 @@
#include "syscalls.h"
-syscall(syslog,__syscall_syslog)
+syscall_weak(syslog,__syscall_syslog,klogctl)
diff --git a/mdk-stage1/dietlibc/syscalls.s/time.S b/mdk-stage1/dietlibc/syscalls.s/time.S
index 26c79091c..aa646cfdf 100644
--- a/mdk-stage1/dietlibc/syscalls.s/time.S
+++ b/mdk-stage1/dietlibc/syscalls.s/time.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_time
syscall(time,time)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/umount2.S b/mdk-stage1/dietlibc/syscalls.s/umount2.S
index 4cdd6a200..b27b353ed 100644
--- a/mdk-stage1/dietlibc/syscalls.s/umount2.S
+++ b/mdk-stage1/dietlibc/syscalls.s/umount2.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_umount2
syscall(umount2,umount2)
+#endif
diff --git a/mdk-stage1/dietlibc/syscalls.s/waitpid.S b/mdk-stage1/dietlibc/syscalls.s/waitpid.S
index 5cdc18afb..bedc73eb6 100644
--- a/mdk-stage1/dietlibc/syscalls.s/waitpid.S
+++ b/mdk-stage1/dietlibc/syscalls.s/waitpid.S
@@ -1,3 +1,5 @@
#include "syscalls.h"
+#ifdef __NR_waitpid
syscall_weak(waitpid,waitpid,__libc_waitpid)
+#endif
diff --git a/mdk-stage1/disk.c b/mdk-stage1/disk.c
index a9a31d3d7..83c698334 100644
--- a/mdk-stage1/disk.c
+++ b/mdk-stage1/disk.c
@@ -86,6 +86,7 @@ static const char * detect_partition_type(char * dev)
int partitions_signatures_nb = sizeof(partitions_signatures) / sizeof(struct partition_detection_info);
int i;
int fd;
+ const char *part_type = NULL;
char device_fullname[50];
strcpy(device_fullname, "/dev/");
@@ -124,12 +125,13 @@ static const char * detect_partition_type(char * dev)
continue;
detect_partition_found_it:
- return partitions_signatures[i].name;
+ part_type = partitions_signatures[i].name;
+ break;
}
detect_partition_type_end:
close(fd);
- return NULL;
+ return part_type;
}
static char * disk_extract_list_directory(char * direct)
@@ -147,45 +149,30 @@ static char * disk_extract_list_directory(char * direct)
return strdup(tmp);
}
-static enum return_type try_with_device(char *dev_name)
+static int list_partitions(char * dev_name, char ** parts, char ** comments)
{
- char * questions_location[] = { "Directory or ISO image", NULL };
- char * questions_location_auto[] = { "directory", NULL };
- static char ** answers_location = NULL;
- char device_fullname[50];
- char location_full[500];
-
- char * disk_own_mount = "/tmp/hdimage";
-
int major, minor, blocks;
char name[100];
-
- char buf[512];
FILE * f;
- char * parts[50];
- char * parts_comments[50];
- struct stat statbuf;
int i = 0;
- enum return_type results;
- char * choice;
+ char buf[512];
if (!(f = fopen("/proc/partitions", "rb")) || !fgets(buf, sizeof(buf), f) || !fgets(buf, sizeof(buf), f)) {
log_perror(dev_name);
- stg1_error_message("Could not read partitions information.");
- return RETURN_ERROR;
+ return 1;
}
while (fgets(buf, sizeof(buf), f)) {
- bzero(name, sizeof(name));
+ memset(name, 0, sizeof(name));
sscanf(buf, " %d %d %d %s", &major, &minor, &blocks, name);
if ((strstr(name, dev_name) == name) && (blocks > 1) && (name[strlen(dev_name)] != '\0')) {
const char * partition_type = detect_partition_type(name);
parts[i] = strdup(name);
- parts_comments[i] = (char *) malloc(sizeof(char) * 100);
- sprintf(parts_comments[i], "size: %d Mbytes", blocks >> 10);
+ comments[i] = (char *) malloc(sizeof(char) * 100);
+ sprintf(comments[i], "size: %d Mbytes", blocks >> 10);
if (partition_type) {
- strcat(parts_comments[i], ", type: ");
- strcat(parts_comments[i], partition_type);
+ strcat(comments[i], ", type: ");
+ strcat(comments[i], partition_type);
}
i++;
}
@@ -193,6 +180,44 @@ static enum return_type try_with_device(char *dev_name)
parts[i] = NULL;
fclose(f);
+ return 0;
+}
+
+static int try_mount(char * dev, char * location)
+{
+ char device_fullname[50];
+ strcpy(device_fullname, "/dev/");
+ strcat(device_fullname, dev);
+
+ if (my_mount(device_fullname, location, "ext2", 0) == -1 &&
+ my_mount(device_fullname, location, "vfat", 0) == -1 &&
+ my_mount(device_fullname, location, "reiserfs", 0) == -1) {
+ return 1;
+ }
+
+ return 0;
+}
+
+static enum return_type try_with_device(char *dev_name)
+{
+ char * questions_location[] = { "Directory or ISO image", NULL };
+ char * questions_location_auto[] = { "directory", NULL };
+ static char ** answers_location = NULL;
+ char location_full[500];
+
+ char * disk_own_mount = "/tmp/hdimage";
+
+ char * parts[50];
+ char * parts_comments[50];
+ struct stat statbuf;
+ enum return_type results;
+ char * choice;
+
+ if (list_partitions(dev_name, parts, parts_comments)) {
+ stg1_error_message("Could not read partitions information.");
+ return RETURN_ERROR;
+ }
+
if (parts[0] == NULL) {
stg1_error_message("No partitions found.");
return RETURN_ERROR;
@@ -203,12 +228,7 @@ static enum return_type try_with_device(char *dev_name)
if (results != RETURN_OK)
return results;
- strcpy(device_fullname, "/dev/");
- strcat(device_fullname, choice);
-
- if (my_mount(device_fullname, disk_own_mount, "ext2", 0) == -1 &&
- my_mount(device_fullname, disk_own_mount, "vfat", 0) == -1 &&
- my_mount(device_fullname, disk_own_mount, "reiserfs", 0) == -1) {
+ if (try_mount(choice, disk_own_mount)) {
stg1_error_message("I can't find a valid filesystem (tried: ext2, vfat, reiserfs).");
return try_with_device(dev_name);
}
@@ -292,23 +312,33 @@ static enum return_type try_with_device(char *dev_name)
return RETURN_OK;
}
-enum return_type disk_prepare(void)
+static int get_disks(char *** names, char *** models)
{
- char ** medias, ** ptr, ** medias_models;
- char * choice;
- int i, count = 0;
- enum return_type results;
+ char ** ptr;
+ int count = 0;
my_insmod("sd_mod", ANY_DRIVER_TYPE, NULL);
- get_medias(DISK, &medias, &medias_models, BUS_ANY);
+ get_medias(DISK, names, models, BUS_ANY);
- ptr = medias;
+ ptr = *names;
while (ptr && *ptr) {
count++;
ptr++;
}
+ return count;
+}
+
+enum return_type disk_prepare(void)
+{
+ char ** medias, ** medias_models;
+ char * choice;
+ int i;
+ enum return_type results;
+
+ int count = get_disks(&medias, &medias_models);
+
if (count == 0) {
stg1_error_message("No DISK drive found.");
i = ask_insmod(SCSI_ADAPTERS);
@@ -341,3 +371,73 @@ enum return_type disk_prepare(void)
return RETURN_BACK;
return disk_prepare();
}
+
+int
+process_recovery(void)
+{
+ char ** medias, ** medias_models;
+ int count, i;
+
+ log_message("trying the automatic recovery of oem installs");
+
+ count = get_disks(&medias, &medias_models);
+
+ for (i=0; i<count; i++) {
+ char * parts[50];
+ char * parts_comments[50];
+ char ** part, ** comment;
+ log_message("examining disk %s (%s)", medias[i], medias_models[i]);
+
+ if (list_partitions(medias[i], parts, parts_comments)) {
+ log_message("could not read partitions information, bailing out");
+ return 0;
+ }
+
+ part = parts;
+ comment = parts_comments;
+ while (part && *part) {
+ char * disk_own_mount = "/tmp/hdimage";
+ log_message("examining partition %s (%s)", *part, *comment);
+ if (try_mount(*part, disk_own_mount))
+ log_message("couldn't mount it");
+ else {
+ FILE *f;
+ char buf[500];
+ char location[500];
+ strcpy(location, disk_own_mount);
+ strcat(location, "/VERSION");
+ if (!(f = fopen(location, "rb")) || !fgets(buf, sizeof(buf), f)) {
+ log_perror("could not fopen or fgets VERSION");
+ goto examine_next_part;
+ }
+ fclose(f);
+ if (!strstr(buf, VERSION)) {
+ log_message("mismatching VERSION contents");
+ goto examine_next_part;
+ }
+ strcpy(location, disk_own_mount);
+ strcat(location, "/Mandrake/base");
+ if (access(location, R_OK)) {
+ log_message("Mandrake/base is not here");
+ goto examine_next_part;
+ }
+
+ log_message("going on with a recovery on disk %s partition %s", medias[i], *part);
+
+ symlink(disk_own_mount, IMAGE_LOCATION);
+ if (ramdisk_possible())
+ load_ramdisk(); /* if load of ramdisk failed, try to continue in live */
+
+ method_name = strdup("disk");
+ return 1;
+ }
+
+ examine_next_part:
+ umount(disk_own_mount);
+ part++;
+ comment++;
+ }
+ }
+
+ return 0;
+}
diff --git a/mdk-stage1/disk.h b/mdk-stage1/disk.h
index 54213cf68..303cbe138 100644
--- a/mdk-stage1/disk.h
+++ b/mdk-stage1/disk.h
@@ -23,5 +23,6 @@
#define _DISK_H_
enum return_type disk_prepare(void);
+int process_recovery(void);
#endif
diff --git a/mdk-stage1/dns.c b/mdk-stage1/dns.c
index d1e67c78d..5ba55486a 100644
--- a/mdk-stage1/dns.c
+++ b/mdk-stage1/dns.c
@@ -23,7 +23,7 @@
// dietlibc can do hostname lookup, whereas glibc can't when linked statically :-(
-#ifdef __LIBC_DIETLIBC__
+#if defined(__dietlibc__)
#include <unistd.h>
#include <string.h>
@@ -67,15 +67,14 @@ char * mygethostbyaddr(char * ipnum)
struct hostent * host;
if (!inet_aton(ipnum, &in))
return NULL;
- host = gethostbyaddr(&in, strlen((void *) &in), AF_INET);
+ host = gethostbyaddr(&(in.s_addr), sizeof(in.s_addr) /* INADDRSZ */, AF_INET);
if (host && host->h_name)
return host->h_name;
return NULL;
}
-
-#else // __LIBC_DIETLIBC__
-
+#elif defined(__GLIBC__)
+
#include <alloca.h>
#include <sys/socket.h>
#include <netinet/in.h>
@@ -210,4 +209,8 @@ int mygethostbyname(char * name, struct in_addr * addr) {
return rc;
}
+#else
+
+#error "Unsupported C library"
+
#endif
diff --git a/mdk-stage1/doc/README b/mdk-stage1/doc/README
index 09edce6c2..e6c0cb420 100644
--- a/mdk-stage1/doc/README
+++ b/mdk-stage1/doc/README
@@ -5,12 +5,12 @@
[ Author ]
- Guillaume Cottenceau (gc@mandrakesoft.com)
+ Guillaume Cottenceau (gc at mandrakesoft.com)
[ Copyright ]
- Copyright 2000 MandrakeSoft
+ Copyright 2000, 2001, 2002 MandrakeSoft
Partially inspired by Redhat stuff (install from 5.x and 7.x) copyright
Red Hat Software, and Debian stuff (boot-floppies) copyright by their
@@ -42,7 +42,7 @@
[ Online ]
- http://us.mandrakesoft.com/~gc/html/stage1.html
+ http://people.mandrakesoft.com/~gc/html/stage1.html
[ Purpose ]
diff --git a/mdk-stage1/frontend.h b/mdk-stage1/frontend.h
index 4f2d112b7..48f534653 100644
--- a/mdk-stage1/frontend.h
+++ b/mdk-stage1/frontend.h
@@ -21,6 +21,12 @@
#include <stdarg.h>
+/* 'unused' atttribute, gcc specific and just to turn down some warnings. */
+#if defined __GNUC__
+#define UNUSED __attribute__((unused))
+#else
+#define UNUSED
+#endif
enum return_type { RETURN_OK, RETURN_BACK, RETURN_ERROR };
diff --git a/mdk-stage1/init-libc-headers.h b/mdk-stage1/init-libc-headers.h
index 01761e869..1e6807615 100644
--- a/mdk-stage1/init-libc-headers.h
+++ b/mdk-stage1/init-libc-headers.h
@@ -35,6 +35,7 @@
#include <sys/wait.h>
#include <linux/unistd.h>
#include <sys/select.h>
+#include <sys/ioctl.h>
#ifndef SOCK_STREAM
#define SOCK_STREAM 1
diff --git a/mdk-stage1/init.c b/mdk-stage1/init.c
index dc4239ac3..1c7bb9e97 100644
--- a/mdk-stage1/init.c
+++ b/mdk-stage1/init.c
@@ -28,12 +28,16 @@
#include "config-stage1.h"
#if defined(__powerpc__)
-#define TIOCSCTTY 0x540
+#define TIOCSCTTY 0x540E
#endif
char * env[] = {
"PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sbin:/mnt/usr/sbin:/mnt/bin:/mnt/usr/bin",
- "LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/lib:/mnt/usr/lib:/usr/X11R6/lib:/mnt/usr/X11R6/lib",
+ "LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/lib:/mnt/usr/lib:/usr/X11R6/lib:/mnt/usr/X11R6/lib"
+#if defined(__x86_64__) || defined(__ppc64__)
+ ":/lib64:/usr/lib64:/usr/X11R6/lib64:/mnt/lib64:/mnt/usr/lib64:/mnt/usr/X11R6/lib64"
+#endif
+ ,
"HOME=/",
"TERM=linux",
"TERMINFO=/etc/terminfo",
@@ -348,7 +352,7 @@ int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))
printf("\033[8]");
}
else
- printf("*** TESTING MODE ***\n");
+ printf("*** TESTING MODE *** (pid is %d)\n", getpid());
printf("\n\t\t\t\033[1;40mWelcome to \033[1;36mMandrake\033[0;39m Linux\n\n");
@@ -403,8 +407,7 @@ int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))
2) we receive a SIGHUP
*/
- printf("If more people were to meet doing raklets, this planet\n");
- printf("would be a safer place.\n");
+ printf("Moltes ! MOLTES !\n");
printf("\n");
printf("Running install...\n");
diff --git a/mdk-stage1/insmod-busybox/Config.h b/mdk-stage1/insmod-busybox/Config.h
index 8388416b7..f02ac0253 100644
--- a/mdk-stage1/insmod-busybox/Config.h
+++ b/mdk-stage1/insmod-busybox/Config.h
@@ -49,10 +49,11 @@
//#define BB_FEATURE_FBSET_READMODE
//
// You must enable one or both of these features
-// Support installing modules from pre 2.1 kernels
-//#define BB_FEATURE_INSMOD_OLD_KERNEL
-// Support installing modules from kernel versions after 2.1.18
-#define BB_FEATURE_INSMOD_NEW_KERNEL
+// Support insmod/lsmod/rmmod for post 2.1 kernels
+#define BB_FEATURE_NEW_MODULE_INTERFACE
+//
+// Support insmod/lsmod/rmmod for pre 2.1 kernels
+//#define BB_FEATURE_OLD_MODULE_INTERFACE
//
// Support module version checking
//#define BB_FEATURE_INSMOD_VERSION_CHECKING
@@ -126,7 +127,7 @@
#endif
//
#if defined BB_INSMOD
-#ifndef BB_FEATURE_INSMOD_OLD_KERNEL
-#define BB_FEATURE_INSMOD_NEW_KERNEL
+#if ! defined BB_FEATURE_NEW_MODULE_INTERFACE && ! defined BB_FEATURE_OLD_MODULE_INTERFACE
+#define BB_FEATURE_NEW_MODULE_INTERFACE
#endif
#endif
diff --git a/mdk-stage1/insmod-busybox/Makefile b/mdk-stage1/insmod-busybox/Makefile
index c8649ae0d..236874f96 100644
--- a/mdk-stage1/insmod-busybox/Makefile
+++ b/mdk-stage1/insmod-busybox/Makefile
@@ -13,53 +13,31 @@ top_dir = ..
include $(top_dir)/Makefile.common
-all: insmod insmod-DIET libinsmod.a libinsmod-DIET.a
+all: insmod libinsmod.a
clean:
- rm -f *.o insmod insmod-DIET libinsmod.a libinsmod-DIET.a
+ rm -f *.o insmod libinsmod.a
-FLAGS = -c -Wall -Os -fomit-frame-pointer -D_GNU_SOURCE -DBB_VER='"0.47"' -DBB_BT='"2000.12.06-14:02+0000"'
+FLAGS = -c -Wall -Os -fomit-frame-pointer -D_GNU_SOURCE -DBB_VER='"0.60.5"' -DBB_BT='"2003.04.16-15:25+0000"'
insmod: insmod-frontend.o insmod.o utility-standalone.o
- gcc -o $@ $^
+ $(DIET) gcc -o $@ $^
$(STRIPCMD) $@
-insmod-DIET: insmod-frontend-DIET.o insmod-DIET.o utility-standalone-DIET.o
- gcc $(DIETLIBC_LDFLAGS_STAGE1) -o $@ $^ $(DIETLIBC_LIBC)
- $(STRIPCMD) $@
-
-
libinsmod.a: insmod.o utility.o
ar cru $@ $^
ranlib $@
-libinsmod-DIET.a: insmod-DIET.o utility-DIET.o
- ar cru $@ $^
- ranlib $@
-
insmod-frontend.o: insmod-frontend.c busybox.h
- gcc $(FLAGS) $(GLIBC_INCLUDES) insmod-frontend.c
-
-insmod-frontend-DIET.o: insmod-frontend.c busybox.h
- gcc $(FLAGS) $(DIETLIBC_INCLUDES) -o $@ insmod-frontend.c
+ $(DIET) gcc $(FLAGS) $(INCLUDES) insmod-frontend.c
utility.o: utility.c busybox.h
- gcc $(FLAGS) $(GLIBC_INCLUDES) utility.c
-
-utility-DIET.o: utility.c busybox.h
- gcc $(FLAGS) $(DIETLIBC_INCLUDES) -o $@ utility.c
+ $(DIET) gcc $(FLAGS) $(INCLUDES) utility.c
utility-standalone.o: utility.c busybox.h
- gcc $(FLAGS) $(GLIBC_INCLUDES) -o $@ -D_STANDALONE_ utility.c
-
-utility-standalone-DIET.o: utility.c busybox.h
- gcc $(FLAGS) $(DIETLIBC_INCLUDES) -o $@ -D_STANDALONE_ utility.c
+ $(DIET) gcc $(FLAGS) $(INCLUDES) -o $@ -D_STANDALONE_ utility.c
insmod.o: insmod.c busybox.h
- gcc $(FLAGS) $(GLIBC_INCLUDES) insmod.c
-
-insmod-DIET.o: insmod.c busybox.h
- gcc $(FLAGS) $(DIETLIBC_INCLUDES) -o $@ insmod.c
-
+ $(DIET) gcc $(FLAGS) $(INCLUDES) insmod.c
diff --git a/mdk-stage1/insmod-busybox/README b/mdk-stage1/insmod-busybox/README
index 06695074a..0ae697e92 100644
--- a/mdk-stage1/insmod-busybox/README
+++ b/mdk-stage1/insmod-busybox/README
@@ -1,8 +1,8 @@
-This insmod code comes from busybox-0.47
+This insmod code comes from busybox-0.60.5
-ftp://ftp.lineo.com/pub/busybox
+<http://www.busybox.net/>
-It is cool but works only for ix86 architecture.
+Suported architectures: x86, x86-64, ppc, arm, sh3, sh4, m68k, mips.
-gc
+gb
diff --git a/mdk-stage1/insmod-busybox/busybox.h b/mdk-stage1/insmod-busybox/busybox.h
index a2d620c8b..9e6052fce 100644
--- a/mdk-stage1/insmod-busybox/busybox.h
+++ b/mdk-stage1/insmod-busybox/busybox.h
@@ -464,4 +464,14 @@ extern int sysinfo (struct sysinfo* info);
#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
#endif
+/* Merge from busybox 0.60.5 */
+#define error_msg errorMsg
+#define perror_msg(FORMAT,...) error_msg(FORMAT ": %s", ## __VA_ARGS__, strerror(errno))
+#define recursive_action recursiveAction
+
+#define safe_strncpy(DST, SRC, SIZE) do { \
+ (DST)[SIZE-1] = '\0'; \
+ return strncpy((DST), (SRC),(SIZE)-1); \
+} while (0)
+
#endif /* _BB_INTERNAL_H_ */
diff --git a/mdk-stage1/insmod-busybox/insmod.c b/mdk-stage1/insmod-busybox/insmod.c
index bdf7ba5f7..e6e5b8f5f 100644
--- a/mdk-stage1/insmod-busybox/insmod.c
+++ b/mdk-stage1/insmod-busybox/insmod.c
@@ -2,16 +2,40 @@
/*
* Mini insmod implementation for busybox
*
- * Copyright (C) 1999,2000 by Lineo, inc.
- * Written by Erik Andersen <andersen@lineo.com>
- * and Ron Alder <alder@lineo.com>
+ * This version of insmod supports x86, ARM, SH3/4, powerpc, m68k,
+ * MIPS, and x86-64.
+ *
+ *
+ * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen
+ * Copyright (C) 1999-2002 Erik Andersen <andersee@debian.org>
+ * Written by Erik Andersen and Ron Alder <alder@lineo.com>
*
* Modified by Bryan Rittmeyer <bryan@ixiacom.com> to support SH4
- * and (theoretically) SH3. Note that there is still no true
- * multiple architecture support. You just get SH3|SH4|i386, despite
- * the mention of ARM and m68k--which may or may not work (but
- * almost certainly do not, due to at least MATCH_MACHINE). I have
- * only tested SH4 in little endian mode.
+ * and (theoretically) SH3. I have only tested SH4 in little endian mode.
+ *
+ * Modified by Alcove, Julien Gaulmin <julien.gaulmin@alcove.fr> and
+ * Nicolas Ferre <nicolas.ferre@alcove.fr> to support ARM7TDMI. Only
+ * very minor changes required to also work with StrongArm and presumably
+ * all ARM based systems.
+ *
+ * Magnus Damm <damm@opensource.se> 22-May-2002.
+ * The plt and got code are now using the same structs.
+ * Added generic linked list code to fully support PowerPC.
+ * Replaced the mess in arch_apply_relocation() with architecture blocks.
+ * The arch_create_got() function got cleaned up with architecture blocks.
+ * These blocks should be easy maintain and sync with obj_xxx.c in modutils.
+ *
+ * Magnus Damm <damm@opensource.se> added PowerPC support 20-Feb-2001.
+ * PowerPC specific code stolen from modutils-2.3.16,
+ * written by Paul Mackerras, Copyright 1996, 1997 Linux International.
+ * I've only tested the code on mpc8xx platforms in big-endian mode.
+ * Did some cleanup and added BB_USE_xxx_ENTRIES...
+ *
+ * Quinn Jensen <jensenq@lineo.com> added MIPS support 23-Feb-2001.
+ * based on modutils-2.4.2
+ * MIPS specific support for Elf loading and relocation.
+ * Copyright 1996, 1997 Linux International.
+ * Contributed by Ralf Baechle <ralf@gnu.ai.mit.edu>
*
* Based almost entirely on the Linux modutils-2.3.11 implementation.
* Copyright 1996, 1997 Linux International.
@@ -37,7 +61,6 @@
*/
#include "../insmod.h"
-#include "busybox.h"
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
@@ -46,7 +69,173 @@
#include <dirent.h>
#include <ctype.h>
#include <assert.h>
+#include <string.h>
+#include <fcntl.h>
#include <sys/utsname.h>
+#include "busybox.h"
+
+#ifdef BB_FEATURE_NEW_MODULE_INTERFACE
+# undef BB_FEATURE_OLD_MODULE_INTERFACE
+# define new_sys_init_module init_module
+#else
+# define old_sys_init_module init_module
+#endif
+
+/* FIXME: Remove once we switched to dietlibc 0.22 */
+#if 0
+
+#undef new_sys_init_module
+#define __NR_new_sys_init_module __NR_init_module
+struct new_module;
+_syscall2(int, new_sys_init_module, const char *, name,
+ const struct new_module *, info)
+
+#undef old_sys_init_module
+#define __NR_old_sys_init_module __NR_init_module
+struct old_mod_routines;
+struct old_symbol_table;
+_syscall5(int, old_sys_init_module, const char *, name, char *, code,
+ unsigned, codesize, struct old_mod_routines *, routines,
+ struct old_symbol_table *, symtab)
+
+_syscall1(int, delete_module, const char *, name)
+
+#if defined(__i386__) || defined(__m68k__) || defined(__arm__)
+/* Jump through hoops to fixup error return codes */
+#define __NR__create_module __NR_create_module
+static inline _syscall2(long, _create_module, const char *, name, size_t,
+ size)
+unsigned long create_module(const char *name, size_t size)
+{
+ long ret = _create_module(name, size);
+
+ if (ret == -1 && errno > 125) {
+ ret = -errno;
+ errno = 0;
+ }
+ return ret;
+}
+#else
+_syscall2(unsigned long, create_module, const char *, name, size_t, size)
+#endif
+
+#endif
+
+#ifdef BB_FEATURE_INSMOD_LOADINKMEM
+#define LOADBITS 0
+#else
+#define LOADBITS 1
+#endif
+
+#if defined(__arm__)
+#define BB_USE_PLT_ENTRIES
+#define BB_PLT_ENTRY_SIZE 8
+#define BB_USE_GOT_ENTRIES
+#define BB_GOT_ENTRY_SIZE 8
+#define BB_USE_SINGLE
+
+#define MATCH_MACHINE(x) (x == EM_ARM)
+#define SHT_RELM SHT_REL
+#define Elf32_RelM Elf32_Rel
+#define ELFCLASSM ELFCLASS32
+#endif
+
+#if defined(__i386__)
+#define BB_USE_GOT_ENTRIES
+#define BB_GOT_ENTRY_SIZE 4
+#define BB_USE_SINGLE
+
+#ifndef EM_486
+#define MATCH_MACHINE(x) (x == EM_386)
+#else
+#define MATCH_MACHINE(x) (x == EM_386 || x == EM_486)
+#endif
+
+#define SHT_RELM SHT_REL
+#define Elf32_RelM Elf32_Rel
+#define ELFCLASSM ELFCLASS32
+#endif
+
+#if defined(__x86_64__)
+#define BB_USE_GOT_ENTRIES
+#define BB_GOT_ENTRY_SIZE 8
+#define BB_USE_SINGLE
+
+#define MATCH_MACHINE(x) (x == EM_X86_64)
+
+#define SHT_RELM SHT_RELA
+#define Elf64_RelM Elf64_Rela
+#define ELFCLASSM ELFCLASS64
+#endif
+
+#if defined(__mc68000__)
+#define BB_USE_GOT_ENTRIES
+#define BB_GOT_ENTRY_SIZE 4
+#define BB_USE_SINGLE
+
+#define MATCH_MACHINE(x) (x == EM_68K)
+#define SHT_RELM SHT_RELA
+#define Elf32_RelM Elf32_Rela
+#endif
+
+#if defined(__mips__)
+/* Account for ELF spec changes. */
+#ifndef EM_MIPS_RS3_LE
+#ifdef EM_MIPS_RS4_BE
+#define EM_MIPS_RS3_LE EM_MIPS_RS4_BE
+#else
+#define EM_MIPS_RS3_LE 10
+#endif
+#endif /* !EM_MIPS_RS3_LE */
+
+#define MATCH_MACHINE(x) (x == EM_MIPS || x == EM_MIPS_RS3_LE)
+#define SHT_RELM SHT_REL
+#define Elf32_RelM Elf32_Rel
+#define ELFCLASSM ELFCLASS32
+#define ARCHDATAM "__dbe_table"
+#endif
+
+#if defined(__powerpc__)
+#define BB_USE_PLT_ENTRIES
+#define BB_PLT_ENTRY_SIZE 16
+#define BB_USE_PLT_LIST
+#define BB_LIST_ARCHTYPE ElfW(Addr)
+#define BB_USE_LIST
+
+#define MATCH_MACHINE(x) (x == EM_PPC)
+#define SHT_RELM SHT_RELA
+#define Elf32_RelM Elf32_Rela
+#define ELFCLASSM ELFCLASS32
+#define ARCHDATAM "__ftr_fixup"
+#endif
+
+#if defined(__sh__)
+#define BB_USE_GOT_ENTRIES
+#define BB_GOT_ENTRY_SIZE 4
+#define BB_USE_SINGLE
+
+#define MATCH_MACHINE(x) (x == EM_SH)
+#define SHT_RELM SHT_RELA
+#define Elf32_RelM Elf32_Rela
+#define ELFCLASSM ELFCLASS32
+
+/* the SH changes have only been tested on the SH4 in =little endian= mode */
+/* I'm not sure about big endian, so let's warn: */
+
+#if (defined(__SH4__) || defined(__SH3__)) && defined(__BIG_ENDIAN__)
+#error insmod.c may require changes for use on big endian SH4/SH3
+#endif
+
+/* it may or may not work on the SH1/SH2... So let's error on those
+ also */
+#if (defined(__sh__) && (!(defined(__SH3__) || defined(__SH4__))))
+#error insmod.c may require changes for non-SH3/SH4 use
+#endif
+#endif
+
+#ifndef SHT_RELM
+#error Sorry, but insmod.c does not yet support this architecture...
+#endif
//----------------------------------------------------------------------------
//--------modutils module.h, lines 45-242
@@ -75,9 +264,7 @@
#ifndef MODUTILS_MODULE_H
-#define MODUTILS_MODULE_H 1
-
-#ident "$Id$"
+#define MODUTILS_MODULE_H
/* This file contains the structures used by the 2.0 and 2.1 kernels.
We do not use the kernel headers directly because we do not wish
@@ -134,7 +321,7 @@ struct old_module
};
/* Sent to init_module(2) or'ed into the code size parameter. */
-#define OLD_MOD_AUTOCLEAN 0x40000000 /* big enough, but no sign problems... */
+static const int OLD_MOD_AUTOCLEAN = 0x40000000; /* big enough, but no sign problems... */
int get_kernel_syms(struct old_kernel_sym *);
int old_sys_init_module(const char *name, char *code, unsigned codesize,
@@ -157,9 +344,9 @@ int old_sys_init_module(const char *name, char *code, unsigned codesize,
#undef tgt_sizeof_char_p
#undef tgt_sizeof_void_p
#undef tgt_long
-#define tgt_sizeof_long 8
-#define tgt_sizeof_char_p 8
-#define tgt_sizeof_void_p 8
+static const int tgt_sizeof_long = 8;
+static const int tgt_sizeof_char_p = 8;
+static const int tgt_sizeof_void_p = 8;
#define tgt_long long long
#endif
@@ -210,8 +397,23 @@ struct new_module
unsigned tgt_long persist_end;
unsigned tgt_long can_unload;
unsigned tgt_long runsize;
+#ifdef BB_FEATURE_NEW_MODULE_INTERFACE
+ const char *kallsyms_start; /* All symbols for kernel debugging */
+ const char *kallsyms_end;
+ const char *archdata_start; /* arch specific data for module */
+ const char *archdata_end;
+ const char *kernel_data; /* Reserved for kernel internal use */
+#endif
};
+#ifdef ARCHDATAM
+#define ARCHDATA_SEC_NAME ARCHDATAM
+#else
+#define ARCHDATA_SEC_NAME "__archdata"
+#endif
+#define KALLSYMS_SEC_NAME "__kallsyms"
+
+
struct new_module_info
{
unsigned long addr;
@@ -221,11 +423,11 @@ struct new_module_info
};
/* Bits of module.flags. */
-#define NEW_MOD_RUNNING 1
-#define NEW_MOD_DELETED 2
-#define NEW_MOD_AUTOCLEAN 4
-#define NEW_MOD_VISITED 8
-#define NEW_MOD_USED_ONCE 16
+static const int NEW_MOD_RUNNING = 1;
+static const int NEW_MOD_DELETED = 2;
+static const int NEW_MOD_AUTOCLEAN = 4;
+static const int NEW_MOD_VISITED = 8;
+static const int NEW_MOD_USED_ONCE = 16;
int new_sys_init_module(const char *name, const struct new_module *);
int query_module(const char *name, int which, void *buf, size_t bufsize,
@@ -233,11 +435,11 @@ int query_module(const char *name, int which, void *buf, size_t bufsize,
/* Values for query_module's which. */
-#define QM_MODULES 1
-#define QM_DEPS 2
-#define QM_REFS 3
-#define QM_SYMBOLS 4
-#define QM_INFO 5
+static const int QM_MODULES = 1;
+static const int QM_DEPS = 2;
+static const int QM_REFS = 3;
+static const int QM_SYMBOLS = 4;
+static const int QM_INFO = 5;
/*======================================================================*/
/* The system calls unchanged between 2.0 and 2.1. */
@@ -281,52 +483,18 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H
-#define MODUTILS_OBJ_H 1
-
-#ident "$Id$"
+static const int MODUTILS_OBJ_H = 1;
/* The relocatable object is manipulated using elfin types. */
#include <stdio.h>
#include <elf.h>
+#include <endian.h>
-
-/* Machine-specific elf macros for i386 et al. */
-
-/* the SH changes have only been tested on the SH4 in =little endian= mode */
-/* I'm not sure about big endian, so let's warn: */
-
-#if (defined(__SH4__) || defined(__SH3__)) && defined(__BIG_ENDIAN__)
-#error insmod.c may require changes for use on big endian SH4/SH3
-#endif
-
-/* it may or may not work on the SH1/SH2... So let's error on those
- also */
-#if (defined(__sh__) && (!(defined(__SH3__) || defined(__SH4__))))
-#error insmod.c may require changes for non-SH3/SH4 use
-#endif
-
-#define ELFCLASSM ELFCLASS32
-#define ELFDATAM ELFDATA2LSB
-
-
-
-#if defined(__sh__)
-
-#define MATCH_MACHINE(x) (x == EM_SH)
-#define SHT_RELM SHT_RELA
-#define Elf32_RelM Elf32_Rela
-
-#else
-
-/* presumably we can use these for anything but the SH */
-/* this is the previous behavior, but it does result in
- insmod.c being broken on anything except i386 */
-
-#define MATCH_MACHINE(x) (x == EM_386)
-#define SHT_RELM SHT_REL
-#define Elf32_RelM Elf32_Rel
-
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define ELFDATAM ELFDATA2LSB
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define ELFDATAM ELFDATA2MSB
#endif
#ifndef ElfW
@@ -421,78 +589,79 @@ struct obj_symbol_patch
/* Generic object manipulation routines. */
-unsigned long obj_elf_hash(const char *);
+static unsigned long obj_elf_hash(const char *);
-unsigned long obj_elf_hash_n(const char *, unsigned long len);
+static unsigned long obj_elf_hash_n(const char *, unsigned long len);
-struct obj_symbol *obj_add_symbol (struct obj_file *f, const char *name,
- unsigned long symidx, int info, int secidx,
- ElfW(Addr) value, unsigned long size);
-
-struct obj_symbol *obj_find_symbol (struct obj_file *f,
+static struct obj_symbol *obj_find_symbol (struct obj_file *f,
const char *name);
-ElfW(Addr) obj_symbol_final_value(struct obj_file *f,
+static ElfW(Addr) obj_symbol_final_value(struct obj_file *f,
struct obj_symbol *sym);
-void obj_set_symbol_compare(struct obj_file *f,
+#ifdef BB_FEATURE_INSMOD_VERSION_CHECKING
+static void obj_set_symbol_compare(struct obj_file *f,
int (*cmp)(const char *, const char *),
unsigned long (*hash)(const char *));
+#endif
-struct obj_section *obj_find_section (struct obj_file *f,
+static struct obj_section *obj_find_section (struct obj_file *f,
const char *name);
-void obj_insert_section_load_order (struct obj_file *f,
+static void obj_insert_section_load_order (struct obj_file *f,
struct obj_section *sec);
-struct obj_section *obj_create_alloced_section (struct obj_file *f,
+static struct obj_section *obj_create_alloced_section (struct obj_file *f,
const char *name,
unsigned long align,
unsigned long size);
-struct obj_section *obj_create_alloced_section_first (struct obj_file *f,
+static struct obj_section *obj_create_alloced_section_first (struct obj_file *f,
const char *name,
unsigned long align,
unsigned long size);
-void *obj_extend_section (struct obj_section *sec, unsigned long more);
+static void *obj_extend_section (struct obj_section *sec, unsigned long more);
-int obj_string_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
+static int obj_string_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
const char *string);
-int obj_symbol_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
+#ifdef BB_FEATURE_NEW_MODULE_INTERFACE
+static int obj_symbol_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
struct obj_symbol *sym);
+#endif
-int obj_check_undefineds(struct obj_file *f);
+static int obj_check_undefineds(struct obj_file *f);
-void obj_allocate_commons(struct obj_file *f);
+static void obj_allocate_commons(struct obj_file *f);
-unsigned long obj_load_size (struct obj_file *f);
+static unsigned long obj_load_size (struct obj_file *f);
-int obj_relocate (struct obj_file *f, ElfW(Addr) base);
+static int obj_relocate (struct obj_file *f, ElfW(Addr) base);
-struct obj_file *obj_load(FILE *f);
+static struct obj_file *obj_load(FILE *f, int loadprogbits);
-int obj_create_image (struct obj_file *f, char *image);
+static int obj_create_image (struct obj_file *f, char *image);
/* Architecture specific manipulation routines. */
-struct obj_file *arch_new_file (void);
+static struct obj_file *arch_new_file (void);
-struct obj_section *arch_new_section (void);
+static struct obj_section *arch_new_section (void);
-struct obj_symbol *arch_new_symbol (void);
+static struct obj_symbol *arch_new_symbol (void);
-enum obj_reloc arch_apply_relocation (struct obj_file *f,
+static enum obj_reloc arch_apply_relocation (struct obj_file *f,
struct obj_section *targsec,
struct obj_section *symsec,
struct obj_symbol *sym,
ElfW(RelM) *rel, ElfW(Addr) value);
-int arch_create_got (struct obj_file *f);
+static void arch_create_got (struct obj_file *f);
-struct new_module;
-int arch_init_module (struct obj_file *f, struct new_module *);
+#ifdef BB_FEATURE_NEW_MODULE_INTERFACE
+static int arch_init_module (struct obj_file *f, struct new_module *);
+#endif
#endif /* obj.h */
//----------------------------------------------------------------------------
@@ -504,41 +673,75 @@ int arch_init_module (struct obj_file *f, struct new_module *);
#define _PATH_MODULES "/lib/modules"
-#define STRVERSIONLEN 32
-
-#if !defined(BB_FEATURE_INSMOD_NEW_KERNEL) && !defined(BB_FEATURE_INSMOD_OLD_KERNEL)
-#error "Must have ether BB_FEATURE_INSMOD_NEW_KERNEL or BB_FEATURE_INSMOD_OLD_KERNEL defined"
-#endif
+static const int STRVERSIONLEN = 32;
/*======================================================================*/
-int flag_force_load = 1;
-int flag_autoclean = 0;
-int flag_export = 1;
+static const int flag_force_load = 1;
+static const int flag_autoclean = 0;
+static const int flag_quiet = 0;
+static const int flag_export = 1;
/*======================================================================*/
-/* previously, these were named i386_* but since we could be
- compiling for the sh, I've renamed them to the more general
- arch_* These structures are the same between the x86 and SH,
- and we can't support anything else right now anyway. In the
- future maybe they should be #if defined'd */
+#if defined(BB_USE_LIST)
-struct arch_got_entry {
+struct arch_list_entry
+{
+ struct arch_list_entry *next;
+ BB_LIST_ARCHTYPE addend;
int offset;
- unsigned offset_done:1;
- unsigned reloc_done:1;
+ int inited : 1;
};
+#endif
+
+#if defined(BB_USE_SINGLE)
+
+struct arch_single_entry
+{
+ int offset;
+ int inited : 1;
+ int allocated : 1;
+};
+
+#endif
+
+#if defined(__mips__)
+struct mips_hi16
+{
+ struct mips_hi16 *next;
+ Elf32_Addr *addr;
+ Elf32_Addr value;
+};
+#endif
+
struct arch_file {
struct obj_file root;
+#if defined(BB_USE_PLT_ENTRIES)
+ struct obj_section *plt;
+#endif
+#if defined(BB_USE_GOT_ENTRIES)
struct obj_section *got;
+#endif
+#if defined(__mips__)
+ struct mips_hi16 *mips_hi16_list;
+#endif
};
struct arch_symbol {
struct obj_symbol root;
- struct arch_got_entry gotent;
+#if defined(BB_USE_PLT_ENTRIES)
+#if defined(BB_USE_PLT_LIST)
+ struct arch_list_entry *pltent;
+#else
+ struct arch_single_entry pltent;
+#endif
+#endif
+#if defined(BB_USE_GOT_ENTRIES)
+ struct arch_single_entry gotent;
+#endif
};
@@ -550,308 +753,736 @@ struct external_module {
struct new_module_symbol *syms;
};
-struct new_module_symbol *ksyms;
-size_t nksyms;
-
-struct external_module *ext_modules;
-int n_ext_modules;
-int n_ext_modules_used;
-
-
+static struct new_module_symbol *ksyms;
+static size_t nksyms;
-/* Some firendly syscalls to cheer everyone's day... */
-#define __NR_new_sys_init_module __NR_init_module
-_syscall2(int, new_sys_init_module, const char *, name,
- const struct new_module *, info)
-#define __NR_old_sys_init_module __NR_init_module
-_syscall5(int, old_sys_init_module, const char *, name, char *, code,
- unsigned, codesize, struct old_mod_routines *, routines,
- struct old_symbol_table *, symtab)
-#ifndef BB_RMMOD
-_syscall1(int, delete_module, const char *, name)
-#else
+static struct external_module *ext_modules;
+static int n_ext_modules;
+static int n_ext_modules_used;
extern int delete_module(const char *);
-#endif
-
-/* This is kind of troublesome. See, we don't actually support
- the m68k or the arm the same way we support i386 and (now)
- sh. In doing my SH patch, I just assumed that whatever works
- for i386 also works for m68k and arm since currently insmod.c
- does nothing special for them. If this isn't true, the below
- line is rather misleading IMHO, and someone should either
- change it or add more proper architecture-dependent support
- for these boys.
-
- -- Bryan Rittmeyer <bryan@ixiacom.com> */
-
-#if defined(__i386__) || defined(__m68k__) || defined(__arm__)
-/* Jump through hoops to fixup error return codes */
-#define __NR__create_module __NR_create_module
-static inline _syscall2(long, _create_module, const char *, name, size_t,
- size)
-unsigned long create_module(const char *name, size_t size)
-{
- long ret = _create_module(name, size);
- if (ret == -1 && errno > 125) {
- ret = -errno;
- errno = 0;
- }
- return ret;
-}
-#else
-_syscall2(unsigned long, create_module, const char *, name, size_t, size)
+#ifndef FILENAME_MAX
+#define FILENAME_MAX 4095
#endif
-static char m_filename[BUFSIZ + 1] = "\0";
-static char m_fullName[BUFSIZ + 1] = "\0";
-/*======================================================================*/
+static char m_filename[FILENAME_MAX];
+static char m_fullName[FILENAME_MAX];
+
/*======================================================================*/
-struct obj_file *arch_new_file(void)
+static struct obj_file *arch_new_file(void)
{
struct arch_file *f;
f = xmalloc(sizeof(*f));
- f->got = NULL;
+
+ memset(f, 0, sizeof(*f));
+
return &f->root;
}
-struct obj_section *arch_new_section(void)
+static struct obj_section *arch_new_section(void)
{
return xmalloc(sizeof(struct obj_section));
}
-struct obj_symbol *arch_new_symbol(void)
+static struct obj_symbol *arch_new_symbol(void)
{
struct arch_symbol *sym;
sym = xmalloc(sizeof(*sym));
- memset(&sym->gotent, 0, sizeof(sym->gotent));
+
+ memset(sym, 0, sizeof(*sym));
+
return &sym->root;
}
-enum obj_reloc
+static enum obj_reloc
arch_apply_relocation(struct obj_file *f,
struct obj_section *targsec,
struct obj_section *symsec,
struct obj_symbol *sym,
-#if defined(__sh__)
- Elf32_Rela * rel, Elf32_Addr v)
-#else
- Elf32_Rel * rel, Elf32_Addr v)
-#endif
+ ElfW(RelM) *rel, ElfW(Addr) v)
{
struct arch_file *ifile = (struct arch_file *) f;
+ enum obj_reloc ret = obj_reloc_ok;
+ ElfW(Addr) *loc = (ElfW(Addr) *) (targsec->contents + rel->r_offset);
+ ElfW(Addr) dot = targsec->header.sh_addr + rel->r_offset;
+#if defined(BB_USE_GOT_ENTRIES) || defined(BB_USE_PLT_ENTRIES)
struct arch_symbol *isym = (struct arch_symbol *) sym;
+#endif
+#if defined(BB_USE_GOT_ENTRIES)
+ ElfW(Addr) got = ifile->got ? ifile->got->header.sh_addr : 0;
+#endif
+#if defined(BB_USE_PLT_ENTRIES)
+ ElfW(Addr) plt = ifile->plt ? ifile->plt->header.sh_addr : 0;
+ unsigned long *ip;
+#if defined(BB_USE_PLT_LIST)
+ struct arch_list_entry *pe;
+#else
+ struct arch_single_entry *pe;
+#endif
+#endif
- Elf32_Addr *loc = (Elf32_Addr *) (targsec->contents + rel->r_offset);
- Elf32_Addr dot = targsec->header.sh_addr + rel->r_offset;
- Elf32_Addr got = ifile->got ? ifile->got->header.sh_addr : 0;
+ switch (ELF32_R_TYPE(rel->r_info)) {
- enum obj_reloc ret = obj_reloc_ok;
+#if defined(__arm__)
+ case R_ARM_NONE:
+ break;
- switch (ELF32_R_TYPE(rel->r_info)) {
+ case R_ARM_ABS32:
+ *loc += v;
+ break;
+
+ case R_ARM_GOT32:
+ goto bb_use_got;
+
+ case R_ARM_GOTPC:
+ /* relative reloc, always to _GLOBAL_OFFSET_TABLE_
+ * (which is .got) similar to branch,
+ * but is full 32 bits relative */
+
+ assert(got);
+ *loc += got - dot;
+ break;
+
+ case R_ARM_PC24:
+ case R_ARM_PLT32:
+ goto bb_use_plt;
+
+ case R_ARM_GOTOFF: /* address relative to the got */
+ assert(got);
+ *loc += v - got;
+ break;
+
+#elif defined(__i386__)
-/* even though these constants seem to be the same for
- the i386 and the sh, we "#if define" them for clarity
- and in case that ever changes */
-#if defined(__sh__)
- case R_SH_NONE:
-#else
case R_386_NONE:
-#endif
break;
-#if defined(__sh__)
- case R_SH_DIR32:
-#else
case R_386_32:
-#endif
*loc += v;
break;
-#if defined(__sh__)
- case R_SH_REL32:
-#else
case R_386_PLT32:
case R_386_PC32:
-#endif
*loc += v - dot;
break;
-#if defined(__sh__)
- case R_SH_PLT32:
- *loc = v - dot;
- break;
-#endif
-
-
-#if defined(__sh__)
- case R_SH_GLOB_DAT:
- case R_SH_JMP_SLOT:
- *loc = v;
- break;
-#else
case R_386_GLOB_DAT:
case R_386_JMP_SLOT:
*loc = v;
break;
-#endif
-#if defined(__sh__)
- case R_SH_RELATIVE:
- *loc += f->baseaddr + rel->r_addend;
- break;
-#else
- case R_386_RELATIVE:
+ case R_386_RELATIVE:
*loc += f->baseaddr;
break;
-#endif
-#if defined(__sh__)
- case R_SH_GOTPC:
- assert(got != 0);
- *loc += got - dot + rel->r_addend;;
- break;
-#else
case R_386_GOTPC:
assert(got != 0);
*loc += got - dot;
break;
-#endif
-#if defined(__sh__)
- case R_SH_GOT32:
- assert(isym != NULL);
- if (!isym->gotent.reloc_done) {
- isym->gotent.reloc_done = 1;
- *(Elf32_Addr *) (ifile->got->contents + isym->gotent.offset) =
- v;
- }
- *loc += isym->gotent.offset + rel->r_addend;
- break;
-#else
case R_386_GOT32:
- assert(isym != NULL);
- if (!isym->gotent.reloc_done) {
- isym->gotent.reloc_done = 1;
- *(Elf32_Addr *) (ifile->got->contents + isym->gotent.offset) =
- v;
+ goto bb_use_got;
+
+ case R_386_GOTOFF:
+ assert(got != 0);
+ *loc += v - got;
+ break;
+
+#elif defined(__x86_64__)
+
+ case R_X86_64_NONE:
+ break;
+
+ case R_X86_64_64:
+ *loc += v;
+ break;
+
+ case R_X86_64_32:
+ *(unsigned int *) loc += v;
+ break;
+
+ case R_X86_64_32S:
+ *(signed int *) loc += v;
+ break;
+
+ case R_X86_64_16:
+ *(unsigned short *) loc += v;
+ break;
+
+ case R_X86_64_8:
+ *(unsigned char *) loc += v;
+ break;
+
+ case R_X86_64_PC32:
+ *(unsigned int *) loc += v - dot;
+ break;
+
+ case R_X86_64_PC16:
+ *(unsigned short *) loc += v - dot;
+ break;
+
+ case R_X86_64_PC8:
+ *(unsigned char *) loc += v - dot;
+ break;
+
+ case R_X86_64_GLOB_DAT:
+ case R_X86_64_JUMP_SLOT:
+ *loc = v;
+ break;
+
+ case R_X86_64_RELATIVE:
+ *loc += f->baseaddr;
+ break;
+
+ case R_X86_64_GOT32:
+ case R_X86_64_GOTPCREL:
+ goto bb_use_got;
+
+#elif defined(__mc68000__)
+
+ case R_68K_NONE:
+ break;
+
+ case R_68K_32:
+ *loc += v;
+ break;
+
+ case R_68K_8:
+ if (v > 0xff) {
+ ret = obj_reloc_overflow;
}
- *loc += isym->gotent.offset;
+ *(char *)loc = v;
break;
-#endif
-#if defined(__sh__)
- case R_SH_GOTOFF:
-#else
- case R_386_GOTOFF:
-#endif
+ case R_68K_16:
+ if (v > 0xffff) {
+ ret = obj_reloc_overflow;
+ }
+ *(short *)loc = v;
+ break;
+
+ case R_68K_PC8:
+ v -= dot;
+ if ((Elf32_Sword)v > 0x7f ||
+ (Elf32_Sword)v < -(Elf32_Sword)0x80) {
+ ret = obj_reloc_overflow;
+ }
+ *(char *)loc = v;
+ break;
+
+ case R_68K_PC16:
+ v -= dot;
+ if ((Elf32_Sword)v > 0x7fff ||
+ (Elf32_Sword)v < -(Elf32_Sword)0x8000) {
+ ret = obj_reloc_overflow;
+ }
+ *(short *)loc = v;
+ break;
+
+ case R_68K_PC32:
+ *(int *)loc = v - dot;
+ break;
+
+ case R_68K_GLOB_DAT:
+ case R_68K_JMP_SLOT:
+ *loc = v;
+ break;
+
+ case R_68K_RELATIVE:
+ *(int *)loc += f->baseaddr;
+ break;
+
+ case R_68K_GOT32:
+ goto bb_use_got;
+
+ case R_68K_GOTOFF:
assert(got != 0);
*loc += v - got;
break;
+#elif defined(__mips__)
+
+ case R_MIPS_NONE:
+ break;
+
+ case R_MIPS_32:
+ *loc += v;
+ break;
+
+ case R_MIPS_26:
+ if (v % 4)
+ ret = obj_reloc_dangerous;
+ if ((v & 0xf0000000) != ((dot + 4) & 0xf0000000))
+ ret = obj_reloc_overflow;
+ *loc =
+ (*loc & ~0x03ffffff) | ((*loc + (v >> 2)) &
+ 0x03ffffff);
+ break;
+
+ case R_MIPS_HI16:
+ {
+ struct mips_hi16 *n;
+
+ /* We cannot relocate this one now because we don't know the value
+ of the carry we need to add. Save the information, and let LO16
+ do the actual relocation. */
+ n = (struct mips_hi16 *) xmalloc(sizeof *n);
+ n->addr = loc;
+ n->value = v;
+ n->next = ifile->mips_hi16_list;
+ ifile->mips_hi16_list = n;
+ break;
+ }
+
+ case R_MIPS_LO16:
+ {
+ unsigned long insnlo = *loc;
+ Elf32_Addr val, vallo;
+
+ /* Sign extend the addend we extract from the lo insn. */
+ vallo = ((insnlo & 0xffff) ^ 0x8000) - 0x8000;
+
+ if (ifile->mips_hi16_list != NULL) {
+ struct mips_hi16 *l;
+
+ l = ifile->mips_hi16_list;
+ while (l != NULL) {
+ struct mips_hi16 *next;
+ unsigned long insn;
+
+ /* The value for the HI16 had best be the same. */
+ assert(v == l->value);
+
+ /* Do the HI16 relocation. Note that we actually don't
+ need to know anything about the LO16 itself, except where
+ to find the low 16 bits of the addend needed by the LO16. */
+ insn = *l->addr;
+ val =
+ ((insn & 0xffff) << 16) +
+ vallo;
+ val += v;
+
+ /* Account for the sign extension that will happen in the
+ low bits. */
+ val =
+ ((val >> 16) +
+ ((val & 0x8000) !=
+ 0)) & 0xffff;
+
+ insn = (insn & ~0xffff) | val;
+ *l->addr = insn;
+
+ next = l->next;
+ free(l);
+ l = next;
+ }
+
+ ifile->mips_hi16_list = NULL;
+ }
+
+ /* Ok, we're done with the HI16 relocs. Now deal with the LO16. */
+ val = v + vallo;
+ insnlo = (insnlo & ~0xffff) | (val & 0xffff);
+ *loc = insnlo;
+ break;
+ }
+
+#elif defined(__powerpc__)
+
+ case R_PPC_ADDR16_HA:
+ *(unsigned short *)loc = (v + 0x8000) >> 16;
+ break;
+
+ case R_PPC_ADDR16_HI:
+ *(unsigned short *)loc = v >> 16;
+ break;
+
+ case R_PPC_ADDR16_LO:
+ *(unsigned short *)loc = v;
+ break;
+
+ case R_PPC_REL24:
+ goto bb_use_plt;
+
+ case R_PPC_REL32:
+ *loc = v - dot;
+ break;
+
+ case R_PPC_ADDR32:
+ *loc = v;
+ break;
+
+#elif defined(__sh__)
+
+ case R_SH_NONE:
+ break;
+
+ case R_SH_DIR32:
+ *loc += v;
+ break;
+
+ case R_SH_REL32:
+ *loc += v - dot;
+ break;
+
+ case R_SH_PLT32:
+ *loc = v - dot;
+ break;
+
+ case R_SH_GLOB_DAT:
+ case R_SH_JMP_SLOT:
+ *loc = v;
+ break;
+
+ case R_SH_RELATIVE:
+ *loc = f->baseaddr + rel->r_addend;
+ break;
+
+ case R_SH_GOTPC:
+ assert(got != 0);
+ *loc = got - dot + rel->r_addend;
+ break;
+
+ case R_SH_GOT32:
+ goto bb_use_got;
+
+ case R_SH_GOTOFF:
+ assert(got != 0);
+ *loc = v - got;
+ break;
+
+#endif
+
default:
+ printf("Warning: unhandled reloc %d\n",(int)ELF32_R_TYPE(rel->r_info));
ret = obj_reloc_unhandled;
break;
+
+#if defined(BB_USE_PLT_ENTRIES)
+
+ bb_use_plt:
+
+ /* find the plt entry and initialize it if necessary */
+ assert(isym != NULL);
+
+#if defined(BB_USE_PLT_LIST)
+ for (pe = isym->pltent; pe != NULL && pe->addend != rel->r_addend;)
+ pe = pe->next;
+ assert(pe != NULL);
+#else
+ pe = &isym->pltent;
+#endif
+
+ if (! pe->inited) {
+ ip = (unsigned long *) (ifile->plt->contents + pe->offset);
+
+ /* generate some machine code */
+
+#if defined(__arm__)
+ ip[0] = 0xe51ff004; /* ldr pc,[pc,#-4] */
+ ip[1] = v; /* sym@ */
+#endif
+#if defined(__powerpc__)
+ ip[0] = 0x3d600000 + ((v + 0x8000) >> 16); /* lis r11,sym@ha */
+ ip[1] = 0x396b0000 + (v & 0xffff); /* addi r11,r11,sym@l */
+ ip[2] = 0x7d6903a6; /* mtctr r11 */
+ ip[3] = 0x4e800420; /* bctr */
+#endif
+ pe->inited = 1;
+ }
+
+ /* relative distance to target */
+ v -= dot;
+ /* if the target is too far away.... */
+ if ((int)v < -0x02000000 || (int)v >= 0x02000000) {
+ /* go via the plt */
+ v = plt + pe->offset - dot;
+ }
+ if (v & 3)
+ ret = obj_reloc_dangerous;
+
+ /* merge the offset into the instruction. */
+#if defined(__arm__)
+ /* Convert to words. */
+ v >>= 2;
+
+ *loc = (*loc & ~0x00ffffff) | ((v + *loc) & 0x00ffffff);
+#endif
+#if defined(__powerpc__)
+ *loc = (*loc & ~0x03fffffc) | (v & 0x03fffffc);
+#endif
+ break;
+#endif /* BB_USE_PLT_ENTRIES */
+
+#if defined(BB_USE_GOT_ENTRIES)
+ bb_use_got:
+
+ assert(isym != NULL);
+ /* needs an entry in the .got: set it, once */
+ if (!isym->gotent.inited) {
+ isym->gotent.inited = 1;
+ *(ElfW(Addr) *) (ifile->got->contents + isym->gotent.offset) = v;
+ }
+ /* make the reloc with_respect_to_.got */
+#if defined(__sh__)
+ *loc += isym->gotent.offset + rel->r_addend;
+#elif defined(__i386__) || defined(__arm__) || defined(__mc68000__)
+ *loc += isym->gotent.offset;
+#elif defined(__x86_64__)
+ /* XXX are these really correct? */
+ if (ELF64_R_TYPE(rel->r_info) == R_X86_64_GOTPCREL)
+ *(unsigned int *) loc += v + isym->gotent.offset;
+ else
+ *loc += isym->gotent.offset;
+#endif
+ break;
+
+#endif /* BB_USE_GOT_ENTRIES */
}
return ret;
}
-int arch_create_got(struct obj_file *f)
+#if defined(BB_USE_LIST)
+
+static int arch_list_add(ElfW(RelM) *rel, struct arch_list_entry **list,
+ int offset, int size)
{
- struct arch_file *ifile = (struct arch_file *) f;
- int i, n, offset = 0, gotneeded = 0;
+ struct arch_list_entry *pe;
+
+ for (pe = *list; pe != NULL; pe = pe->next) {
+ if (pe->addend == rel->r_addend) {
+ break;
+ }
+ }
+
+ if (pe == NULL) {
+ pe = xmalloc(sizeof(struct arch_list_entry));
+ pe->next = *list;
+ pe->addend = rel->r_addend;
+ pe->offset = offset;
+ pe->inited = 0;
+ *list = pe;
+ return size;
+ }
+ return 0;
+}
- n = ifile->root.header.e_shnum;
- for (i = 0; i < n; ++i) {
- struct obj_section *relsec, *symsec, *strsec;
-#if defined(__sh__)
- Elf32_Rela *rel, *relend;
-#else
- Elf32_Rel *rel, *relend;
#endif
- Elf32_Sym *symtab;
- const char *strtab;
- relsec = ifile->root.sections[i];
- if (relsec->header.sh_type != SHT_REL)
- continue;
+#if defined(BB_USE_SINGLE)
+
+static int arch_single_init(ElfW(RelM) *rel, struct arch_single_entry *single,
+ int offset, int size)
+{
+ if (single->allocated == 0) {
+ single->allocated = 1;
+ single->offset = offset;
+ single->inited = 0;
+ return size;
+ }
+ return 0;
+}
- symsec = ifile->root.sections[relsec->header.sh_link];
- strsec = ifile->root.sections[symsec->header.sh_link];
+#endif
+#if defined(BB_USE_GOT_ENTRIES) || defined(BB_USE_PLT_ENTRIES)
-#if defined(__sh__)
- rel = (Elf32_Rela *) relsec->contents;
- relend = rel + (relsec->header.sh_size / sizeof(Elf32_Rela));
-#else
- rel = (Elf32_Rel *) relsec->contents;
- relend = rel + (relsec->header.sh_size / sizeof(Elf32_Rel));
+static struct obj_section *arch_xsect_init(struct obj_file *f, char *name,
+ int offset, int size)
+{
+ struct obj_section *myrelsec = obj_find_section(f, name);
+
+ if (offset == 0) {
+ offset += size;
+ }
+
+ if (myrelsec) {
+ obj_extend_section(myrelsec, offset);
+ } else {
+ myrelsec = obj_create_alloced_section(f, name,
+ size, offset);
+ assert(myrelsec);
+ }
+
+ return myrelsec;
+}
+
+#endif
+
+static void arch_create_got(struct obj_file *f)
+{
+#if defined(BB_USE_GOT_ENTRIES) || defined(BB_USE_PLT_ENTRIES)
+ struct arch_file *ifile = (struct arch_file *) f;
+ int i;
+#if defined(BB_USE_GOT_ENTRIES)
+ int got_offset = 0, got_needed = 0, got_allocate;
#endif
- symtab = (Elf32_Sym *) symsec->contents;
+#if defined(BB_USE_PLT_ENTRIES)
+ int plt_offset = 0, plt_needed = 0, plt_allocate;
+#endif
+ struct obj_section *relsec, *symsec, *strsec;
+ ElfW(RelM) *rel, *relend;
+ ElfW(Sym) *symtab, *extsym;
+ const char *strtab, *name;
+ struct arch_symbol *intsym;
+
+ for (i = 0; i < f->header.e_shnum; ++i) {
+ relsec = f->sections[i];
+
+ if (relsec->header.sh_type != SHT_RELM)
+ continue;
+
+ symsec = f->sections[relsec->header.sh_link];
+ strsec = f->sections[symsec->header.sh_link];
+
+ rel = (ElfW(RelM) *) relsec->contents;
+ relend = rel + (relsec->header.sh_size / sizeof(ElfW(RelM)));
+ symtab = (ElfW(Sym) *) symsec->contents;
strtab = (const char *) strsec->contents;
for (; rel < relend; ++rel) {
- Elf32_Sym *extsym;
- struct arch_symbol *intsym;
- const char *name;
+ extsym = &symtab[ELF32_R_SYM(rel->r_info)];
+
+#if defined(BB_USE_GOT_ENTRIES)
+ got_allocate = 0;
+#endif
+#if defined(BB_USE_PLT_ENTRIES)
+ plt_allocate = 0;
+#endif
switch (ELF32_R_TYPE(rel->r_info)) {
-#if defined(__sh__)
- case R_SH_GOTPC:
- case R_SH_GOTOFF:
-#else
+
+#if defined(__arm__)
+
+ case R_ARM_PC24:
+ case R_ARM_PLT32:
+ plt_allocate = 1;
+ break;
+
+ case R_ARM_GOTOFF:
+ case R_ARM_GOTPC:
+ got_needed = 1;
+ continue;
+
+ case R_ARM_GOT32:
+ got_allocate = 1;
+ break;
+
+#elif defined(__i386__)
+
case R_386_GOTPC:
case R_386_GOTOFF:
-#endif
- gotneeded = 1;
- default:
+ got_needed = 1;
continue;
-#if defined(__sh__)
- case R_SH_GOT32:
-#else
case R_386_GOT32:
-#endif
+ got_allocate = 1;
+ break;
+
+#elif defined(__x86_64__)
+
+ case R_X86_64_GOTPCREL:
+ case R_X86_64_GOT32:
+ got_needed = 1;
+ continue;
+
+#elif defined(__powerpc__)
+
+ case R_PPC_REL24:
+ plt_allocate = 1;
+ break;
+
+#elif defined(__mc68000__)
+
+ case R_68K_GOT32:
+ got_allocate = 1;
+ break;
+
+ case R_68K_GOTOFF:
+ got_needed = 1;
+ continue;
+
+#elif defined(__sh__)
+
+ case R_SH_GOT32:
+ got_allocate = 1;
break;
+
+ case R_SH_GOTPC:
+ case R_SH_GOTOFF:
+ got_needed = 1;
+ continue;
+
+#endif
+ default:
+ continue;
}
- extsym = &symtab[ELF32_R_SYM(rel->r_info)];
- if (extsym->st_name)
+ if (extsym->st_name != 0) {
name = strtab + extsym->st_name;
- else
+ } else {
name = f->sections[extsym->st_shndx]->name;
- intsym =
- (struct arch_symbol *) obj_find_symbol(&ifile->root, name);
-
- if (!intsym->gotent.offset_done) {
- intsym->gotent.offset_done = 1;
- intsym->gotent.offset = offset;
- offset += 4;
}
+ intsym = (struct arch_symbol *) obj_find_symbol(f, name);
+#if defined(BB_USE_GOT_ENTRIES)
+ if (got_allocate) {
+ got_offset += arch_single_init(
+ rel, &intsym->gotent,
+ got_offset, BB_GOT_ENTRY_SIZE);
+
+ got_needed = 1;
+ }
+#endif
+#if defined(BB_USE_PLT_ENTRIES)
+ if (plt_allocate) {
+#if defined(BB_USE_PLT_LIST)
+ plt_offset += arch_list_add(
+ rel, &intsym->pltent,
+ plt_offset, BB_PLT_ENTRY_SIZE);
+#else
+ plt_offset += arch_single_init(
+ rel, &intsym->pltent,
+ plt_offset, BB_PLT_ENTRY_SIZE);
+#endif
+ plt_needed = 1;
+ }
+#endif
}
}
- if (offset > 0 || gotneeded)
- ifile->got =
- obj_create_alloced_section(&ifile->root, ".got", 4, offset);
+#if defined(BB_USE_GOT_ENTRIES)
+ if (got_needed) {
+ ifile->got = arch_xsect_init(f, ".got", got_offset,
+ BB_GOT_ENTRY_SIZE);
+ }
+#endif
- return 1;
+#if defined(BB_USE_PLT_ENTRIES)
+ if (plt_needed) {
+ ifile->plt = arch_xsect_init(f, ".plt", plt_offset,
+ BB_PLT_ENTRY_SIZE);
+ }
+#endif
+
+#endif /* defined(BB_USE_GOT_ENTRIES) || defined(BB_USE_PLT_ENTRIES) */
}
-int arch_init_module(struct obj_file *f, struct new_module *mod)
+#ifdef BB_FEATURE_NEW_MODULE_INTERFACE
+static int arch_init_module(struct obj_file *f, struct new_module *mod)
{
return 1;
}
+#endif
/*======================================================================*/
/* Standard ELF hash function. */
-inline unsigned long obj_elf_hash_n(const char *name, unsigned long n)
+static inline unsigned long obj_elf_hash_n(const char *name, unsigned long n)
{
unsigned long h = 0;
unsigned long g;
@@ -869,38 +1500,12 @@ inline unsigned long obj_elf_hash_n(const char *name, unsigned long n)
return h;
}
-unsigned long obj_elf_hash(const char *name)
+static unsigned long obj_elf_hash(const char *name)
{
return obj_elf_hash_n(name, strlen(name));
}
#ifdef BB_FEATURE_INSMOD_VERSION_CHECKING
-/* Get the kernel version in the canonical integer form. */
-
-static int get_kernel_version(char str[STRVERSIONLEN])
-{
- struct utsname uts_info;
- char *p, *q;
- int a, b, c;
-
- if (uname(&uts_info) < 0)
- return -1;
- strncpy(str, uts_info.release, STRVERSIONLEN);
- p = uts_info.release;
-
- a = strtoul(p, &p, 10);
- if (*p != '.')
- return -1;
- b = strtoul(p + 1, &p, 10);
- if (*p != '.')
- return -1;
- c = strtoul(p + 1, &q, 10);
- if (p + 1 == q)
- return -1;
-
- return a << 16 | b << 8 | c;
-}
-
/* String comparison for non-co-versioned kernel and module. */
static int ncv_strcmp(const char *a, const char *b)
@@ -926,7 +1531,7 @@ static unsigned long ncv_symbol_hash(const char *str)
return obj_elf_hash_n(str, len);
}
-void
+static void
obj_set_symbol_compare(struct obj_file *f,
int (*cmp) (const char *, const char *),
unsigned long (*hash) (const char *))
@@ -954,8 +1559,8 @@ obj_set_symbol_compare(struct obj_file *f,
#endif /* BB_FEATURE_INSMOD_VERSION_CHECKING */
-
-struct obj_symbol *obj_add_symbol(struct obj_file *f, const char *name,
+static struct obj_symbol *
+obj_add_symbol(struct obj_file *f, const char *name,
unsigned long symidx, int info,
int secidx, ElfW(Addr) value,
unsigned long size)
@@ -1020,7 +1625,7 @@ struct obj_symbol *obj_add_symbol(struct obj_file *f, const char *name,
/* Don't report an error if the symbol is coming from
the kernel or some external module. */
if (secidx <= SHN_HIRESERVE)
- errorMsg("%s multiply defined", name);
+ error_msg("%s multiply defined", name);
return sym;
}
}
@@ -1031,8 +1636,13 @@ struct obj_symbol *obj_add_symbol(struct obj_file *f, const char *name,
f->symtab[hash] = sym;
sym->ksymidx = -1;
- if (ELFW(ST_BIND) (info) == STB_LOCAL)
- f->local_symtab[symidx] = sym;
+ if (ELFW(ST_BIND)(info) == STB_LOCAL && symidx != -1) {
+ if (symidx >= f->local_symtab_size)
+ error_msg("local symbol %s with index %ld exceeds local_symtab_size %ld",
+ name, (long) symidx, (long) f->local_symtab_size);
+ else
+ f->local_symtab[symidx] = sym;
+ }
found:
sym->name = name;
@@ -1044,7 +1654,8 @@ struct obj_symbol *obj_add_symbol(struct obj_file *f, const char *name,
return sym;
}
-struct obj_symbol *obj_find_symbol(struct obj_file *f, const char *name)
+static struct obj_symbol *
+obj_find_symbol(struct obj_file *f, const char *name)
{
struct obj_symbol *sym;
unsigned long hash = f->symbol_hash(name) % HASH_BUCKETS;
@@ -1056,7 +1667,7 @@ struct obj_symbol *obj_find_symbol(struct obj_file *f, const char *name)
return NULL;
}
-ElfW(Addr)
+static ElfW(Addr)
obj_symbol_final_value(struct obj_file * f, struct obj_symbol * sym)
{
if (sym) {
@@ -1070,7 +1681,7 @@ ElfW(Addr)
}
}
-struct obj_section *obj_find_section(struct obj_file *f, const char *name)
+static struct obj_section *obj_find_section(struct obj_file *f, const char *name)
{
int i, n = f->header.e_shnum;
@@ -1103,7 +1714,7 @@ static int obj_load_order_prio(struct obj_section *a)
return ac;
}
-void
+static void
obj_insert_section_load_order(struct obj_file *f, struct obj_section *sec)
{
struct obj_section **p;
@@ -1115,7 +1726,7 @@ obj_insert_section_load_order(struct obj_file *f, struct obj_section *sec)
*p = sec;
}
-struct obj_section *obj_create_alloced_section(struct obj_file *f,
+static struct obj_section *obj_create_alloced_section(struct obj_file *f,
const char *name,
unsigned long align,
unsigned long size)
@@ -1141,7 +1752,7 @@ struct obj_section *obj_create_alloced_section(struct obj_file *f,
return sec;
}
-struct obj_section *obj_create_alloced_section_first(struct obj_file *f,
+static struct obj_section *obj_create_alloced_section_first(struct obj_file *f,
const char *name,
unsigned long align,
unsigned long size)
@@ -1170,15 +1781,16 @@ struct obj_section *obj_create_alloced_section_first(struct obj_file *f,
return sec;
}
-void *obj_extend_section(struct obj_section *sec, unsigned long more)
+static void *obj_extend_section(struct obj_section *sec, unsigned long more)
{
unsigned long oldsize = sec->header.sh_size;
- sec->contents = xrealloc(sec->contents, sec->header.sh_size += more);
+ if (more) {
+ sec->contents = xrealloc(sec->contents, sec->header.sh_size += more);
+ }
return sec->contents + oldsize;
}
-
/* Conditionally add the symbols from the given symbol set to the
new module. */
@@ -1283,7 +1895,7 @@ old_process_module_arguments(struct obj_file *f, int argc, char **argv)
/* Also check that the parameter was not resolved from the kernel. */
if (sym == NULL || sym->secidx > SHN_HIRESERVE) {
- errorMsg("symbol for parameter %s not found", p);
+ error_msg("symbol for parameter %s not found", p);
return 0;
}
@@ -1296,7 +1908,7 @@ old_process_module_arguments(struct obj_file *f, int argc, char **argv)
str = alloca(strlen(q));
for (r = str, q++; *q != '"'; ++q, ++r) {
if (*q == '\0') {
- errorMsg("improperly terminated string argument for %s", p);
+ error_msg("improperly terminated string argument for %s", p);
return 0;
} else if (*q == '\\')
switch (*++q) {
@@ -1355,19 +1967,19 @@ old_process_module_arguments(struct obj_file *f, int argc, char **argv)
while (*q++ == ',');
} else {
char *contents = f->sections[sym->secidx]->contents;
- char *loc = contents + sym->value;
+ char *myloc = contents + sym->value;
char *r; /* To search for commas */
/* Break the string with comas */
while ((r = strchr(q, ',')) != (char *) NULL) {
*r++ = '\0';
- obj_string_patch(f, sym->secidx, loc - contents, q);
- loc += sizeof(char *);
+ obj_string_patch(f, sym->secidx, myloc - contents, q);
+ myloc += sizeof(char *);
q = r;
}
/* last part */
- obj_string_patch(f, sym->secidx, loc - contents, q);
+ obj_string_patch(f, sym->secidx, myloc - contents, q);
}
argc--, argv++;
@@ -1395,7 +2007,7 @@ old_get_module_version(struct obj_file *f, char str[STRVERSIONLEN])
return -1;
p = f->sections[sym->secidx]->contents + sym->value;
- strncpy(str, p, STRVERSIONLEN);
+ safe_strncpy(str, p, STRVERSIONLEN);
a = strtoul(p, &p, 10);
if (*p != '.')
@@ -1412,7 +2024,7 @@ old_get_module_version(struct obj_file *f, char str[STRVERSIONLEN])
#endif /* BB_FEATURE_INSMOD_VERSION_CHECKING */
-#ifdef BB_FEATURE_INSMOD_OLD_KERNEL
+#ifdef BB_FEATURE_OLD_MODULE_INTERFACE
/* Fetch all the symbols and divvy them up as appropriate for the modules. */
@@ -1424,15 +2036,18 @@ static int old_get_kernel_symbols(const char *m_name)
int nks, nms, nmod, i;
nks = get_kernel_syms(NULL);
- if (nks < 0) {
- errorMsg("get_kernel_syms: %s: %s", m_name, strerror(errno));
+ if (nks <= 0) {
+ if (nks)
+ perror_msg("get_kernel_syms: %s", m_name);
+ else
+ error_msg("No kernel symbols");
return 0;
}
ks = k = xmalloc(nks * sizeof(*ks));
if (get_kernel_syms(ks) != nks) {
- logperror("inconsistency with get_kernel_syms -- is someone else "
+ perror("inconsistency with get_kernel_syms -- is someone else "
"playing with modules?");
free(ks);
return 0;
@@ -1445,7 +2060,6 @@ static int old_get_kernel_symbols(const char *m_name)
while (k->name[0] == '#' && k->name[1]) {
struct old_kernel_sym *k2;
- struct new_module_symbol *s;
/* Find out how many symbols this module has. */
for (k2 = k + 1; k2->name[0] != '#'; ++k2)
@@ -1567,7 +2181,8 @@ old_init_module(const char *m_name, struct obj_file *f,
ksym->name =
(unsigned long) str - (unsigned long) symtab;
- str = stpcpy(str, sym->name) + 1;
+ strcpy(str, sym->name);
+ str += strlen(sym->name) + 1;
ksym++;
}
}
@@ -1606,7 +2221,7 @@ old_init_module(const char *m_name, struct obj_file *f,
m_size | (flag_autoclean ? OLD_MOD_AUTOCLEAN
: 0), &routines, symtab);
if (ret)
- errorMsg("init_module: %s: %s", m_name, strerror(errno));
+ perror_msg("init_module: %s", m_name);
free(image);
free(symtab);
@@ -1619,7 +2234,7 @@ old_init_module(const char *m_name, struct obj_file *f,
#define old_create_mod_use_count(x) TRUE
#define old_init_module(x, y, z) TRUE
-#endif /* BB_FEATURE_INSMOD_OLD_KERNEL */
+#endif /* BB_FEATURE_OLD_MODULE_INTERFACE */
@@ -1649,7 +2264,7 @@ new_process_module_arguments(struct obj_file *f, int argc, char **argv)
p = get_modinfo_value(f, key);
key += 5;
if (p == NULL) {
- errorMsg("invalid parameter %s", key);
+ error_msg("invalid parameter %s", key);
return 0;
}
@@ -1657,7 +2272,7 @@ new_process_module_arguments(struct obj_file *f, int argc, char **argv)
/* Also check that the parameter was not resolved from the kernel. */
if (sym == NULL || sym->secidx > SHN_HIRESERVE) {
- errorMsg("symbol for parameter %s not found", key);
+ error_msg("symbol for parameter %s not found", key);
return 0;
}
@@ -1685,7 +2300,7 @@ new_process_module_arguments(struct obj_file *f, int argc, char **argv)
str = alloca(strlen(q));
for (r = str, q++; *q != '"'; ++q, ++r) {
if (*q == '\0') {
- errorMsg("improperly terminated string argument for %s",
+ error_msg("improperly terminated string argument for %s",
key);
return 0;
} else if (*q == '\\')
@@ -1779,7 +2394,7 @@ new_process_module_arguments(struct obj_file *f, int argc, char **argv)
/* Get the size of each member */
/* Probably we should do that outside the loop ? */
if (!isdigit(*(p + 1))) {
- errorMsg("parameter type 'c' for %s must be followed by"
+ error_msg("parameter type 'c' for %s must be followed by"
" the maximum size", key);
return 0;
}
@@ -1787,7 +2402,7 @@ new_process_module_arguments(struct obj_file *f, int argc, char **argv)
/* Check length */
if (strlen(str) >= charssize) {
- errorMsg("string too long for %s (max %ld)", key,
+ error_msg("string too long for %s (max %ld)", key,
charssize - 1);
return 0;
}
@@ -1816,7 +2431,7 @@ new_process_module_arguments(struct obj_file *f, int argc, char **argv)
break;
default:
- errorMsg("unknown parameter type '%c' for %s", *p, key);
+ error_msg("unknown parameter type '%c' for %s", *p, key);
return 0;
}
}
@@ -1835,21 +2450,21 @@ new_process_module_arguments(struct obj_file *f, int argc, char **argv)
case ',':
if (++n > max) {
- errorMsg("too many values for %s (max %d)", key, max);
+ error_msg("too many values for %s (max %d)", key, max);
return 0;
}
++q;
break;
default:
- errorMsg("invalid argument syntax for %s", key);
+ error_msg("invalid argument syntax for %s", key);
return 0;
}
}
end_of_arg:
if (n < min) {
- errorMsg("too few values for %s (min %d)", key, min);
+ error_msg("too few values for %s (min %d)", key, min);
return 0;
}
@@ -1880,7 +2495,7 @@ new_get_module_version(struct obj_file *f, char str[STRVERSIONLEN])
p = get_modinfo_value(f, "kernel_version");
if (p == NULL)
return -1;
- strncpy(str, p, STRVERSIONLEN);
+ safe_strncpy(str, p, STRVERSIONLEN);
a = strtoul(p, &p, 10);
if (*p != '.')
@@ -1898,7 +2513,7 @@ new_get_module_version(struct obj_file *f, char str[STRVERSIONLEN])
#endif /* BB_FEATURE_INSMOD_VERSION_CHECKING */
-#ifdef BB_FEATURE_INSMOD_NEW_KERNEL
+#ifdef BB_FEATURE_NEW_MODULE_INTERFACE
/* Fetch the loaded modules, and all currently exported symbols. */
@@ -1914,57 +2529,59 @@ static int new_get_kernel_symbols(void)
module_names = xmalloc(bufsize = 256);
retry_modules_load:
if (query_module(NULL, QM_MODULES, module_names, bufsize, &ret)) {
- if (errno == ENOSPC) {
+ if (errno == ENOSPC && bufsize < ret) {
module_names = xrealloc(module_names, bufsize = ret);
goto retry_modules_load;
}
- errorMsg("QM_MODULES: %s", strerror(errno));
+ perror_msg("QM_MODULES");
return 0;
}
n_ext_modules = nmod = ret;
- ext_modules = modules = xmalloc(nmod * sizeof(*modules));
- memset(modules, 0, nmod * sizeof(*modules));
/* Collect the modules' symbols. */
- for (i = 0, mn = module_names, m = modules;
- i < nmod; ++i, ++m, mn += strlen(mn) + 1) {
- struct new_module_info info;
-
- if (query_module(mn, QM_INFO, &info, sizeof(info), &ret)) {
- if (errno == ENOENT) {
- /* The module was removed out from underneath us. */
- continue;
- }
- errorMsg("query_module: QM_INFO: %s: %s", mn, strerror(errno));
- return 0;
- }
-
- syms = xmalloc(bufsize = 1024);
- retry_mod_sym_load:
- if (query_module(mn, QM_SYMBOLS, syms, bufsize, &ret)) {
- switch (errno) {
- case ENOSPC:
- syms = xrealloc(syms, bufsize = ret);
- goto retry_mod_sym_load;
- case ENOENT:
- /* The module was removed out from underneath us. */
- continue;
- default:
- errorMsg("query_module: QM_SYMBOLS: %s: %s", mn, strerror(errno));
+ if (nmod){
+ ext_modules = modules = xmalloc(nmod * sizeof(*modules));
+ memset(modules, 0, nmod * sizeof(*modules));
+ for (i = 0, mn = module_names, m = modules;
+ i < nmod; ++i, ++m, mn += strlen(mn) + 1) {
+ struct new_module_info info;
+
+ if (query_module(mn, QM_INFO, &info, sizeof(info), &ret)) {
+ if (errno == ENOENT) {
+ /* The module was removed out from underneath us. */
+ continue;
+ }
+ perror_msg("query_module: QM_INFO: %s", mn);
return 0;
}
- }
- nsyms = ret;
-
- m->name = mn;
- m->addr = info.addr;
- m->nsyms = nsyms;
- m->syms = syms;
-
- for (j = 0, s = syms; j < nsyms; ++j, ++s) {
- s->name += (unsigned long) syms;
+
+ syms = xmalloc(bufsize = 1024);
+ retry_mod_sym_load:
+ if (query_module(mn, QM_SYMBOLS, syms, bufsize, &ret)) {
+ switch (errno) {
+ case ENOSPC:
+ syms = xrealloc(syms, bufsize = ret);
+ goto retry_mod_sym_load;
+ case ENOENT:
+ /* The module was removed out from underneath us. */
+ continue;
+ default:
+ perror_msg("query_module: QM_SYMBOLS: %s", mn);
+ return 0;
+ }
+ }
+ nsyms = ret;
+
+ m->name = mn;
+ m->addr = info.addr;
+ m->nsyms = nsyms;
+ m->syms = syms;
+
+ for (j = 0, s = syms; j < nsyms; ++j, ++s) {
+ s->name += (unsigned long) syms;
+ }
}
}
@@ -1973,11 +2590,11 @@ static int new_get_kernel_symbols(void)
syms = xmalloc(bufsize = 16 * 1024);
retry_kern_sym_load:
if (query_module(NULL, QM_SYMBOLS, syms, bufsize, &ret)) {
- if (errno == ENOSPC) {
+ if (errno == ENOSPC && bufsize < ret) {
syms = xrealloc(syms, bufsize = ret);
goto retry_kern_sym_load;
}
- errorMsg("kernel: QM_SYMBOLS: %s", strerror(errno));
+ perror_msg("kernel: QM_SYMBOLS");
return 0;
}
nksyms = nsyms = ret;
@@ -2106,6 +2723,10 @@ new_init_module(const char *m_name, struct obj_file *f,
tgt_long m_addr;
sec = obj_find_section(f, ".this");
+ if (!sec || !sec->contents) {
+ perror_msg("corrupt module %s?",m_name);
+ exit(EXIT_FAILURE);
+ }
module = (struct new_module *) sec->contents;
m_addr = sec->header.sh_addr;
@@ -2146,6 +2767,16 @@ new_init_module(const char *m_name, struct obj_file *f,
module->runsize > sec->header.sh_addr - m_addr)
module->runsize = sec->header.sh_addr - m_addr;
}
+ sec = obj_find_section(f, ARCHDATA_SEC_NAME);
+ if (sec && sec->header.sh_size) {
+ module->archdata_start = (void*)sec->header.sh_addr;
+ module->archdata_end = module->archdata_start + sec->header.sh_size;
+ }
+ sec = obj_find_section(f, KALLSYMS_SEC_NAME);
+ if (sec && sec->header.sh_size) {
+ module->kallsyms_start = (void*)sec->header.sh_addr;
+ module->kallsyms_end = module->kallsyms_start + sec->header.sh_size;
+ }
if (!arch_init_module(f, module))
return 0;
@@ -2158,7 +2789,7 @@ new_init_module(const char *m_name, struct obj_file *f,
ret = new_sys_init_module(m_name, (struct new_module *) image);
if (ret)
- errorMsg("init_module: %s: %s", m_name, strerror(errno));
+ perror_msg("init_module: %s", m_name);
free(image);
@@ -2170,13 +2801,14 @@ new_init_module(const char *m_name, struct obj_file *f,
#define new_init_module(x, y, z) TRUE
#define new_create_this_module(x, y) 0
#define new_create_module_ksymtab(x)
+#define query_module(v, w, x, y, z) -1
-#endif /* BB_FEATURE_INSMOD_OLD_KERNEL */
+#endif /* BB_FEATURE_NEW_MODULE_INTERFACE */
/*======================================================================*/
-int
+static int
obj_string_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
const char *string)
{
@@ -2205,7 +2837,8 @@ obj_string_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
return 1;
}
-int
+#ifdef BB_FEATURE_NEW_MODULE_INTERFACE
+static int
obj_symbol_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
struct obj_symbol *sym)
{
@@ -2220,8 +2853,9 @@ obj_symbol_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
return 1;
}
+#endif
-int obj_check_undefineds(struct obj_file *f)
+static int obj_check_undefineds(struct obj_file *f)
{
unsigned long i;
int ret = 1;
@@ -2234,7 +2868,9 @@ int obj_check_undefineds(struct obj_file *f)
sym->secidx = SHN_ABS;
sym->value = 0;
} else {
- errorMsg("unresolved symbol %s", sym->name);
+ if (!flag_quiet) {
+ error_msg("unresolved symbol %s", sym->name);
+ }
ret = 0;
}
}
@@ -2243,7 +2879,7 @@ int obj_check_undefineds(struct obj_file *f)
return ret;
}
-void obj_allocate_commons(struct obj_file *f)
+static void obj_allocate_commons(struct obj_file *f)
{
struct common_entry {
struct common_entry *next;
@@ -2341,14 +2977,18 @@ void obj_allocate_commons(struct obj_file *f)
for (i = 0; i < f->header.e_shnum; ++i) {
struct obj_section *s = f->sections[i];
if (s->header.sh_type == SHT_NOBITS) {
+ if (s->header.sh_size != 0)
s->contents = memset(xmalloc(s->header.sh_size),
0, s->header.sh_size);
+ else
+ s->contents = NULL;
+
s->header.sh_type = SHT_PROGBITS;
}
}
}
-unsigned long obj_load_size(struct obj_file *f)
+static unsigned long obj_load_size(struct obj_file *f)
{
unsigned long dot = 0;
struct obj_section *sec;
@@ -2369,7 +3009,7 @@ unsigned long obj_load_size(struct obj_file *f)
return dot;
}
-int obj_relocate(struct obj_file *f, ElfW(Addr) base)
+static int obj_relocate(struct obj_file *f, ElfW(Addr) base)
{
int i, n = f->header.e_shnum;
int ret = 1;
@@ -2457,11 +3097,11 @@ int obj_relocate(struct obj_file *f, ElfW(Addr) base)
errmsg = "Unhandled relocation";
bad_reloc:
if (extsym) {
- errorMsg("%s of type %ld for %s", errmsg,
+ error_msg("%s of type %ld for %s", errmsg,
(long) ELFW(R_TYPE) (rel->r_info),
strtab + extsym->st_name);
} else {
- errorMsg("%s of type %ld", errmsg,
+ error_msg("%s of type %ld", errmsg,
(long) ELFW(R_TYPE) (rel->r_info));
}
ret = 0;
@@ -2499,7 +3139,7 @@ int obj_relocate(struct obj_file *f, ElfW(Addr) base)
return ret;
}
-int obj_create_image(struct obj_file *f, char *image)
+static int obj_create_image(struct obj_file *f, char *image)
{
struct obj_section *sec;
ElfW(Addr) base = f->baseaddr;
@@ -2507,7 +3147,7 @@ int obj_create_image(struct obj_file *f, char *image)
for (sec = f->load_order; sec; sec = sec->load_next) {
char *secimg;
- if (sec->header.sh_size == 0)
+ if (sec->contents == 0 || sec->header.sh_size == 0)
continue;
secimg = image + (sec->header.sh_addr - base);
@@ -2521,7 +3161,7 @@ int obj_create_image(struct obj_file *f, char *image)
/*======================================================================*/
-struct obj_file *obj_load(FILE * fp)
+static struct obj_file *obj_load(FILE * fp, int loadprogbits)
{
struct obj_file *f;
ElfW(Shdr) * section_headers;
@@ -2538,7 +3178,7 @@ struct obj_file *obj_load(FILE * fp)
fseek(fp, 0, SEEK_SET);
if (fread(&f->header, sizeof(f->header), 1, fp) != 1) {
- errorMsg("error reading ELF header: %s", strerror(errno));
+ perror_msg("error reading ELF header");
return NULL;
}
@@ -2546,25 +3186,25 @@ struct obj_file *obj_load(FILE * fp)
|| f->header.e_ident[EI_MAG1] != ELFMAG1
|| f->header.e_ident[EI_MAG2] != ELFMAG2
|| f->header.e_ident[EI_MAG3] != ELFMAG3) {
- errorMsg("not an ELF file");
+ error_msg("not an ELF file");
return NULL;
}
if (f->header.e_ident[EI_CLASS] != ELFCLASSM
|| f->header.e_ident[EI_DATA] != ELFDATAM
|| f->header.e_ident[EI_VERSION] != EV_CURRENT
|| !MATCH_MACHINE(f->header.e_machine)) {
- errorMsg("ELF file not for this architecture");
+ error_msg("ELF file not for this architecture");
return NULL;
}
if (f->header.e_type != ET_REL) {
- errorMsg("ELF file not a relocatable object");
+ error_msg("ELF file not a relocatable object");
return NULL;
}
/* Read the section headers. */
if (f->header.e_shentsize != sizeof(ElfW(Shdr))) {
- errorMsg("section header size mismatch: %lu != %lu",
+ error_msg("section header size mismatch: %lu != %lu",
(unsigned long) f->header.e_shentsize,
(unsigned long) sizeof(ElfW(Shdr)));
return NULL;
@@ -2577,7 +3217,7 @@ struct obj_file *obj_load(FILE * fp)
section_headers = alloca(sizeof(ElfW(Shdr)) * shnum);
fseek(fp, f->header.e_shoff, SEEK_SET);
if (fread(section_headers, sizeof(ElfW(Shdr)), shnum, fp) != shnum) {
- errorMsg("error reading ELF section headers: %s", strerror(errno));
+ perror_msg("error reading ELF section headers");
return NULL;
}
@@ -2592,7 +3232,7 @@ struct obj_file *obj_load(FILE * fp)
sec->header = section_headers[i];
sec->idx = i;
- switch (sec->header.sh_type) {
+ if(sec->header.sh_size) switch (sec->header.sh_type) {
case SHT_NULL:
case SHT_NOTE:
case SHT_NOBITS:
@@ -2600,6 +3240,12 @@ struct obj_file *obj_load(FILE * fp)
break;
case SHT_PROGBITS:
+#if LOADBITS
+ if (!loadprogbits) {
+ sec->contents = NULL;
+ break;
+ }
+#endif
case SHT_SYMTAB:
case SHT_STRTAB:
case SHT_RELM:
@@ -2607,7 +3253,7 @@ struct obj_file *obj_load(FILE * fp)
sec->contents = xmalloc(sec->header.sh_size);
fseek(fp, sec->header.sh_offset, SEEK_SET);
if (fread(sec->contents, sec->header.sh_size, 1, fp) != 1) {
- errorMsg("error reading ELF section data: %s", strerror(errno));
+ perror_msg("error reading ELF section data");
return NULL;
}
} else {
@@ -2617,11 +3263,11 @@ struct obj_file *obj_load(FILE * fp)
#if SHT_RELM == SHT_REL
case SHT_RELA:
- errorMsg("RELA relocations not supported on this architecture");
+ error_msg("RELA relocations not supported on this architecture");
return NULL;
#else
case SHT_REL:
- errorMsg("REL relocations not supported on this architecture");
+ error_msg("REL relocations not supported on this architecture");
return NULL;
#endif
@@ -2634,7 +3280,7 @@ struct obj_file *obj_load(FILE * fp)
break;
}
- errorMsg("can't handle sections of type %ld",
+ error_msg("can't handle sections of type %ld",
(long) sec->header.sh_type);
return NULL;
}
@@ -2652,6 +3298,12 @@ struct obj_file *obj_load(FILE * fp)
for (i = 0; i < shnum; ++i) {
struct obj_section *sec = f->sections[i];
+ /* .modinfo should be contents only but gcc has no attribute for that.
+ * The kernel may have marked .modinfo as ALLOC, ignore this bit.
+ */
+ if (strcmp(sec->name, ".modinfo") == 0)
+ sec->header.sh_flags &= ~SHF_ALLOC;
+
if (sec->header.sh_flags & SHF_ALLOC)
obj_insert_section_load_order(f, sec);
@@ -2663,7 +3315,7 @@ struct obj_file *obj_load(FILE * fp)
ElfW(Sym) * sym;
if (sec->header.sh_entsize != sizeof(ElfW(Sym))) {
- errorMsg("symbol size mismatch: %lu != %lu",
+ error_msg("symbol size mismatch: %lu != %lu",
(unsigned long) sec->header.sh_entsize,
(unsigned long) sizeof(ElfW(Sym)));
return NULL;
@@ -2675,38 +3327,72 @@ struct obj_file *obj_load(FILE * fp)
/* Allocate space for a table of local symbols. */
j = f->local_symtab_size = sec->header.sh_info;
- f->local_symtab = xmalloc(j *=
- sizeof(struct obj_symbol *));
- memset(f->local_symtab, 0, j);
+ f->local_symtab = xcalloc(j, sizeof(struct obj_symbol *));
/* Insert all symbols into the hash table. */
for (j = 1, ++sym; j < nsym; ++j, ++sym) {
const char *name;
if (sym->st_name)
name = strtab + sym->st_name;
- else
+ else
name = f->sections[sym->st_shndx]->name;
obj_add_symbol(f, name, j, sym->st_info, sym->st_shndx,
sym->st_value, sym->st_size);
- }
- }
+ }
+ }
break;
case SHT_RELM:
if (sec->header.sh_entsize != sizeof(ElfW(RelM))) {
- errorMsg("relocation entry size mismatch: %lu != %lu",
+ error_msg("relocation entry size mismatch: %lu != %lu",
(unsigned long) sec->header.sh_entsize,
(unsigned long) sizeof(ElfW(RelM)));
return NULL;
}
break;
+ /* XXX Relocation code from modutils-2.3.19 is not here.
+ * Why? That's about 20 lines of code from obj/obj_load.c,
+ * which gets done in a second pass through the sections.
+ * This BusyBox insmod does similar work in obj_relocate(). */
}
}
return f;
}
+#ifdef BB_FEATURE_INSMOD_LOADINKMEM
+/*
+ * load the unloaded sections directly into the memory allocated by
+ * kernel for the module
+ */
+
+static int obj_load_progbits(FILE * fp, struct obj_file* f, char* imagebase)
+{
+ ElfW(Addr) base = f->baseaddr;
+ struct obj_section* sec;
+
+ for (sec = f->load_order; sec; sec = sec->load_next) {
+
+ /* section already loaded? */
+ if (sec->contents != NULL)
+ continue;
+
+ if (sec->header.sh_size == 0)
+ continue;
+
+ sec->contents = imagebase + (sec->header.sh_addr - base);
+ fseek(fp, sec->header.sh_offset, SEEK_SET);
+ if (fread(sec->contents, sec->header.sh_size, 1, fp) != 1) {
+ error_msg("error reading ELF section data: %s\n", strerror(errno));
+ return 0;
+ }
+
+ }
+ return 1;
+}
+#endif
+
static void hide_special_symbols(struct obj_file *f)
{
static const char *const specials[] = {
@@ -2725,6 +3411,121 @@ static void hide_special_symbols(struct obj_file *f)
ELFW(ST_INFO) (STB_LOCAL, ELFW(ST_TYPE) (sym->info));
}
+#ifdef BB_FEATURE_INSMOD_CHECK_TAINTED
+static int obj_gpl_license(struct obj_file *f, const char **license)
+{
+ struct obj_section *sec;
+ /* This list must match *exactly* the list of allowable licenses in
+ * linux/include/linux/module.h. Checking for leading "GPL" will not
+ * work, somebody will use "GPL sucks, this is proprietary".
+ */
+ static const char *gpl_licenses[] = {
+ "GPL",
+ "GPL v2",
+ "GPL and additional rights",
+ "Dual BSD/GPL",
+ "Dual MPL/GPL",
+ };
+
+ if ((sec = obj_find_section(f, ".modinfo"))) {
+ const char *value, *ptr, *endptr;
+ ptr = sec->contents;
+ endptr = ptr + sec->header.sh_size;
+ while (ptr < endptr) {
+ if ((value = strchr(ptr, '=')) && strncmp(ptr, "license", value-ptr) == 0) {
+ int i;
+ if (license)
+ *license = value+1;
+ for (i = 0; i < sizeof(gpl_licenses)/sizeof(gpl_licenses[0]); ++i) {
+ if (strcmp(value+1, gpl_licenses[i]) == 0)
+ return(0);
+ }
+ return(2);
+ }
+ if (strchr(ptr, '\0'))
+ ptr = strchr(ptr, '\0') + 1;
+ else
+ ptr = endptr;
+ }
+ }
+ return(1);
+}
+
+#define TAINT_FILENAME "/proc/sys/kernel/tainted"
+#define TAINT_PROPRIETORY_MODULE (1<<0)
+#define TAINT_FORCED_MODULE (1<<1)
+#define TAINT_UNSAFE_SMP (1<<2)
+#define TAINT_URL "http://www.tux.org/lkml/#export-tainted"
+
+static void set_tainted(struct obj_file *f, int fd, char *m_name,
+ int kernel_has_tainted, int taint, const char *text1, const char *text2)
+{
+ char buf[80];
+ int oldval;
+ static int first = 1;
+ if (fd < 0 && !kernel_has_tainted)
+ return; /* New modutils on old kernel */
+ printf("Warning: loading %s will taint the kernel: %s%s\n",
+ m_name, text1, text2);
+ if (first) {
+ printf(" See %s for information about tainted modules\n", TAINT_URL);
+ first = 0;
+ }
+ if (fd >= 0) {
+ read(fd, buf, sizeof(buf)-1);
+ buf[sizeof(buf)-1] = '\0';
+ oldval = strtoul(buf, NULL, 10);
+ sprintf(buf, "%d\n", oldval | taint);
+ write(fd, buf, strlen(buf));
+ }
+}
+#endif
+
+/* Check if loading this module will taint the kernel. */
+static void check_tainted_module(struct obj_file *f, char *m_name)
+{
+#ifdef BB_FEATURE_INSMOD_CHECK_TAINTED
+ static const char tainted_file[] = TAINT_FILENAME;
+ int fd, kernel_has_tainted;
+ const char *ptr;
+
+ kernel_has_tainted = 1;
+ if ((fd = open(tainted_file, O_RDWR)) < 0) {
+ if (errno == ENOENT)
+ kernel_has_tainted = 0;
+ else if (errno == EACCES)
+ kernel_has_tainted = 1;
+ else {
+ perror(tainted_file);
+ kernel_has_tainted = 0;
+ }
+ }
+
+ switch (obj_gpl_license(f, &ptr)) {
+ case 0:
+ break;
+ case 1:
+ set_tainted(f, fd, m_name, kernel_has_tainted, TAINT_PROPRIETORY_MODULE, "no license", "");
+ break;
+ case 2:
+ /* The module has a non-GPL license so we pretend that the
+ * kernel always has a taint flag to get a warning even on
+ * kernels without the proc flag.
+ */
+ set_tainted(f, fd, m_name, 1, TAINT_PROPRIETORY_MODULE, "non-GPL license - ", ptr);
+ break;
+ default:
+ set_tainted(f, fd, m_name, 1, TAINT_PROPRIETORY_MODULE, "Unexpected return from obj_gpl_license", "");
+ break;
+ }
+
+ if (flag_force_load)
+ set_tainted(f, fd, m_name, 1, TAINT_FORCED_MODULE, "forced load", "");
+
+ if (fd >= 0)
+ close(fd);
+#endif
+}
void my_usage(void)
{
@@ -2742,18 +3543,16 @@ extern int insmod_main( int argc, char **argv)
ElfW(Addr) m_addr;
FILE *fp;
struct obj_file *f;
- char m_name[BUFSIZ + 1] = "\0";
- int exit_status = FALSE;
+ char m_name[FILENAME_MAX] = "\0";
+ int exit_status = EXIT_FAILURE;
int m_has_modinfo;
#ifdef BB_FEATURE_INSMOD_VERSION_CHECKING
- int k_version;
- char k_strversion[STRVERSIONLEN];
+ struct utsname uts_info;
char m_strversion[STRVERSIONLEN];
int m_version;
int m_crcs;
#endif
-
if (argc <= 1)
my_usage();
@@ -2773,7 +3572,7 @@ extern int insmod_main( int argc, char **argv)
strcpy(m_fullName, m_name);
strcat(m_fullName, ".o");
- /* Get a filedesc for the module */
+ /* Get a filedesc for the module. Check we we have a complete path */
if ((fp = fopen(*argv, "r")) == NULL) {
errorMsg("Module %s not found", *argv);
return -1;
@@ -2781,7 +3580,7 @@ extern int insmod_main( int argc, char **argv)
memcpy(m_filename, *argv, strlen(*argv));
- if ((f = obj_load(fp)) == NULL) {
+ if ((f = obj_load(fp, LOADBITS)) == NULL) {
logperror("Could not load the module");
goto out;
}
@@ -2793,31 +3592,33 @@ extern int insmod_main( int argc, char **argv)
#ifdef BB_FEATURE_INSMOD_VERSION_CHECKING
/* Version correspondence? */
-
- k_version = get_kernel_version(k_strversion);
- if (m_has_modinfo) {
- m_version = new_get_module_version(f, m_strversion);
- } else {
- m_version = old_get_module_version(f, m_strversion);
- if (m_version == -1) {
- errorMsg("couldn't find the kernel version the module was "
- "compiled for");
- goto out;
+ if (!flag_quiet) {
+ if (uname(&uts_info) < 0)
+ uts_info.release[0] = '\0';
+ if (m_has_modinfo) {
+ m_version = new_get_module_version(f, m_strversion);
+ } else {
+ m_version = old_get_module_version(f, m_strversion);
+ if (m_version == -1) {
+ error_msg("couldn't find the kernel version the module was "
+ "compiled for");
+ goto out;
+ }
}
- }
- if (strncmp(k_strversion, m_strversion, STRVERSIONLEN) != 0) {
- if (flag_force_load) {
- errorMsg("Warning: kernel-module version mismatch\n"
- "\t%s was compiled for kernel version %s\n"
- "\twhile this kernel is version %s",
- m_filename, m_strversion, k_strversion);
- } else {
- errorMsg("kernel-module version mismatch\n"
- "\t%s was compiled for kernel version %s\n"
- "\twhile this kernel is version %s.",
- m_filename, m_strversion, k_strversion);
- goto out;
+ if (strncmp(uts_info.release, m_strversion, STRVERSIONLEN) != 0) {
+ if (flag_force_load) {
+ error_msg("Warning: kernel-module version mismatch\n"
+ "\t%s was compiled for kernel version %s\n"
+ "\twhile this kernel is version %s",
+ m_filename, m_strversion, uts_info.release);
+ } else {
+ error_msg("kernel-module version mismatch\n"
+ "\t%s was compiled for kernel version %s\n"
+ "\twhile this kernel is version %s.",
+ m_filename, m_strversion, uts_info.release);
+ goto out;
+ }
}
}
k_crcs = 0;
@@ -2826,21 +3627,21 @@ extern int insmod_main( int argc, char **argv)
k_new_syscalls = !query_module(NULL, 0, NULL, 0, NULL);
if (k_new_syscalls) {
-#ifdef BB_FEATURE_INSMOD_NEW_KERNEL
+#ifdef BB_FEATURE_NEW_MODULE_INTERFACE
if (!new_get_kernel_symbols())
goto out;
k_crcs = new_is_kernel_checksummed();
#else
- errorMsg("Not configured to support new kernels");
+ error_msg("Not configured to support new kernels");
goto out;
#endif
} else {
-#ifdef BB_FEATURE_INSMOD_OLD_KERNEL
+#ifdef BB_FEATURE_OLD_MODULE_INTERFACE
if (!old_get_kernel_symbols(m_name))
goto out;
k_crcs = old_is_kernel_checksummed();
#else
- errorMsg("Not configured to support old kernels");
+ error_msg("Not configured to support old kernels");
goto out;
#endif
}
@@ -2871,13 +3672,14 @@ extern int insmod_main( int argc, char **argv)
goto out;
}
obj_allocate_commons(f);
+ check_tainted_module(f, m_name);
if (m_has_modinfo
- ? !new_process_module_arguments(f, argc-1, argv+1)
- : !old_process_module_arguments(f, argc-1, argv+1))
- {
+ ? !new_process_module_arguments(f, argc - 1, argv + 1)
+ : !old_process_module_arguments(f, argc - 1, argv + 1))
+ {
goto out;
- }
+ }
arch_create_got(f);
hide_special_symbols(f);
@@ -2889,25 +3691,31 @@ extern int insmod_main( int argc, char **argv)
m_size = obj_load_size(f);
- errno = 0;
m_addr = create_module(m_name, m_size);
- switch (errno) {
- case 0:
- break;
+ if (m_addr==-1) switch (errno) {
case EEXIST:
- errorMsg("A module named %s already exists", m_name);
- /* Considered as a success in stage1 */
- fclose(fp);
- return(TRUE);
+ error_msg("A module named %s already exists", m_name);
+ goto out;
case ENOMEM:
- errorMsg("Can't allocate kernel memory for module; needed %lu bytes",
+ error_msg("Can't allocate kernel memory for module; needed %lu bytes",
m_size);
goto out;
default:
- errorMsg("create_module: %s: %s", m_name, strerror(errno));
+ perror_msg("create_module: %s", m_name);
goto out;
}
+#if !LOADBITS
+ /*
+ * the PROGBITS section was not loaded by the obj_load
+ * now we can load them directly into the kernel memory
+ */
+ if (!obj_load_progbits(fp, f, (char*)m_addr)) {
+ delete_module(m_name);
+ goto out;
+ }
+#endif
+
if (!obj_relocate(f, m_addr)) {
delete_module(m_name);
goto out;
@@ -2921,14 +3729,13 @@ extern int insmod_main( int argc, char **argv)
goto out;
}
- exit_status = TRUE;
+ exit_status = EXIT_SUCCESS;
out:
fclose(fp);
return(exit_status);
}
-
int insmod_call(char * full_filename, char * params)
{
int argc = 2;
diff --git a/mdk-stage1/insmod-modutils/Makefile b/mdk-stage1/insmod-modutils/Makefile
index e8f78d2d0..48508ba1f 100644
--- a/mdk-stage1/insmod-modutils/Makefile
+++ b/mdk-stage1/insmod-modutils/Makefile
@@ -15,12 +15,16 @@ include $(top_dir)/Makefile.common
INCS = -I./include
-DEFS = -Wno-error -D_GNU_SOURCE -DELF_MACHINE_H='"elf_$(ARCH).h"' -DARCH_$(ARCH)
+TAINT_URL = http://www.tux.org/lkml/\#export-tainted
+
+DEFS = -Wno-error -D_GNU_SOURCE \
+ -DELF_MACHINE_H='"elf_$(ARCH).h"' -DARCH_$(ARCH) \
+ -DTAINT_URL='"$(TAINT_URL)"'
DIRS = util obj
-all: dirs insmod libinsmod.a #libinsmod-DIET.a
+all: dirs insmod libinsmod.a
dirs:
@for n in . $(DIRS); do \
@@ -31,11 +35,11 @@ clean:
@for n in $(DIRS); do \
(cd $$n; make clean) \
done
- rm -rf t *.o insmod libinsmod.a libinsmod-DIET.a
+ rm -rf t *.o insmod libinsmod.a
insmod: insmod-frontend.o insmod.o ./util/libutil-STANDALONE.a ./obj/libobj.a
- gcc -o $@ $^
+ $(DIET) gcc -o $@ $^
$(STRIPCMD) $@
t/.create_stuff: util/libutil.a obj/libobj.a
@@ -48,16 +52,8 @@ libinsmod.a: insmod.o t/.create_stuff
ar cru $@ insmod.o t/*
ranlib $@
-libinsmod-DIET.a: insmod-DIET.o ./util/libutil-DIET.a ./obj/libobj-DIET.a
- ar cru $@ $^
- ranlib $@
-
insmod-frontend.o: insmod-frontend.c insmod.c
- gcc $(CFLAGS) $(DEFS) $(INCS) $(GLIBC_INCLUDES) -c insmod-frontend.c
+ $(DIET) gcc $(CFLAGS) $(DEFS) $(INCS) $(INCLUDES) -c insmod-frontend.c
insmod.o: insmod.c
- gcc $(CFLAGS) $(DEFS) $(INCS) $(GLIBC_INCLUDES) -c insmod.c
-
-insmod-DIET.o: insmod.c
- gcc $(CFLAGS) $(DEFS) $(INCS) $(DIETLIBC_INCLUDES) -o $@ -c insmod.c
-
+ $(DIET) gcc $(CFLAGS) $(DEFS) $(INCS) $(INCLUDES) -c insmod.c
diff --git a/mdk-stage1/insmod-modutils/include/config.h b/mdk-stage1/insmod-modutils/include/config.h
index 11da6a523..3a37b00d4 100644
--- a/mdk-stage1/insmod-modutils/include/config.h
+++ b/mdk-stage1/insmod-modutils/include/config.h
@@ -28,6 +28,7 @@
#include <stdio.h>
#include <sys/utsname.h>
+#define MODUTILS_MACROS "/lib/modutils/macros"
#define ETC_MODULES_CONF "/etc/modules.conf"
#define EXEC_PRE_INSTALL 0
@@ -92,6 +93,8 @@ enum gen_file_enum {
GEN_ISAPNPMAPFILE,
GEN_USBMAPFILE,
GEN_PARPORTMAPFILE,
+ GEN_IEEE1394MAPFILE,
+ GEN_PNPBIOSMAPFILE,
GEN_DEPFILE,
};
diff --git a/mdk-stage1/insmod-modutils/include/elf_alpha.h b/mdk-stage1/insmod-modutils/include/elf_alpha.h
index f1ec66f1c..4202bcc14 100644
--- a/mdk-stage1/insmod-modutils/include/elf_alpha.h
+++ b/mdk-stage1/insmod-modutils/include/elf_alpha.h
@@ -1,5 +1,4 @@
/* Machine-specific elf macros for the Alpha. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS64
#define ELFDATAM ELFDATA2LSB
diff --git a/mdk-stage1/insmod-modutils/include/elf_arm.h b/mdk-stage1/insmod-modutils/include/elf_arm.h
index f6b531e88..cf04cafe0 100644
--- a/mdk-stage1/insmod-modutils/include/elf_arm.h
+++ b/mdk-stage1/insmod-modutils/include/elf_arm.h
@@ -1,5 +1,4 @@
/* Machine-specific elf macros for ARM. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS32
#define ELFDATAM ELFDATA2LSB
diff --git a/mdk-stage1/insmod-modutils/include/elf_i386.h b/mdk-stage1/insmod-modutils/include/elf_i386.h
index c6c2d326e..f5c57d384 100644
--- a/mdk-stage1/insmod-modutils/include/elf_i386.h
+++ b/mdk-stage1/insmod-modutils/include/elf_i386.h
@@ -1,5 +1,4 @@
/* Machine-specific elf macros for i386 et al. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS32
#define ELFDATAM ELFDATA2LSB
diff --git a/mdk-stage1/insmod-modutils/include/elf_m68k.h b/mdk-stage1/insmod-modutils/include/elf_m68k.h
index 817fc8f2c..c488ba9d1 100644
--- a/mdk-stage1/insmod-modutils/include/elf_m68k.h
+++ b/mdk-stage1/insmod-modutils/include/elf_m68k.h
@@ -1,5 +1,4 @@
/* Machine-specific elf macros for m68k. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS32
#define ELFDATAM ELFDATA2MSB
diff --git a/mdk-stage1/insmod-modutils/include/elf_mips.h b/mdk-stage1/insmod-modutils/include/elf_mips.h
index 8a0430216..4b91ddd01 100644
--- a/mdk-stage1/insmod-modutils/include/elf_mips.h
+++ b/mdk-stage1/insmod-modutils/include/elf_mips.h
@@ -1,5 +1,4 @@
/* Machine-specific elf macros for MIPS. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS32
#ifdef __MIPSEB__
diff --git a/mdk-stage1/insmod-modutils/include/elf_ppc.h b/mdk-stage1/insmod-modutils/include/elf_ppc.h
index 71596de8c..b0060ace1 100644
--- a/mdk-stage1/insmod-modutils/include/elf_ppc.h
+++ b/mdk-stage1/insmod-modutils/include/elf_ppc.h
@@ -1,5 +1,4 @@
/* Machine-specific elf macros for the PowerPC. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS32
#define ELFDATAM ELFDATA2MSB
diff --git a/mdk-stage1/insmod-modutils/include/elf_s390.h b/mdk-stage1/insmod-modutils/include/elf_s390.h
index 547d66b83..7a35bde93 100644
--- a/mdk-stage1/insmod-modutils/include/elf_s390.h
+++ b/mdk-stage1/insmod-modutils/include/elf_s390.h
@@ -1,10 +1,11 @@
/* Machine-specific elf macros for i386 et al. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS32
#define ELFDATAM ELFDATA2MSB
-#define MATCH_MACHINE(x) (x == EM_S390)
+#define EM_S390_OLD 0xa390
+
+#define MATCH_MACHINE(x) (x == EM_S390 || x == EM_S390_OLD)
#define SHT_RELM SHT_RELA
#define Elf32_RelM Elf32_Rela
diff --git a/mdk-stage1/insmod-modutils/include/elf_sparc.h b/mdk-stage1/insmod-modutils/include/elf_sparc.h
index 9b5c348d9..8903b2654 100644
--- a/mdk-stage1/insmod-modutils/include/elf_sparc.h
+++ b/mdk-stage1/insmod-modutils/include/elf_sparc.h
@@ -1,5 +1,4 @@
/* Machine-specific elf macros for the Sparc. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS32
#define ELFDATAM ELFDATA2MSB
diff --git a/mdk-stage1/insmod-modutils/include/elf_sparc64.h b/mdk-stage1/insmod-modutils/include/elf_sparc64.h
index 158edd7e1..891e0c3d9 100644
--- a/mdk-stage1/insmod-modutils/include/elf_sparc64.h
+++ b/mdk-stage1/insmod-modutils/include/elf_sparc64.h
@@ -1,5 +1,4 @@
/* Machine-specific elf macros for the Sparc. */
-#ident "$Id$"
#define ELFCLASSM ELFCLASS64
#define ELFDATAM ELFDATA2MSB
diff --git a/mdk-stage1/insmod-modutils/include/kallsyms.h b/mdk-stage1/insmod-modutils/include/kallsyms.h
index 9748873cf..90bb75f22 100644
--- a/mdk-stage1/insmod-modutils/include/kallsyms.h
+++ b/mdk-stage1/insmod-modutils/include/kallsyms.h
@@ -1,3 +1,6 @@
+#ifndef MODUTILS_KALLSYMS_H
+#define MODUTILS_KALLSYMS_H 1
+
/* kallsyms headers
Copyright 2000 Keith Owens <kaos@ocs.com.au>
@@ -24,11 +27,6 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ident "$Id$"
-
-#ifndef MODUTILS_KALLSYMS_H
-#define MODUTILS_KALLSYMS_H 1
-
/* Have to (re)define these ElfW entries here because external kallsyms
* code does not have access to modutils/include/obj.h. This code is
* included from user spaces tools (modutils) and kernel, they need
diff --git a/mdk-stage1/insmod-modutils/include/kerneld.h b/mdk-stage1/insmod-modutils/include/kerneld.h
index 3bc2c9d42..f32e34b4a 100644
--- a/mdk-stage1/insmod-modutils/include/kerneld.h
+++ b/mdk-stage1/insmod-modutils/include/kerneld.h
@@ -4,8 +4,6 @@
#ifndef MODUTILS_KERNELD_H
#define MODUTILS_KERNELD_H
-#ident "$Id$"
-
#define KERNELD_SYSTEM 1
#define KERNELD_REQUEST_MODULE 2 /* "insmod" */
#define KERNELD_RELEASE_MODULE 3 /* "rmmod" */
diff --git a/mdk-stage1/insmod-modutils/include/module.h b/mdk-stage1/insmod-modutils/include/module.h
index db49ab2b2..ae8224f8a 100644
--- a/mdk-stage1/insmod-modutils/include/module.h
+++ b/mdk-stage1/insmod-modutils/include/module.h
@@ -1,3 +1,6 @@
+#ifndef MODUTILS_MODULE_H
+#define MODUTILS_MODULE_H 1
+
/* Definitions for the Linux module syscall interface.
Copyright 1996, 1997 Linux International.
@@ -20,11 +23,6 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ifndef MODUTILS_MODULE_H
-#define MODUTILS_MODULE_H 1
-
-#ident "$Id$"
-
/* This file contains the structures used by the 2.0 and 2.1 kernels.
We do not use the kernel headers directly because we do not wish
to be dependant on a particular kernel version to compile insmod. */
@@ -207,4 +205,13 @@ int delete_module(const char *);
*/
extern unsigned int safemode;
+/*======================================================================*/
+/* Tainted kernel information. This must match include/linux/kernel.h */
+/* and kernel/panic.c. */
+
+#define TAINT_FILENAME "/proc/sys/kernel/tainted"
+#define TAINT_PROPRIETORY_MODULE (1<<0)
+#define TAINT_FORCED_MODULE (1<<1)
+#define TAINT_UNSAFE_SMP (1<<2)
+
#endif /* module.h */
diff --git a/mdk-stage1/insmod-modutils/include/obj.h b/mdk-stage1/insmod-modutils/include/obj.h
index b140c65c3..de346b16a 100644
--- a/mdk-stage1/insmod-modutils/include/obj.h
+++ b/mdk-stage1/insmod-modutils/include/obj.h
@@ -1,3 +1,6 @@
+#ifndef MODUTILS_OBJ_H
+#define MODUTILS_OBJ_H 1
+
/* Elf object file loading and relocation routines.
Copyright 1996, 1997 Linux International.
@@ -21,16 +24,13 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ifndef MODUTILS_OBJ_H
-#define MODUTILS_OBJ_H 1
-
-#ident "$Id$"
-
/* The relocatable object is manipulated using elfin types. */
#include <stdio.h>
+#include <sys/types.h>
#include <elf.h>
#include ELF_MACHINE_H
+#include "module.h"
#ifndef ElfW
# if ELFCLASSM == ELFCLASS32
@@ -77,7 +77,7 @@ struct obj_symbol
{
struct obj_symbol *next; /* hash table link */
const char *name;
- unsigned long value;
+ tgt_long value;
unsigned long size;
int secidx; /* the defining section index/module */
int info;
@@ -161,6 +161,8 @@ struct obj_symbol_patch_struct
#define obj_create_image ObjW(create_image)
#define obj_addr_to_native_ptr ObjW(addr_to_native_ptr)
#define obj_native_ptr_to_addr ObjW(native_ptr_to_addr)
+#define obj_kallsyms ObjW(kallsyms)
+#define obj_gpl_license ObjW(gpl_license)
#define arch_new_file ObjW(arch_new_file)
#define arch_new_section ObjW(arch_new_section)
#define arch_new_symbol ObjW(arch_new_symbol)
@@ -198,7 +200,8 @@ void obj_insert_section_load_order (struct obj_file *f,
struct obj_section *obj_create_alloced_section (struct obj_file *f,
const char *name,
unsigned long align,
- unsigned long size);
+ unsigned long size,
+ unsigned long flags);
struct obj_section *obj_create_alloced_section_first (struct obj_file *f,
const char *name,
@@ -264,7 +267,7 @@ union obj_ptr_4 {
void *ptr;
};
union obj_ptr_8 {
- Elf64_Xword addr;
+ u_int64_t addr; /* Should be Elf64_Xword but not all users have this yet */
void *ptr;
};
@@ -272,4 +275,24 @@ void *obj_addr_to_native_ptr(ElfW(Addr));
ElfW(Addr) obj_native_ptr_to_addr(void *);
+/* Standard method of finding relocation symbols, sets isym */
+#define obj_find_relsym(isym, f, find, rel, symtab, strtab) \
+ { \
+ unsigned long symndx = ELFW(R_SYM)((rel)->r_info); \
+ ElfW(Sym) *extsym = (symtab)+symndx; \
+ if (ELFW(ST_BIND)(extsym->st_info) == STB_LOCAL) { \
+ isym = (typeof(isym)) (f)->local_symtab[symndx]; \
+ } \
+ else { \
+ const char *name; \
+ if (extsym->st_name) \
+ name = (strtab) + extsym->st_name; \
+ else \
+ name = (f)->sections[extsym->st_shndx]->name; \
+ isym = (typeof(isym)) obj_find_symbol((find), name); \
+ } \
+ }
+
+int obj_gpl_license(struct obj_file *, const char **);
+
#endif /* obj.h */
diff --git a/mdk-stage1/insmod-modutils/include/util.h b/mdk-stage1/insmod-modutils/include/util.h
index b2e4a67c3..0a1354bec 100644
--- a/mdk-stage1/insmod-modutils/include/util.h
+++ b/mdk-stage1/insmod-modutils/include/util.h
@@ -1,3 +1,6 @@
+#ifndef MODUTILS_UTIL_H
+#define MODUTILS_UTIL_H 1
+
/* Miscelaneous utility functions.
Copyright 1996, 1997 Linux International.
@@ -20,11 +23,6 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ifndef MODUTILS_UTIL_H
-#define MODUTILS_UTIL_H 1
-
-#ident "$Id$"
-
#include <stdio.h>
#include <sys/stat.h>
diff --git a/mdk-stage1/insmod-modutils/include/version.h b/mdk-stage1/insmod-modutils/include/version.h
index 51ca0eb29..9ca0c57a9 100644
--- a/mdk-stage1/insmod-modutils/include/version.h
+++ b/mdk-stage1/insmod-modutils/include/version.h
@@ -1 +1 @@
-#define MODUTILS_VERSION "2.4.2"
+#define MODUTILS_VERSION "2.4.19"
diff --git a/mdk-stage1/insmod-modutils/insmod.c b/mdk-stage1/insmod-modutils/insmod.c
index 359b28837..b0b7c2a0d 100644
--- a/mdk-stage1/insmod-modutils/insmod.c
+++ b/mdk-stage1/insmod-modutils/insmod.c
@@ -54,16 +54,15 @@
Keith Owens <kaos@ocs.com.au> November 2000.
Add persistent data support.
Keith Owens <kaos@ocs.com.au> November 2000.
+ Add tainted module support.
+ Keith Owens <kaos@ocs.com.au> September 2001.
*/
-#ident "$Id$"
-
#include "../insmod.h"
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
-//#include <alloca.h> provided by stdlib
#include <limits.h>
#include <ctype.h>
#include <errno.h>
@@ -71,6 +70,7 @@
#include <getopt.h>
#include <sys/stat.h>
#include <sys/file.h>
+#include <sys/fcntl.h>
#include "module.h"
#include "obj.h"
@@ -90,9 +90,12 @@ static int flag_silent_probe = 0;
static int flag_export = 1;
static int flag_load_map = 0;
static int flag_ksymoops = 1;
+static int flag_numeric_only = 0;
static int n_ext_modules_used;
static int m_has_modinfo;
+static int gplonly_seen;
+static int warnings;
extern int insmod_main(int argc, char **argv);
extern int insmod_main_32(int argc, char **argv);
@@ -105,6 +108,15 @@ extern int kallsyms_main(int argc, char **argv);
/*======================================================================*/
+/* Only use the numeric part of the version string? */
+
+static void use_numeric_only(int major, int minor, char *str)
+{
+ if (((major << 8) + minor) >= 0x0205 /* kernel 2.5 */
+ || flag_numeric_only)
+ *str = '\0';
+}
+
/* Get the kernel version in the canonical integer form. */
static int get_kernel_version(char str[STRVERSIONLEN])
@@ -112,8 +124,9 @@ static int get_kernel_version(char str[STRVERSIONLEN])
char *p, *q;
int a, b, c;
- strncpy(str, uts_info.release, STRVERSIONLEN);
- p = uts_info.release;
+ strncpy(str, uts_info.release, STRVERSIONLEN-1);
+ str[STRVERSIONLEN-1] = '\0';
+ p = str;
a = strtoul(p, &p, 10);
if (*p != '.')
@@ -124,6 +137,7 @@ static int get_kernel_version(char str[STRVERSIONLEN])
c = strtoul(p + 1, &q, 10);
if (p + 1 == q)
return -1;
+ use_numeric_only(a, b, q);
return a << 16 | b << 8 | c;
}
@@ -232,7 +246,7 @@ static unsigned long ncv_symbol_hash(const char *str)
* to the new module.
*/
static int add_symbols_from(struct obj_file *f, int idx,
- struct module_symbol *syms, size_t nsyms)
+ struct module_symbol *syms, size_t nsyms, int gpl)
{
struct module_symbol *s;
size_t i;
@@ -247,8 +261,57 @@ static int add_symbols_from(struct obj_file *f, int idx,
*/
struct obj_symbol *sym;
+ /* GPL licensed modules can use symbols exported with
+ * EXPORT_SYMBOL_GPL, so ignore any GPLONLY_ prefix on the
+ * exported names. Non-GPL modules never see any GPLONLY_
+ * symbols so they cannot fudge it by adding the prefix on
+ * their references.
+ */
+ if (strncmp((char *)s->name, "GPLONLY_", 8) == 0) {
+ gplonly_seen = 1;
+ if (gpl)
+ ((char *)s->name) += 8;
+ else
+ continue;
+ }
+
sym = obj_find_symbol(f, (char *) s->name);
- if (sym && !ELFW(ST_BIND) (sym->info) == STB_LOCAL) {
+#ifdef ARCH_ppc64
+ if (!sym)
+ {
+ static size_t buflen = 0;
+ static char *buf = 0;
+ int len;
+
+ /* ppc64 is one of those architectures with
+ function descriptors. A function is exported
+ and accessed across object boundaries via its
+ function descriptor. The function code symbol
+ happens to be the function name, prefixed with
+ '.', and a function call is a branch to the
+ code symbol. The linker recognises when a call
+ crosses object boundaries, and inserts a stub
+ to call via the function descriptor.
+ obj_ppc64.c of course does the same thing, so
+ here we recognise that an undefined code symbol
+ can be satisfied by the corresponding function
+ descriptor symbol. */
+
+ len = strlen ((char *) s->name) + 2;
+ if (buflen < len)
+ {
+ buflen = len + (len >> 1);
+ if (buf)
+ free (buf);
+ buf = malloc (buflen);
+ }
+ buf[0] = '.';
+ strcpy (buf + 1, (char *) s->name);
+ sym = obj_find_symbol(f, buf);
+ }
+#endif /* ARCH_ppc64 */
+
+ if (sym && ELFW(ST_BIND) (sym->info) != STB_LOCAL) {
sym = obj_add_symbol(f, (char *) s->name, -1,
ELFW(ST_INFO) (STB_GLOBAL, STT_NOTYPE),
idx, s->value, 0);
@@ -264,7 +327,7 @@ static int add_symbols_from(struct obj_file *f, int idx,
return used;
}
-static void add_kernel_symbols(struct obj_file *f)
+static void add_kernel_symbols(struct obj_file *f, int gpl)
{
struct module_stat *m;
size_t i, nused = 0;
@@ -272,13 +335,13 @@ static void add_kernel_symbols(struct obj_file *f)
/* Add module symbols first. */
for (i = 0, m = module_stat; i < n_module_stat; ++i, ++m)
if (m->nsyms &&
- add_symbols_from(f, SHN_HIRESERVE + 2 + i, m->syms, m->nsyms))
+ add_symbols_from(f, SHN_HIRESERVE + 2 + i, m->syms, m->nsyms, gpl))
m->status = 1 /* used */, ++nused;
n_ext_modules_used = nused;
/* And finally the symbols from the kernel proper. */
if (nksyms)
- add_symbols_from(f, SHN_HIRESERVE + 1, ksyms, nksyms);
+ add_symbols_from(f, SHN_HIRESERVE + 1, ksyms, nksyms, gpl);
}
static void hide_special_symbols(struct obj_file *f)
@@ -326,7 +389,7 @@ static void print_load_map(struct obj_file *f)
if (a == -1)
a = 0;
- lprintf("%-16s%08lx %0*lx 2**%d",
+ lprintf("%-15s %08lx %0*lx 2**%d",
sec->name,
(long)sec->header.sh_size,
(int) (2 * sizeof(void *)),
@@ -465,9 +528,10 @@ static int old_create_mod_use_count(struct obj_file *f)
*/
got = obj_find_symbol(f, "_GLOBAL_OFFSET_TABLE_");
if (got)
-{
+ {
sec = obj_create_alloced_section(f, ".got",
- sizeof(long), sizeof(long));
+ sizeof(long), sizeof(long),
+ SHF_WRITE);
got->secidx = sec->idx; /* mark the symbol as defined */
}
return 1;
@@ -491,7 +555,8 @@ static void add_ksymtab(struct obj_file *f, struct obj_symbol *sym)
sec = NULL;
}
if (!sec)
- sec = obj_create_alloced_section(f, "__ksymtab", tgt_sizeof_void_p, 0);
+ sec = obj_create_alloced_section(f, "__ksymtab",
+ tgt_sizeof_void_p, 0, 0);
if (!sec)
return;
sec->header.sh_flags |= SHF_ALLOC;
@@ -513,9 +578,9 @@ static int create_module_ksymtab(struct obj_file *f)
struct module_ref *dep;
struct obj_symbol *tm;
- sec = obj_create_alloced_section(f, ".kmodtab", tgt_sizeof_void_p,
- (sizeof(struct module_ref)
- * n_ext_modules_used));
+ sec = obj_create_alloced_section(f, ".kmodtab",
+ tgt_sizeof_void_p,
+ sizeof(struct module_ref) * n_ext_modules_used, 0);
if (!sec)
return 0;
@@ -524,6 +589,9 @@ static int create_module_ksymtab(struct obj_file *f)
for (i = 0; i < n_module_stat; ++i)
if (module_stat[i].status /* used */) {
dep->dep = module_stat[i].addr;
+#ifdef ARCH_ppc64
+ dep->dep |= ppc64_module_base (f);
+#endif
obj_symbol_patch(f, sec->idx, (char *) &dep->ref - sec->contents, tm);
dep->next_ref = 0;
++dep;
@@ -573,7 +641,9 @@ static int get_module_version(struct obj_file *f, char str[STRVERSIONLEN])
} else
m_has_modinfo = 1;
- strncpy(str, p, STRVERSIONLEN);
+ strncpy(str, p, STRVERSIONLEN-1);
+ str[STRVERSIONLEN-1] = '\0';
+ p = str;
a = strtoul(p, &p, 10);
if (*p != '.')
@@ -584,6 +654,7 @@ static int get_module_version(struct obj_file *f, char str[STRVERSIONLEN])
c = strtoul(p + 1, &q, 10);
if (p + 1 == q)
return -1;
+ use_numeric_only(a, b, q);
return a << 16 | b << 8 | c;
}
@@ -645,6 +716,7 @@ static void add_ksymoops_symbols(struct obj_file *f, const char *filename,
int save_errno = errno;
error("cannot get realpath for %s", filename);
errno = save_errno;
+ perror("");
absolute_filename = xstrdup(filename);
}
@@ -679,7 +751,7 @@ static void add_ksymoops_symbols(struct obj_file *f, const char *filename,
version = get_module_version(f, str); /* -1 if not found */
snprintf(name, l, "%s%s_O%s_M%0*lX_V%d",
symprefix, m_name, absolute_filename,
- 2*sizeof(statbuf.st_mtime), statbuf.st_mtime,
+ (int)(2*sizeof(statbuf.st_mtime)), statbuf.st_mtime,
version);
sym = obj_add_symbol(f, name, -1,
ELFW(ST_INFO) (STB_GLOBAL, STT_NOTYPE),
@@ -756,14 +828,10 @@ static int process_module_arguments(struct obj_file *f, int argc, char **argv, i
memcpy(key + 5, *argv, n);
key[n + 5] = '\0';
if ((fmt = get_modinfo_value(f, key)) == NULL) {
- if (required) {
- error("invalid parameter %s", key);
- return 0;
- }
- else {
- if (flag_verbose)
- lprintf("ignoring %s", *argv);
- continue; /* silently ignore optional parameters */
+ if (required || flag_verbose) {
+ lprintf("Warning: ignoring %s, no such parameter in this module", *argv);
+ ++warnings;
+ continue;
}
}
key += 5;
@@ -1014,7 +1082,7 @@ static int add_kallsyms(struct obj_file *f,
}
}
if (!*module_kallsyms)
- *module_kallsyms = obj_create_alloced_section(f, KALLSYMS_SEC_NAME, 0, 0);
+ *module_kallsyms = obj_create_alloced_section(f, KALLSYMS_SEC_NAME, 0, 0, 0);
/* Size and populate kallsyms */
if (obj_kallsyms(f, &f_kallsyms))
@@ -1046,7 +1114,7 @@ static int add_archdata(struct obj_file *f,
}
}
if (!*sec)
- *sec = obj_create_alloced_section(f, ARCHDATA_SEC_NAME, 16, 0);
+ *sec = obj_create_alloced_section(f, ARCHDATA_SEC_NAME, 16, 0, 0);
/* Size and populate archdata */
if (arch_archdata(f, *sec))
@@ -1147,7 +1215,8 @@ static int init_module(const char *m_name, struct obj_file *f,
if (ret) {
error("init_module: %m");
lprintf("Hint: insmod errors can be caused by incorrect module parameters, "
- "including invalid IO or IRQ parameters");
+ "including invalid IO or IRQ parameters.\n"
+ " You may find more information in syslog or the output from dmesg");
}
}
@@ -1276,6 +1345,7 @@ static int check_module_parameter(struct obj_file *f, char *key, char *value, in
* most error conditions. Make these all errors in 2.5.
*/
lprintf("Warning: %s symbol for parameter %s not found", error_file, key);
+ ++warnings;
return(1);
}
@@ -1290,6 +1360,7 @@ static int check_module_parameter(struct obj_file *f, char *key, char *value, in
if (max < min) {
lprintf("Warning: %s parameter %s has max < min!", error_file, key);
+ ++warnings;
return(1);
}
@@ -1297,6 +1368,7 @@ static int check_module_parameter(struct obj_file *f, char *key, char *value, in
case 'c':
if (!isdigit(p[1])) {
lprintf("%s parameter %s has no size after 'c'!", error_file, key);
+ ++warnings;
return(1);
}
while (isdigit(p[1]))
@@ -1310,9 +1382,11 @@ static int check_module_parameter(struct obj_file *f, char *key, char *value, in
break;
case '\0':
lprintf("%s parameter %s has no format character!", error_file, key);
+ ++warnings;
return(1);
default:
lprintf("%s parameter %s has unknown format character '%c'", error_file, key, *p);
+ ++warnings;
return(1);
}
switch (*++p) {
@@ -1327,6 +1401,7 @@ static int check_module_parameter(struct obj_file *f, char *key, char *value, in
break;
default:
lprintf("%s parameter %s has unknown format modifier '%c'", error_file, key, *p);
+ ++warnings;
return(1);
}
return(0);
@@ -1374,6 +1449,74 @@ static void check_module_parameters(struct obj_file *f, int *persist_flag)
return;
}
+static void set_tainted(struct obj_file *f, int fd, int kernel_has_tainted,
+ int noload, int taint,
+ const char *text1, const char *text2)
+{
+ char buf[80];
+ int oldval;
+ static int first = 1;
+ if (fd < 0 && !kernel_has_tainted)
+ return; /* New modutils on old kernel */
+ lprintf("Warning: loading %s will taint the kernel: %s%s",
+ f->filename, text1, text2);
+ ++warnings;
+ if (first) {
+ lprintf(" See %s for information about tainted modules", TAINT_URL);
+ first = 0;
+ }
+ if (fd >= 0 && !noload) {
+ read(fd, buf, sizeof(buf)-1);
+ buf[sizeof(buf)-1] = '\0';
+ oldval = strtoul(buf, NULL, 10);
+ sprintf(buf, "%d\n", oldval | taint);
+ write(fd, buf, strlen(buf));
+ }
+}
+
+/* Check if loading this module will taint the kernel. */
+static void check_tainted_module(struct obj_file *f, int noload)
+{
+ static const char tainted_file[] = TAINT_FILENAME;
+ int fd, kernel_has_tainted;
+ const char *ptr;
+
+ if ((fd = open(tainted_file, O_RDWR)) < 0) {
+ if (errno == ENOENT)
+ kernel_has_tainted = 0;
+ else if (errno == EACCES)
+ kernel_has_tainted = 1;
+ else {
+ perror(tainted_file);
+ kernel_has_tainted = 0;
+ }
+ }
+ else
+ kernel_has_tainted = 1;
+
+ switch (obj_gpl_license(f, &ptr)) {
+ case 0:
+ break;
+ case 1:
+ set_tainted(f, fd, kernel_has_tainted, noload, TAINT_PROPRIETORY_MODULE, "no license", "");
+ break;
+ case 2:
+ /* The module has a non-GPL license so we pretend that the
+ * kernel always has a taint flag to get a warning even on
+ * kernels without the proc flag.
+ */
+ set_tainted(f, fd, 1, noload, TAINT_PROPRIETORY_MODULE, "non-GPL license - ", ptr);
+ break;
+ default:
+ set_tainted(f, fd, 1, noload, TAINT_PROPRIETORY_MODULE, "Unexpected return from obj_gpl_license", "");
+ break;
+ }
+
+ if (flag_force_load)
+ set_tainted(f, fd, 1, noload, TAINT_FORCED_MODULE, "forced load", "");
+ if (fd >= 0)
+ close(fd);
+}
/* For common 3264 code, only compile the usage message once, in the 64 bit version */
#if defined(COMMON_3264) && defined(ONLY_32)
@@ -1382,7 +1525,7 @@ extern void insmod_usage(void); /* Use the copy in the 64 bit version */
void insmod_usage(void)
{
fputs("Usage:\n"
- "insmod [-fhkLmnpqrsSvVxXyY] [-e persist_name] [-o module_name] [-O blob_name] [-P prefix] module [ symbol=value ... ]\n"
+ "insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name] [-o module_name] [-O blob_name] [-P prefix] module [ symbol=value ... ]\n"
"\n"
" module Name of a loadable kernel module ('.o' can be omitted)\n"
" -f, --force Force loading under wrong kernel version\n"
@@ -1402,6 +1545,7 @@ void insmod_usage(void)
" -X, --export Do export externs (default)\n"
" -y, --noksymoops Do not add ksymoops symbols\n"
" -Y, --ksymoops Do add ksymoops symbols (default)\n"
+ " -N, --numeric-only Only check the numeric part of the kernel version\n"
" -e persist_name\n"
" --persist=persist_name Filename to hold any persistent data from the module\n"
" -o NAME, --name=NAME Set internal module name to NAME\n"
@@ -1445,8 +1589,8 @@ int INSMOD_MAIN(int argc, char **argv)
{"export", 0, 0, 'X'},
{"noksymoops", 0, 0, 'y'},
{"ksymoops", 0, 0, 'Y'},
-
{"persist", 1, 0, 'e'},
+ {"numeric-only", 1, 0, 'N'},
{"name", 1, 0, 'o'},
{"blob", 1, 0, 'O'},
{"prefix", 1, 0, 'P'},
@@ -1472,6 +1616,7 @@ int INSMOD_MAIN(int argc, char **argv)
int force_kallsyms = 0;
int persist_parms = 0; /* does module have persistent parms? */
int i;
+ int gpl;
error_file = "insmod";
@@ -1479,7 +1624,7 @@ int INSMOD_MAIN(int argc, char **argv)
errors = optind = 0;
/* Process the command line. */
- while ((o = getopt_long(argc, argv, "fhkLmnpqrsSvVxXyYe:o:O:P:R:",
+ while ((o = getopt_long(argc, argv, "fhkLmnpqrsSvVxXyYNe:o:O:P:R:",
&long_opts[0], NULL)) != EOF)
switch (o) {
case 'f': /* force loading */
@@ -1533,6 +1678,9 @@ int INSMOD_MAIN(int argc, char **argv)
case 'Y': /* do define ksymoops symbols */
flag_ksymoops = 1;
break;
+ case 'N': /* only check numeric part of kernel version */
+ flag_numeric_only = 1;
+ break;
case 'e': /* persistent data filename */
free(persist_name);
@@ -1566,8 +1714,10 @@ int INSMOD_MAIN(int argc, char **argv)
(!persistdir || !*persistdir)) {
free(persist_name);
persist_name = NULL;
- if (flag_verbose)
+ if (flag_verbose) {
lprintf("insmod: -e \"\" ignored, no persistdir");
+ ++warnings;
+ }
}
if (m_name == NULL) {
@@ -1624,7 +1774,7 @@ int INSMOD_MAIN(int argc, char **argv)
*/
set_ncv_prefix(NULL);
- for (i = 0; i < n_module_stat; ++i) {
+ for (i = 0; !noload && i < n_module_stat; ++i) {
if (strcmp(module_stat[i].name, m_name) == 0) {
error("a module named %s already exists", m_name);
goto out;
@@ -1652,6 +1802,7 @@ int INSMOD_MAIN(int argc, char **argv)
"\t%s was compiled for kernel version %s\n"
"\twhile this kernel is version %s",
filename, m_strversion, k_strversion);
+ ++warnings;
} else {
if (!quiet)
error("kernel-module version mismatch\n"
@@ -1665,7 +1816,13 @@ int INSMOD_MAIN(int argc, char **argv)
obj_set_symbol_compare(f, ncv_strcmp, ncv_symbol_hash);
/* Let the module know about the kernel symbols. */
- add_kernel_symbols(f);
+ gpl = obj_gpl_license(f, NULL) == 0;
+ add_kernel_symbols(f, gpl);
+
+#ifdef ARCH_ppc64
+ if (!ppc64_process_syms (f))
+ goto out;
+#endif
/* Allocate common symbols, symbol tables, and string tables.
*
@@ -1684,17 +1841,33 @@ int INSMOD_MAIN(int argc, char **argv)
goto out;
#endif
- if (!obj_check_undefineds(f, quiet)) /* DEPMOD, obj_clear_undefineds */
+ arch_create_got(f); /* DEPMOD */
+ if (!obj_check_undefineds(f, quiet)) { /* DEPMOD, obj_clear_undefineds */
+ if (!gpl && !quiet) {
+ if (gplonly_seen)
+ error("\n"
+ "Hint: You are trying to load a module without a GPL compatible license\n"
+ " and it has unresolved symbols. The module may be trying to access\n"
+ " GPLONLY symbols but the problem is more likely to be a coding or\n"
+ " user error. Contact the module supplier for assistance, only they\n"
+ " can help you.\n");
+ else
+ error("\n"
+ "Hint: You are trying to load a module without a GPL compatible license\n"
+ " and it has unresolved symbols. Contact the module supplier for\n"
+ " assistance, only they can help you.\n");
+ }
goto out;
+ }
obj_allocate_commons(f); /* DEPMOD */
check_module_parameters(f, &persist_parms);
+ check_tainted_module(f, noload);
if (optind < argc) {
if (!process_module_arguments(f, argc - optind, argv + optind, 1))
goto out;
}
- arch_create_got(f); /* DEPMOD */
hide_special_symbols(f);
if (persist_parms && persist_name && *persist_name) {
@@ -1842,6 +2015,9 @@ int INSMOD_MAIN(int argc, char **argv)
} else {
errno = 0;
m_addr = create_module(m_name, m_size);
+#ifdef ARCH_ppc64
+ m_addr |= ppc64_module_base (f);
+#endif
switch (errno) {
case 0:
break;
@@ -1917,6 +2093,8 @@ int INSMOD_MAIN(int argc, char **argv)
delete_module(m_name);
goto out;
}
+ if (warnings && !noload)
+ lprintf("Module %s loaded, with warnings", m_name);
exit_status = 0;
out:
@@ -1941,7 +2119,6 @@ int insmod_main(int argc, char **argv)
#endif /* defined(COMMON_3264) && defined(ONLY_64) */
-
int insmod_call(char * full_filename, char * params)
{
int argc = 2;
diff --git a/mdk-stage1/insmod-modutils/obj/Makefile b/mdk-stage1/insmod-modutils/obj/Makefile
index 34b5df2d9..d44b2a6c6 100644
--- a/mdk-stage1/insmod-modutils/obj/Makefile
+++ b/mdk-stage1/insmod-modutils/obj/Makefile
@@ -23,11 +23,16 @@ INCS = -I./../include
DEFS = -D_GNU_SOURCE -DELF_MACHINE_H='"elf_$(ARCH).h"' -DARCH_$(ARCH) -DCONFIG_ROOT_CHECK_OFF=0
-OBJS = obj_kallsyms.o obj_common.o obj_load.o obj_reloc.o obj_$(ARCH).o
+ifeq (x86_64, $(ARCH))
+DEFS += -Wno-error
+endif
+
+OBJS = obj_kallsyms.o obj_common.o obj_load.o obj_reloc.o obj_$(ARCH).o \
+ obj_gpl_license.o
libobj.a: $(OBJS)
ar cru $@ $^
ranlib $@
-.c.o:
- gcc $(CFLAGS) $(DEFS) $(INCS) $(GLIBC_INCLUDES) -c $<
+%.o: %.c
+ $(DIET) gcc $(CFLAGS) $(DEFS) $(INCS) $(INCLUDES) -c $<
diff --git a/mdk-stage1/insmod-modutils/obj/obj_alpha.c b/mdk-stage1/insmod-modutils/obj/obj_alpha.c
index 4006b3442..175012716 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_alpha.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_alpha.c
@@ -19,8 +19,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <string.h>
#include <assert.h>
@@ -28,6 +26,12 @@
#include <obj.h>
#include <util.h>
+
+/* This relocation got renamed, and the change hasn't propagated yet. */
+#ifndef R_ALPHA_GPREL16
+#define R_ALPHA_GPREL16 R_ALPHA_IMMED_GP_16
+#endif
+
/*======================================================================*/
struct alpha_got_entry
@@ -100,6 +104,7 @@ arch_apply_relocation (struct obj_file *f,
unsigned long *lloc = (unsigned long *)(targsec->contents + rel->r_offset);
unsigned int *iloc = (unsigned int *)lloc;
+ unsigned short *sloc = (unsigned short *)lloc;
Elf64_Addr dot = targsec->header.sh_addr + rel->r_offset;
Elf64_Addr gp = af->got->header.sh_addr + 0x8000;
@@ -115,6 +120,30 @@ arch_apply_relocation (struct obj_file *f,
*lloc += v;
break;
+ case R_ALPHA_GPREL16:
+ v -= gp;
+ if ((Elf64_Sxword)v > 0x7fff
+ || (Elf64_Sxword)v < -(Elf64_Sxword)0x8000)
+ ret = obj_reloc_overflow;
+ *sloc = v;
+ break;
+
+ case R_ALPHA_GPRELLOW:
+ /* GPRELLOW does not overflow. Errors are seen in the
+ corresponding GPRELHIGH. */
+ v -= gp;
+ *sloc = v;
+ break;
+
+ case R_ALPHA_GPRELHIGH:
+ v -= gp;
+ v = ((Elf64_Sxword)v >> 16) + ((v >> 15) & 1);
+ if ((Elf64_Sxword)v > 0x7fff
+ || (Elf64_Sxword)v < -(Elf64_Sxword)0x8000)
+ ret = obj_reloc_overflow;
+ *sloc = v;
+ break;
+
case R_ALPHA_GPREL32:
v -= gp;
if ((Elf64_Sxword)v > 0x7fffffff
@@ -138,7 +167,7 @@ arch_apply_relocation (struct obj_file *f,
gotent->reloc_done = 1;
}
- *iloc = (*iloc & ~0xffff) | ((gotent->offset - 0x8000) & 0xffff);
+ *sloc = gotent->offset - 0x8000;
}
break;
@@ -233,19 +262,12 @@ arch_create_got (struct obj_file *f)
for (; rel < relend; ++rel)
{
struct alpha_got_entry *ent;
- Elf64_Sym *extsym;
struct alpha_symbol *intsym;
- const char *name;
if (ELF64_R_TYPE(rel->r_info) != R_ALPHA_LITERAL)
continue;
- extsym = &symtab[ELF64_R_SYM(rel->r_info)];
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- intsym = (struct alpha_symbol *)obj_find_symbol(&af->root, name);
+ obj_find_relsym(intsym, f, &af->root, rel, symtab, strtab);
for (ent = intsym->got_entries; ent ; ent = ent->next)
if (ent->addend == rel->r_addend)
@@ -270,9 +292,10 @@ arch_create_got (struct obj_file *f)
}
/* We always want a .got section so that we always have a GP for
- use with GPDISP and GPREL32 relocs. Besides, if the section
+ use with GPDISP and GPREL relocs. Besides, if the section
is empty we don't use up space anyway. */
- af->got = obj_create_alloced_section(&af->root, ".got", 8, offset);
+ af->got = obj_create_alloced_section(&af->root, ".got", 8, offset,
+ SHF_WRITE | SHF_ALPHA_GPREL);
return 1;
}
diff --git a/mdk-stage1/insmod-modutils/obj/obj_arm.c b/mdk-stage1/insmod-modutils/obj/obj_arm.c
index 7a843f947..78b53700c 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_arm.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_arm.c
@@ -21,8 +21,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <string.h>
#include <assert.h>
@@ -201,7 +199,7 @@ arch_create_got (struct obj_file *f)
struct obj_section *sec, *syms, *strs;
ElfW(Rel) *rel, *relend;
ElfW(Sym) *symtab, *extsym;
- const char *strtab, *name;
+ const char *strtab;
struct arm_symbol *intsym;
struct arm_plt_entry *pe;
struct arm_got_entry *ge;
@@ -227,11 +225,7 @@ arch_create_got (struct obj_file *f)
switch(ELF32_R_TYPE(rel->r_info)) {
case R_ARM_PC24:
case R_ARM_PLT32:
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- intsym = (struct arm_symbol *) obj_find_symbol(f, name);
+ obj_find_relsym(intsym, f, f, rel, symtab, strtab);
pe = &intsym->pltent;
@@ -252,11 +246,7 @@ arch_create_got (struct obj_file *f)
break;
case R_ARM_GOT32:
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- intsym = (struct arm_symbol *) obj_find_symbol(f, name);
+ obj_find_relsym(intsym, f, f, rel, symtab, strtab);
ge = (struct arm_got_entry *) &intsym->gotent;
if (! ge->allocated)
@@ -282,14 +272,16 @@ arch_create_got (struct obj_file *f)
obj_extend_section(sec, got_offset);
else
{
- sec = obj_create_alloced_section(f, ".got", 8, got_offset);
+ sec = obj_create_alloced_section(f, ".got", 8, got_offset,
+ SHF_WRITE);
assert(sec);
}
afile->got = sec;
}
if (plt_offset)
- afile->plt = obj_create_alloced_section(f, ".plt", 8, plt_offset);
+ afile->plt = obj_create_alloced_section(f, ".plt", 8, plt_offset,
+ SHF_WRITE);
return 1;
}
diff --git a/mdk-stage1/insmod-modutils/obj/obj_common.c b/mdk-stage1/insmod-modutils/obj/obj_common.c
index 2a6606c94..a957ff1be 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_common.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_common.c
@@ -19,11 +19,10 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <string.h>
#include <assert.h>
+#include <alloca.h>
#include <obj.h>
#include <util.h>
@@ -229,6 +228,14 @@ obj_find_section (struct obj_file *f, const char *name)
return NULL;
}
+#if defined (ARCH_alpha)
+#define ARCH_SHF_SHORT SHF_ALPHA_GPREL
+#elif defined (ARCH_ia64)
+#define ARCH_SHF_SHORT SHF_IA_64_SHORT
+#else
+#define ARCH_SHF_SHORT 0
+#endif
+
static int
obj_load_order_prio(struct obj_section *a)
{
@@ -237,15 +244,24 @@ obj_load_order_prio(struct obj_section *a)
af = a->header.sh_flags;
ac = 0;
- if (a->name[0] != '.' || strlen(a->name) != 10 ||
- strcmp(a->name + 5, ".init")) ac |= 32;
- if (af & SHF_ALLOC) ac |= 16;
+ if (a->name[0] != '.'
+ || strlen(a->name) != 10
+ || strcmp(a->name + 5, ".init"))
+ ac |= 64;
+ if (af & SHF_ALLOC) ac |= 32;
+ if (af & SHF_EXECINSTR) ac |= 16;
if (!(af & SHF_WRITE)) ac |= 8;
- if (af & SHF_EXECINSTR) ac |= 4;
- if (a->header.sh_type != SHT_NOBITS) ac |= 2;
-#if defined(ARCH_ia64)
- if (af & SHF_IA_64_SHORT) ac -= 1;
-#endif
+ if (a->header.sh_type != SHT_NOBITS) ac |= 4;
+ /* Desired order is
+ P S AC & 7
+ .data 1 0 4
+ .got 1 1 3
+ .sdata 1 1 1
+ .sbss 0 1 1
+ .bss 0 0 0 */
+ if (strcmp (a->name, ".got") == 0) ac |= 2;
+ if (af & ARCH_SHF_SHORT)
+ ac = (ac & ~4) | 1;
return ac;
}
@@ -264,7 +280,8 @@ obj_insert_section_load_order (struct obj_file *f, struct obj_section *sec)
struct obj_section *
obj_create_alloced_section (struct obj_file *f, const char *name,
- unsigned long align, unsigned long size)
+ unsigned long align, unsigned long size,
+ unsigned long flags)
{
int newidx = f->header.e_shnum++;
struct obj_section *sec;
@@ -274,7 +291,7 @@ obj_create_alloced_section (struct obj_file *f, const char *name,
memset(sec, 0, sizeof(*sec));
sec->header.sh_type = SHT_PROGBITS;
- sec->header.sh_flags = SHF_WRITE|SHF_ALLOC;
+ sec->header.sh_flags = flags | SHF_ALLOC;
sec->header.sh_size = size;
sec->header.sh_addralign = align;
sec->name = name;
diff --git a/mdk-stage1/insmod-modutils/obj/obj_hppa.c b/mdk-stage1/insmod-modutils/obj/obj_hppa.c
index 4207e692e..a6f703c5d 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_hppa.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_hppa.c
@@ -64,36 +64,6 @@ enum hppa_fsel
e_rrsel
};
-/* This could be a call to obj_create_alloced_section() followed
- * by an overwrite of sec->header.sh_flags.
- */
-
-struct obj_section *
-obj_hppa_create_alloced_section (struct obj_file *f, const char *name,
- unsigned long align, unsigned long size,
- unsigned long sh_flags)
-{
- int newidx = f->header.e_shnum++;
- struct obj_section *sec;
-
- f->sections = xrealloc(f->sections, (newidx+1) * sizeof(sec));
- f->sections[newidx] = sec = arch_new_section();
-
- memset(sec, 0, sizeof(*sec));
- sec->header.sh_type = SHT_PROGBITS;
- sec->header.sh_flags = sh_flags;
- sec->header.sh_size = size;
- sec->header.sh_addralign = align;
- sec->name = name;
- sec->idx = newidx;
- if (size)
- sec->contents = xmalloc(size);
-
- obj_insert_section_load_order(f, sec);
-
- return sec;
-}
-
struct obj_file *
arch_new_file (void)
{
@@ -383,14 +353,14 @@ hppa_rebuild_insn (insn, value, r_format)
This is significantly less complex than what we do for shared
libraries because, obviously, modules are not shared. Also we have
no issues related to symbol visibility, lazy linking, etc.
- The kernels dp is fixed (at symbol data_start), and we can fix up any
+ The kernels dp is fixed (at symbol $global$), and we can fix up any
DPREL refs in the module to use that same dp value.
- All PCREL17F refs result in a stub with the following format:
+ All PCREL* refs result in a stub with the following format:
ldil L'func_addr,%r1
be,n R'func_addr(%sr4,%r1)
- Note, all PCREL17F get a stub, regardless of whether they are
+ Note, all PCREL* get a stub, regardless of whether they are
local or external. With local ones, and external ones to other
modules, there is a good chance we could manage without the stub.
I'll leave that for a future optimisation.
@@ -411,7 +381,8 @@ arch_create_got(struct obj_file *f)
/* Create stub section.
* XXX set flags, see obj_ia64.c
*/
- hfile->stub = obj_create_alloced_section(f, ".stub", STUB_SIZE, 0);
+ hfile->stub = obj_create_alloced_section(f, ".stub", STUB_SIZE,
+ 0, SHF_WRITE);
/* Actually this is a lot like check_relocs() in a BFD backend. We
walk all sections and all their relocations and look for ones
@@ -446,30 +417,17 @@ arch_create_got(struct obj_file *f)
continue;
case R_PARISC_PCREL17F:
+ case R_PARISC_PCREL22F:
need_stub = 1;
break;
}
if (need_stub)
{
- Elf32_Sym *extsym;
hppa_symbol_t *hsym;
- char const *name;
int local;
- unsigned long symndx;
- symndx = ELF32_R_SYM(rel->r_info);
- extsym = symtab + symndx;
- if (ELF32_ST_BIND(extsym->st_info) == STB_LOCAL)
- hsym = (hppa_symbol_t *) f->local_symtab[symndx];
- else
- {
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- hsym = (hppa_symbol_t *)obj_find_symbol(f, name);
- }
+ obj_find_relsym(hsym, f, f, rel, symtab, strtab);
local = hsym->root.secidx <= SHN_HIRESERVE;
if (need_stub)
@@ -529,12 +487,17 @@ arch_apply_relocation(struct obj_file *f,
/* Easy. */
break;
+ case R_PARISC_SEGREL32:
+ v -= f->baseaddr;
+ break;
+
case R_PARISC_DPREL21L:
case R_PARISC_DPREL14R:
v -= dp;
break;
case R_PARISC_PCREL17F:
+ case R_PARISC_PCREL22F:
/* Find an import stub. */
assert(hsym->stub != NULL);
assert(hfile->stub != NULL);
@@ -566,6 +529,8 @@ arch_apply_relocation(struct obj_file *f,
case R_PARISC_DIR32:
case R_PARISC_PLABEL32:
case R_PARISC_PCREL17F:
+ case R_PARISC_SEGREL32:
+ case R_PARISC_PCREL22F:
fsel = e_fsel;
break;
@@ -602,6 +567,7 @@ arch_apply_relocation(struct obj_file *f,
{
case R_PARISC_DIR32:
case R_PARISC_PLABEL32:
+ case R_PARISC_SEGREL32:
r_format = 32;
break;
@@ -619,6 +585,10 @@ arch_apply_relocation(struct obj_file *f,
r_format = 14;
break;
+ case R_PARISC_PCREL22F:
+ r_format = 22;
+ break;
+
default:
abort();
}
@@ -652,13 +622,13 @@ arch_archdata (struct obj_file *f, struct obj_section *sec)
int i;
hppa_file_t *hfile = (hppa_file_t *)f;
- /* Initialise dp to the kernels dp (symbol data_start)
+ /* Initialise dp to the kernels dp (symbol $global$)
*/
for (i = 0, s = ksyms; i < nksyms; i++, s++)
- if (!strcmp((char *)s->name, "data_start"))
+ if (!strcmp((char *)s->name, "$global$"))
break;
if (i >= nksyms) {
- error("Cannot initialise dp, 'data_start' not found\n");
+ error("Cannot initialise dp, '$global$' not found\n");
return 1;
}
hfile->dp = s->value;
diff --git a/mdk-stage1/insmod-modutils/obj/obj_hppa64.c b/mdk-stage1/insmod-modutils/obj/obj_hppa64.c
index fe32911ff..d9f1ada9d 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_hppa64.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_hppa64.c
@@ -22,8 +22,6 @@
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ident "$Id$"
-
#include <string.h>
#include <assert.h>
#include <stdlib.h>
@@ -94,15 +92,15 @@ typedef struct _hppa64_file_t
* e8 20 d0 00 bve (r1)
* 53 7b 00 30 ldd 18(dp),dp
*
- * We need a different stub for millicode calls, which doesn't screw
- * dp:
+ * We need a different stub for millicode calls, which doesn't depend on
+ * or modify dp:
*
- * 53 61 00 00 ldd 0(dp),r1
- * R_PARISC_LTOFF14R <.got entry offset from dp>
+ * 20 20 00 00 ldil 0,r1
+ * R_PARISC_DIR21L <addr of kernels opd entry>
+ * 34 21 00 00 ldo 0(r1),r1
+ * R_PARISC_DIR14R <addr of kernels opd entry>
* 50 21 00 20 ldd 10(r1),r1
- * e8 20 d0 00 bve (r1)
- * 08 00 02 40 nop
- *
+ * e8 20 d0 02 bve,n (r1)
*/
/* NOTE: to keep the code cleaner we make all stubs the same size.
@@ -120,10 +118,10 @@ unsigned char hppa64_stub_extern[] =
unsigned char hppa64_stub_millicode[] =
{
- 0x53, 0x61, 0x00, 0x00,
+ 0x20, 0x20, 0x00, 0x00,
+ 0x34, 0x21, 0x00, 0x00,
0x50, 0x21, 0x00, 0x20,
- 0xe8, 0x20, 0xd0, 0x00,
- 0x08, 0x00, 0x02, 0x40,
+ 0xe8, 0x20, 0xd0, 0x02,
};
/*======================================================================*/
@@ -361,6 +359,7 @@ arch_create_got(struct obj_file *f)
need_stub = TRUE;
break;
case R_PARISC_DIR64:
+ case R_PARISC_SEGREL32:
break;
case R_PARISC_FPTR64:
/* This is a simple OPD entry (only created for local symbols,
@@ -372,26 +371,10 @@ arch_create_got(struct obj_file *f)
if (need_got || need_opd || need_stub)
{
- Elf64_Sym *extsym;
hppa64_symbol_t *isym;
- const char *name;
int local;
- unsigned long symndx;
- symndx = ELF64_R_SYM(rel->r_info);
- extsym = &symtab[symndx];
- if (ELF64_ST_BIND(extsym->st_info) == STB_LOCAL)
- {
- isym = (hppa64_symbol_t *) f->local_symtab[symndx];
- }
- else
- {
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- isym = (hppa64_symbol_t *)obj_find_symbol(f, name);
- }
+ obj_find_relsym(isym, f, f, rel, symtab, strtab);
local = isym->root.secidx <= SHN_HIRESERVE;
if (need_stub)
@@ -574,16 +557,24 @@ arch_apply_relocation(struct obj_file *f,
*/
unsigned char *stub;
- if (!strncmp(isym->root.name, "$$", 2))
+ if (!strncmp(isym->root.name, "$$", 2)) {
stub = hppa64_stub_millicode;
- else
+ memcpy((Elf64_Addr *)(hfile->stub->contents + se->offset),
+ stub, SIZEOF_STUB);
+ v = (Elf64_Addr)isym->root.value;
+ ret = patch_21l(v, (Elf64_Word *)(hfile->stub->contents + se->offset));
+ if (ret == obj_reloc_ok)
+ ret = patch_14r(v, (Elf64_Word *)(hfile->stub->contents + se->offset + 4));
+ }
+ else {
stub = hppa64_stub_extern;
- se->reloc_done = TRUE;
memcpy((Elf64_Addr *)(hfile->stub->contents + se->offset),
stub, SIZEOF_STUB);
v = (Elf64_Addr)(hfile->got->header.sh_addr + ge->offset) - gp;
ret = patch_14r2(v, (Elf64_Word *)(hfile->stub->contents + se->offset));
}
+ se->reloc_done = TRUE;
+ }
v = hfile->stub->header.sh_addr + se->offset;
}
v = v - dot - 8;
@@ -597,6 +588,11 @@ arch_apply_relocation(struct obj_file *f,
loc[1] = v;
}
break;
+ case R_PARISC_SEGREL32:
+ {
+ loc[0] = v - f->baseaddr;
+ }
+ break;
case R_PARISC_FPTR64:
{
assert(isym != NULL);
diff --git a/mdk-stage1/insmod-modutils/obj/obj_i386.c b/mdk-stage1/insmod-modutils/obj/obj_i386.c
index 28df3448c..fcbce8e04 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_i386.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_i386.c
@@ -19,8 +19,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <string.h>
#include <assert.h>
@@ -183,9 +181,7 @@ arch_create_got (struct obj_file *f)
for (; rel < relend; ++rel)
{
- Elf32_Sym *extsym;
struct i386_symbol *intsym;
- const char *name;
switch (ELF32_R_TYPE(rel->r_info))
{
@@ -199,12 +195,7 @@ arch_create_got (struct obj_file *f)
break;
}
- extsym = &symtab[ELF32_R_SYM(rel->r_info)];
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- intsym = (struct i386_symbol *)obj_find_symbol(&ifile->root, name);
+ obj_find_relsym(intsym, f, &ifile->root, rel, symtab, strtab);
if (!intsym->gotent.offset_done)
{
@@ -216,7 +207,8 @@ arch_create_got (struct obj_file *f)
}
if (offset > 0 || gotneeded)
- ifile->got = obj_create_alloced_section(&ifile->root, ".got", 4, offset);
+ ifile->got = obj_create_alloced_section(&ifile->root, ".got", 4, offset,
+ SHF_WRITE);
return 1;
}
diff --git a/mdk-stage1/insmod-modutils/obj/obj_ia64.c b/mdk-stage1/insmod-modutils/obj/obj_ia64.c
index 4f92c5d27..d207a9042 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_ia64.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_ia64.c
@@ -19,8 +19,6 @@
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ident "$Id$"
-
#include <string.h>
#include <assert.h>
#include <stdlib.h>
@@ -255,14 +253,15 @@ obj_ia64_ins_imm64(Elf64_Xword v, Elf64_Addr *bundle, Elf64_Xword slot)
{
Elf64_Xword ins;
- assert(slot == 1);
+ assert(slot == 2);
+
ins = obj_ia64_ins_extract_from_bundle(bundle, slot);
- ins &= 0xffffffee000101ff;
- ins |= ((v & 0x8000000000000000) >> 28) | ((v & 0x0000000000200000)) |
+ ins &= 0xffffffe000101fff;
+ ins |= ((v & 0x8000000000000000) >> 27) | ((v & 0x0000000000200000)) |
((v & 0x00000000001f0000) << 6) | ((v & 0x000000000000ff80) << 20) |
((v & 0x000000000000007f) << 13);
obj_ia64_ins_insert_in_bundle(bundle, slot, ins);
- obj_ia64_ins_insert_in_bundle(bundle, ++slot, ((v & 0x7fffffffffc00000) >> 22));
+ obj_ia64_ins_insert_in_bundle(bundle, --slot, ((v & 0x7fffffffffc00000) >> 22));
return obj_reloc_ok;
}
@@ -295,30 +294,6 @@ obj_ia64_generate_plt(Elf64_Addr v,
(Elf64_Addr *)(ifile->pltt->contents + pltent->text_offset), 0);
}
-struct obj_section *
-obj_ia64_create_alloced_section (struct obj_file *f, const char *name,
- unsigned long align, unsigned long size, unsigned long sh_flags)
-{
- int newidx = f->header.e_shnum++;
- struct obj_section *sec;
-
- f->sections = xrealloc(f->sections, (newidx+1) * sizeof(sec));
- f->sections[newidx] = sec = arch_new_section();
-
- memset(sec, 0, sizeof(*sec));
- sec->header.sh_type = SHT_PROGBITS;
- sec->header.sh_flags = sh_flags;
- sec->header.sh_size = size;
- sec->header.sh_addralign = align;
- sec->name = name;
- sec->idx = newidx;
- if (size)
- sec->contents = xmalloc(size);
-
- obj_insert_section_load_order(f, sec);
-
- return sec;
-}
/*======================================================================*/
@@ -457,26 +432,10 @@ arch_create_got(struct obj_file *f)
if (need_got || need_opd || need_plt)
{
- Elf64_Sym *extsym;
ia64_symbol_t *isym;
- const char *name;
int local;
- unsigned long symndx;
- symndx = ELF64_R_SYM(rel->r_info);
- extsym = &symtab[symndx];
- if (ELF64_ST_BIND(extsym->st_info) == STB_LOCAL)
- {
- isym = (ia64_symbol_t *) f->local_symtab[symndx];
- }
- else
- {
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- isym = (ia64_symbol_t *)obj_find_symbol(f, name);
- }
+ obj_find_relsym(isym, f, f, rel, symtab, strtab);
local = isym->root.secidx <= SHN_HIRESERVE;
if (need_plt)
@@ -545,20 +504,22 @@ arch_create_got(struct obj_file *f)
}
}
- ifile->got = obj_ia64_create_alloced_section(f, ".got", 8, got_offset,
- (SHF_ALLOC | SHF_WRITE | SHF_IA_64_SHORT));
+ ifile->got = obj_create_alloced_section(f, ".got", 8, got_offset,
+ SHF_WRITE | SHF_IA_64_SHORT);
assert(ifile->got != NULL);
- ifile->opd = obj_ia64_create_alloced_section(f, ".opd", 16, opd_offset,
- (SHF_ALLOC | SHF_WRITE | SHF_IA_64_SHORT));
+ ifile->opd = obj_create_alloced_section(f, ".opd", 16, opd_offset,
+ SHF_WRITE | SHF_IA_64_SHORT);
assert(ifile->opd != NULL);
if (plt_text_offset > 0)
{
- ifile->pltt = obj_ia64_create_alloced_section(f, ".plt", 16,
- plt_text_offset, (SHF_ALLOC | SHF_EXECINSTR | SHF_IA_64_SHORT));
- ifile->pltd = obj_ia64_create_alloced_section(f, ".IA_64.pltoff",
- 16, plt_data_offset, (SHF_ALLOC | SHF_WRITE | SHF_IA_64_SHORT));
+ ifile->pltt = obj_create_alloced_section(f, ".plt", 16,
+ plt_text_offset,
+ SHF_WRITE | SHF_IA_64_SHORT);
+ ifile->pltd = obj_create_alloced_section(f, ".IA_64.pltoff", 16,
+ plt_data_offset,
+ SHF_WRITE | SHF_IA_64_SHORT);
assert(ifile->pltt != NULL);
assert(ifile->pltd != NULL);
}
@@ -950,12 +911,8 @@ arch_apply_relocation(struct obj_file *f,
case R_IA64_SEGREL32LSB : /* @segrel(sym + add), data4 LSB */
case R_IA64_SEGREL64LSB : /* @segrel(sym + add), data8 LSB */
- if (targsec->header.sh_type & SHT_NOBITS)
- v = ifile->bss - v;
- else if (targsec->header.sh_flags & SHF_EXECINSTR)
- v = ifile->text - v;
- else
- v = ifile->data - v;
+ /* Only one segment for modules, see segment_base in arch_archdata */
+ v -= f->sections[1]->header.sh_addr;
if (r_info == R_IA64_SEGREL32LSB)
COPY_32LSB(loc, v);
else
diff --git a/mdk-stage1/insmod-modutils/obj/obj_kallsyms.c b/mdk-stage1/insmod-modutils/obj/obj_kallsyms.c
index 8385fb892..1836141e9 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_kallsyms.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_kallsyms.c
@@ -17,8 +17,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
@@ -37,7 +35,7 @@ static void
append_string (const char *s, char **strings,
ElfW(Word) *strings_size, ElfW(Word) *strings_left)
{
- int l = strlen(s) + 1;
+ size_t l = strlen(s) + 1;
while (l > *strings_left) {
*strings = xrealloc(*strings, *strings_size += EXPAND_BY);
*strings_left += EXPAND_BY;
@@ -54,7 +52,7 @@ append_symbol (const struct kallsyms_symbol *s,
struct kallsyms_symbol **symbols,
ElfW(Word) *symbols_size, ElfW(Word) *symbols_left)
{
- int l = sizeof(*s);
+ size_t l = sizeof(*s);
while (l > *symbols_left) {
*symbols = xrealloc(*symbols, *symbols_size += EXPAND_BY);
*symbols_left += EXPAND_BY;
diff --git a/mdk-stage1/insmod-modutils/obj/obj_load.c b/mdk-stage1/insmod-modutils/obj/obj_load.c
index 4db20a998..62977acb7 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_load.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_load.c
@@ -21,8 +21,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <alloca.h>
#include <string.h>
#include <stdlib.h>
@@ -52,7 +50,7 @@ obj_load (int fp, Elf32_Half e_type, const char *filename)
gzf_lseek(fp, 0, SEEK_SET);
if (gzf_read(fp, &f->header, sizeof(f->header)) != sizeof(f->header))
{
- error("error reading ELF header %s: %m", filename);
+ error("cannot read ELF header from %s", filename);
return NULL;
}
@@ -257,7 +255,7 @@ obj_load (int fp, Elf32_Half e_type, const char *filename)
{
case SHT_RELM:
{
- unsigned long nrel, j;
+ unsigned long nrel, j, nsyms;
ElfW(RelM) *rel;
struct obj_section *symtab;
char *strtab;
@@ -273,34 +271,25 @@ obj_load (int fp, Elf32_Half e_type, const char *filename)
nrel = sec->header.sh_size / sizeof(ElfW(RelM));
rel = (ElfW(RelM) *) sec->contents;
symtab = f->sections[sec->header.sh_link];
+ nsyms = symtab->header.sh_size / symtab->header.sh_entsize;
strtab = f->sections[symtab->header.sh_link]->contents;
/* Save the relocate type in each symbol entry. */
for (j = 0; j < nrel; ++j, ++rel)
{
- ElfW(Sym) *extsym;
struct obj_symbol *intsym;
unsigned long symndx;
symndx = ELFW(R_SYM)(rel->r_info);
if (symndx)
{
- extsym = ((ElfW(Sym) *) symtab->contents) + symndx;
- if (ELFW(ST_BIND)(extsym->st_info) == STB_LOCAL)
- {
- /* Local symbols we look up in the local table to be sure
- we get the one that is really intended. */
- intsym = f->local_symtab[symndx];
- }
- else
+ if (symndx >= nsyms)
{
- /* Others we look up in the hash table. */
- const char *name;
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- intsym = obj_find_symbol(f, name);
+ error("%s: Bad symbol index: %08lx >= %08lx",
+ filename, symndx, nsyms);
+ continue;
}
+
+ obj_find_relsym(intsym, f, f, rel, (ElfW(Sym) *)(symtab->contents), strtab);
intsym->r_type = ELFW(R_TYPE)(rel->r_info);
}
}
diff --git a/mdk-stage1/insmod-modutils/obj/obj_m68k.c b/mdk-stage1/insmod-modutils/obj/obj_m68k.c
index cb485aed7..abc070bca 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_m68k.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_m68k.c
@@ -19,8 +19,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stddef.h>
#include <module.h>
#include <obj.h>
diff --git a/mdk-stage1/insmod-modutils/obj/obj_mips.c b/mdk-stage1/insmod-modutils/obj/obj_mips.c
index c2315b659..2db0791b6 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_mips.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_mips.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <string.h>
#include <stdlib.h>
#include <assert.h>
@@ -232,7 +230,25 @@ arch_finalize_section_address(struct obj_file *f, Elf32_Addr base)
}
int
-arch_archdata (struct obj_file *fin, struct obj_section *sec)
+arch_archdata (struct obj_file *f, struct obj_section *archdata_sec)
{
+ struct archdata {
+ unsigned tgt_long __start___dbe_table;
+ unsigned tgt_long __stop___dbe_table;
+ } *ad;
+ struct obj_section *sec;
+
+ if (archdata_sec->contents)
+ free(archdata_sec->contents);
+ archdata_sec->header.sh_size = 0;
+ sec = obj_find_section(f, "__dbe_table");
+ if (sec) {
+ ad = (struct archdata *) (archdata_sec->contents) = xmalloc(sizeof(*ad));
+ memset(ad, 0, sizeof(*ad));
+ archdata_sec->header.sh_size = sizeof(*ad);
+ ad->__start___dbe_table = sec->header.sh_addr;
+ ad->__stop___dbe_table = sec->header.sh_addr + sec->header.sh_size;
+ }
+
return 0;
}
diff --git a/mdk-stage1/insmod-modutils/obj/obj_ppc.c b/mdk-stage1/insmod-modutils/obj/obj_ppc.c
index 89bb8e46b..4889454f2 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_ppc.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_ppc.c
@@ -20,8 +20,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stddef.h>
#include <module.h>
#include <obj.h>
@@ -180,8 +178,8 @@ arch_create_got (struct obj_file *f)
int i, offset;
struct obj_section *sec, *syms, *strs;
ElfW(Rela) *rel, *relend;
- ElfW(Sym) *symtab, *extsym;
- const char *strtab, *name;
+ ElfW(Sym) *symtab;
+ const char *strtab;
struct ppc_symbol *intsym;
struct ppc_plt_entry *pe;
@@ -203,12 +201,7 @@ arch_create_got (struct obj_file *f)
{
if (ELF32_R_TYPE(rel->r_info) != R_PPC_REL24)
continue;
- extsym = &symtab[ELF32_R_SYM(rel->r_info)];
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- intsym = (struct ppc_symbol *) obj_find_symbol(f, name);
+ obj_find_relsym(intsym, f, f, rel, symtab, strtab);
for (pe = intsym->plt_entries; pe != NULL; pe = pe->next)
if (pe->addend == rel->r_addend)
@@ -226,7 +219,7 @@ arch_create_got (struct obj_file *f)
}
}
- pf->plt = obj_create_alloced_section(f, ".plt", 16, offset);
+ pf->plt = obj_create_alloced_section(f, ".plt", 16, offset, SHF_WRITE);
return 1;
}
@@ -249,7 +242,25 @@ arch_finalize_section_address(struct obj_file *f, Elf32_Addr base)
}
int
-arch_archdata (struct obj_file *fin, struct obj_section *sec)
+arch_archdata (struct obj_file *f, struct obj_section *archdata_sec)
{
+ struct archdata {
+ unsigned tgt_long __start___ftr_fixup;
+ unsigned tgt_long __stop___ftr_fixup;
+ } *ad;
+ struct obj_section *sec;
+
+ if (archdata_sec->contents)
+ free(archdata_sec->contents);
+ archdata_sec->header.sh_size = 0;
+ sec = obj_find_section(f, "__ftr_fixup");
+ if (sec) {
+ ad = (struct archdata *) (archdata_sec->contents) = xmalloc(sizeof(*ad));
+ memset(ad, 0, sizeof(*ad));
+ archdata_sec->header.sh_size = sizeof(*ad);
+ ad->__start___ftr_fixup = sec->header.sh_addr;
+ ad->__stop___ftr_fixup = sec->header.sh_addr + sec->header.sh_size;
+ }
+
return 0;
}
diff --git a/mdk-stage1/insmod-modutils/obj/obj_reloc.c b/mdk-stage1/insmod-modutils/obj/obj_reloc.c
index f5f2de90d..3f2c8aab0 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_reloc.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_reloc.c
@@ -19,8 +19,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <string.h>
#include <assert.h>
#include <alloca.h>
@@ -48,7 +46,7 @@ obj_string_patch(struct obj_file *f, int secidx, ElfW(Addr) offset,
strsec = obj_find_section(f, ".kstrtab");
if (strsec == NULL)
{
- strsec = obj_create_alloced_section(f, ".kstrtab", 1, len);
+ strsec = obj_create_alloced_section(f, ".kstrtab", 1, len, 0);
p->string_offset = 0;
loc = strsec->contents;
}
@@ -284,6 +282,7 @@ obj_relocate (struct obj_file *f, ElfW(Addr) base)
ElfW(RelM) *rel, *relend;
ElfW(Sym) *symtab;
const char *strtab;
+ unsigned long nsyms;
relsec = f->sections[i];
if (relsec->header.sh_type != SHT_RELM)
@@ -293,9 +292,13 @@ obj_relocate (struct obj_file *f, ElfW(Addr) base)
targsec = f->sections[relsec->header.sh_info];
strsec = f->sections[symsec->header.sh_link];
+ if (!(targsec->header.sh_flags & SHF_ALLOC))
+ continue;
+
rel = (ElfW(RelM) *)relsec->contents;
relend = rel + (relsec->header.sh_size / sizeof(ElfW(RelM)));
symtab = (ElfW(Sym) *)symsec->contents;
+ nsyms = symsec->header.sh_size / symsec->header.sh_entsize;
strtab = (const char *)strsec->contents;
for (; rel < relend; ++rel)
@@ -303,7 +306,6 @@ obj_relocate (struct obj_file *f, ElfW(Addr) base)
ElfW(Addr) value = 0;
struct obj_symbol *intsym = NULL;
unsigned long symndx;
- ElfW(Sym) *extsym = 0;
const char *errmsg;
/* Attempt to find a value to use for this relocation. */
@@ -313,33 +315,18 @@ obj_relocate (struct obj_file *f, ElfW(Addr) base)
{
/* Note we've already checked for undefined symbols. */
- extsym = &symtab[symndx];
- if (ELFW(ST_BIND)(extsym->st_info) == STB_LOCAL)
- {
- /* Local symbols we look up in the local table to be sure
- we get the one that is really intended. */
- intsym = f->local_symtab[symndx];
- }
- else
+ if (symndx >= nsyms)
{
- /* Others we look up in the hash table. */
- const char *name;
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- intsym = obj_find_symbol(f, name);
+ error("Bad symbol index: %08lx >= %08lx",
+ symndx, nsyms);
+ continue;
}
+ obj_find_relsym(intsym, f, f, rel, symtab, strtab);
value = obj_symbol_final_value(f, intsym);
}
#if SHT_RELM == SHT_RELA
-#if defined(__alpha__) && defined(AXP_BROKEN_GAS)
- /* Work around a nasty GAS bug, that is fixed as of 2.7.0.9. */
- if (!extsym || !extsym->st_name ||
- ELFW(ST_BIND)(extsym->st_info) != STB_LOCAL)
-#endif
value += rel->r_addend;
#endif
@@ -362,17 +349,8 @@ obj_relocate (struct obj_file *f, ElfW(Addr) base)
errmsg = "Modules compiled with -mconstant-gp cannot be loaded";
goto bad_reloc;
bad_reloc:
- if (extsym)
- {
error("%s of type %ld for %s", errmsg,
- (long)ELFW(R_TYPE)(rel->r_info),
- strtab + extsym->st_name);
- }
- else
- {
- error("%s of type %ld", errmsg,
- (long)ELFW(R_TYPE)(rel->r_info));
- }
+ (long)ELFW(R_TYPE)(rel->r_info), intsym->name);
ret = 0;
break;
}
diff --git a/mdk-stage1/insmod-modutils/obj/obj_s390.c b/mdk-stage1/insmod-modutils/obj/obj_s390.c
index 3da72e771..a76e28479 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_s390.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_s390.c
@@ -1,6 +1,10 @@
-/* S/390 specific support for Elf loading and relocation.
- Copyright 1996, 1997 Linux International.
+/* IBM S/390 31-bit specific support for Elf loading and relocation.
+ Copyright 2000, 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation.
+ Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ Derived from obj/obj_i386.c:
+ Copyright 1996, 1997 Linux International.
Contributed by Richard Henderson <rth@tamu.edu>
This file is part of the Linux modutils.
@@ -19,8 +23,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <string.h>
#include <assert.h>
@@ -31,22 +33,31 @@
/*======================================================================*/
+struct s390_plt_entry
+{
+ long offset;
+ int allocated:1;
+ int initialized:1;
+};
+
struct s390_got_entry
{
- int offset;
- unsigned offset_done : 1;
+ long offset;
+ unsigned allocated:1;
unsigned reloc_done : 1;
};
struct s390_file
{
struct obj_file root;
+ struct obj_section *plt;
struct obj_section *got;
};
struct s390_symbol
{
struct obj_symbol root;
+ struct s390_plt_entry pltent;
struct s390_got_entry gotent;
};
@@ -59,6 +70,7 @@ arch_new_file (void)
struct s390_file *f;
f = xmalloc(sizeof(*f));
f->got = NULL;
+ f->plt = NULL;
return &f->root;
}
@@ -74,6 +86,7 @@ arch_new_symbol (void)
struct s390_symbol *sym;
sym = xmalloc(sizeof(*sym));
memset(&sym->gotent, 0, sizeof(sym->gotent));
+ memset(&sym->pltent, 0, sizeof(sym->pltent));
return &sym->root;
}
@@ -95,12 +108,14 @@ arch_apply_relocation (struct obj_file *f,
Elf32_Rela *rel,
Elf32_Addr v)
{
- struct s390_file *ifile = (struct s390_file *)f;
- struct s390_symbol *isym = (struct s390_symbol *)sym;
+ struct s390_file *ifile = (struct s390_file *) f;
+ struct s390_symbol *isym = (struct s390_symbol *) sym;
+ struct s390_plt_entry *pe;
Elf32_Addr *loc = (Elf32_Addr *)(targsec->contents + rel->r_offset);
Elf32_Addr dot = targsec->header.sh_addr + rel->r_offset;
Elf32_Addr got = ifile->got ? ifile->got->header.sh_addr : 0;
+ Elf32_Addr plt = ifile->plt ? ifile->plt->header.sh_addr : 0;
enum obj_reloc ret = obj_reloc_ok;
@@ -110,12 +125,48 @@ arch_apply_relocation (struct obj_file *f,
break;
case R_390_32:
- *loc += v;
+ *(unsigned int *) loc += v;
+ break;
+ case R_390_16:
+ *(unsigned short *) loc += v;
+ break;
+ case R_390_8:
+ *(unsigned char *) loc += v;
break;
- case R_390_PLT32:
case R_390_PC32:
- *loc += v - dot;
+ *(unsigned int *) loc += v - dot;
+ break;
+ case R_390_PC16DBL:
+ *(unsigned short *) loc += (v - dot) >> 1;
+ break;
+ case R_390_PC16:
+ *(unsigned short *) loc += v - dot;
+ break;
+
+ case R_390_PLT32:
+ case R_390_PLT16DBL:
+ /* find the plt entry and initialize it. */
+ assert(isym != NULL);
+ pe = (struct s390_plt_entry *) &isym->pltent;
+ assert(pe->allocated);
+ if (pe->initialized == 0) {
+ unsigned int *ip = (unsigned int *)(ifile->plt->contents + pe->offset);
+ ip[0] = 0x0d105810; /* basr 1,0; lg 1,10(1); br 1 */
+ ip[1] = 0x100607f1;
+ if (ELF32_R_TYPE(rel->r_info) == R_390_PLT16DBL)
+ ip[2] = v - 2;
+ else
+ ip[2] = v;
+ pe->initialized = 1;
+ }
+
+ /* Insert relative distance to target. */
+ v = plt + pe->offset - dot;
+ if (ELF32_R_TYPE(rel->r_info) == R_390_PLT32)
+ *(unsigned int *) loc = (unsigned int) v;
+ else if (ELF32_R_TYPE(rel->r_info) == R_390_PLT16DBL)
+ *(unsigned short *) loc = (unsigned short) ((v + 2) >> 1);
break;
case R_390_GLOB_DAT:
@@ -129,17 +180,25 @@ arch_apply_relocation (struct obj_file *f,
case R_390_GOTPC:
assert(got != 0);
- *loc += got - dot;
+ *(unsigned long *) loc += got - dot;
break;
+ case R_390_GOT12:
+ case R_390_GOT16:
case R_390_GOT32:
assert(isym != NULL);
+ assert(got != 0);
if (!isym->gotent.reloc_done)
{
isym->gotent.reloc_done = 1;
*(Elf32_Addr *)(ifile->got->contents + isym->gotent.offset) = v;
}
- *loc += isym->gotent.offset;
+ if (ELF32_R_TYPE(rel->r_info) == R_390_GOT12)
+ *(unsigned short *) loc |= (*(unsigned short *) loc + isym->gotent.offset) & 0xfff;
+ else if (ELF32_R_TYPE(rel->r_info) == R_390_GOT16)
+ *(unsigned short *) loc += isym->gotent.offset;
+ else if (ELF32_R_TYPE(rel->r_info) == R_390_GOT32)
+ *(unsigned int *) loc += isym->gotent.offset;
break;
case R_390_GOTOFF:
@@ -158,71 +217,98 @@ arch_apply_relocation (struct obj_file *f,
int
arch_create_got (struct obj_file *f)
{
- struct s390_file *ifile = (struct s390_file *)f;
- int i, n, offset = 0, gotneeded = 0;
+ struct s390_file *ifile = (struct s390_file *) f;
+ int i, got_offset = 0, plt_offset = 0, gotneeded = 0;
- n = ifile->root.header.e_shnum;
- for (i = 0; i < n; ++i)
+ for (i = 0; i < f->header.e_shnum; ++i)
{
struct obj_section *relsec, *symsec, *strsec;
- Elf32_Rel *rel, *relend;
+ Elf32_Rela *rel, *relend;
Elf32_Sym *symtab;
const char *strtab;
- relsec = ifile->root.sections[i];
- if (relsec->header.sh_type != SHT_REL)
+ relsec = f->sections[i];
+ if (relsec->header.sh_type != SHT_RELA)
continue;
- symsec = ifile->root.sections[relsec->header.sh_link];
- strsec = ifile->root.sections[symsec->header.sh_link];
+ symsec = f->sections[relsec->header.sh_link];
+ strsec = f->sections[symsec->header.sh_link];
- rel = (Elf32_Rel *)relsec->contents;
- relend = rel + (relsec->header.sh_size / sizeof(Elf32_Rel));
+ rel = (Elf32_Rela *)relsec->contents;
+ relend = rel + (relsec->header.sh_size / sizeof(Elf32_Rela));
symtab = (Elf32_Sym *)symsec->contents;
strtab = (const char *)strsec->contents;
for (; rel < relend; ++rel)
{
- Elf32_Sym *extsym;
struct s390_symbol *intsym;
- const char *name;
-
- switch (ELF32_R_TYPE(rel->r_info))
- {
+ struct s390_plt_entry *pe;
+ struct s390_got_entry *ge;
+
+ switch (ELF32_R_TYPE(rel->r_info)) {
+ /* These four relocations refer to a plt entry. */
+ case R_390_PLT16DBL:
+ case R_390_PLT32:
+ obj_find_relsym(intsym, f, f, rel, symtab, strtab);
+ assert(intsym);
+ pe = &intsym->pltent;
+ if (!pe->allocated) {
+ pe->allocated = 1;
+ pe->offset = plt_offset;
+ plt_offset += 12;
+ }
+ break;
+ /* The next three don't need got entries but the address
+ of the got itself. */
case R_390_GOTPC:
case R_390_GOTOFF:
gotneeded = 1;
- default:
- continue;
+ break;
+ case R_390_GOT12:
+ case R_390_GOT16:
case R_390_GOT32:
- break;
+ obj_find_relsym(intsym, f, f, rel, symtab, strtab);
+ assert(intsym);
+ ge = (struct s390_got_entry *) &intsym->gotent;
+ if (!ge->allocated) {
+ ge->allocated = 1;
+ ge->offset = got_offset;
+ got_offset += sizeof(void*);
}
+ break;
- extsym = &symtab[ELF32_R_SYM(rel->r_info)];
- if (extsym->st_name)
- name = strtab + extsym->st_name;
- else
- name = f->sections[extsym->st_shndx]->name;
- intsym = (struct s390_symbol *)obj_find_symbol(&ifile->root, name);
-
- if (!intsym->gotent.offset_done)
- {
- intsym->gotent.offset_done = 1;
- intsym->gotent.offset = offset;
- offset += 4;
+ default:
+ break;
}
}
}
- if (offset > 0 || gotneeded)
- ifile->got = obj_create_alloced_section(&ifile->root, ".got", 4, offset);
+ if (got_offset > 0 || gotneeded) {
+ struct obj_section *gotsec;
+ struct obj_symbol *gotsym;
+
+ gotsec = obj_find_section(f, ".got");
+ if (gotsec == NULL)
+ gotsec = obj_create_alloced_section(f, ".got", 4, got_offset, SHF_WRITE);
+ else
+ obj_extend_section(gotsec, got_offset);
+ gotsym = obj_add_symbol(f, "_GLOBAL_OFFSET_TABLE_", -1,
+ ELFW(ST_INFO) (STB_LOCAL, STT_OBJECT),
+ gotsec->idx, 0, 0);
+ gotsym->secidx = gotsec->idx; /* mark the symbol as defined */
+ ifile->got = gotsec;
+ }
+
+ if (plt_offset > 0)
+ ifile->plt = obj_create_alloced_section(f, ".plt", 4, plt_offset,
+ SHF_WRITE);
return 1;
}
int
-arch_init_module (struct obj_file *f, struct module *m)
+arch_init_module (struct obj_file *f, struct module *mod)
{
return 1;
}
@@ -243,3 +329,4 @@ arch_archdata (struct obj_file *fin, struct obj_section *sec)
{
return 0;
}
+
diff --git a/mdk-stage1/insmod-modutils/obj/obj_sparc.c b/mdk-stage1/insmod-modutils/obj/obj_sparc.c
index 1a03c9090..d1eb3da44 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_sparc.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_sparc.c
@@ -19,8 +19,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stddef.h>
#include <module.h>
#include <obj.h>
diff --git a/mdk-stage1/insmod-modutils/obj/obj_sparc64.c b/mdk-stage1/insmod-modutils/obj/obj_sparc64.c
index 84e8d18a0..f025667f8 100644
--- a/mdk-stage1/insmod-modutils/obj/obj_sparc64.c
+++ b/mdk-stage1/insmod-modutils/obj/obj_sparc64.c
@@ -19,8 +19,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stddef.h>
#include <module.h>
#include <obj.h>
diff --git a/mdk-stage1/insmod-modutils/util/Makefile b/mdk-stage1/insmod-modutils/util/Makefile
index 763f046f2..dd8107435 100644
--- a/mdk-stage1/insmod-modutils/util/Makefile
+++ b/mdk-stage1/insmod-modutils/util/Makefile
@@ -13,7 +13,7 @@ top_dir = ../..
include $(top_dir)/Makefile.common
-all: libutil.a libutil-STANDALONE.a #libutil-DIET.a
+all: libutil.a libutil-STANDALONE.a
clean:
rm -f *.o *.a
@@ -36,7 +36,7 @@ libutil-STANDALONE.a: $(OBJS) logger-standalone.o
ranlib $@
logger-standalone.o: logger.c
- gcc $(CFLAGS) $(DEFS) $(INCS) $(GLIBC_INCLUDES) -o $@ -D_STANDALONE_ -c logger.c
+ $(DIET) gcc $(CFLAGS) $(DEFS) $(INCS) $(INCLUDES) -o $@ -D_STANDALONE_ -c logger.c
-.c.o:
- gcc $(CFLAGS) $(DEFS) $(INCS) $(GLIBC_INCLUDES) -c $<
+%.o: %.c
+ $(DIET) gcc $(CFLAGS) $(DEFS) $(INCS) $(INCLUDES) -c $<
diff --git a/mdk-stage1/insmod-modutils/util/alias.h b/mdk-stage1/insmod-modutils/util/alias.h
index c925a04f3..7d0c08938 100644
--- a/mdk-stage1/insmod-modutils/util/alias.h
+++ b/mdk-stage1/insmod-modutils/util/alias.h
@@ -42,6 +42,7 @@ char *tbtype[] =
*/
char *aliaslist[] =
{
+ "binfmt-0000 off",
"binfmt-204 binfmt_aout",
"binfmt-263 binfmt_aout",
"binfmt-264 binfmt_aout",
@@ -75,15 +76,23 @@ char *aliaslist[] =
"block-major-34 ide-probe-mod",
"block-major-37 ide-tape",
"block-major-44 ftl", /* from David Woodhouse <dwmw2@infradead.org> */
+ "block-major-46 pcd",
+ "block-major-47 pf",
"block-major-56 ide-probe-mod",
"block-major-57 ide-probe-mod",
+ "block-major-58 lvm-mod",
"block-major-88 ide-probe-mod",
"block-major-89 ide-probe-mod",
"block-major-90 ide-probe-mod",
"block-major-91 ide-probe-mod",
"block-major-93 nftl", /* from David Woodhouse <dwmw2@infradead.org> */
+ "block-major-97 pg",
+#if !defined(__s390__) && !defined(__s390x__)
"char-major-4 serial",
+#else
+ "char-major-4 off",
+#endif
"char-major-5 serial",
"char-major-6 lp",
"char-major-9 st",
@@ -102,13 +111,15 @@ char *aliaslist[] =
"char-major-10-131 wdt", /* /dev/temperature Machine internal temperature */
/* /dev/hwtrap Hardware fault trap */
/* /dev/exttrp External device trap */
- "char-major-10-135 off", /* rtc cannot be compiled as a module */
+ "char-major-10-135 rtc", /* /dev/rtc Real time clock */
"char-major-10-139 openprom", /* /dev/openprom Linux/Sparc interface */
"char-major-10-144 nvram", /* from Tigran Aivazian <tigran@sco.COM> */
"char-major-10-157 applicom", /* from David Woodhouse <dwmw2@infradead.org> */
"char-major-10-175 agpgart", /* /dev/agpgart GART AGP mapping access */
"char-major-10-184 microcode", /* Tigran Aivazian <tigran@veritas.com> */
+ "char-major-13 input",
+ "char-major-13-32 mousedev",
"char-major-14 soundcore",
"char-major-19 cyclades",
"char-major-20 cyclades",
@@ -126,9 +137,15 @@ char *aliaslist[] =
"char-major-58 esp",
"char-major-63 kdebug",
"char-major-90 mtdchar", /* from David Woodhouse <dwmw2@infradead.org> */
+ "char-major-96 pt",
"char-major-99 ppdev",
"char-major-107 3dfx", /* from Tigran Aivazian <tigran@sco.COM> */
+ "char-major-108 ppp_generic",
+ "char-major-109 lvm-mod",
"char-major-161 ircomm-tty",
+ "char-major-171 raw1394",
+ "char-major-195 NVdriver",
+ "char-major-200 vxspec",
"dos msdos",
"dummy0 dummy",
@@ -139,6 +156,7 @@ char *aliaslist[] =
"md-personality-2 raid0",
"md-personality-3 raid1",
"md-personality-4 raid5",
+ "md-personality-7 multipath",
"net-pf-1 unix", /* PF_UNIX 1 Unix domain sockets */
"net-pf-2 ipv4", /* PF_INET 2 Internet IP Protocol */
@@ -149,29 +167,52 @@ char *aliaslist[] =
/* PF_BRIDGE 7 Multiprotocol bridge */
/* PF_AAL5 8 Reserved for Werner's ATM */
/* PF_X25 9 Reserved for X.25 project */
- /* PF_INET6 10 IP version 6 */
+ "net-pf-10 off", /* PF_INET6 10 IP version 6 */
/* next two from <dairiki@matthews.dairiki.org> Thanks! */
"net-pf-17 af_packet",
"net-pf-19 off", /* acorn econet */
"netalias-2 ip_alias",
+
+ /* To be able to attach some dongles */
+ "irlan0 irlan",
+ "irda-dongle-0 tekram",
+ "irda-dongle-1 esi",
+ "irda-dongle-2 actisys",
+ "irda-dongle-3 actisys",
+ "irda-dongle-4 girbil",
+ "irda-dongle-5 litelink",
+ "irda-dongle-6 airport",
+ "irda-dongle-7 old_belkin",
+
"plip0 plip",
"plip1 plip",
+ "tunl0 ipip",
"cipcb0 cipcb",
"cipcb1 cipcb",
"cipcb2 cipcb",
"cipcb3 cipcb",
+#if defined(__s390__) || defined(__s390x__)
+ "ctc0 ctc",
+ "ctc1 ctc",
+ "ctc2 ctc",
+ "iucv0 netiucv",
+ "iucv1 netiucv",
+#endif
"ppp0 ppp",
"ppp1 ppp",
- "scsi_hostadapter off", /* if not in config file */
"slip0 slip",
"slip1 slip",
"tty-ldisc-1 slip",
- "tty-ldisc-3 ppp",
+ "tty-ldisc-3 ppp_async",
+ "tty-ldisc-11 irtty", /* IrDA over a normal serial port, or a serial port compatible IrDA port */
+ "tty-ldisc-14 ppp_synctty",
+ "ppp-compress-18 ppp_mppe",
"ppp-compress-21 bsd_comp",
"ppp-compress-24 ppp_deflate",
"ppp-compress-26 ppp_deflate",
+ "ppp ppp_async", /* for 2.4 */
#ifndef __sparc__
"parport_lowlevel parport_pc",
@@ -179,8 +220,6 @@ char *aliaslist[] =
"parport_lowlevel parport_ax",
#endif
- "tty-ldisc-11 irtty",
-
"usbdevfs usbcore",
NULL /* marks the end of the list! */
@@ -205,6 +244,9 @@ char *optlist[] =
*/
char *above[] =
{
+ "hid keybdev mousedev",
+ "usbmouse hid",
+ "wacom evdev",
NULL /* marks the end of the list! */
};
@@ -219,19 +261,43 @@ char *below[] =
};
/*
+ * This is the list of pre-defined "post-install"s,
+ * used to execute commands after loading modules.
+ * /etc/modules.conf can add entries but not remove them.
+ */
+char *post_install[] =
+{
+ "binfmt_misc /bin/mount -t binfmt_misc none /proc/sys/fs/binfmt_misc > /dev/null 2>&1 || :",
+ NULL
+};
+
+/*
+ * This is the list of pre-defined "pre-remove"s,
+ * used to execute commands before unloading modules.
+ * /etc/modules.conf can add entries but not remove them.
+ */
+char *pre_remove[] =
+{
+ "binfmt_misc /bin/umount /proc/sys/fs/binfmt_misc > /dev/null 2>&1 || :",
+ NULL
+};
+
+/*
* This is the list of pre-defined "prune"s,
* used to exclude paths from scan of /lib/modules.
* /etc/modules.conf can add entries but not remove them.
*/
char *prune[] =
{
- ".rhkmvtag",
"modules.dep",
+ "modules.description",
"modules.generic_string",
"modules.pcimap",
"modules.isapnpmap",
"modules.usbmap",
"modules.parportmap",
+ "modules.ieee1394map",
+ "modules.pnpbiosmap",
"System.map",
".config",
"build", /* symlink to source tree */
diff --git a/mdk-stage1/insmod-modutils/util/arch64.c b/mdk-stage1/insmod-modutils/util/arch64.c
index 4d5ace223..90886d16b 100644
--- a/mdk-stage1/insmod-modutils/util/arch64.c
+++ b/mdk-stage1/insmod-modutils/util/arch64.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <string.h>
#include <sys/utsname.h>
@@ -30,6 +28,16 @@
/* Indicate if the current machine uses 64 bit architecture */
int arch64(void)
{
- struct utsname u;
- return(!uname(&u) && strstr(u.machine, "64"));
+ struct utsname uts;
+ char *uname_m;
+ if (uname(&uts))
+ return(0);
+ if ((uname_m = getenv("UNAME_MACHINE"))) {
+ int l = strlen(uname_m);
+ if (l >= sizeof(uts.machine))
+ l = sizeof(uts.machine)-1;
+ memcpy(uts.machine, uname_m, l);
+ uts.machine[l] = '\0';
+ }
+ return(strstr(uts.machine, "64") != NULL);
}
diff --git a/mdk-stage1/insmod-modutils/util/config.c b/mdk-stage1/insmod-modutils/util/config.c
index a860920f6..7568d955f 100644
--- a/mdk-stage1/insmod-modutils/util/config.c
+++ b/mdk-stage1/insmod-modutils/util/config.c
@@ -116,6 +116,8 @@ struct gen_files gen_file[] = {
{"isapnpmap", NULL, 0},
{"usbmap", NULL, 0},
{"parportmap", NULL, 0},
+ {"ieee1394map", NULL, 0},
+ {"pnpbiosmap", NULL, 0},
{"dep", NULL, 0},
};
@@ -491,7 +493,7 @@ static int do_read(int all, char *force_ver, char *base_dir, char *conf_file, in
int state[MAX_LEVEL + 1]; /* nested "if" */
int level = 0;
char buf[3000];
- char tmpline[100];
+ char tmpline[PATH_MAX];
char **pathp;
char *envpath;
char *version;
@@ -692,6 +694,20 @@ static int do_read(int all, char *force_ver, char *base_dir, char *conf_file, in
if (all && aliaslist[0])
n_aliases = build_list(aliaslist, &aliases, version, 0);
+ /*
+ * Build predef postinstalls
+ */
+ if (all && post_install[0])
+ for (i=0 ; post_install[i] ; i++ )
+ decode_exec(xstrdup(post_install[i]), EXEC_POST_INSTALL);
+
+ /*
+ * Build predef preremoves
+ */
+ if (all && pre_remove[0])
+ for (i=0 ; pre_remove[i] ; i++ )
+ decode_exec(xstrdup(pre_remove[i]), EXEC_PRE_REMOVE);
+
/* Order and priority is now: (MODPATH + modules.conf) || (predefs + modules.conf) */
if ((envpath = getenv("MODPATH")) != NULL && !safemode) {
size_t len;
@@ -1073,7 +1089,7 @@ static int do_read(int all, char *force_ver, char *base_dir, char *conf_file, in
arg2 = next_word(arg);
meta_expand(arg2, &g, NULL, version, ME_ALL);
snprintf(env, sizeof(env), "%s=%s", arg, (g.pathc ? g.pathv[0] : ""));
- putenv(env);
+ putenv(xstrdup(env));
one_err = 0;
}
@@ -1108,7 +1124,7 @@ static int do_read(int all, char *force_ver, char *base_dir, char *conf_file, in
/*
* prune
*/
- else if (all && !assgn && strcmp(parm, "prune") == 0) {
+ else if (!assgn && strcmp(parm, "prune") == 0) {
decode_list(&n_prunelist, &prunelist, arg, adding, version, 0);
one_err = 0;
}
@@ -1349,9 +1365,11 @@ static int do_read(int all, char *force_ver, char *base_dir, char *conf_file, in
return ret;
/* else */
+ if (depth == 0) {
/* Check we have names for generated files */
for (i = 0; !ret && i < gen_file_count; ++i)
ret = gen_file_check(gen_file+i, &g, base_dir, version);
+ }
return ret;
}
@@ -1367,7 +1385,12 @@ int config_read(int all, char *force_ver, char *base_dir, char *conf_file)
return -1;
}
+ if (access(MODUTILS_MACROS, R_OK) == 0){
+ r = do_read(all, force_ver, base_dir, MODUTILS_MACROS, 0);
+ r = do_read(all, force_ver, "", conf_file, 1);
+ } else {
r = do_read(all, force_ver, base_dir, conf_file, 0);
+ }
if (quick && !r && !need_update (force_ver, base_dir))
exit (0);
diff --git a/mdk-stage1/insmod-modutils/util/logger.c b/mdk-stage1/insmod-modutils/util/logger.c
index 3b790df5a..4774a0beb 100644
--- a/mdk-stage1/insmod-modutils/util/logger.c
+++ b/mdk-stage1/insmod-modutils/util/logger.c
@@ -20,8 +20,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
-#ident "$Id$"
-
+#include <limits.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
@@ -32,9 +31,10 @@
/*======================================================================*/
+int log;
+
int errors;
const char *error_file;
-int log;
#define STOREMSG
#ifdef STOREMSG
@@ -44,29 +44,12 @@ struct cbuf {
char *msg;
} *head, *tail;
-static void savemsg(int type, char *msg)
-{
- struct cbuf *me = (struct cbuf *)xmalloc(sizeof(struct cbuf));
- char *s = xstrdup(msg);
-
- me->next = NULL;
- me->type = type;
- me->msg = s;
-
- if (tail)
- tail->next = me;
- else
- head = me;
- tail = me;
-}
-
-#endif /* STOREMSG */
-
static void dumpmsg(void)
{
for (;head; head = head->next)
syslog(head->type, "%s", head->msg);
}
+#endif /* STOREMSG */
void setsyslog(const char *program)
{
@@ -77,13 +60,27 @@ void setsyslog(const char *program)
log = 1;
}
-
-
#ifdef _STANDALONE_
static int silent;
const char *program_name;
+static void savemsg(int type, char *msg)
+{
+ struct cbuf *me = (struct cbuf *)xmalloc(sizeof(struct cbuf));
+ char *s = xstrdup(msg);
+
+ me->next = NULL;
+ me->type = type;
+ me->msg = s;
+
+ if (tail)
+ tail->next = me;
+ else
+ head = me;
+ tail = me;
+}
+
void error(const char *fmt,...)
{
va_list args;
@@ -91,7 +88,7 @@ void error(const char *fmt,...)
if (silent)
;
else if (log) {
- char buf[1024];
+ char buf[2*PATH_MAX];
int n;
if (error_file)
@@ -124,7 +121,7 @@ void lprintf(const char *fmt,...)
if (silent);
else if (log) {
- char buf[1024];
+ char buf[2*PATH_MAX];
va_start(args, fmt);
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
@@ -140,7 +137,6 @@ void lprintf(const char *fmt,...)
putchar('\n');
}
}
-
#else /* _STANDALONE_ */
#include "../../log.h"
void error(const char *s, ...)
@@ -161,3 +157,4 @@ void lprintf(const char *s, ...)
va_end(p);
}
#endif
+
diff --git a/mdk-stage1/insmod-modutils/util/snap_shot.c b/mdk-stage1/insmod-modutils/util/snap_shot.c
index ae0cc7c79..adf54d28e 100644
--- a/mdk-stage1/insmod-modutils/util/snap_shot.c
+++ b/mdk-stage1/insmod-modutils/util/snap_shot.c
@@ -20,8 +20,6 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
-#ident "$Id$"
-
#include <errno.h>
#include <stdio.h>
#include <stdarg.h>
@@ -108,6 +106,7 @@ void snap_shot(const char *module_names, int n_module_names)
if (ferror(in))
error("unable to read from %s %m", infile[i]);
fclose(in);
+ fflush(out);
fclose(out);
}
}
@@ -150,5 +149,6 @@ void snap_shot_log(const char *fmt,...)
vfprintf(log, fmt, args);
va_end(args);
fprintf(log, "\n");
+ fflush(log);
fclose(log);
}
diff --git a/mdk-stage1/insmod-modutils/util/sys_cm.c b/mdk-stage1/insmod-modutils/util/sys_cm.c
index 851fb709e..d19a5ba4b 100644
--- a/mdk-stage1/insmod-modutils/util/sys_cm.c
+++ b/mdk-stage1/insmod-modutils/util/sys_cm.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <errno.h>
diff --git a/mdk-stage1/insmod-modutils/util/sys_dm.c b/mdk-stage1/insmod-modutils/util/sys_dm.c
index a166a30f4..611234efa 100644
--- a/mdk-stage1/insmod-modutils/util/sys_dm.c
+++ b/mdk-stage1/insmod-modutils/util/sys_dm.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <errno.h>
diff --git a/mdk-stage1/insmod-modutils/util/sys_gks.c b/mdk-stage1/insmod-modutils/util/sys_gks.c
index f71772c71..b639fc990 100644
--- a/mdk-stage1/insmod-modutils/util/sys_gks.c
+++ b/mdk-stage1/insmod-modutils/util/sys_gks.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <errno.h>
diff --git a/mdk-stage1/insmod-modutils/util/sys_nim.c b/mdk-stage1/insmod-modutils/util/sys_nim.c
index bbe42135c..c267ddf10 100644
--- a/mdk-stage1/insmod-modutils/util/sys_nim.c
+++ b/mdk-stage1/insmod-modutils/util/sys_nim.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <errno.h>
diff --git a/mdk-stage1/insmod-modutils/util/sys_oim.c b/mdk-stage1/insmod-modutils/util/sys_oim.c
index 73ac6be52..b915e36a5 100644
--- a/mdk-stage1/insmod-modutils/util/sys_oim.c
+++ b/mdk-stage1/insmod-modutils/util/sys_oim.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <errno.h>
diff --git a/mdk-stage1/insmod-modutils/util/sys_qm.c b/mdk-stage1/insmod-modutils/util/sys_qm.c
index 119a219a2..ba478832b 100644
--- a/mdk-stage1/insmod-modutils/util/sys_qm.c
+++ b/mdk-stage1/insmod-modutils/util/sys_qm.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include <errno.h>
diff --git a/mdk-stage1/insmod-modutils/util/xmalloc.c b/mdk-stage1/insmod-modutils/util/xmalloc.c
index 9113d47fe..da0be2953 100644
--- a/mdk-stage1/insmod-modutils/util/xmalloc.c
+++ b/mdk-stage1/insmod-modutils/util/xmalloc.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include "util.h"
@@ -29,7 +27,7 @@
void *
xmalloc(size_t size)
{
- void *ptr = malloc(size);
+ void *ptr = malloc(size ? size : 1);
if (!ptr)
{
error("Out of memory");
diff --git a/mdk-stage1/insmod-modutils/util/xrealloc.c b/mdk-stage1/insmod-modutils/util/xrealloc.c
index d287486f7..adc0558f1 100644
--- a/mdk-stage1/insmod-modutils/util/xrealloc.c
+++ b/mdk-stage1/insmod-modutils/util/xrealloc.c
@@ -18,8 +18,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
#include <stdlib.h>
#include "util.h"
diff --git a/mdk-stage1/insmod-modutils/util/xstrcat.c b/mdk-stage1/insmod-modutils/util/xstrcat.c
index abb075c83..ed4a2bf20 100644
--- a/mdk-stage1/insmod-modutils/util/xstrcat.c
+++ b/mdk-stage1/insmod-modutils/util/xstrcat.c
@@ -17,8 +17,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id"
-
#include <stdlib.h>
#include <string.h>
#include "util.h"
diff --git a/mdk-stage1/insmod-modutils/util/xstrdup.c b/mdk-stage1/insmod-modutils/util/xstrdup.c
index 11b289eb0..46889a094 100644
--- a/mdk-stage1/insmod-modutils/util/xstrdup.c
+++ b/mdk-stage1/insmod-modutils/util/xstrdup.c
@@ -18,10 +18,8 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id$"
-
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include "util.h"
diff --git a/mdk-stage1/insmod-modutils/util/xsystem.c b/mdk-stage1/insmod-modutils/util/xsystem.c
index edb995268..8ffa490a9 100644
--- a/mdk-stage1/insmod-modutils/util/xsystem.c
+++ b/mdk-stage1/insmod-modutils/util/xsystem.c
@@ -17,8 +17,6 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#ident "$Id"
-
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
diff --git a/mdk-stage1/log.c b/mdk-stage1/log.c
index 319079fd7..0404ba46b 100644
--- a/mdk-stage1/log.c
+++ b/mdk-stage1/log.c
@@ -37,6 +37,9 @@ static FILE * logfile = NULL;
void vlog_message(const char * s, va_list args)
{
+ va_list args_copy;
+ va_copy(args_copy, args);
+
if (logfile) {
fprintf(logfile, "* ");
vfprintf(logfile, s, args);
@@ -45,10 +48,12 @@ void vlog_message(const char * s, va_list args)
}
if (logtty) {
fprintf(logtty, "* ");
- vfprintf(logtty, s, args);
+ vfprintf(logtty, s, args_copy);
fprintf(logtty, "\n");
fflush(logtty);
}
+
+ va_end(args_copy);
}
diff --git a/mdk-stage1/mar/Makefile b/mdk-stage1/mar/Makefile
index 801785947..93c706119 100644
--- a/mdk-stage1/mar/Makefile
+++ b/mdk-stage1/mar/Makefile
@@ -25,15 +25,10 @@ include $(top_dir)/Makefile.common
TARGETS = libmar.a mar
-ifeq (DIETLIBC, $(L))
-TARGETS += libmar-DIET.a
-endif
-
-
all: $(TARGETS)
clean:
- rm -f *.o libmar.a libmar-DIET.a mar
+ rm -f *.o libmar.a mar
mar: mar-frontend.o mar-extract-only-standalone.o
@@ -44,15 +39,11 @@ libmar.a: mar-extract-only.o
ar -cru $@ $^
ranlib $@
-libmar-DIET.a: mar-extract-only-DIET.o
- ar -cru $@ $^
- ranlib $@
-
-mar-extract-only.o: mar-extract-only.c mar-extract-only.h mar.h
- gcc $(CFLAGS) $(GLIBC_INCLUDES) -c mar-extract-only.c
+dietlibc:
+ make -C ../dietlibc
-mar-extract-only-DIET.o: mar-extract-only.c mar-extract-only.h mar.h
- gcc $(CFLAGS) $(DIETLIBC_INCLUDES) -o $@ -c mar-extract-only.c
+mar-extract-only.o: dietlibc mar-extract-only.c mar-extract-only.h mar.h
+ $(DIET) gcc $(CFLAGS) $(INCLUDES) -c mar-extract-only.c
mar-frontend.o: mar-frontend.c mar.h mar-extract-only.h
gcc $(CFLAGS) $(GLIBC_INCLUDES) -c mar-frontend.c
diff --git a/mdk-stage1/minilibc.c b/mdk-stage1/minilibc.c
index 73d7deae5..d80810fd1 100644
--- a/mdk-stage1/minilibc.c
+++ b/mdk-stage1/minilibc.c
@@ -47,6 +47,15 @@ void __libc_init_first (int __status __attribute__ ((unused)))
{
}
+void __libc_csu_fini(int __status __attribute__ ((unused)))
+{
+}
+
+void __libc_csu_init(int __status __attribute__ ((unused)))
+{
+}
+
+
int __libc_start_main (int (*main) (int, char **, char **), int argc,
char **argv, void (*init) (void) __attribute__ ((unused)), void (*fini) (void) __attribute__ ((unused)),
void (*rtld_fini) (void) __attribute__ ((unused)), void *stack_end __attribute__ ((unused)))
@@ -60,34 +69,92 @@ void _fini (int __status __attribute__ ((unused)))
{
}
-inline int socket(int a, int b, int c)
+#ifdef __x86_64__
+/* x86-64 implementation of signal() derived from glibc sources */
+
+static inline int sigemptyset(sigset_t *set) {
+ *set = 0;
+ return 0;
+}
+
+static inline int sigaddset(sigset_t *set, int sig) {
+ __asm__("btsq %1,%0" : "=m" (*set) : "Ir" (sig - 1L) : "cc");
+ return 0;
+}
+
+#define __NR___rt_sigaction __NR_rt_sigaction
+static inline _syscall3(int,__rt_sigaction,int,signum,const void *,act,void *,oldact)
+#define __NR___rt_sigreturn __NR_rt_sigreturn
+static _syscall1(int,__rt_sigreturn,unsigned long,unused)
+
+static void restore_rt(void) {
+ __rt_sigreturn(0);
+}
+
+int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) {
+ struct sigaction *newact = (struct sigaction *)act;
+ if (act) {
+ newact = __builtin_alloca(sizeof(*newact));
+ newact->sa_handler = act->sa_handler;
+ newact->sa_flags = act->sa_flags | SA_RESTORER;
+ newact->sa_restorer = &restore_rt;
+ newact->sa_mask = act->sa_mask;
+ }
+ return __rt_sigaction(signum, newact, oldact);
+}
+
+__sighandler_t signal(int signum, __sighandler_t action) {
+ struct sigaction sa,oa;
+ sa.sa_handler=action;
+ sigemptyset(&sa.sa_mask);
+ sigaddset(&sa.sa_mask,signum);
+ sa.sa_flags=SA_RESTART;
+ if (sigaction(signum,&sa,&oa))
+ return SIG_ERR;
+ return oa.sa_handler;
+}
+
+#endif
+
+#ifdef __NR_socketcall
+
+int socket(int a, int b, int c)
{
unsigned long args[] = { a, b, c };
return socketcall(SYS_SOCKET, args);
}
-inline int bind(int a, void * b, int c)
+int bind(int a, void * b, int c)
{
unsigned long args[] = { a, (long) b, c };
return socketcall(SYS_BIND, args);
}
-inline int listen(int a, int b)
+int listen(int a, int b)
{
unsigned long args[] = { a, b, 0 };
return socketcall(SYS_LISTEN, args);
}
-inline int accept(int a, void * addr, void * addr2)
+int accept(int a, void * addr, void * addr2)
{
unsigned long args[] = { a, (long) addr, (long) addr2 };
return socketcall(SYS_ACCEPT, args);
}
+#else
+
+_syscall3(int,socket,int,domain,int,type,int,protocol)
+_syscall3(int,bind,int,sockfd,void *,my_addr,int,addrlen)
+_syscall2(int,listen,int,s,int,backlog)
+_syscall3(int,accept,int,s,void *,addr,void *,addrlen)
+
+#endif
+
void sleep(int secs)
{
@@ -248,4 +315,3 @@ void printf(char * fmt, ...)
}
}
}
-
diff --git a/mdk-stage1/minilibc.h b/mdk-stage1/minilibc.h
index e0775e3a0..741298ee2 100644
--- a/mdk-stage1/minilibc.h
+++ b/mdk-stage1/minilibc.h
@@ -44,6 +44,7 @@ extern int errno;
/* Aieee, gcc 2.95+ creates a stub for posix_types.h on i386 which brings
glibc headers in and thus makes __FD_SET etc. not defined with 2.3+ kernels. */
#define _FEATURES_H 1
+#include <linux/posix_types.h>
#include <linux/socket.h>
#include <linux/types.h>
#include <linux/time.h>
@@ -51,13 +52,15 @@ extern int errno;
#include <linux/un.h>
#include <linux/loop.h>
#include <linux/net.h>
-#include <asm/posix_types.h>
#include <asm/termios.h>
#include <asm/ioctls.h>
#include <asm/unistd.h>
#include <asm/fcntl.h>
#include <asm/signal.h>
+#ifndef __NR__newselect
+#define __NR__newselect __NR_select
+#endif
#ifndef MINILIBC_INTERNAL
static inline _syscall5(int,mount,const char *,spec,const char *,dir,const char *,type,unsigned long,rwflag,const void *,data);
@@ -76,8 +79,17 @@ static inline _syscall2(int,chmod,const char * ,path,mode_t,mode)
static inline _syscall2(int,sethostname,const char *,name,int,len)
static inline _syscall2(int,setdomainname,const char *,name,int,len)
static inline _syscall2(int,setpgid,int,name,int,len)
+#ifdef __x86_64__
+extern __sighandler_t signal(int signum, __sighandler_t handler);
+#else
static inline _syscall2(int,signal,int,num,void *,len)
+#endif
+#ifdef __NR_umount
static inline _syscall1(int,umount,const char *,dir)
+#else
+static inline _syscall2(int,umount2,const char *,dir,int,flags)
+static inline int umount(const char * dir) { return umount2(dir, 0); }
+#endif
static inline _syscall1(int,unlink,const char *,fn)
static inline _syscall1(int,close,int,fd)
static inline _syscall1(int,swapoff,const char *,fn)
@@ -112,19 +124,21 @@ static inline _syscall3(int,syslog,int, type, char *, buf, int, len);
#else
static inline _syscall5(int,_newselect,int,n,fd_set *,rd,fd_set *,wr,fd_set *,ex,struct timeval *,timeval);
static inline _syscall3(int,write,int,fd,const char *,buf,unsigned long,count)
+#ifdef __NR_socketcall
static inline _syscall2(int,socketcall,int,code,unsigned long *, args)
+#endif
#define __NR__do_exit __NR_exit
-extern inline _syscall1(int,_do_exit,int,exitcode)
+static inline _syscall1(int,_do_exit,int,exitcode)
#endif
#define select _newselect
extern int errno;
-inline int socket(int a, int b, int c);
-inline int bind(int a, void * b, int c);
-inline int listen(int a, int b);
-inline int accept(int a, void * addr, void * addr2);
+int socket(int a, int b, int c);
+int bind(int a, void * b, int c);
+int listen(int a, int b);
+int accept(int a, void * addr, void * addr2);
void sleep(int secs);
diff --git a/mdk-stage1/modules.c b/mdk-stage1/modules.c
index 083a81e6a..210579c62 100644
--- a/mdk-stage1/modules.c
+++ b/mdk-stage1/modules.c
@@ -55,7 +55,7 @@ static enum insmod_return insmod_archived_file(const char * mod_name, char * opt
strcat(module_name, ".o");
i = mar_extract_file(archive_name, module_name, "/tmp/");
if (i == 1) {
- log_message("file-not-found-in-archive %s (maybe you can try another boot floppy such as 'other.img' for seldom used SCSI modules)", module_name);
+ log_message("file-not-found-in-archive %s (maybe you can try another boot floppy such as 'hdcdrom_usb.img' or 'network_gigabit_usb.img')", module_name);
return INSMOD_FAILED_FILE_NOT_FOUND;
}
if (i != 0)
@@ -201,14 +201,15 @@ int module_already_present(const char * name)
{
FILE * f;
int answ = 0;
- f = fopen("/proc/modules", "rb");
- while (1) {
- char buf[500];
- if (!fgets(buf, sizeof(buf), f)) break;
- if (!strncmp(name, buf, strlen(name)) && buf[strlen(name)] == ' ')
- answ = 1;
- }
- fclose(f);
+ if ((f = fopen("/proc/modules", "rb"))) {
+ while (1) {
+ char buf[500];
+ if (!fgets(buf, sizeof(buf), f)) break;
+ if (!strncmp(name, buf, strlen(name)) && buf[strlen(name)] == ' ')
+ answ = 1;
+ }
+ fclose(f);
+ }
return answ;
}
diff --git a/mdk-stage1/mount.c b/mdk-stage1/mount.c
index fd86a13b7..2511fde99 100644
--- a/mdk-stage1/mount.c
+++ b/mdk-stage1/mount.c
@@ -73,6 +73,30 @@ int ensure_dev_exists(char *dev)
major = 34, minor = 0;
else if (name[2] == 'h')
major = 34, minor = 64;
+ else if (name[2] == 'i')
+ major = 56, minor = 0;
+ else if (name[2] == 'j')
+ major = 56, minor = 64;
+ else if (name[2] == 'k')
+ major = 57, minor = 0;
+ else if (name[2] == 'l')
+ major = 57, minor = 64;
+ else if (name[2] == 'm')
+ major = 88, minor = 0;
+ else if (name[2] == 'n')
+ major = 88, minor = 64;
+ else if (name[2] == 'o')
+ major = 89, minor = 0;
+ else if (name[2] == 'p')
+ major = 89, minor = 64;
+ else if (name[2] == 'q')
+ major = 90, minor = 0;
+ else if (name[2] == 'r')
+ major = 90, minor = 64;
+ else if (name[2] == 's')
+ major = 91, minor = 0;
+ else if (name[2] == 't')
+ major = 91, minor = 64;
else
return -1;
diff --git a/mdk-stage1/network.c b/mdk-stage1/network.c
index ef9dd2814..6e3449f76 100644
--- a/mdk-stage1/network.c
+++ b/mdk-stage1/network.c
@@ -279,7 +279,7 @@ static int save_netinfo(struct interface_info * intf) {
fprintf(f, "NETWORKING=yes\n");
fprintf(f, "FORWARD_IPV4=false\n");
- if (hostname)
+ if (hostname && !intf->boot_proto == BOOTPROTO_DHCP)
fprintf(f, "HOSTNAME=%s\n", hostname);
if (domain)
fprintf(f, "DOMAINNAME=%s\n", domain);
@@ -466,9 +466,10 @@ static enum return_type configure_network(struct interface_info * intf)
dnshostname = mygethostbyaddr(inet_ntoa(intf->ip));
if (dnshostname) {
- hostname = strdup(dnshostname);
- domain = strchr(strdup(hostname), '.') + 1;
- log_message("got hostname and domain from dns entry, %s and %s", hostname, domain);
+ if (intf->boot_proto == BOOTPROTO_STATIC)
+ hostname = strdup(dnshostname);
+ domain = strchr(strdup(dnshostname), '.') + 1;
+ log_message("got hostname and domain from dns entry, %s and %s", dnshostname, domain);
return RETURN_OK;
}
@@ -692,8 +693,8 @@ enum return_type ftp_prepare(void)
enum return_type results;
if (!ramdisk_possible()) {
- stg1_error_message("FTP install needs more than %d Mbytes of memory (detected %d Mbytes).",
- MEM_LIMIT_RAMDISK, total_memory());
+ stg1_error_message("FTP install needs more than %d Mbytes of memory (detected %d Mbytes). You may want to try an NFS install.",
+ MEM_LIMIT_RAMDISK, total_memory());
return RETURN_ERROR;
}
@@ -779,8 +780,8 @@ enum return_type http_prepare(void)
enum return_type results;
if (!ramdisk_possible()) {
- stg1_error_message("HTTP install needs more than %d Mbytes of memory (detected %d Mbytes).",
- MEM_LIMIT_RAMDISK, total_memory());
+ stg1_error_message("HTTP install needs more than %d Mbytes of memory (detected %d Mbytes). You may want to try an NFS install.",
+ MEM_LIMIT_RAMDISK, total_memory());
return RETURN_ERROR;
}
diff --git a/mdk-stage1/newt-frontend.c b/mdk-stage1/newt-frontend.c
index 9d14dfc84..0c740f42f 100644
--- a/mdk-stage1/newt-frontend.c
+++ b/mdk-stage1/newt-frontend.c
@@ -59,11 +59,13 @@ void finish_frontend(void)
void verror_message(char *msg, va_list ap)
{
+ probe_that_type(USB_CONTROLLERS, BUS_USB); // we'd need the keyboard for interactions so...
newtWinMessagev("Error", "Ok", msg, ap);
}
void vinfo_message(char *msg, va_list ap)
{
+ probe_that_type(USB_CONTROLLERS, BUS_USB); // we'd need the keyboard for interactions so...
newtWinMessagev("Notice", "Ok", msg, ap);
}
diff --git a/mdk-stage1/newt/Makefile b/mdk-stage1/newt/Makefile
index 171bcf0cb..b5b3ea8b7 100644
--- a/mdk-stage1/newt/Makefile
+++ b/mdk-stage1/newt/Makefile
@@ -29,28 +29,14 @@ INCS = -I../slang
TARGETS = $(LIBNAME).a
-ifeq (DIETLIBC, $(L))
-TARGETS += $(LIBNAME)-DIET.a
-endif
-
all: $(TARGETS)
clean:
rm -f *.o *.a
-OBJS-DIET = $(subst .o,-DIET.o,$(OBJS))
-
$(LIBNAME).a: $(OBJS)
ar -cru $@ $^
ranlib $@
-$(LIBNAME)-DIET.a: $(OBJS-DIET)
- ar -cru $@ $^
- ranlib $@
-
$(OBJS): %.o: %.c
- gcc $(CFLAGS) $(DEFS) $(INCS) $(GLIBC_INCLUDES) -c $< -o $@
-
-$(OBJS-DIET): %-DIET.o: %.c
- gcc $(CFLAGS) $(DEFS) $(INCS) $(DIETLIBC_INCLUDES) -c $< -o $@
-
+ $(DIET) gcc $(CFLAGS) $(DEFS) $(INCS) $(INCLUDES) -c $< -o $@
diff --git a/mdk-stage1/newt/form.c b/mdk-stage1/newt/form.c
index 4ad465e38..ad7520e95 100644
--- a/mdk-stage1/newt/form.c
+++ b/mdk-stage1/newt/form.c
@@ -2,6 +2,7 @@
#include <slang.h>
#include <stdarg.h>
#include <stdlib.h>
+#include <string.h>
#include <sys/time.h>
#include <sys/types.h>
diff --git a/mdk-stage1/pci-resource/update-pci-ids.pl b/mdk-stage1/pci-resource/update-pci-ids.pl
index 73f1d151b..27ec62845 100755
--- a/mdk-stage1/pci-resource/update-pci-ids.pl
+++ b/mdk-stage1/pci-resource/update-pci-ids.pl
@@ -16,30 +16,56 @@ struct pci_module_map {
const char *module; /* module to load */
};
+struct pci_module_map_full {
+ unsigned short vendor; /* PCI vendor id */
+ unsigned short device; /* PCI device id */
+ unsigned short subvendor; /* PCI subvendor id */
+ unsigned short subdevice; /* PCI subdevice id */
+ const char *name; /* PCI human readable name */
+ const char *module; /* module to load */
+};
+
';
my %t = (
- network => 'network/main',
+ network => 'network/main|gigabit',
medias => 'disk/scsi|hardware_raid',
);
foreach my $type (keys %t) {
my @modules = chomp_(`perl ../../kernel/modules.pl pci_modules4stage1:"$t{$type}"`);
- print "#ifndef DISABLE_".uc($type)."
-struct pci_module_map ${type}_pci_ids[] = {
-";
+ my (@entries, @entries_full);
foreach my $k (sort keys %$pci) {
my $v = $pci->{$k};
member($v->[0], @modules) or next;
- $k =~ /^(....)(....)/;
- printf qq|\t{ 0x%s, 0x%s, "%s", "%s" },\n|,
- $1, $2, $v->[1], $v->[0];
+ $k =~ /^(....)(....)(....)(....)/;
+ my $values = { vendor => $1, device => $2, subvendor => $3, subdevice => $4, driver => $v->[0], description => $v->[1] };
+ if ($values->{subdevice} eq 'ffff' && $values->{subvendor} eq 'ffff') {
+ push @entries, $values;
+ } else {
+ push @entries_full, $values;
+ }
}
+ print "#ifndef DISABLE_".uc($type)."
+struct pci_module_map ${type}_pci_ids[] = {
+";
+ printf qq|\t{ 0x%s, 0x%s, "%s", "%s" },\n|, $_->{vendor}, $_->{device}, $_->{description}, $_->{driver}
+ foreach @entries;
+ print "};
+unsigned int ${type}_num_ids = sizeof(${type}_pci_ids) / sizeof(struct pci_module_map);
+";
+
+ print "
+struct pci_module_map_full ${type}_pci_ids_full[] = {
+";
+ printf qq|\t{ 0x%s, 0x%s, 0x%s, 0x%s, "%s", "%s" },\n|, $_->{vendor}, $_->{device}, $_->{subvendor}, $_->{subdevice}, $_->{description}, $_->{driver}
+ foreach @entries_full;
print "};
-int ${type}_num_ids = sizeof(${type}_pci_ids) / sizeof(struct pci_module_map);
+unsigned int ${type}_num_ids_full = sizeof(${type}_pci_ids_full) / sizeof(struct pci_module_map_full);
+
#endif
";
diff --git a/mdk-stage1/pcmcia_/Makefile b/mdk-stage1/pcmcia_/Makefile
index bb3b0257e..b247b1397 100644
--- a/mdk-stage1/pcmcia_/Makefile
+++ b/mdk-stage1/pcmcia_/Makefile
@@ -18,31 +18,20 @@ top_dir = ..
include $(top_dir)/Makefile.common
-all: libpcmcia.a libpcmcia-DIET.a
+all: libpcmcia.a
clean:
rm -f *.o libpcmcia.a
-FLAGS = -D__linux__ -Wall -Werror -Os -fomit-frame-pointer -pipe -c -I..
+FLAGS = -D__linux__ -Wall -Werror -Os -fomit-frame-pointer -pipe -c -I.. -D_BSD_SOURCE
OBJS = probe.o cardmgr.o lex_config.o yacc_config.o
-OBJS-DIET = $(subst .o,-DIET.o,$(OBJS))
-
libpcmcia.a: $(OBJS)
ar -cru $@ $^
ranlib $@
-libpcmcia-DIET.a: $(OBJS-DIET)
- ar -cru $@ $^
- ranlib $@
-
-
$(OBJS): %.o: %.c
- gcc $(FLAGS) $(GLIBC_INCLUDES) -c $< -o $@
-
-$(OBJS-DIET): %-DIET.o: %.c
- gcc $(FLAGS) $(DIETLIBC_INCLUDES) -c $< -o $@
-
+ $(DIET) gcc $(FLAGS) $(INCLUDES) -c $< -o $@
diff --git a/mdk-stage1/pcmcia_/cardmgr.c b/mdk-stage1/pcmcia_/cardmgr.c
index 1db18b55b..ea3ff127e 100644
--- a/mdk-stage1/pcmcia_/cardmgr.c
+++ b/mdk-stage1/pcmcia_/cardmgr.c
@@ -1259,9 +1259,9 @@ static void adjust_resources(void)
if (ret != 0) {
switch (al->adj.Resource) {
case RES_MEMORY_RANGE:
- sprintf(tmp, "memory %#lx-%#lx",
- al->adj.resource.memory.Base,
- al->adj.resource.memory.Base +
+ sprintf(tmp, "memory %p-%p",
+ (char *)al->adj.resource.memory.Base,
+ (char *)al->adj.resource.memory.Base +
al->adj.resource.memory.Size - 1);
break;
case RES_IO_RANGE:
diff --git a/mdk-stage1/pcmcia_/merge_from_pcitable b/mdk-stage1/pcmcia_/merge_from_pcitable
index 74fc56f31..27cda239b 100755
--- a/mdk-stage1/pcmcia_/merge_from_pcitable
+++ b/mdk-stage1/pcmcia_/merge_from_pcitable
@@ -41,9 +41,9 @@ print "Missing in pcitable:\n";
foreach my $p (@probes) {
my @r = grep { $_->{vd} eq $p->{vd} } @pcitable;
@r > 1 and die "duplicate entry in pcitable <$p->{vd}>\n";
- if (@r && $r[0]->{driver} ne 'yenta_socket') {
- push @res, "0x$p->{vendor}\t0x$p->{device}\t\"yenta_socket\"\t\"$r[0]->{name}\"\n";
- $r[0]->{driver} ne 'unknown' and print STDERR "WARNING, driver for <$p->{vd}> was <$r[0]->{driver}>\n";
+ if (!@r || @r && $r[0]->{driver} ne 'yenta_socket') {
+ push @res, "0x$p->{vendor}\t0x$p->{device}\t\"yenta_socket\"\t\"" . (@r ? $r[0]->{name} : '(COMPLETELY MISSING)') . "\"\n";
+ @r and $r[0]->{driver} ne 'unknown' and print STDERR "WARNING, driver for <$p->{vd}> was <$r[0]->{driver}>\n";
}
}
print sort @res;
diff --git a/mdk-stage1/pcmcia_/probe.c b/mdk-stage1/pcmcia_/probe.c
index 7a61d2f62..88853426d 100644
--- a/mdk-stage1/pcmcia_/probe.c
+++ b/mdk-stage1/pcmcia_/probe.c
@@ -94,9 +94,17 @@ pci_id_t pci_id[] = {
{ 0x104c, 0xac51, "yenta_socket", "Texas Instruments PCI1420" },
{ 0x104c, 0xac1b, "yenta_socket", "Texas Instruments PCI1450" },
{ 0x104c, 0xac52, "yenta_socket", "Texas Instruments PCI1451" },
+ { 0x104c, 0xac56, "yenta_socket", "Texas Instruments PCI1510" },
+ { 0x104c, 0xac55, "yenta_socket", "Texas Instruments PCI1520" },
+ { 0x104c, 0xac54, "yenta_socket", "Texas Instruments PCI1620" },
{ 0x104c, 0xac41, "yenta_socket", "Texas Instruments PCI4410" },
{ 0x104c, 0xac40, "yenta_socket", "Texas Instruments PCI4450" },
{ 0x104c, 0xac42, "yenta_socket", "Texas Instruments PCI4451" },
+ { 0x104c, 0xac44, "yenta_socket", "Texas Instruments PCI4510" },
+ { 0x104c, 0xac46, "yenta_socket", "Texas Instruments PCI4520" },
+ { 0x104c, 0xac49, "yenta_socket", "Texas Instruments PCI7410" },
+ { 0x104c, 0xac47, "yenta_socket", "Texas Instruments PCI7510" },
+ { 0x104c, 0xac48, "yenta_socket", "Texas Instruments PCI7610" },
{ 0x1217, 0x6729, "i82365", "O2 Micro 6729" },
{ 0x1217, 0x673a, "i82365", "O2 Micro 6730" },
{ 0x1217, 0x6832, "yenta_socket", "O2 Micro 6832/6833" },
@@ -110,6 +118,7 @@ pci_id_t pci_id[] = {
{ 0x1179, 0x060f, "yenta_socket", "Toshiba ToPIC97" },
{ 0x1179, 0x0617, "yenta_socket", "Toshiba ToPIC100" },
{ 0x119b, 0x1221, "i82365", "Omega Micro 82C092G" },
+ { 0x1524, 0x1411, "yenta_socket", "ENE Technology CB1411" },
{ 0x8086, 0x1221, "i82092", "Intel 82092AA_0" },
{ 0x8086, 0x1222, "i82092", "Intel 82092AA_1" },
};
diff --git a/mdk-stage1/ppp/include/net/ppp_defs.h b/mdk-stage1/ppp/include/net/ppp_defs.h
index c35020eab..46bef52bb 100644
--- a/mdk-stage1/ppp/include/net/ppp_defs.h
+++ b/mdk-stage1/ppp/include/net/ppp_defs.h
@@ -97,7 +97,7 @@
*/
#if !defined(__BIT_TYPES_DEFINED__) && !defined(_BITYPES) \
- && !defined(__FreeBSD__) && (NS_TARGET < 40)
+ && !defined(__FreeBSD__) && (NS_TARGET < 40) && !defined(__dietlibc__)
#ifdef UINT32_T
typedef UINT32_T u_int32_t;
#else
diff --git a/mdk-stage1/ppp/pppd/Makefile b/mdk-stage1/ppp/pppd/Makefile
index ad2bdae90..682ad08c1 100644
--- a/mdk-stage1/ppp/pppd/Makefile
+++ b/mdk-stage1/ppp/pppd/Makefile
@@ -20,40 +20,30 @@ include $(top_dir)/Makefile.common
TARGETS = pppd
-ifeq (DIETLIBC, $(L))
-TARGETS += pppd-DIET
-endif
-
BINTARGET = ../pppd-bin
all: $(TARGETS)
clean:
- rm -f *.o *.a $(BINTARGET) pppd pppd-DIET
+ rm -f *.o *.a $(BINTARGET) pppd
-FLAGS = -Wall -Werror -Os -fomit-frame-pointer -DDO_BSD_COMPRESS=0 -D_linux_=1 -DHAVE_MMAP -DNO_DRAND48
+FLAGS = -Wall -Werror -Os -fomit-frame-pointer -DDO_BSD_COMPRESS=0 -D_linux_=1 -DHAVE_MMAP -DNO_DRAND48 -D_BSD_SOURCE -D_GNU_SOURCE
INCS = -I../include -I.
+ifeq (GLIBC, $(L))
+LIBS = -static -lcrypt
+endif
+
OBJS = main.o magic.o fsm.o lcp.o ipcp.o upap.o chap.o md5.o ccp.o auth.o options.o demand.o utils.o sys-linux.o ipxcp.o multilink.o tdb.o tty.o
-OBJS-DIET = $(subst .o,-DIET.o,$(OBJS))
pppd: $(OBJS)
- gcc -static -o $@ $^ -lcrypt
- $(STRIPCMD) $@
- cp -f $@ $(BINTARGET)
-
-pppd-DIET: $(OBJS-DIET)
- gcc $(DIETLIBC_LDFLAGS_STAGE1) -o $@ $^ $(DIETLIBC_LIBC)
+ $(DIET) gcc -o $@ $^ $(LIBS)
$(STRIPCMD) $@
cp -f $@ $(BINTARGET)
$(OBJS): %.o: %.c
- gcc $(FLAGS) $(INCS) $(GLIBC_INCLUDES) -c $< -o $@
-
-$(OBJS-DIET): %-DIET.o: %.c
- gcc $(FLAGS) $(INCS) $(DIETLIBC_INCLUDES) -c $< -o $@
-
+ $(DIET) gcc $(FLAGS) $(INCS) $(INCLUDES) -c $< -o $@
diff --git a/mdk-stage1/ppp/pppd/sys-linux.c b/mdk-stage1/ppp/pppd/sys-linux.c
index d341bb3de..3ab92dfba 100644
--- a/mdk-stage1/ppp/pppd/sys-linux.c
+++ b/mdk-stage1/ppp/pppd/sys-linux.c
@@ -51,7 +51,7 @@
#define MAX_ADDR_LEN 7
#endif
-#if __GLIBC__ >= 2
+#if (defined(__GLIBC__) && __GLIBC__ >= 2) || defined(__dietlibc__)
#include <asm/types.h> /* glibc 2 conflicts with linux/types.h */
#include <net/if.h>
#include <net/if_arp.h>
diff --git a/mdk-stage1/ppp/pppd/utils.c b/mdk-stage1/ppp/pppd/utils.c
index 9c987cfcd..5861d8980 100644
--- a/mdk-stage1/ppp/pppd/utils.c
+++ b/mdk-stage1/ppp/pppd/utils.c
@@ -254,7 +254,7 @@ vslprintf(buf, buflen, fmt, args)
break;
case 'r':
f = va_arg(args, char *);
-#ifndef __powerpc__
+#if !defined(__powerpc__) && !defined(__x86_64__)
n = vslprintf(buf, buflen + 1, f, va_arg(args, va_list));
#else
/* On the powerpc, a va_list is an array of 1 structure */
diff --git a/mdk-stage1/probing.c b/mdk-stage1/probing.c
index d46c35e4d..4a1b9a0dc 100644
--- a/mdk-stage1/probing.c
+++ b/mdk-stage1/probing.c
@@ -120,6 +120,41 @@ char * get_net_intf_description(char * intf_name)
}
#endif
+void discovered_device(enum driver_type type,
+ unsigned short vendor, unsigned short device, unsigned short subvendor, unsigned short subdevice,
+ const char * description, const char * driver)
+{
+ log_message("PCI: device %04x %04x %04x %04x is \"%s\", driver is %s", vendor, device, subvendor, subdevice, description, driver);
+#ifndef DISABLE_MEDIAS
+ if (type == SCSI_ADAPTERS) {
+ int wait_msg = 0;
+ enum insmod_return failed;
+ if (IS_AUTOMATIC) {
+ wait_message("Loading driver for SCSI adapter:\n \n%s", description);
+ wait_msg = 1;
+ } else
+ stg1_info_message("About to load driver for SCSI adapter:\n \n%s", description);
+ failed = my_insmod(driver, SCSI_ADAPTERS, NULL);
+ if (wait_msg)
+ remove_wait_message();
+ warning_insmod_failed(failed);
+ }
+#endif
+#ifndef DISABLE_NETWORK
+ if (type == NETWORK_DEVICES) {
+ stg1_info_message("About to load driver for network device:\n \n%s", description);
+ prepare_intf_descr(description);
+ warning_insmod_failed(my_insmod(driver, NETWORK_DEVICES, NULL));
+ if (intf_descr_for_discover) /* for modules providing more than one net intf */
+ net_discovered_interface(NULL);
+ }
+#endif
+#ifdef ENABLE_USB
+ if (type == USB_CONTROLLERS)
+ my_insmod(driver, USB_CONTROLLERS, NULL);
+#endif
+}
+
#ifdef ENABLE_USB
void probe_that_type(enum driver_type type, enum media_bus bus)
#else
@@ -128,10 +163,12 @@ void probe_that_type(enum driver_type type, enum media_bus bus __attribute__ ((u
{
/* ---- PCI probe ---------------------------------------------- */
{
- FILE * f;
- int len = 0;
+ FILE * f = NULL;
+ unsigned int len = 0;
+ unsigned int len_full = 0;
char buf[200];
struct pci_module_map * pcidb = NULL;
+ struct pci_module_map_full * pcidb_full = NULL;
switch (type) {
#ifndef DISABLE_PCIADAPTERS
@@ -143,12 +180,16 @@ void probe_that_type(enum driver_type type, enum media_bus bus __attribute__ ((u
already_probed_scsi_adapters = 1;
pcidb = medias_pci_ids;
len = medias_num_ids;
+ pcidb_full = medias_pci_ids_full;
+ len_full = medias_num_ids_full;
break;
#endif
#ifndef DISABLE_NETWORK
case NETWORK_DEVICES:
pcidb = network_pci_ids;
len = network_num_ids;
+ pcidb_full = network_pci_ids_full;
+ len_full = network_num_ids_full;
break;
#endif
#endif
@@ -177,51 +218,56 @@ void probe_that_type(enum driver_type type, enum media_bus bus __attribute__ ((u
}
while (1) {
- int i, garb, vendor, device;
+ unsigned int i;
+ unsigned short vendor, device, subvendor, subdevice, devbusfn;
+ subvendor = 0xFFFF;
if (!fgets(buf, sizeof(buf), f)) break;
- sscanf(buf, "%x %x", &garb, &vendor);
- device = vendor & 0xFFFF; /* because scanf from dietlibc does not support %4f */
- vendor = (vendor >> 16) & 0xFFFF;
+ sscanf(buf, "%hx %x", &devbusfn, &i);
+ device = i;
+ vendor = i >> 16;
- for (i = 0; i < len; i++) {
- if (pcidb[i].vendor == vendor && pcidb[i].device == device) {
- log_message("PCI: device %04x %04x is \"%s\" (%s)", vendor, device, pcidb[i].name, pcidb[i].module);
-#ifndef DISABLE_MEDIAS
- if (type == SCSI_ADAPTERS) {
- int wait_msg = 0;
- enum insmod_return failed;
- if (IS_AUTOMATIC) {
- wait_message("Loading driver for SCSI adapter:\n \n%s", pcidb[i].name);
- wait_msg = 1;
- } else
- stg1_info_message("About to load driver for SCSI adapter:\n \n%s", pcidb[i].name);
- failed = my_insmod(pcidb[i].module, SCSI_ADAPTERS, NULL);
- if (wait_msg)
- remove_wait_message();
- warning_insmod_failed(failed);
-
+ for (i = 0; i < len_full; i++)
+ if (pcidb_full[i].vendor == vendor && pcidb_full[i].device == device) {
+ if (subvendor == 0xFFFF) {
+ int bus = devbusfn >> 8;
+ int device_p = (devbusfn & 0xff) >> 3;
+ int function = (devbusfn & 0xff) & 0x07;
+ char file[100];
+ int sf;
+ log_message("PCI: device %04x %04x needs full pci probe", vendor, device);
+ sprintf(file, "/proc/bus/pci/%02x/%02x.%d", bus, device_p, function);
+ if ((sf = open(file, O_RDONLY)) == -1) {
+ log_message("PCI: could not open file for full probe (%s)", file);
+ continue;
+ }
+ if (read(sf, buf, 48) == -1) {
+ log_message("PCI: could not read 48 bytes from %s", file);
+ close(sf);
+ continue;
+ }
+ close(sf);
+ memcpy(&subvendor, buf+44, 2);
+ memcpy(&subdevice, buf+46, 2);
+ log_message("PCI: device is actually %04x %04x %04x %04x", vendor, device, subvendor, subdevice);
}
-#endif
-#ifndef DISABLE_NETWORK
- if (type == NETWORK_DEVICES) {
- stg1_info_message("About to load driver for network device:\n \n%s", pcidb[i].name);
- prepare_intf_descr(pcidb[i].name);
- warning_insmod_failed(my_insmod(pcidb[i].module, NETWORK_DEVICES, NULL));
- if (intf_descr_for_discover) /* for modules providing more than one net intf */
- net_discovered_interface(NULL);
+ if (pcidb_full[i].subvendor == subvendor && pcidb_full[i].subdevice == subdevice) {
+ discovered_device(type, vendor, device, subvendor, subdevice, pcidb_full[i].name, pcidb_full[i].module);
+ goto next_pci_device;
}
-#endif
-#ifdef ENABLE_USB
- if (type == USB_CONTROLLERS)
- my_insmod(pcidb[i].module, USB_CONTROLLERS, NULL);
-#endif
}
- }
+
+ for (i = 0; i < len; i++)
+ if (pcidb[i].vendor == vendor && pcidb[i].device == device) {
+ discovered_device(type, vendor, device, 0xFFFF, 0xFFFF, pcidb[i].name, pcidb[i].module);
+ goto next_pci_device;
+ }
+ next_pci_device:;
}
- fclose(f);
end_pci_probe:;
+ if (f)
+ fclose(f);
}
@@ -231,7 +277,7 @@ void probe_that_type(enum driver_type type, enum media_bus bus __attribute__ ((u
static int already_probed_usb_controllers = 0;
static int already_mounted_usbdev = 0;
- FILE * f;
+ FILE * f = NULL;
int len = 0;
char buf[200];
struct usb_module_map * usbdb = NULL;
@@ -295,8 +341,9 @@ void probe_that_type(enum driver_type type, enum media_bus bus __attribute__ ((u
}
}
}
- fclose(f);
end_usb_probe:;
+ if (f)
+ fclose(f);
}
#endif
}
@@ -325,7 +372,7 @@ static void find_media(enum media_bus bus)
log_message("looking for ide media");
strcpy(b, "/proc/ide/hd");
- for (b[12] = 'a'; b[12] <= 'h'; b[12]++) {
+ for (b[12] = 'a'; b[12] <= 't'; b[12]++) {
int i;
char ide_disk[] = "disk";
char ide_cdrom[] = "cdrom";
diff --git a/mdk-stage1/rescue-gui.c b/mdk-stage1/rescue-gui.c
index 240d7ccba..dbe12cb4a 100644
--- a/mdk-stage1/rescue-gui.c
+++ b/mdk-stage1/rescue-gui.c
@@ -34,14 +34,24 @@
char * env[] = {
"PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sbin:/mnt/usr/sbin:/mnt/bin:/mnt/usr/bin",
- "LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/lib:/mnt/usr/lib:/usr/X11R6/lib:/mnt/usr/X11R6/lib",
+ "LD_LIBRARY_PATH=/lib:/usr/lib:/mnt/lib:/mnt/usr/lib:/usr/X11R6/lib:/mnt/usr/X11R6/lib"
+#if defined(__x86_64__) || defined(__ppc64__)
+ ":/lib64:/usr/lib64:/usr/X11R6/lib64:/mnt/lib64:/mnt/usr/lib64:/mnt/usr/X11R6/lib64"
+#endif
+ ,
"HOME=/",
"TERM=linux",
"TERMINFO=/etc/terminfo",
NULL
};
-void pause(void) { unsigned char t; fflush(stdout); read(0, &t, 1); }
+/* pause() already exists and causes the invoking process to sleep
+ until a signal is received */
+static void PAUSE(void) {
+ unsigned char t;
+ fflush(stdout);
+ read(0, &t, 1);
+}
/* ------ UUURGH this is duplicated from `init.c', don't edit here........ */
@@ -202,13 +212,13 @@ int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))
execve(child_argv[0], child_argv, env);
printf("Can't execute binary (%s)\n<press Enter>\n", binary);
- pause();
+ PAUSE();
return 33;
}
while (wait4(-1, &wait_status, 0, NULL) != pid) {};
printf("<press Enter to return to Rescue GUI>");
- pause();
+ PAUSE();
resume_from_suspend();
if (!WIFEXITED(wait_status) || WEXITSTATUS(wait_status) != 0) {
error_message("Program exited abnormally (return code %d).", WEXITSTATUS(wait_status));
diff --git a/mdk-stage1/rp-pppoe/src/Makefile b/mdk-stage1/rp-pppoe/src/Makefile
index f96b5714e..11d2684d6 100644
--- a/mdk-stage1/rp-pppoe/src/Makefile
+++ b/mdk-stage1/rp-pppoe/src/Makefile
@@ -20,39 +20,26 @@ include $(top_dir)/Makefile.common
TARGETS = pppoe
-ifeq (DIETLIBC, $(L))
-TARGETS += pppoe-DIET
-endif
-
BINTARGET = ../pppoe-bin
all: $(TARGETS)
clean:
- rm -f *.o *.a $(BINTARGET) pppoe pppoe-DIET
+ rm -f *.o *.a $(BINTARGET) pppoe
FLAGS = -Wall -Werror -Os -fomit-frame-pointer '-DPPPOE_PATH="/sbin/pppoe"' '-DPPPD_PATH="/sbin/pppd"' '-DVERSION="3.0-stg1"'
-
+ifeq (GLIBC, $(L))
+EXTRA_LDFLAGS = -static
+endif
OBJS = pppoe.o if.o debug.o common.o ppp.o discovery.o
-OBJS-DIET = $(subst .o,-DIET.o,$(OBJS))
-
pppoe: $(OBJS)
- gcc -static -o $@ $^
- $(STRIPCMD) $@
- cp -f $@ $(BINTARGET)
-
-pppoe-DIET: $(OBJS-DIET)
- gcc $(DIETLIBC_LDFLAGS_STAGE1) -o $@ $^ $(DIETLIBC_LIBC)
+ $(DIET) gcc -o $@ $^ $(EXTRA_LDFLAGS)
$(STRIPCMD) $@
cp -f $@ $(BINTARGET)
$(OBJS): %.o: %.c
- gcc $(FLAGS) $(GLIBC_INCLUDES) $(INCS) -c $< -o $@
-
-$(OBJS-DIET): %-DIET.o: %.c
- gcc $(FLAGS) $(DIETLIBC_INCLUDES) $(INCS) -c $< -o $@
-
+ $(DIET) gcc $(FLAGS) $(INCLUDES) $(INCS) -c $< -o $@
diff --git a/mdk-stage1/slang/Makefile b/mdk-stage1/slang/Makefile
index 4cd1dc6bb..01700651d 100644
--- a/mdk-stage1/slang/Makefile
+++ b/mdk-stage1/slang/Makefile
@@ -29,28 +29,14 @@ INCS =
TARGETS = $(LIBNAME).a
-ifeq (DIETLIBC, $(L))
-TARGETS += $(LIBNAME)-DIET.a
-endif
-
all: $(TARGETS)
clean:
rm -f *.o *.a
-OBJS-DIET = $(subst .o,-DIET.o,$(OBJS))
-
$(LIBNAME).a: $(OBJS)
ar -cru $@ $^
ranlib $@
-$(LIBNAME)-DIET.a: $(OBJS-DIET)
- ar -cru $@ $^
- ranlib $@
-
$(OBJS): %.o: %.c
- gcc $(CFLAGS) $(DEFS) $(INCS) $(GLIBC_INCLUDES) -c $< -o $@
-
-$(OBJS-DIET): %-DIET.o: %.c
- gcc $(CFLAGS) $(DEFS) $(INCS) $(DIETLIBC_INCLUDES) -c $< -o $@
-
+ $(DIET) gcc $(CFLAGS) $(DEFS) $(INCS) $(INCLUDES) -c $< -o $@
diff --git a/mdk-stage1/stage1.c b/mdk-stage1/stage1.c
index 44ed25155..bc3b457e3 100644
--- a/mdk-stage1/stage1.c
+++ b/mdk-stage1/stage1.c
@@ -403,7 +403,8 @@ int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))
update_modules();
#ifdef ENABLE_PCMCIA
- handle_pcmcia(&pcmcia_adapter);
+ if (!IS_NOAUTO)
+ handle_pcmcia(&pcmcia_adapter);
#endif
if (IS_CHANGEDISK)
@@ -417,7 +418,12 @@ int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))
"your own risk. Alternatively, you may reboot your system now.");
}
- ret = method_select_and_prepare();
+#ifndef DISABLE_DISK
+ if (IS_RECOVERY && streq(get_auto_value("method"), "cdrom") && process_recovery())
+ ret = RETURN_OK;
+ else
+#endif
+ ret = method_select_and_prepare();
finish_frontend();
close_log();
diff --git a/mdk-stage1/stage1.h b/mdk-stage1/stage1.h
index 8b26fd947..94f99e7c7 100644
--- a/mdk-stage1/stage1.h
+++ b/mdk-stage1/stage1.h
@@ -41,6 +41,8 @@ extern char * stage2_kickstart;
#define MODE_CHANGEDISK (1 << 10)
#define MODE_UPDATEMODULES (1 << 11)
#define MODE_NOAUTO (1 << 12)
+#define MODE_NETAUTO (1 << 13)
+#define MODE_RECOVERY (1 << 14)
#define IS_TESTING (get_param(MODE_TESTING))
#define IS_EXPERT (get_param(MODE_EXPERT))
@@ -51,6 +53,8 @@ extern char * stage2_kickstart;
#define IS_CHANGEDISK (get_param(MODE_CHANGEDISK))
#define IS_UPDATEMODULES (get_param(MODE_UPDATEMODULES))
#define IS_NOAUTO (get_param(MODE_NOAUTO))
+#define IS_NETAUTO (get_param(MODE_NETAUTO))
+#define IS_RECOVERY (get_param(MODE_RECOVERY))
void fatal_error(char *msg) __attribute__ ((noreturn));
diff --git a/mdk-stage1/stdio-frontend.c b/mdk-stage1/stdio-frontend.c
index 3fbed999a..45d9177a2 100644
--- a/mdk-stage1/stdio-frontend.c
+++ b/mdk-stage1/stdio-frontend.c
@@ -57,7 +57,8 @@ static void get_any_response(void)
static int get_int_response(void)
{
char s[50];
- int j = 0, i = 0; /* (0) tied to Cancel */
+ int j = 0;
+ unsigned int i = 0; /* (0) tied to Cancel */
fflush(stdout);
read(0, &(s[i++]), 1);
fcntl(0, F_SETFL, O_NONBLOCK);
@@ -175,11 +176,13 @@ static void blocking_msg(char *type, char *fmt, va_list ap)
void verror_message(char *msg, va_list ap)
{
+ probe_that_type(USB_CONTROLLERS, BUS_USB); // we'd need the keyboard for interactions so...
blocking_msg("> Error! ", msg, ap);
}
void vinfo_message(char *msg, va_list ap)
{
+ probe_that_type(USB_CONTROLLERS, BUS_USB); // we'd need the keyboard for interactions so...
blocking_msg("> Notice: ", msg, ap);
}
@@ -330,7 +333,7 @@ enum return_type ask_yes_no(char *msg)
}
-enum return_type ask_from_entries(char *msg, char ** questions, char *** answers, int entry_size, void (*callback_func)(char ** strings))
+enum return_type ask_from_entries(char *msg, char ** questions, char *** answers, int entry_size UNUSED, void (*callback_func)(char ** strings) UNUSED)
{
int j, i = 0;
char ** already_answers = NULL;
diff --git a/mdk-stage1/tools.c b/mdk-stage1/tools.c
index a921883a8..5faad8d88 100644
--- a/mdk-stage1/tools.c
+++ b/mdk-stage1/tools.c
@@ -91,6 +91,8 @@ void process_cmdline(void)
if (!strcmp(name, "updatemodules")) set_param(MODE_UPDATEMODULES);
if (!strcmp(name, "rescue")) set_param(MODE_RESCUE);
if (!strcmp(name, "noauto")) set_param(MODE_NOAUTO);
+ if (!strcmp(name, "netauto")) set_param(MODE_NETAUTO);
+ if (!strcmp(name, "recovery")) set_param(MODE_RECOVERY);
if (!strcmp(name, "special_stage2")) set_param(MODE_SPECIAL_STAGE2);
if (!strcmp(name, "automatic")) {
set_param(MODE_AUTOMATIC);
diff --git a/mdk-stage1/url.c b/mdk-stage1/url.c
index ada5696cd..07af07161 100644
--- a/mdk-stage1/url.c
+++ b/mdk-stage1/url.c
@@ -423,8 +423,8 @@ int http_download_file(char * hostname, char * remotename, int * size)
return FTPERR_FAILED_CONNECT;
}
- buf = alloca(strlen(remotename) + 20);
- sprintf(buf, "GET %s HTTP/0.9\r\n\r\n", remotename);
+ buf = alloca(4 + strlen(remotename) + 12 + 6 + strlen(hostname) + 4 + 1);
+ sprintf(buf, "GET %s HTTP/0.9\r\nHost: %s\r\n\r\n", remotename, hostname);
write(sock, buf, strlen(buf));
/* This is fun; read the response a character at a time until we:
diff --git a/mdk-stage1/usb-resource/update-usb-ids.pl b/mdk-stage1/usb-resource/update-usb-ids.pl
index 187c7f5c0..ae934c1b5 100755
--- a/mdk-stage1/usb-resource/update-usb-ids.pl
+++ b/mdk-stage1/usb-resource/update-usb-ids.pl
@@ -23,7 +23,8 @@ print "struct pci_module_map usb_pci_ids[] = {
";
-while (my ($k, $v) = each %$pci) {
+foreach my $k (sort keys %$pci) {
+ my $v = $pci->{$k};
$v->[0] =~ /^usb-|^ehci-hcd|^ohci1394/ or next;
$k =~ /^(....)(....)/;
printf qq|\t{ 0x%s, 0x%s, "", "%s" },\n|,
diff --git a/perl-install/list.sparc b/perl-install/list.sparc
deleted file mode 100644
index 448e0b63e..000000000
--- a/perl-install/list.sparc
+++ /dev/null
@@ -1,74 +0,0 @@
-/bin/ash
-/bin/cpio
-/lib/libnss_nis.so.2
-/lib/libnss_files.so.2
-/lib/libnss_dns.so.2
-/lib/libresolv.so.2
-/etc/protocols
-/sbin/fdisk
-/sbin/ifport
-/sbin/insmod
-/sbin/mkraid
-/sbin/rmmod
-/sbin/mkdosfs
-/sbin/mke2fs
-/sbin/raidstart
-/usr/bin/bzip2
-/usr/bin/perl
-/usr/lib/libimlib-png.so
-/usr/lib/gtk/themes/engines/libpixmap.so
-/usr/lib/gtk/themes/engines/libpixmap.la
-/usr/lib/libimlib-png.so
-/usr/lib/perl5/5.00503/AutoLoader.pm
-/usr/lib/perl5/5.00503/Carp.pm
-/usr/lib/perl5/5.00503/Data/Dumper.pm
-/usr/lib/perl5/5.00503/Exporter.pm
-/usr/lib/perl5/5.00503/FileHandle.pm
-/usr/lib/perl5/5.00503/SelectSaver.pm
-/usr/lib/perl5/5.00503/SelfLoader.pm
-/usr/lib/perl5/5.00503/Symbol.pm
-/usr/lib/perl5/5.00503/Time/Local.pm
-/usr/lib/perl5/5.00503/dumpvar.pl
-/usr/lib/perl5/5.00503/sparc-linux/Config.pm
-/usr/lib/perl5/5.00503/sparc-linux/DynaLoader.pm
-/usr/lib/perl5/5.00503/sparc-linux/Fcntl.pm
-/usr/lib/perl5/5.00503/sparc-linux/auto/Fcntl/Fcntl.bs
-/usr/lib/perl5/5.00503/sparc-linux/auto/Fcntl/Fcntl.so
-/usr/lib/perl5/5.00503/sparc-linux/IO/File.pm
-/usr/lib/perl5/5.00503/sparc-linux/IO/Handle.pm
-/usr/lib/perl5/5.00503/sparc-linux/IO/Seekable.pm
-/usr/lib/perl5/5.00503/sparc-linux/IO/Socket.pm
-/usr/lib/perl5/5.00503/sparc-linux/Socket.pm
-/usr/lib/perl5/5.00503/sparc-linux/_h2ph_pre.ph
-/usr/lib/perl5/5.00503/sparc-linux/asm/unistd.ph
-/usr/lib/perl5/5.00503/sparc-linux/asm-sparc/unistd.ph
-/usr/lib/perl5/5.00503/sparc-linux/asm-sparc64/unistd.ph
-/usr/lib/perl5/5.00503/sparc-linux/auto/Data/Dumper/Dumper.bs
-/usr/lib/perl5/5.00503/sparc-linux/auto/Data/Dumper/Dumper.so
-/usr/lib/perl5/5.00503/sparc-linux/auto/IO/IO.so
-/usr/lib/perl5/5.00503/sparc-linux/auto/Socket/Socket.bs
-/usr/lib/perl5/5.00503/sparc-linux/auto/Socket/Socket.so
-/usr/lib/perl5/5.00503/sparc-linux/bits/syscall.ph
-/usr/lib/perl5/5.00503/sparc-linux/sys/syscall.ph
-/usr/lib/perl5/5.00503/sparc-linux/syscall.ph
-/usr/lib/perl5/5.00503/lib.pm
-/usr/lib/perl5/5.00503/overload.pm
-/usr/lib/perl5/5.00503/strict.pm
-/usr/lib/perl5/5.00503/vars.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Gtk.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Gtk/Types.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Cmd.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Config.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/A.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/I.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/FTP/dataconn.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/Net/Netrc.pm
-/usr/lib/perl5/site_perl/5.005/sparc-linux/auto/Gtk/Gtk.bs
-/usr/lib/perl5/site_perl/5.005/sparc-linux/auto/Gtk/Gtk.so
-/usr/lib/rpm/rpmrc
-/usr/X11R6/bin/XF86_FBDev
-/usr/X11R6/bin/XF86_Mach64
-/usr/X11R6/bin/Xsun
-/usr/X11R6/bin/xmodmap
-/usr/X11R6/lib/modules/xf86Wacom.so
diff --git a/perl-install/modules.pm b/perl-install/modules.pm
index c3ed4cb89..98bd6fd7e 100644
--- a/perl-install/modules.pm
+++ b/perl-install/modules.pm
@@ -36,7 +36,7 @@ sub load {
@l = difference2([ uniq(@l) ], [ loaded_modules() ]) or return;
my $network_module = do {
- my ($network_modules, $other) = partition { module2category($_) =~ m,network/(main|usb), } @l;
+ my ($network_modules, $other) = partition { module2category($_) =~ m,network/(main|usb|gigabit), } @l;
if (@$network_modules > 1) {
# do it one by one
load($_) foreach @$network_modules;
@@ -217,7 +217,7 @@ sub mergein_conf {
my ($file) = @_;
my $modconfref = read_conf($file);
while (my ($key, $value) = each %$modconfref) {
- $conf{$key}{alias} = $value->{alias} if !exists $conf{$key}{alias};
+ $conf{$key}{alias} = $value->{alias} if ! $conf{$key}{alias};
$conf{$key}{options} = $value->{options} if $value->{options};
push @{$conf{$key}{probeall} ||= []}, deref($value->{probeall});
}
diff --git a/perl-install/share/compssList b/perl-install/share/compssList
deleted file mode 100644
index 36b0f4a44..000000000
--- a/perl-install/share/compssList
+++ /dev/null
@@ -1,1665 +0,0 @@
- normal server developer
-
-AVLTree-devel 0 0 0
-AfterStep 22 0 53
-AfterStep-APPS 22 0 35
-Apache-ASP -99 0 -99
-ApacheJServ -99 0 -99
-Apple-StyleWriter-printer-driver__lpstyl 0 0 0
-Aurora 81 -1 -1
-BasiliskII 35 0 10
-BasiliskII-sheepnet 33 0 8
-BitchX 43 0 15
-C++2LaTeX 0 0 30
-Canon-CaPSL-printer-driver__cjet 0 0 0
-ClanLib 32 0 32
-ClanLib-devel 0 0 25
-ClanLib-docs 0 0 25
-ClanLib-gl 0 0 0
-ClanLib-magick 0 0 0
-ClanLib-mikmod 0 0 0
-ClanLib-png 0 0 0
-Device3Dfx -1 -1 -1
-DrakConf 84 84 84
-drakprofile 50 0 50
-draksync 50 0 50
-DrakeLogo 20 0 0
-ElectricFence 10 0 66
-Epplets 57 0 53
-Eterm 57 0 53
-Eterm-devel 0 0 0
-FaxMail 30 0 0
-FileRunner 45 0 25
-FreeWnn -20 -20 -20
-FreeWnn-devel -70 -60 -40
-GConf 0 0 0
-GConf-devel 0 0 40
-GXedit 40 0 55
-Glide_V2 -1 -1 -1
-Glide_V2-devel -1 -1 -1
-Glide_V3 -1 -1 -1
-Glide_V3-DRI -1 -1 -1
-Glide_V3-DRI-devel -1 -1 -1
-Glide_V3-devel -1 -1 -1
-Glide_V5 -1 -1 -1
-Glide_V5-devel -1 -1 -1
-HTML-Embperl 0 40 40
-Hermes 32 0 42
-Hermes-devel 0 0 35
-ImageMagick 56 5 60
-ImageMagick-devel 10 0 60
-ImageMagick-lib 0 0 0
-MAKEDEV 91 91 91
-MandrakeUpdate 82 0 80
-Mesa 30 0 70
-Mesa-common 30 0 70
-Mesa-common-devel 0 0 70
-Mesa-demos 10 0 15
-MySQL 2 55 15
-MySQL-bench 2 50 10
-MySQL-client 2 52 11
-MySQL-devel 0 0 15
-MySQL-shared 2 50 10
-ORBit 0 0 55
-ORBit-devel 10 0 55
-SDL 50 0 25
-SDL-devel 0 0 25
-SDL_image 0 0 25
-SDL_image-devel 0 0 25
-SDL_mixer 0 0 25
-SDL_mixer-devel 0 0 25
-SDL_net 0 0 25
-SDL_net-devel 0 0 25
-SDL_ttf 0 0 25
-SDL_ttf-devel 0 0 25
-SVGATextMode 0 0 0
-SmallEiffel 0 0 30
-SysVinit 15 52 45
-TiMidity++ 51 0 54
-WMRack 40 0 32
-WindowMaker 40 0 57
-WindowMaker-devel 0 0 30
-WsLib-devel 0 0 0
-X11R6-contrib 55 0 47
-XFree86 91 0 81
-XFree86-100dpi-fonts 56 0 30
-XFree86-3DLabs -30 -30 -30
-XFree86-75dpi-fonts 91 0 81
-XFree86-8514 -30 -30 -30
-XFree86-AGX -30 -30 -30
-XFree86-FBDev -30 -30 -30
-XFree86-I128 -30 -30 -30
-XFree86-ISO8859-2 -20 -30 -20
-XFree86-ISO8859-2-100dpi-fonts -20 -30 -20
-XFree86-ISO8859-2-75dpi-fonts -20 -30 -20
-XFree86-ISO8859-2-Type1-fonts -20 -30 -20
-XFree86-ISO8859-9 -20 -30 -20
-XFree86-ISO8859-9-100dpi-fonts -20 -30 -20
-XFree86-ISO8859-9-75dpi-fonts -20 -30 -20
-XFree86-Mach32 -30 -30 -30
-XFree86-Mach64 -30 -30 -30
-XFree86-Mach8 -30 -30 -30
-XFree86-Mono -30 -30 -30
-XFree86-P9000 -30 -30 -30
-XFree86-S3 -30 -30 -30
-XFree86-S3V -30 -30 -30
-XFree86-SVGA -30 -30 -30
-XFree86-VGA16 -30 -30 -30
-XFree86-W32 -30 -30 -30
-XFree86-Xnest 0 0 55
-XFree86-Xvfb 0 0 15
-XFree86-cyrillic-fonts -20 -30 -20
-XFree86-devel 12 0 55
-XFree86-doc -30 -30 -30
-XFree86-glide-module -2 -2 -2
-XFree86-libs 10 0 0
-XFree86-server -30 -30 -30
-XFree86-server-common -30 -30 -30
-XFree86-static-libs 0 0 20
-XFree86-xfs 0 0 0
-XaoS 40 0 25
-XaoS-aalib 0 0 0
-XaoS-svgalib 0 0 0
-Xaw3d 20 0 70
-Xaw3d-devel 10 0 60
-Zope 0 15 30
-Zope-components 0 15 30
-Zope-core 0 15 30
-Zope-pcgi 0 15 30
-Zope-services 0 15 30
-Zope-zpublisher 0 15 30
-Zope-zserver 0 15 30
-Zope-ztemplates 0 15 30
-aalib 25 0 15
-aalib-devel 0 0 25
-abisuite 59 0 45
-acon -10 -10 -10
-acpid 0 0 0
-adjtimex 22 35 87
-adns 30 30 30
-adns-devel 0 0 30
-aktion 66 0 15
-alsa 0 0 0
-alsa-lib 0 0 0
-alsa-lib-devel 0 0 20
-alsa-source 0 0 0
-alsa-utils 0 0 0
-alsaplayer 0 0 0
-am-utils 0 25 19
-ami -20 -20 -20
-ami-gnome -20 -20 -20
-anacron 85 70 85
-anonftp 0 86 13
-apache -99 80 -99
-apache-common -99 0 -99
-apache-devel -99 0 -99
-apache-manual -99 40 -99
-apache-mod_perl -99 85 -99
-apache-mod_perl-devel -99 0 -99
-apache-suexec -99 75 -99
-apcupsd -1 -1 -1
-apmd -1 -1 -1
-apmd-devel -1 -1 -1
-app-defaults-be -30 -30 -30
-app-defaults-cs -30 -30 -30
-app-defaults-ga -30 -30 -30
-app-defaults-ru -30 -30 -30
-app-defaults-th -30 -30 -30
-app-defaults-uk -30 -30 -30
-arpwatch 0 50 0
-ash 10 10 10
-aspell 49 15 22
-aspell-ca -30 -30 -30
-aspell-cs -30 -30 -30
-aspell-da -30 -30 -30
-aspell-de -30 -30 -30
-aspell-de_CH -30 -30 -30
-aspell-devel 0 0 10
-aspell-en -30 -30 -30
-aspell-en_CA -30 -30 -30
-aspell-en_GB -30 -30 -30
-aspell-eo -30 -30 -30
-aspell-es -30 -30 -30
-aspell-fr -30 -30 -30
-aspell-it -30 -30 -30
-aspell-nl -30 -30 -30
-aspell-no -30 -30 -30
-aspell-pl -30 -30 -30
-aspell-sv -30 -30 -30
-at 42 96 94
-aterm 17 0 13
-audiofile 25 0 26
-audiofile-devel 10 0 26
-aumix 79 0 79
-auth_ldap 5 75 20
-autoconf 15 0 84
-autofs 48 45 50
-autoirpm -60 -60 -60
-autologin 82 0 82
-automake 15 0 84
-awesfx 20 0 13
-basesystem 0 0 0
-bash 0 0 0
-bash-doc 35 50 71
-bash1 15 5 13
-bc 40 25 25
-bdflush 0 0 0
-bind 0 75 0
-bind-devel 0 0 0
-bind-utils 25 35 70
-binutils 47 0 87
-bison 10 0 80
-blackbox 30 0 45
-blt 10 0 75
-bluefish 60 0 60
-boa -99 -99 -99
-bonnie 5 45 25
-bonobo 20 0 20
-bonobo-devel 0 0 35
-bootparamd 20 78 0
-bug-buddy 0 0 20
-byacc 16 0 80
-bzflag -1 -1 -1
-bzip2 41 85 75
-caching-nameserver 0 70 0
-cbb 55 0 13
-cdecl 10 0 70
-cdialog 3 0 20
-cdp 40 0 27
-cdparanoia 45 0 45
-cdparanoia-devel 0 0 30
-cdrecord 45 0 45
-cdrecord-cdda2wav 44 0 45
-cdrecord-devel 10 0 0
-cervisia 0 0 0
-cfengine 0 30 0
-chkconfig 0 65 10
-chkfontpath 0 0 50
-chromium -1 -1 -1
-clanbomber 65 0 25
-cleanfeed 24 65 21
-clisp 0 0 15
-compat-glibc 0 0 40
-compat-libs 0 0 0
-comsat 0 30 2
-console-tools 97 97 97
-console-tools-devel 0 0 0
-control-center 69 0 10
-control-center-devel 0 0 0
-control-panel 2 0 2
-cooledit 0 0 30
-corewars 0 15 0
-cpio 90 89 90
-cproto 15 0 61
-cracklib 10 85 35
-cracklib-devel 0 0 15
-cracklib-dicts 10 82 35
-crontabs 95 95 95
-csmash -1 -1 -1
-ctags 10 0 80
-cttex -30 -30 -30
-cups -99 -99 -99
-cups-devel 0 0 20
-cups-drivers -99 -99 -99
-cvs 18 60 72
-cvsweb 0 0 30
-cxhextris 50 0 36
-detect 25 25 75
-detect-devel 0 0 60
-detect-lst 25 25 75
-dev 99 99 99
-dev86 0 0 40
-dev86-devel 0 0 40
-devfsd 0 0 0
-dhcp -99 80 -99
-dhcp-client 0 79 5
-dhcp-relay 0 10 0
-dhcpcd 0 0 0
-dhcpxd 0 0 0
-dia 30 0 30
-dialog 10 0 71
-diffstat 12 50 87
-diffutils 42 55 87
-dip 40 45 13
-docbook-dtd31-sgml 30 0 45
-docbook-style-dsssl 5 15 15
-docbook-style-dsssl-doc 4 14 14
-dosemu 45 0 49
-dosemu-freedos 45 0 49
-dosfstools 40 15 22
-doxygen 0 0 40
-dpsftp 45 0 0
-dpsftplib 45 0 0
-dpsftplib-devel 45 0 15
-drakfloppy 84 0 84
-drakfont 84 0 84
-drakxtools 86 80 87
-dump 10 75 87
-e2fsprogs 98 98 98
-e2fsprogs-devel 0 0 25
-eMusic 65 0 50
-ed 45 10 5
-ee 58 0 54
-efax 25 78 30
-egcs 5 0 50
-egcs-c++ 5 0 50
-egcs-cpp 5 0 50
-egcs-g77 5 0 50
-egcs-objc 5 0 50
-egcs-objc-devel 4 0 20
-eggdrop 25 0 25
-eject 92 33 91
-elm 22 5 13
-emacs 49 45 0
-emacs-X11 51 0 69
-emacs-el 0 0 15
-emacs-leim 20 0 50
-emacs-nox 20 0 14
-emacs-pcomplete 20 0 30
-emacs-tramp 20 20 30
-enlightenment 41 0 55
-enscript 20 25 71
-eog 30 0 20
-eperl 0 0 10
-eshell 20 0 30
-esound 0 0 0
-esound-devel 12 0 4
-etcskel 98 98 98
-ethemes 40 0 35
-exmh 40 0 36
-expect 23 0 71
-ext2ed 5 52 42
-ext2resize 5 52 42
-faces 20 75 15
-faces-devel 10 0 0
-faces-xface 20 0 15
-faq 63 49 53
-fbset 22 0 0
-fdutils 10 0 0
-fetchmail 45 99 31
-fetchmail-daemon 20 30 20
-fetchmailconf 45 0 40
-file 92 92 94
-filesystem 99 99 99
-fileutils 99 99 99
-findutils 97 97 97
-finger 40 35 27
-finger-server 0 30 0
-flex 13 0 72
-fltk 0 0 0
-fltk-devel 0 0 15
-fmirror 45 35 40
-fnlib 10 0 7
-fnlib-devel 10 0 0
-fonts-ttf-armenian -10 0 -10
-fonts-ttf-big5 -10 0 -10
-fonts-ttf-decoratives 72 0 68
-fonts-ttf-gb2312 -10 0 -10
-fonts-ttf-japanese -10 0 -10
-fonts-ttf-korean -10 0 -10
-fonts-ttf-west_european 77 0 74
-fonts-type1-baltic -15 -15 -15
-fortune-mod 10 0 10
-freeciv 54 0 53
-freetype 10 0 4
-freetype-devel 10 0 0
-fribidi 0 0 0
-fribidi-devel 0 0 0
-ftp 90 92 90
-fvwm 12 0 15
-fvwm2 17 0 17
-fvwm2-icons 17 0 17
-fwhois 25 45 36
-g-print 20 0 20
-g-wrap 0 0 40
-g-wrap-devel 0 0 20
-gaddr 45 0 40
-gaim 35 0 30
-gated 0 80 0
-gatos 55 0 49
-gawk 10 55 87
-gawk-doc 10 35 50
-gcc 50 40 90
-gcc-c++ 15 0 74
-gcc-chill 20 0 65
-gcc-colorgcc 0 0 0
-gcc-cpp 47 0 72
-gcc-fr 0 0 0
-gcc-g77 15 0 27
-gcc-java 16 0 65
-gcc-libgcj 15 0 30
-gcc-objc 16 0 35
-gcombust 40 0 0
-gd 12 0 71
-gd-devel 10 0 71
-gd-utils 45 0 64
-gdb 12 0 94
-gdbm 12 0 72
-gdbm-devel 10 0 72
-gdk-pixbuf 68 0 70
-gdk-pixbuf-devel 0 0 40
-gdm 67 0 55
-gedit 68 0 62
-gedit-devel 0 0 0
-genromfs 10 0 9
-gentoo 30 0 0
-gettext 10 15 71
-gettext-devel 0 0 35
-getty_ps 99 99 99
-gfcc 15 0 31
-gftp 67 0 62
-ggv 25 0 0
-ghc 0 0 35
-ghc-prof 0 0 2
-ghostscript 40 70 75
-ghostscript-utils 30 50 55
-ghostscript-fonts 22 55 75
-ghostscript-module-SVGALIB 10 0 63
-ghostscript-module-X 40 60 65
-gif2png 10 0 20
-giftrans 42 0 71
-gimp 69 0 67
-gimp-data-extras 55 0 58
-gimp-devel 10 0 40
-gimp-libgimp 10 0 50
-gimp-perl 30 0 30
-git 69 35 54
-gkrellm 15 30 15
-gkrellm-devel 0 0 20
-glade 17 0 57
-glademm 0 0 40
-glib 1 0 0
-glib-devel 10 0 87
-glibc 1 99 96
-glibc-devel 25 0 76
-glibc-profile 1 0 54
-gltron -1 -1 -1
-gmc 68 0 59
-gmp 17 0 71
-gmp-devel 10 0 71
-gnomba 24 0 24
-gnome-applets 68 0 55
-gnome-audio 60 0 55
-gnome-audio-extra 55 0 50
-gnome-chess 60 0 55
-gnome-core 68 0 55
-gnome-core-devel 10 0 55
-gnome-games 60 0 59
-gnome-games-devel 10 0 0
-gnome-guile 0 0 50
-gnome-guile-devel 10 0 50
-gnome-iconedit 60 0 55
-gnome-libs 68 0 55
-gnome-libs-devel 10 0 55
-gnome-linuxconf 74 0 74
-gnome-media 60 0 58
-gnome-network 60 0 58
-gnome-objc 0 0 40
-gnome-objc-devel 10 0 40
-gnome-pilot 55 0 45
-gnome-pilot-conduits 45 0 35
-gnome-pilot-devel 0 15 0
-gnome-pim 61 0 70
-gnome-pim-conduits 51 0 60
-gnome-pim-devel 10 0 70
-gnome-print 62 0 55
-gnome-print-devel 10 0 55
-gnome-tiles 60 0 55
-gnome-toaster 65 0 61
-gnome-users-guide 66 0 60
-gnome-utils 66 0 50
-gnome-vfs 0 0 0
-gnome-vfs-devel 0 0 30
-gnomeicu 61 0 58
-gnomemm 0 0 40
-gnomemm-devel 0 0 30
-gnorpm 74 0 71
-gnozip 50 0 60
-gnucash 35 0 15
-gnucash-devel 0 0 12
-gnuchess 40 0 31
-gnumeric 67 0 58
-gnuplot 65 0 53
-gnus 20 0 14
-gob 0 0 20
-gperf 12 0 72
-gphoto 60 0 58
-gpm 0 65 87
-gpm-devel 10 0 55
-gprolog 5 5 45
-gps 30 15 30
-gqcam 0 0 0
-gqview 55 0 49
-grep 0 92 94
-grip 60 0 35
-groff 0 0 62
-groff-for-man 0 0 0
-groff-gxditview 22 0 19
-groff-perl 0 0 0
-grpmi 0 0 0
-grub 99 99 99
-grub-doc 0 0 25
-gsl 10 0 0
-gsl-devel 0 0 0
-gsu 65 0 53
-gtk+ 0 0 70
-gtk+-devel 10 0 70
-gtk+licq 45 0 30
-gtk+mdk 0 0 15
-gtk+mdk-devel 0 0 15
-gtk-engines 0 0 70
-gtk-themes 50 0 20
-gtkdialogs 0 0 0
-gtkeyboard 20 0 0
-gtkglarea 10 0 15
-gtkglarea-devel 0 0 15
-gtkgo 15 0 5
-gtkgraph 65 0 35
-gtkhtml 0 0 0
-gtkhtml-devel 0 0 0
-gtkmm 20 0 55
-gtkmm-devel 20 0 55
-gtktalog 52 0 25
-gtkzip 60 0 58
-gtop 60 0 58
-gtulpas 10 0 10
-guile 11 0 75
-guile-devel 10 0 75
-gurpmi 82 0 86
-gv 55 0 49
-gzip 98 98 98
-hackkernel 0 0 0
-hackkernel-doc 0 0 0
-hackkernel-headers 0 0 0
-hackkernel-pcmcia-cs 0 0 0
-hackkernel-source 0 0 0
-happy 0 0 25
-harddrake 83 0 83
-haskell-GTK 0 0 10
-haskell-GTK-devel 0 0 10
-hdparm 98 98 98
-heartbeat -1 25 -1
-hexedit 91 91 91
-howto-html-de -30 -30 -30
-howto-html-el -30 -30 -30
-howto-html-en -30 -30 -30
-howto-html-es -30 -30 -30
-howto-html-fr -30 -30 -30
-howto-html-hr -30 -30 -30
-howto-html-id -30 -30 -30
-howto-html-it -30 -30 -30
-howto-html-ja -30 -30 -30
-howto-html-ko -30 -30 -30
-howto-html-pl -30 -30 -30
-howto-html-ro -30 -30 -30
-howto-html-sl -30 -30 -30
-howto-html-sv -30 -30 -30
-howto-html-zh -30 -30 -30
-howto-utils 0 0 0
-hugs98 0 0 15
-hylafax 0 0 0
-hylafax-client 0 0 0
-hylafax-server 0 0 0
-ibtk 20 0 13
-ical 40 0 27
-icepref 50 0 54
-icewm 65 0 78
-icewm-light 90 0 80
-imap 0 80 6
-imap-devel 0 0 6
-imlib 10 0 71
-imlib-cfgeditor 70 0 71
-imlib-devel 10 0 50
-imwheel 78 60 73
-indent 20 0 91
-indexhtml 0 87 76
-inews 6 12 15
-info 20 65 70
-info-install 0 0 10
-initscripts 99 99 99
-inn 0 55 0
-inn-devel 0 0 0
-intimed 0 55 10
-ipchains 15 98 13
-iplog 15 15 15
-iproute2 0 30 0
-ipvsadm 0 15 0
-ipxutils 20 85 9
-irda-utils -1 -1 -1
-irssi 59 0 57
-isapnptools 43 73 73
-isapnptools-devel 0 0 70
-isdn4k-utils -99 -99 -99
-isdn4net -99 -99 -99
-isicom 20 0 13
-ispell 49 15 22
-ispell-af -15 -15 -15
-ispell-br -15 -15 -15
-ispell-ca -15 -15 -15
-ispell-cs -15 -15 -15
-ispell-da -15 -15 -15
-ispell-de -15 -15 -15
-ispell-el -15 -15 -15
-ispell-en -15 -15 -15
-ispell-eo -15 -15 -15
-ispell-es -15 -15 -15
-ispell-fi -15 -15 -15
-ispell-fr -15 -15 -15
-ispell-ga -15 -15 -15
-ispell-gd -15 -15 -15
-ispell-gv -15 -15 -15
-ispell-id -15 -15 -15
-ispell-it -15 -15 -15
-ispell-nl -15 -15 -15
-ispell-no -15 -15 -15
-ispell-pl -15 -15 -15
-ispell-pt -15 -15 -15
-ispell-pt_BR -15 -15 -15
-ispell-ro -15 -15 -15
-ispell-ru -15 -15 -15
-ispell-sk -15 -15 -15
-ispell-sl -15 -15 -15
-ispell-sv -15 -15 -15
-itcl 10 0 60
-jadetex 15 0 45
-jed 16 18 14
-jed-common 0 18 0
-jed-xjed 40 0 22
-jikes 1 0 65
-joe 20 20 15
-kaffe 10 0 60
-kdbg 15 0 27
-kde1-compat 0 0 0
-kde1-compat-devel 0 0 0
-kdeaddutils 73 0 62
-kdeaddutils-devel 1 1 50
-kdeadmin 72 0 60
-kdebase 79 40 68
-kdebase-devel 1 1 60
-kdegames 71 0 59
-kdegraphics 77 40 66
-kdegraphics-devel 1 1 60
-kdelibs 0 0 0
-kdelibs-devel 1 1 60
-kdelibs-sound 60 0 55
-kdelibs-sound-devel 1 1 60
-kdemultimedia 77 0 66
-kdemultimedia-devel 1 1 60
-kdenetwork 72 0 60
-kdenetwork-devel 1 1 60
-kdepim 72 0 63
-kdesdk 0 0 35
-kdesupport 0 0 0
-kdesupport-devel 0 0 15
-kdetoys 70 0 65
-kdeutils 78 0 67
-kdiff 0 0 0
-kdiskcat 0 0 0
-kdoc 0 0 35
-kernel 99 99 99
-kernel-doc 5 50 65
-kernel-headers 1 45 94
-kernel-linus -1 -1 -1
-kernel-pcmcia-cs -1 -1 -1
-kernel-secure 0 0 0
-kernel-smp -1 -1 -1
-kernel-source 0 45 65
-kernel-utils 0 5 25
-kfilecoder 0 0 0
-kfirewall 0 0 0
-kfortune 0 0 0
-kfsstatus 0 0 0
-kfun21 0 0 0
-kimon 0 0 0
-kinput2-wnn4 -15 -15 -15
-kisocd 0 0 0
-kless 0 0 0
-klilo 0 0 0
-klyx 0 0 0
-kmag 0 0 0
-kmol 0 0 0
-kmp3 0 0 0
-kmp3te 0 0 0
-koffice 69 0 55
-koffice-devel 0 0 35
-kon2 -12 -60 -15
-kover 69 0 60
-kpacman 0 0 0
-kreglo 0 0 0
-krubik 0 0 0
-ksendfax 0 0 0
-kslide 0 0 0
-ktail 0 0 0
-ktelnet 0 0 0
-kterm -10 -90 -10
-kudzu 97 0 97
-kudzu-devel 0 0 43
-kups 60 0 50
-kups-devel 0 0 0
-kvideogen 0 0 0
-kvirc 69 0 56
-kvoice 0 0 0
-kvoicecontrol 0 0 0
-kwebget 0 0 0
-lame 15 40 35
-latex2html 25 0 50
-latte 0 0 45
-ld.so 98 98 98
-leafnode 0 50 0
-less 97 97 97
-lesstif 0 0 0
-lesstif-clients 0 0 0
-lesstif-devel 0 0 0
-lesstif-mwm 2 0 2
-lftp 50 78 83
-lha 40 25 72
-libPropList 10 0 80
-libPropList-devel 0 0 34
-libc 10 15 75
-libelf 10 15 80
-libghttp 10 0 55
-libghttp-devel 10 0 55
-libglade 10 0 55
-libglade-devel 10 0 40
-libgr 10 0 71
-libgr-devel 10 0 70
-libgr-progs 10 0 9
-libgtop 10 0 55
-libgtop-devel 10 0 55
-libjpeg 10 0 71
-libjpeg-devel 10 0 70
-libmikmod 10 0 55
-libmikmod-devel 10 0 55
-libnet 97 97 97
-libole2 0 0 0
-libole2-devel 0 0 0
-libpcap 10 80 72
-libpcap-devel 0 0 0
-libpng 10 0 71
-libpng-devel 10 0 71
-librep 10 0 50
-librep-devel 10 0 50
-libsafe 0 0 35
-libsigc++ 0 0 25
-libsigc++-devel 0 0 25
-libsigc++-examples 0 0 25
-libstdc++ 10 0 80
-libstdc++-compat 10 0 60
-libstdc++-devel 10 0 80
-libtabe -15 -90 -15
-libtabe-devel -15 -90 -15
-libtermcap 10 55 87
-libtermcap-devel 10 0 64
-libtiff 10 0 72
-libtiff-devel 10 0 72
-libtool 10 0 85
-libtool-devel 0 0 0
-libungif 10 0 72
-libungif-devel 10 0 72
-libungif-progs 10 0 2
-libunicode 10 0 80
-libunicode-devel 0 0 50
-libwmf 0 0 15
-libxml 10 0 71
-libxml-devel 10 0 71
-libxml2 10 0 71
-libxml2-devel 10 0 71
-licq 62 0 45
-licq-autoreply 45 0 30
-licq-console 45 0 30
-licq-devel 0 0 20
-licq-forwarder 45 0 30
-licq-rms 45 0 30
-licq-update-hosts 45 0 30
-lilo 99 99 99
-lilo-doc 0 0 30
-links 20 25 20
-linux_logo 92 72 92
-linuxconf 90 79 86
-linuxconf-gui -1 -1 -1
-linuxconf-lib 0 0 0
-linuxconf-util 0 0 0
-linuxconf 90 79 86
-linuxconf-devel 10 0 70
-lkmpg 2 0 65
-locales 96 76 96
-locales-af -1 -1 -1
-locales-ar -1 -1 -1
-locales-az -1 -1 -1
-locales-be -1 -1 -1
-locales-bg -1 -1 -1
-locales-br -1 -1 -1
-locales-ca -1 -1 -1
-locales-cs -1 -1 -1
-locales-cy -1 -1 -1
-locales-da -1 -1 -1
-locales-de -1 -1 -1
-locales-el -1 -1 -1
-locales-en -1 -1 -1
-locales-eo -1 -1 -1
-locales-es -1 -1 -1
-locales-et -1 -1 -1
-locales-eu -1 -1 -1
-locales-fa -1 -1 -1
-locales-fi -1 -1 -1
-locales-fo -1 -1 -1
-locales-ur -1 -1 -1
-locales-fr -1 -1 -1
-locales-ga -1 -1 -1
-locales-gd -1 -1 -1
-locales-gl -1 -1 -1
-locales-gv -1 -1 -1
-locales-he -1 -1 -1
-locales-hi -1 -1 -1
-locales-hr -1 -1 -1
-locales-hu -1 -1 -1
-locales-hy -1 -1 -1
-locales-id -1 -1 -1
-locales-is -1 -1 -1
-locales-it -1 -1 -1
-locales-ja -1 -1 -1
-locales-ka -1 -1 -1
-locales-kl -1 -1 -1
-locales-ko -1 -1 -1
-locales-kw -1 -1 -1
-locales-lo -1 -1 -1
-locales-lt -1 -1 -1
-locales-lv -1 -1 -1
-locales-mi -1 -1 -1
-locales-mk -1 -1 -1
-locales-ms -1 -1 -1
-locales-nl -1 -1 -1
-locales-no -1 -1 -1
-locales-oc -1 -1 -1
-locales-pd -1 -1 -1
-locales-ph -1 -1 -1
-locales-pl -1 -1 -1
-locales-pp -1 -1 -1
-locales-pt -1 -1 -1
-locales-ro -1 -1 -1
-locales-ru -1 -1 -1
-locales-sk -1 -1 -1
-locales-sl -1 -1 -1
-locales-sq -1 -1 -1
-locales-sr -1 -1 -1
-locales-sv -1 -1 -1
-locales-ta -1 -1 -1
-locales-tg -1 -1 -1
-locales-th -1 -1 -1
-locales-tr -1 -1 -1
-locales-tt -1 -1 -1
-locales-uk -1 -1 -1
-locales-vi -1 -1 -1
-locales-wa -1 -1 -1
-locales-yi -1 -1 -1
-locales-zh -1 -1 -1
-logrotate 0 25 15
-losetup 5 45 35
-lout 15 35 10
-lout-doc 31 32 10
-lpg 40 0 80
-lpr -99 -99 -99
-lrzsz 0 34 0
-lslk 20 49 54
-lsof 10 0 67
-ltrace 10 0 0
-lynx 42 78 84
-lyx 50 0 58
-m4 15 0 80
-macutils 22 5 19
-mailcap 5 5 4
-mailx 92 92 92
-make 50 50 94
-man 90 65 72
-man-pages 90 65 72
-man-pages-cs -10 -30 -25
-man-pages-de -10 -30 -25
-man-pages-es -10 -30 -25
-man-pages-fr -10 -30 -25
-man-pages-hu -10 -30 -25
-man-pages-id -10 -30 -25
-man-pages-it -10 -30 -25
-man-pages-ja -10 -30 -25
-man-pages-ko -10 -30 -25
-man-pages-pl -10 -30 -25
-man-pages-ru -10 -30 -25
-man-pages-zh -10 -30 -25
-mandrake-release 99 99 99
-mandrake_desk 88 0 88
-mandrake_doc-de -15 -90 -25
-mandrake_doc-en -15 -90 -25
-mandrake_doc-es -15 -90 -25
-mandrake_doc-fr -15 -90 -25
-mandrake_doc-it -15 -90 -25
-mandrake_doc-ru -15 -90 -25
-mars-nwe 0 35 0
-mathplot 30 0 20
-mawk 0 25 80
-mc 49 45 31
-mcserv 0 40 9
-mek 40 0 0
-memprof 2 5 65
-menu 90 0 80
-menudrake 79 75 75
-userdrake 50 0 40
-mercury 0 0 45
-metamail 40 80 50
-mgetty 24 20 9
-mgetty-contrib 28 20 15
-mgetty-sendfax 28 20 15
-mgetty-viewfax 28 20 15
-mgetty-voice 28 20 15
-mikmod 42 0 10
-mingetty 5 25 15
-minicom 27 0 4
-mirrordir 26 99 0
-mkbootdisk 35 55 60
-mkinitrd 99 99 99
-mkisofs 26 0 13
-mktemp 15 75 65
-mkxauth 2 99 1
-mm 0 0 15
-mm-devel 0 0 0
-mod_php -99 35 -99
-php-gd -99 15 -99
-php-imap -99 15 -99
-php-ldap -99 15 -99
-php-mysql -99 15 -99
-php-pgsql -99 15 -99
-php-oracle -99 15 -99
-php-dba_gdbm_db2 -99 15 -99
-php-readline -99 15 -99
-mod_ssl -99 75 -99
-mod_ssl-sxnet -99 30 -99
-modutils 99 99 99
-mon 0 40 0
-mount 97 97 97
-mouseconfig 0 0 0
-mozilla-fonts 0 0 0
-mp3info 50 20 50
-mpage 55 65 80
-mpeg_lib 0 0 0
-mpeg_lib-devel 0 0 30
-mpeg_lib-devel 0 0 0
-mpg123 42 0 42
-msec 98 98 98
-mt-st 40 0 49
-mtools 90 0 84
-mutt 10 0 10
-mxp 0 0 0
-nag 35 75 25
-nasm 20 20 65
-nasm-doc 0 20 65
-nasm-rdoff 0 20 65
-nc 0 0 0
-ncftp 55 0 49
-sftp 15 10 15
-ncompress 42 79 91
-ncpfs 0 0 0
-ncurses 0 0 80
-ncurses-extraterms 0 0 0
-ncurses-devel 10 0 75
-nedit 45 20 65
-net-tools 95 96 95
-netkit-base 82 99 82
-netscape-castellano -13 -30 -18
-netscape-catalan -13 -30 -18
-netscape-common 0 0 0
-netscape-communicator 78 60 73
-netscape-euskara -13 -30 -18
-netscape-francais -13 -30 -18
-netscape-german -13 -30 -18
-netscape-japanese -13 -30 -18
-netscape-navigator 0 0 0
-netscape-polish -13 -30 -18
-netscape-russian -13 -30 -18
-netscape-spanish -13 -30 -18
-netscape-walon -13 -30 -18
-newt 10 0 75
-newt-devel 10 0 75
-nfs-utils -99 80 13
-nfs-utils-clients 23 75 23
-nist 55 0 45
-nmap 5 40 40
-nmap-frontend 5 40 40
-nmh 0 0 0
-nscd 0 40 0
-nss_ldap 0 55 25
-ntp -1 -1 -1
-ntsysv 0 65 25
-numlock -11 -11 -11
-oaf 0 0 0
-oaf-devel 0 0 0
-ocaml 0 0 35
-octave 0 0 30
-oggvorbis 30 10 20
-oggvorbis-devel 0 0 15
-oggvorbis-examples 0 0 15
-open 20 45 80
-openjade 5 15 15
-openldap 0 50 35
-openldap-devel 0 0 25
-openssl 0 0 0
-openssl-devel 0 0 0
-oregano 0 0 0
-p2c 10 0 71
-p2c-devel 10 0 55
-pam 7 99 91
-pam-devel 0 0 0
-pam-doc 0 50 50
-pan 22 0 0
-pango 10 0 10
-pango-devel 0 0 10
-parted 35 35 35
-parted-devel 0 0 35
-passwd 99 99 99
-patch 14 0 72
-pciutils 16 55 55
-pciutils-devel 0 0 20
-pdksh 10 25 9
-penguin-command 35 0 10
-perl 20 19 90
-perl-Apache-Filter 0 0 0
-perl-Apache-SSI 0 0 0
-perl-Apache-Session 0 0 0
-perl-Compress-Zlib 0 0 0
-perl-Convert-BER 0 0 0
-perl-DBI 10 0 65
-perl-DBIx-Recordset 0 0 0
-perl-DB_File 10 0 50
-perl-Data-ShowTable 10 0 50
-perl-Date-Calc 0 0 0
-perl-DateManip 0 0 0
-perl-Devel-Symdump 0 0 0
-perl-Digest-MD5 10 0 70
-perl-ExtUtils_F77 0 0 0
-perl-File-Tail 0 0 0
-perl-GTK 10 0 72
-perl-GTK-GLArea 10 0 70
-perl-GTK-GdkImlib 10 0 70
-perl-GTK-Glade 10 0 70
-perl-GTK-Gnome 10 0 70
-perl-GTK-GtkHTML 0 0 0
-perl-HTML-Clean 0 0 0
-perl-HTML-Parser 10 0 55
-perl-HTML-SimpleParse 10 0 50
-perl-IO-stringy 5 0 65
-perl-MIME-Base64 5 0 45
-perl-MIME-tools 5 0 50
-perl-MLDBM 0 0 0
-perl-MP3-Info 5 0 40
-perl-Magick 0 0 0
-perl-MailTools 5 0 50
-perl-Mon 0 0 0
-perl-Msgcat 5 0 50
-perl-Mysql 5 0 40
-perl-Net-Telnet 0 0 0
-perl-Net_SSLeay 0 0 0
-perl-PDL 10 0 75
-perl-PDL-doc 0 0 0
-perl-Parse-RecDescent 10 0 75
-perl-Parse-Yapp 0 0 0
-perl-Period 0 0 0
-perl-RPM 0 0 0
-perl-Storable 0 0 0
-perl-Term-Readline-Gnu 10 10 88
-perl-Tie-Cache 0 0 0
-perl-Time-HiRes 0 0 0
-perl-TimeDate 0 0 0
-perl-Tk 0 15 0
-perl-Tk-devel 0 0 0
-perl-Tk-doc 0 0 0
-perl-URI 5 0 50
-perl-XML-Parser 0 0 0
-perl-XML-XSLT 0 0 0
-perl-base 0 0 0
-perl-devel 0 0 30
-perl-libnet 10 10 80
-perl-libwww-perl 10 10 80
-perl-libxml-enno 0 0 0
-perl-libxml-perl 0 0 0
-perl-Array-RefElem 0 0 0
-perl-Data-DumpXML 0 0 0
-perl-ExtUtils-PerlPP 0 0 0
-perl-File-NCopy 0 0 0
-perl-Image-Size 0 0 0
-perl-Mail-Sendmail 0 0 0
-perl-Net-XWhois 0 0 0
-perl-XML-RSS 0 0 0
-perlftlib 10 0 0
-php 0 35 5
-php-devel 0 0 5
-php-manual 0 0 5
-pidentd 15 69 87
-pilot-link 40 0 27
-perl-PDA-Pilot 0 0 0
-pilot-link-devel 11 0 25
-pine 40 0 27
-pinfo 20 20 20
-pingus 40 0 10
-piranha 0 10 0
-piranha-docs 0 10 0
-piranha-gui 0 10 0
-playmidi 43 0 19
-playmidi-X11 53 0 20
-plugger 40 0 40
-pmake 22 0 75
-pmake-customs 12 0 72
-popt 10 0 80
-popt-devel 0 0 45
-portmap 0 91 19
-postfix 20 88 51
-postgresql 0 56 23
-postgresql-devel 0 0 23
-postgresql-jdbc 0 0 15
-postgresql-odbc 0 0 23
-postgresql-perl 0 0 23
-postgresql-python 0 0 5
-postgresql-server 0 56 23
-postgresql-tcl 0 0 23
-postgresql-test 0 0 23
-postgresql-tk 0 0 5
-ppp 0 0 0
-pppoe-linuxconf 0 0 0
-pptp-adsl-fr -99 -99 -99
-pptp-client -99 -99 -99
-procinfo 24 15 96
-procmail 2 65 45
-procps 98 98 98
-procps-X11 50 0 32
-procps-devel 0 0 0
-proftpd -99 -99 -99
-psacct 20 70 87
-psmisc 25 62 56
-pspell 0 0 0
-pspell-devel 0 0 0
-psutils 5 42 15
-pth 0 0 25
-pth-devel 0 0 15
-publib-devel 0 0 0
-pump 0 0 0
-pump-devel 0 0 0
-pwdb 13 90 75
-pwdb-devel 0 0 50
-pygnome 12 0 50
-pygnome-applet 10 0 30
-pygnome-capplet 10 0 30
-pygnome-libglade 10 0 30
-pygtk 13 0 50
-pygtk-glarea 15 0 25
-pygtk-libglade 16 0 50
-pysol 27 0 27
-python 15 0 74
-python-devel 0 0 65
-python-docs 31 0 40
-python-imaging 31 0 40
-pythonlib 17 0 75
-qcad 5 0 5
-qiv 78 0 70
-qt 0 0 55
-qt-devel 10 0 55
-qt-qgl 10 0 50
-qt-qimgio 10 0 50
-qt2 0 0 45
-qt2-devel 0 0 45
-qt2-doc 0 0 30
-qtcups 0 0 0
-qtcups-devel 0 0 0
-queso 0 25 35
-quota 42 85 37
-raidtools 25 85 4
-rcs 12 0 71
-rdate 10 80 9
-rdist 10 75 9
-readline 11 0 70
-readline-devel 11 0 65
-recode 10 0 72
-recode-devel 0 0 50
-reiserfs-utils 60 60 60
-rep-gtk 0 0 20
-rep-gtk-gnome 0 0 20
-rep-gtk-libglade 0 0 20
-rgrep 55 55 75
-rhs-printfilters 1 1 0
-rmt 24 0 24
-rocksndiamonds 35 0 10
-rootfiles 99 99 99
-routed 0 90 19
-rp-pppoe -99 -99 -99
-rpm 99 99 99
-rpm-build 45 45 70
-rpm-devel 10 0 80
-rpm-python 0 0 50
-rpmdrake 84 0 81
-rpmlint 10 10 60
-rpmtools 0 0 25
-rpmtools-compat 0 0 0
-rpmtools-devel 0 0 25
-rsh 46 99 75
-rsh-server -99 55 25
-rsync 20 99 75
-ruby 0 0 25
-ruby-doc 0 0 25
-ruby-extensions 0 0 25
-ruby-gtk 0 0 25
-rusers 20 0 20
-rute -50 -75 -60
-rwall -1 0 -1
-rwho -1 0 -1
-rxvt 49 0 80
-rxvt-CLE -10 -90 -10
-sag 39 35 25
-samba 21 99 23
-samba-client 55 56 50
-samba-common 0 0 0
-sane 45 0 53
-sane-devel 10 0 2
-sash 5 5 5
-sawfish 59 0 57
-sawfish-themer 15 0 15
-sawfish-themes 50 0 50
-screen 26 43 79
-sed 97 97 97
-sendmail -99 -99 -99
-sendmail-cf 0 0 0
-sendmail-doc 0 0 0
-setserial 42 0 55
-setup 15 25 15
-sfm 25 0 25
-sgml-common 5 15 15
-sgml-tools 5 15 15
-sh-utils 97 97 97
-shadow-utils 98 98 98
-shapecfg 20 75 8
-sharutils 43 99 38
-sketch 45 0 0
-slang 12 0 75
-slang-devel 10 0 70
-slang-doc 0 0 70
-slocate 99 99 99
-slrn 10 0 10
-slrn-pull 35 0 45
-smpeg 50 0 25
-smpeg-devel 0 0 25
-sndconfig 70 40 70
-sox 41 32 80
-sox-devel 13 0 70
-space_sounds 52 0 55
-spacecup -1 -1 -1
-spec-helper 0 0 35
-spellutils 0 0 0
-spruce 0 0 0
-squid 0 45 16
-stat 5 55 45
-statserial 15 0 13
-strace 11 0 87
-sudo 0 30 0
-svgalib 10 0 63
-svgalib-devel 10 0 63
-swatch 22 65 4
-swi-prolog 5 5 45
-swig 0 0 20
-swig-devel 0 0 10
-symlinks 23 75 29
-sympa -1 40 -1
-sysklogd 97 97 97
-t1lib 1 0 29
-t1lib-devel 10 0 40
-taipeifonts -10 0 -10
-talk 44 0 39
-talk-server 0 0 0
-taper 42 0 27
-tar 97 97 97
-tcl 12 0 70
-tcllib 0 0 0
-tclx 12 0 70
-tcp_wrappers 0 99 0
-tcp_wrappers-devel 0 0 0
-tcpdump 10 79 2
-tcsh 1 25 15
-telnet 90 79 92
-openssh 65 75 65
-openssh-server -99 35 -99
-openssh-clients 65 75 65
-openssh-askpass 0 0 0
-openssh-askpass-gnome 0 0 0
-gnupg 90 90 90
-telnet-server -99 28 -99
-termcap 98 98 98
-tetex 25 0 50
-tetex-afm 25 0 40
-tetex-doc 25 0 40
-tetex-dvilj 40 0 40
-tetex-dvips 25 0 40
-tetex-latex 25 0 40
-tetex-latex-heb -65 -90 -90
-tetex-xdvi 25 0 50
-texinfo 22 0 50
-textutils 99 99 99
-teyjus 0 0 35
-tftp 0 40 2
-tftp-server 0 40 2
-thud 0 0 0
-time 40 65 87
-timeconfig 55 80 60
-timed 40 70 36
-timetool 54 0 57
-timidity-instruments 51 0 54
-tin 44 0 39
-tix 15 0 60
-tk 15 0 60
-tkbabel 15 0 15
-tkcvs 15 0 15
-tkinter 15 0 60
-tksysv 55 0 60
-tmake 10 0 25
-tmpwatch 35 75 60
-traceroute 40 79 29
-transfig 16 0 14
-tree 40 25 10
-trn 46 0 41
-trophy 35 0 10
-tunelp 24 15 28
-tuxracer -1 -1 -1
-ucd-snmp 0 70 45
-ucd-snmp-devel 0 25 45
-ucd-snmp-utils 0 37 45
-umb-scheme 10 0 65
-unarj 40 45 16
-units 22 0 10
-unixODBC 0 0 0
-unzip 70 75 91
-urlview 43 0 47
-urpmi 95 95 95
-urw-fonts 50 0 34
-usbview 5 0 10
-usermode 51 0 58
-usernet 42 55 37
-utempter 90 0 73
-utempter-devel 0 0 0
-util-linux 98 98 98
-uucp 0 80 2
-uxcook 0 0 0
-vigmeup 23 0 11
-vim-X11 52 0 26
-vim-common 0 19 0
-vim-enhanced 46 78 83
-vim-minimal 98 98 98
-vimguide 30 0 25
-vixie-cron 97 97 97
-vlock 40 99 80
-vnc 44 0 39
-vnc-SVGALIB 43 0 38
-vnc-doc 38 35 33
-vnc-java 38 0 34
-vnc-server 0 40 28
-webmin 20 40 20
-wget 65 75 53
-which 1 25 25
-wine 54 0 57
-wine-devel 0 0 0
-wmakerconf 47 0 57
-wmnet 24 0 21
-words 47 85 42
-wu-ftpd -99 85 -99
-wv 55 0 54
-wv-devel 0 0 0
-x3270 1 0 0
-xa+cv -10 -20 -10
-xalf 68 0 55
-xanim 58 0 54
-xbanner 15 0 12
-xboard 54 0 48
-xboing 53 0 47
-xcdroast 59 0 53
-xchat 58 0 52
-xcin -10 -10 -10
-xcpustate 53 0 47
-xdaliclock 57 0 51
-xdelta 16 0 5
-xdelta-devel 10 0 2
-xdosemu 34 0 37
-xearth 53 0 56
-xemacs 57 0 0
-xemacs-el 0 0 15
-xemacs-extras 50 0 36
-xemacs-info 54 0 42
-xemacs-mule 0 0 0
-xfce 0 0 0
-xfig 39 0 33
-xfishtank 51 0 45
-xgammon 40 0 31
-xinetd 0 0 0
-xinetd-devel 0 0 0
-xinitrc 0 0 0
-xinput 10 0 30
-xjewel 58 0 52
-xkobo 57 0 51
-xli 65 0 60
-xlispstat 2 0 45
-xloadimage 45 0 30
-xlockmore 58 0 52
-xmailbox 53 0 47
-xmame 25 0 25
-xmess 25 0 15
-xmms 64 0 57
-xmms-devel 0 0 15
-xmms-esd 46 0 41
-xmms-gnome 62 0 52
-xmms-kjofol-skins 50 0 50
-xmms-mesa -1 -1 -1
-xmms-mikmod 43 0 38
-xmms-more-vis-plugins 55 0 55
-xmms-oggvorbis 64 0 57
-xmms-skins 60 0 55
-xmms-smpeg 50 0 45
-xmorph 52 0 44
-xmovie 55 0 35
-xntp3 0 75 31
-xoscope 10 0 10
-xosview 51 0 45
-xpaint 53 0 47
-xpat2 43 0 38
-xpcd 40 0 30
-xpcd-gimp 30 0 25
-xpcd-svga 0 0 0
-xpdf 57 0 51
-xpilot 59 0 53
-xpm 52 0 64
-xpm-devel 10 0 56
-xpp 60 0 50
-xpuzzles 50 0 43
-xrally 5 0 5
-xrn 55 0 49
-xscreensaver 68 0 55
-xscreensaver-gl -1 -1 -1
-xsoldier 51 0 45
-xsysinfo 55 0 56
-xterm 87 0 80
-xtoolwait 50 0 35
-xtraceroute 50 0 40
-xtrojka 51 0 45
-xwc 65 0 40
-xwpe 0 0 20
-xwpe-X11 0 0 20
-xwpick 55 0 49
-xxgdb 53 0 47
-yodl 0 0 0
-yp-tools 0 40 0
-ypbind 0 40 0
-ypserv 0 0 0
-ytalk 21 75 18
-yudit 50 0 38
-zgv 15 0 13
-zip 70 65 87
-zlib 16 60 94
-zlib-devel 10 0 72
-zsh 20 50 72
-zsh-doc 0 35 60
-jpilot 40 0 30
-jpilot-Mail 12 0 10
-jpilot-syncmal 12 0 10
-jpilot-plugin-devel 0 0 0
-Maelstrom 50 0 35
-auctex 5 0 5
-bcast 15 0 10
-mpeg2_movie 10 0 8
-bg5ps -10 -10 -10
-eroaster 55 0 45
-everybuddy 52 0 52
-jabber 0 30 0
-libjabber 0 0 0
-libjabber-devel 0 0 0
-gabber 35 10 20
-gdk-pixbuf-gnomecanvas 0 0 0
-gdk-pixbuf-loaders 0 0 0
-gdk-pixbuf-xlib 0 0 0
-htdig 20 0 15
-libxode 0 0 0
-libxode-devel 0 0 0
-libgnet 0 0 0
-libgnet-devel 0 0 0
-libetherx 0 0 0
-libetherx-devel 0 0 0
-screem 55 0 60
-portsentry 0 15 0
-ttfprint -10 -10 -10
-kde-i18n-Afrikaans -12 -51 -23
-kde-i18n-Basque -12 -51 -23
-kde-i18n-Brazil -12 -51 -23
-kde-i18n-Breton -12 -51 -23
-kde-i18n-British -12 -51 -23
-kde-i18n-Bulgarian -12 -51 -23
-kde-i18n-Catalan -12 -51 -23
-kde-i18n-Chinese -12 -51 -23
-kde-i18n-Chinese-Big5 -12 -51 -23
-kde-i18n-Croatian -12 -51 -23
-kde-i18n-Czech -12 -51 -23
-kde-i18n-Danish -12 -51 -23
-kde-i18n-Dutch -12 -51 -23
-kde-i18n-Esperanto -12 -51 -23
-kde-i18n-Estonian -12 -51 -23
-kde-i18n-Finnish -12 -51 -23
-kde-i18n-French -12 -51 -23
-kde-i18n-Galacian -12 -51 -23
-kde-i18n-German -12 -51 -23
-kde-i18n-Greek -12 -51 -23
-kde-i18n-Hebrew -12 -51 -23
-kde-i18n-Hungarian -12 -51 -23
-kde-i18n-Icelandic -12 -51 -23
-kde-i18n-Italian -12 -51 -23
-kde-i18n-Japanese -12 -51 -23
-kde-i18n-Korean -12 -51 -23
-kde-i18n-Lithuanian -12 -51 -23
-kde-i18n-Macedonian -12 -51 -23
-kde-i18n-Maori -12 -51 -23
-kde-i18n-Norwegian -12 -51 -23
-kde-i18n-Norwegian -12 -51 -23
-kde-i18n-Polish -12 -51 -23
-kde-i18n-Portuguese -12 -51 -23
-kde-i18n-Romanian -12 -51 -23
-kde-i18n-Russian -12 -51 -23
-kde-i18n-Serbian -12 -51 -23
-kde-i18n-Slovak -12 -51 -23
-kde-i18n-Slovenian -12 -51 -23
-kde-i18n-Spanish -12 -51 -23
-kde-i18n-Swedish -12 -51 -23
-kde-i18n-Tamil -12 -51 -23
-kde-i18n-Thai -12 -51 -23
-kde-i18n-Turkish -12 -51 -23
-kde-i18n-Ukrainian -12 -51 -23
-kde-i18n-Walloon -12 -51 -23
-kde-i18n-Welsh -12 -51 -23
-kde-i18n-Norwegian-Nynorsk -12 -51 -23
-linuxconf-lang-cn -35 -60 -35
-linuxconf-lang-cs -35 -60 -35
-linuxconf-lang-de -35 -60 -35
-linuxconf-lang-es -35 -60 -35
-linuxconf-lang-fi -35 -60 -35
-linuxconf-lang-fr -35 -60 -35
-linuxconf-lang-it -35 -60 -35
-linuxconf-lang-ko -35 -60 -35
-linuxconf-lang-no -35 -60 -35
-linuxconf-lang-pt -35 -60 -35
-linuxconf-lang-ro -35 -60 -35
-linuxconf-lang-ru-SU -35 -60 -35
-linuxconf-lang-se -35 -60 -35
-linuxconf-lang-sk -35 -60 -35
-linuxconf-lang-zh -35 -60 -35
-7colors 15 0 0
-ltris 28 0 0
-lbreakout 35 0 0
-fonts-hebrew-elmar -30 -30 -30
-kwintv 0 0 0
-xawtv 0 0 0
-xawtv-misc 0 0 0
-xawtv-radio 0 0 0
-wxxt 0 0 0
-wxxt-devel 0 0 0
-surfraw 0 0 0
-R-base 0 0 0
-gpa 20 0 0
-gnome-telnet 0 0 0
-quanta 32 0 24
-nslint 0 12 0
-logcheck 0 12 0
-kisdn-free 33 0 30
-
-# commercial
-ac3d 20 0 20
-acroread 24 15 24
-acroread-nppdf 24 15 24
-IglooFTP-PRO 20 20 20
-interbase 0 15 15
-interbase-docs 0 15 15
-civctp-demo 22 0 20
-compupic 19 0 19
-commercial-menu 50 40 50
-eus-demo 23 0 20
-myth2-demo 24 0 25
-macromedia-flash 45 15 45
-RealPlayer 27 15 27
-RealPlayer-rpnp 27 15 27
-scol 23 0 23
-avp-database 20 20 20
-avp-linux 20 20 20
-arkeia-arkc 0 20 0
-arkeia-client 20 0 20
-arkeia-gui 24 0 20
-arkeia-server-shareware 0 30 0
-Artstream 20 0 0
-citrix-icaclient-en -70 -70 -70
-citrix-icaclient-fr -70 -70 -70
-citrix-icaclient-ge -70 -70 -70
-citrix-icaclient-sp -70 -70 -70
-printpro 0 0 0
-printpro-agfa 0 0 0
-printpro-alps 0 0 0
-printpro-apple 0 0 0
-printpro-autologic 0 0 0
-printpro-calcomp 0 0 0
-printpro-canon 0 0 0
-printpro-digital 0 0 0
-printpro-efi 0 0 0
-printpro-encad 0 0 0
-printpro-epson 0 0 0
-printpro-hp 0 0 0
-printpro-ibm 0 0 0
-printpro-lexmark 0 0 0
-printpro-lhag 0 0 0
-printpro-linotronic 0 0 0
-printpro-nec 0 0 0
-printpro-oki 0 0 0
-printpro-otheram 0 0 0
-printpro-othernz 0 0 0
-printpro-qms 0 0 0
-printpro-seiko 0 0 0
-printpro-sony 0 0 0
-printpro-tektronix 0 0 0
-printpro-ti 0 0 0
-printpro-varityper 0 0 0
-printpro-xerox 0 0 0
-emumail4.0 0 20 0
-EnlightenDSMFree 0 24 0
-EnlightenDSMFree-dsa 0 24 0
-EnlightenDSMFree-gui 0 24 0
-ForteCE-FCS 0 0 30
-ViaVoice_Outloud_rtk 0 0 45
-ViaVoice_Outloud_sdk 0 0 45
-ViaVoice_runtime 0 0 45
-ViaVoice_sdk 0 0 45
-jdk-sun 0 0 35
-jdk-sun-doc 0 0 35
-jre-sun 20 0 35
-heretic2-demo 24 0 24
-heroes3-demo 24 0 24
-rt2-demo 24 0 24
-MainActor 24 0 0
-mupad 20 0 20
-mtv 24 0 24
-mtv-fullscreen-extension 15 0 15
-NetPartitioner 0 24 0
-omnimark 0 0 35
-rebol-core 0 0 30
-staroffice-de -64 -90 -64
-staroffice-en -64 -90 -64
-staroffice-fr -64 -90 -64
-staroffice-it -64 -90 -64
-staroffice-nl -64 -90 -64
-staroffice-pt -64 -90 -64
-staroffice-es -64 -90 -64
-staroffice-sv -64 -90 -64
-tina-base 0 0 0
-tina-lesstif 0 0 0
-tina-oracle80 0 0 0
-tina-oracle8i 0 0 0
-tina-server 0 0 0
-VMware 20 0 35
-VariCAD 24 0 24
-ViaVoice_runtime 26 0 26
-<<<<<<< compssList
-viavoicemenu 26 0 26
-=======
-viavoicemenu 26 0 26
->>>>>>> 1.139
-kisdn 0 0 0
diff --git a/perl-install/share/logo-mandrake.png b/perl-install/share/logo-mandrake.png
index 59177058a..28439999c 100644
--- a/perl-install/share/logo-mandrake.png
+++ b/perl-install/share/logo-mandrake.png
Binary files differ
diff --git a/perl-install/share/po/br.po b/perl-install/share/po/br.po
deleted file mode 100644
index d362afdc4..000000000
--- a/perl-install/share/po/br.po
+++ /dev/null
@@ -1,12831 +0,0 @@
-# DrakX e Brezhoneg.
-# Copyright (C) 1999-2002 MandrakeSoft
-# Thierry Vignaud <tvignaud@mandrakesoft.com>, 1999-2002
-# Jañ-Mai Drapier <jan-mai.drapier@mail.dotcom.fr>, 1999-2000
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: DrakX 8.2\n"
-"POT-Creation-Date: 2002-09-13 22:00+0200\n"
-"PO-Revision-Date: 2002-01-28 22:41GMT\n"
-"Last-Translator: Thierry Vignaud <tvignaud@mandrakesoft.com>\n"
-"Language-Team: Brezhoneg <ofisk@wanadoo.fr>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../../Xconfig/card.pm_.c:16
-msgid "256 kB"
-msgstr "256 ko"
-
-#: ../../Xconfig/card.pm_.c:17
-msgid "512 kB"
-msgstr "512 ko"
-
-#: ../../Xconfig/card.pm_.c:18
-msgid "1 MB"
-msgstr "1 Mo"
-
-#: ../../Xconfig/card.pm_.c:19
-msgid "2 MB"
-msgstr "2 Mo"
-
-#: ../../Xconfig/card.pm_.c:20
-msgid "4 MB"
-msgstr "4 Mo"
-
-#: ../../Xconfig/card.pm_.c:21
-msgid "8 MB"
-msgstr "8 Mo"
-
-#: ../../Xconfig/card.pm_.c:22
-msgid "16 MB"
-msgstr "16 Mo"
-
-#: ../../Xconfig/card.pm_.c:23
-msgid "32 MB"
-msgstr "32 Mo"
-
-#: ../../Xconfig/card.pm_.c:24
-msgid "64 MB or more"
-msgstr "64 Mo pe vuioc'h"
-
-#: ../../Xconfig/card.pm_.c:203
-msgid "Choose a X server"
-msgstr "Dibabit ur servijer X"
-
-#: ../../Xconfig/card.pm_.c:203
-msgid "X server"
-msgstr "servijer X"
-
-#: ../../Xconfig/card.pm_.c:230
-#, fuzzy
-msgid "Multi-head configuration"
-msgstr "o lenn ar c'hefluniadur"
-
-#: ../../Xconfig/card.pm_.c:231
-msgid ""
-"Your system support multiple head configuration.\n"
-"What do you want to do?"
-msgstr ""
-
-#: ../../Xconfig/card.pm_.c:286
-msgid "Select the memory size of your graphics card"
-msgstr "Diuzit ment memor ho kartenn c'hrafek"
-
-#: ../../Xconfig/card.pm_.c:347
-msgid "XFree configuration"
-msgstr "Staliadur XFree86"
-
-#: ../../Xconfig/card.pm_.c:349
-#, fuzzy
-msgid "Which configuration of XFree do you want to have?"
-msgstr "Pe seurt enmont a vennit ouzhpennañ"
-
-#: ../../Xconfig/card.pm_.c:381
-msgid "Configure all heads independently"
-msgstr ""
-
-#: ../../Xconfig/card.pm_.c:382
-msgid "Use Xinerama extension"
-msgstr "Implijit Xinemara"
-
-#: ../../Xconfig/card.pm_.c:387
-#, fuzzy, c-format
-msgid "Configure only card \"%s\"%s"
-msgstr "Kefluniadur hep ken kartenn \"%s\" (%s)"
-
-#: ../../Xconfig/card.pm_.c:399 ../../Xconfig/card.pm_.c:400
-#: ../../Xconfig/various.pm_.c:23
-#, c-format
-msgid "XFree %s"
-msgstr "XFree %s"
-
-#: ../../Xconfig/card.pm_.c:411 ../../Xconfig/card.pm_.c:437
-#: ../../Xconfig/various.pm_.c:23
-#, c-format
-msgid "XFree %s with 3D hardware acceleration"
-msgstr "XFree %s gant 3D"
-
-#: ../../Xconfig/card.pm_.c:414
-#, c-format
-msgid ""
-"Your card can have 3D hardware acceleration support but only with XFree %s.\n"
-"Your card is supported by XFree %s which may have a better support in 2D."
-msgstr ""
-
-#: ../../Xconfig/card.pm_.c:416 ../../Xconfig/card.pm_.c:439
-#, c-format
-msgid "Your card can have 3D hardware acceleration support with XFree %s."
-msgstr ""
-
-#: ../../Xconfig/card.pm_.c:424 ../../Xconfig/card.pm_.c:445
-#, c-format
-msgid "XFree %s with EXPERIMENTAL 3D hardware acceleration"
-msgstr ""
-
-#: ../../Xconfig/card.pm_.c:427
-#, c-format
-msgid ""
-"Your card can have 3D hardware acceleration support but only with XFree %s,\n"
-"NOTE THIS IS EXPERIMENTAL SUPPORT AND MAY FREEZE YOUR COMPUTER.\n"
-"Your card is supported by XFree %s which may have a better support in 2D."
-msgstr ""
-
-#: ../../Xconfig/card.pm_.c:430 ../../Xconfig/card.pm_.c:447
-#, c-format
-msgid ""
-"Your card can have 3D hardware acceleration support with XFree %s,\n"
-"NOTE THIS IS EXPERIMENTAL SUPPORT AND MAY FREEZE YOUR COMPUTER."
-msgstr ""
-
-#: ../../Xconfig/card.pm_.c:453
-msgid "Xpmac (installation display driver)"
-msgstr ""
-
-#: ../../Xconfig/main.pm_.c:76 ../../Xconfig/main.pm_.c:77
-#: ../../Xconfig/monitor.pm_.c:96 ../../any.pm_.c:978
-msgid "Custom"
-msgstr "Personelañ"
-
-#: ../../Xconfig/main.pm_.c:102
-#, fuzzy
-msgid "Graphic Card"
-msgstr "Kartenn c'hrafek"
-
-#: ../../Xconfig/main.pm_.c:105 ../../Xconfig/monitor.pm_.c:93
-msgid "Monitor"
-msgstr "Skramm"
-
-#: ../../Xconfig/main.pm_.c:108 ../../Xconfig/resolution_and_depth.pm_.c:209
-msgid "Resolution"
-msgstr "Spister"
-
-#: ../../Xconfig/main.pm_.c:113
-msgid "Test"
-msgstr ""
-
-#: ../../Xconfig/main.pm_.c:118 ../../diskdrake/dav.pm_.c:67
-#: ../../diskdrake/interactive.pm_.c:381 ../../diskdrake/removable.pm_.c:25
-#: ../../diskdrake/removable_gtk.pm_.c:16 ../../diskdrake/smbnfs_gtk.pm_.c:86
-#, fuzzy
-msgid "Options"
-msgstr "Parzhadur"
-
-#: ../../Xconfig/main.pm_.c:122 ../../Xconfig/resolution_and_depth.pm_.c:268
-#: ../../install_gtk.pm_.c:79 ../../install_steps_gtk.pm_.c:275
-#: ../../interactive.pm_.c:127 ../../interactive.pm_.c:142
-#: ../../interactive.pm_.c:354 ../../interactive/http.pm_.c:104
-#: ../../interactive/newt.pm_.c:195 ../../interactive/newt.pm_.c:197
-#: ../../interactive/stdio.pm_.c:39 ../../interactive/stdio.pm_.c:143
-#: ../../interactive/stdio.pm_.c:144 ../../my_gtk.pm_.c:159
-#: ../../my_gtk.pm_.c:287 ../../my_gtk.pm_.c:310 ../../security/main.pm_.c:246
-#: ../../standalone/drakbackup_.c:3974 ../../standalone/drakbackup_.c:4069
-#: ../../standalone/drakbackup_.c:4088
-msgid "Ok"
-msgstr "Mat eo"
-
-#: ../../Xconfig/main.pm_.c:122 ../../diskdrake/dav.pm_.c:28
-#: ../../harddrake/ui.pm_.c:96 ../../printerdrake.pm_.c:3203
-#: ../../standalone/draksplash_.c:122 ../../standalone/logdrake_.c:225
-msgid "Quit"
-msgstr "Kuitaat"
-
-#: ../../Xconfig/main.pm_.c:145
-#, fuzzy, c-format
-msgid ""
-"Keep the changes?\n"
-"The current configuration is:\n"
-"\n"
-"%s"
-msgstr "Derc'hel ar c'hefluniadur IP o ren"
-
-#: ../../Xconfig/monitor.pm_.c:93
-msgid "Choose a monitor"
-msgstr "Dibabit ur skramm"
-
-#: ../../Xconfig/monitor.pm_.c:97
-msgid "Plug'n Play"
-msgstr ""
-
-#: ../../Xconfig/monitor.pm_.c:98 ../../mouse.pm_.c:46
-msgid "Generic"
-msgstr "Rummel"
-
-#: ../../Xconfig/monitor.pm_.c:99 ../../harddrake/ui.pm_.c:37
-#, fuzzy
-msgid "Vendor"
-msgstr "Dizober"
-
-#: ../../Xconfig/monitor.pm_.c:109
-msgid "Plug'n Play probing failed. Please choose a precise monitor"
-msgstr ""
-
-#: ../../Xconfig/monitor.pm_.c:114
-msgid ""
-"The two critical parameters are the vertical refresh rate, which is the "
-"rate\n"
-"at which the whole screen is refreshed, and most importantly the horizontal\n"
-"sync rate, which is the rate at which scanlines are displayed.\n"
-"\n"
-"It is VERY IMPORTANT that you do not specify a monitor type with a sync "
-"range\n"
-"that is beyond the capabilities of your monitor: you may damage your "
-"monitor.\n"
-" If in doubt, choose a conservative setting."
-msgstr ""
-"An div arventenn dreistpouezus a zo ar feur freskaat a-serzh, da lavaret eo "
-"ar\n"
-"feur ma vez freskaet ar skramm a-bezh, ha pouezusuc'h c'hoazh ar feur "
-"kempredañ\n"
-"a-led, da lavaret eo ar feur ma vez diskwelet linennoù skubañ.\n"
-"\n"
-"HOLLBOUEZHUS eo deoc'h na spisaat ur seurt skramm gant ur feur kempredañ\n"
-"a zo en tu-hont da varregezh ho skramm : gallout a rafe gwastañ ho skramm\n"
-" M'hoc'h eus douetañs, dibabit ur c'hefluniadur fur."
-
-#: ../../Xconfig/monitor.pm_.c:121
-msgid "Horizontal refresh rate"
-msgstr "Feur freskaat a-led"
-
-#: ../../Xconfig/monitor.pm_.c:122
-msgid "Vertical refresh rate"
-msgstr "Feur freskaat a-serzh"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:12
-msgid "256 colors (8 bits)"
-msgstr "256 liv (8 bit)"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:13
-msgid "32 thousand colors (15 bits)"
-msgstr "32 mil liv (15 bit)"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:14
-msgid "65 thousand colors (16 bits)"
-msgstr "65 mil liv (16 bit)"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:15
-msgid "16 million colors (24 bits)"
-msgstr "16 milion a livioù (24 bit)"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:16
-msgid "4 billion colors (32 bits)"
-msgstr "4 miliard a livioù (32 bit)"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:129
-msgid "Resolutions"
-msgstr "Spisterioù"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:254
-msgid "Choose the resolution and the color depth"
-msgstr "Dibabit ar spister ha donder al livioù"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:255
-#, c-format
-msgid "Graphics card: %s"
-msgstr "Kartenn c'hrafek : %s"
-
-#: ../../Xconfig/resolution_and_depth.pm_.c:268 ../../any.pm_.c:1019
-#: ../../bootlook.pm_.c:344 ../../diskdrake/smbnfs_gtk.pm_.c:87
-#: ../../install_steps_gtk.pm_.c:406 ../../install_steps_gtk.pm_.c:464
-#: ../../interactive.pm_.c:142 ../../interactive.pm_.c:354
-#: ../../interactive/http.pm_.c:105 ../../interactive/newt.pm_.c:195
-#: ../../interactive/stdio.pm_.c:39 ../../interactive/stdio.pm_.c:143
-#: ../../my_gtk.pm_.c:158 ../../my_gtk.pm_.c:162 ../../my_gtk.pm_.c:287
-#: ../../network/netconnect.pm_.c:42 ../../printerdrake.pm_.c:2169
-#: ../../security/main.pm_.c:295 ../../standalone/drakautoinst_.c:203
-#: ../../standalone/drakbackup_.c:3928 ../../standalone/drakbackup_.c:3961
-#: ../../standalone/drakbackup_.c:3987 ../../standalone/drakbackup_.c:4014
-#: ../../standalone/drakbackup_.c:4041 ../../standalone/drakbackup_.c:4101
-#: ../../standalone/drakbackup_.c:4128 ../../standalone/drakbackup_.c:4158
-#: ../../standalone/drakbackup_.c:4184 ../../standalone/drakconnect_.c:115
-#: ../../standalone/drakconnect_.c:147 ../../standalone/drakconnect_.c:289
-#: ../../standalone/drakconnect_.c:537 ../../standalone/drakconnect_.c:679
-#: ../../standalone/drakfloppy_.c:235 ../../standalone/drakfont_.c:970
-#: ../../standalone/drakgw_.c:532 ../../standalone/logdrake_.c:225
-#: ../../ugtk.pm_.c:296
-msgid "Cancel"
-msgstr "Nullañ"
-
-#: ../../Xconfig/test.pm_.c:30
-msgid "Test of the configuration"
-msgstr "Amprouiñ ar c'hefluniadur"
-
-#: ../../Xconfig/test.pm_.c:31
-msgid "Do you want to test the configuration?"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../Xconfig/test.pm_.c:31
-msgid "Warning: testing this graphic card may freeze your computer"
-msgstr ""
-
-#: ../../Xconfig/various.pm_.c:29
-#, c-format
-msgid "Keyboard layout: %s\n"
-msgstr "Reizhadur ar stokellaoueg : %s\n"
-
-#: ../../Xconfig/various.pm_.c:30
-#, c-format
-msgid "Mouse type: %s\n"
-msgstr "Seurt logodenn : %s\n"
-
-#: ../../Xconfig/various.pm_.c:31
-#, c-format
-msgid "Mouse device: %s\n"
-msgstr "Trobarzhell al logodenn : %s\n"
-
-#: ../../Xconfig/various.pm_.c:32
-#, c-format
-msgid "Monitor: %s\n"
-msgstr "Skramm : %s\n"
-
-#: ../../Xconfig/various.pm_.c:33
-#, c-format
-msgid "Monitor HorizSync: %s\n"
-msgstr "KempredA-led ar skramm : %s\n"
-
-#: ../../Xconfig/various.pm_.c:34
-#, c-format
-msgid "Monitor VertRefresh: %s\n"
-msgstr "FreskA-serzh ar skramm : %s\n"
-
-#: ../../Xconfig/various.pm_.c:35
-#, c-format
-msgid "Graphics card: %s\n"
-msgstr "Kartenn c'hrafek : %s\n"
-
-#: ../../Xconfig/various.pm_.c:36
-#, c-format
-msgid "Graphics memory: %s kB\n"
-msgstr "Memor c'hrafek : %s ko\n"
-
-#: ../../Xconfig/various.pm_.c:38
-#, c-format
-msgid "Color depth: %s\n"
-msgstr "Donder liv: %s\n"
-
-#: ../../Xconfig/various.pm_.c:39
-#, c-format
-msgid "Resolution: %s\n"
-msgstr "Spister: %s\n"
-
-#: ../../Xconfig/various.pm_.c:41
-#, c-format
-msgid "XFree86 server: %s\n"
-msgstr "Servijer XFree86 : %s\n"
-
-#: ../../Xconfig/various.pm_.c:42
-#, c-format
-msgid "XFree86 driver: %s\n"
-msgstr "Sturier XFree86 : %s\n"
-
-#: ../../Xconfig/various.pm_.c:61
-msgid "Graphical interface at startup"
-msgstr "X pa loc'her"
-
-#: ../../Xconfig/various.pm_.c:62
-msgid ""
-"I can setup your computer to automatically start the graphical interface "
-"(XFree) upon booting.\n"
-"Would you like XFree to start when you reboot?"
-msgstr ""
-"Kefluniañ ho urzhiataer evit lañsañ X ent emgefreek pa loc'ho a c'hellañ.\n"
-"Mennout a rit lañsañ X pa adloc'hit ?"
-
-#: ../../Xconfig/various.pm_.c:73
-msgid ""
-"Your graphic card seems to have a TV-OUT connector.\n"
-"It can be configured to work using frame-buffer.\n"
-"\n"
-"For this you have to plug your graphic card to your TV before booting your "
-"computer.\n"
-"Then choose the \"TVout\" entry in the bootloader\n"
-"\n"
-"Do you have this feature?"
-msgstr ""
-
-#: ../../Xconfig/various.pm_.c:85
-#, fuzzy
-msgid "What norm is your TV using?"
-msgstr "Ouzh pe borzh a-steud eo luget ho logodenn ?"
-
-#: ../../any.pm_.c:108 ../../any.pm_.c:133
-msgid "First sector of boot partition"
-msgstr "Rann gentañ ar parzhadur loc'hañ"
-
-#: ../../any.pm_.c:108 ../../any.pm_.c:133 ../../any.pm_.c:210
-msgid "First sector of drive (MBR)"
-msgstr "Rann gentañ ar bladenn (MBR)"
-
-#: ../../any.pm_.c:112
-msgid "SILO Installation"
-msgstr "Staliadur SILO"
-
-#: ../../any.pm_.c:113 ../../any.pm_.c:126
-msgid "Where do you want to install the bootloader?"
-msgstr "Pelec'h e mennit staliañ ar c'harger loc'hañ ?"
-
-#: ../../any.pm_.c:125
-msgid "LILO/grub Installation"
-msgstr "Staliadur LILO/grub"
-
-#: ../../any.pm_.c:137 ../../any.pm_.c:151
-msgid "SILO"
-msgstr "SILO"
-
-#: ../../any.pm_.c:139
-msgid "LILO with text menu"
-msgstr "LILO gant meuziad skrid"
-
-#: ../../any.pm_.c:140 ../../any.pm_.c:151
-msgid "LILO with graphical menu"
-msgstr "LILO gant meuziad c'hrafek"
-
-#: ../../any.pm_.c:143
-msgid "Grub"
-msgstr "Grub"
-
-#: ../../any.pm_.c:147
-msgid "Boot from DOS/Windows (loadlin)"
-msgstr "Loc'hañ abaoe DOS/Windows (loadlin)"
-
-#: ../../any.pm_.c:149 ../../any.pm_.c:151
-msgid "Yaboot"
-msgstr "Yaboot"
-
-#: ../../any.pm_.c:159 ../../any.pm_.c:190
-msgid "Bootloader main options"
-msgstr "Dibarzhoù pennañ ar c'harger loc'hañ"
-
-#: ../../any.pm_.c:160 ../../any.pm_.c:191
-msgid "Bootloader to use"
-msgstr "C'harger loc'hañ da implijout"
-
-#: ../../any.pm_.c:162
-msgid "Bootloader installation"
-msgstr "Staliadur c'harger loc'hañ"
-
-#: ../../any.pm_.c:164 ../../any.pm_.c:193
-msgid "Boot device"
-msgstr "Trobarzhell loc'hañ"
-
-#: ../../any.pm_.c:165
-msgid "Compact"
-msgstr "Fetis"
-
-#: ../../any.pm_.c:165
-msgid "compact"
-msgstr "fetis"
-
-#: ../../any.pm_.c:166 ../../any.pm_.c:291
-msgid "Video mode"
-msgstr "Mod video"
-
-#: ../../any.pm_.c:168
-msgid "Delay before booting default image"
-msgstr "Gedvezh kent loc'hañ ar skeudenn dre ziouer"
-
-#: ../../any.pm_.c:170 ../../any.pm_.c:789
-#: ../../diskdrake/smbnfs_gtk.pm_.c:179
-#: ../../install_steps_interactive.pm_.c:1094 ../../network/modem.pm_.c:48
-#: ../../printerdrake.pm_.c:865 ../../printerdrake.pm_.c:980
-#: ../../standalone/drakbackup_.c:3530 ../../standalone/drakconnect_.c:624
-#: ../../standalone/drakconnect_.c:649
-msgid "Password"
-msgstr "Tremenger"
-
-#: ../../any.pm_.c:171 ../../any.pm_.c:790
-#: ../../install_steps_interactive.pm_.c:1095
-msgid "Password (again)"
-msgstr "Tremenger (adarre)"
-
-#: ../../any.pm_.c:172
-msgid "Restrict command line options"
-msgstr "Strishaat dibarzhoù al linenn urzhiañ"
-
-#: ../../any.pm_.c:172
-msgid "restrict"
-msgstr "strishaat"
-
-#: ../../any.pm_.c:174
-msgid "Clean /tmp at each boot"
-msgstr "Skarañ /tmp bep ma loc'her"
-
-#: ../../any.pm_.c:175
-#, c-format
-msgid "Precise RAM size if needed (found %d MB)"
-msgstr "Spisait ment ar memor vev diouzh ret (kavet %d Mo)"
-
-#: ../../any.pm_.c:177
-msgid "Enable multi profiles"
-msgstr "Aotren lies trolinenn"
-
-#: ../../any.pm_.c:181
-msgid "Give the ram size in MB"
-msgstr "Roit ment ar memor vev e Mo"
-
-#: ../../any.pm_.c:183
-msgid ""
-"Option ``Restrict command line options'' is of no use without a password"
-msgstr "Didalvout eo ``Strishaat dibarzhoù al linenn urzhiañ'' hep tremenger"
-
-#: ../../any.pm_.c:184 ../../any.pm_.c:765
-#: ../../diskdrake/interactive.pm_.c:1191
-#: ../../install_steps_interactive.pm_.c:1089
-msgid "Please try again"
-msgstr "Klaskit adarre mar plij"
-
-#: ../../any.pm_.c:184 ../../any.pm_.c:765
-#: ../../install_steps_interactive.pm_.c:1089
-msgid "The passwords do not match"
-msgstr "An tremegerioù ne glot ket"
-
-#: ../../any.pm_.c:192
-msgid "Init Message"
-msgstr ""
-
-#: ../../any.pm_.c:194
-msgid "Open Firmware Delay"
-msgstr ""
-
-#: ../../any.pm_.c:195
-msgid "Kernel Boot Timeout"
-msgstr ""
-
-#: ../../any.pm_.c:196
-msgid "Enable CD Boot?"
-msgstr ""
-
-#: ../../any.pm_.c:197
-msgid "Enable OF Boot?"
-msgstr ""
-
-#: ../../any.pm_.c:198
-msgid "Default OS?"
-msgstr "RK dre ziouer"
-
-#: ../../any.pm_.c:232
-msgid ""
-"You decided to install the bootloader on a partition.\n"
-"This implies you already have a bootloader on the hard drive you boot (eg: "
-"System Commander).\n"
-"\n"
-"On which drive are you booting?"
-msgstr ""
-
-#: ../../any.pm_.c:248
-msgid ""
-"Here are the entries on your boot menu so far.\n"
-"You can add some more or change the existing ones."
-msgstr ""
-"Setu da heul an enmontoù liesseurt.\n"
-"Gallout a rit ouzhpennañ lod pe gemmañ a re a zo."
-
-#: ../../any.pm_.c:258 ../../standalone/drakbackup_.c:1560
-#: ../../standalone/drakbackup_.c:1673 ../../standalone/drakfont_.c:1011
-#: ../../standalone/drakfont_.c:1054
-msgid "Add"
-msgstr "Ouzhpennañ"
-
-#: ../../any.pm_.c:258 ../../any.pm_.c:777 ../../diskdrake/dav.pm_.c:68
-#: ../../diskdrake/hd_gtk.pm_.c:153 ../../diskdrake/removable.pm_.c:27
-#: ../../diskdrake/smbnfs_gtk.pm_.c:88 ../../interactive/http.pm_.c:153
-#: ../../printerdrake.pm_.c:3203 ../../standalone/drakbackup_.c:2774
-msgid "Done"
-msgstr "Graet"
-
-#: ../../any.pm_.c:258
-msgid "Modify"
-msgstr "Kemmañ"
-
-#: ../../any.pm_.c:266
-msgid "Which type of entry do you want to add?"
-msgstr "Pe seurt enmont a vennit ouzhpennañ"
-
-#: ../../any.pm_.c:267 ../../standalone/drakbackup_.c:1707
-msgid "Linux"
-msgstr "Linux"
-
-#: ../../any.pm_.c:267
-msgid "Other OS (SunOS...)"
-msgstr "Reizhiadoù (SunOS...)"
-
-#: ../../any.pm_.c:268
-msgid "Other OS (MacOS...)"
-msgstr "Reizhiadoù (MacOS...)"
-
-#: ../../any.pm_.c:268
-msgid "Other OS (windows...)"
-msgstr "Reizhiadoù (windows...)"
-
-#: ../../any.pm_.c:287
-msgid "Image"
-msgstr "Skeudenn"
-
-#: ../../any.pm_.c:288 ../../any.pm_.c:299
-msgid "Root"
-msgstr "Gwrizienn"
-
-#: ../../any.pm_.c:289 ../../any.pm_.c:317
-msgid "Append"
-msgstr "Ouzhpennañ"
-
-#: ../../any.pm_.c:293
-msgid "Initrd"
-msgstr "Initrd"
-
-#: ../../any.pm_.c:294
-msgid "Read-write"
-msgstr "Lenn-skrivañ "
-
-#: ../../any.pm_.c:301
-msgid "Table"
-msgstr "Taolenn"
-
-#: ../../any.pm_.c:302
-msgid "Unsafe"
-msgstr "Arvarus"
-
-#: ../../any.pm_.c:309 ../../any.pm_.c:314 ../../any.pm_.c:316
-msgid "Label"
-msgstr "Skridennad"
-
-#: ../../any.pm_.c:311 ../../any.pm_.c:321 ../../harddrake/v4l.pm_.c:201
-msgid "Default"
-msgstr "Dre ziouer"
-
-#: ../../any.pm_.c:318
-msgid "Initrd-size"
-msgstr "Ment an Initrd"
-
-#: ../../any.pm_.c:320
-msgid "NoVideo"
-msgstr "N'ev ket video"
-
-#: ../../any.pm_.c:328
-msgid "Remove entry"
-msgstr "Dilemel an enmont"
-
-#: ../../any.pm_.c:331
-msgid "Empty label not allowed"
-msgstr "Berzet eo ar skridennadoù goullo"
-
-#: ../../any.pm_.c:332
-msgid "You must specify a kernel image"
-msgstr ""
-
-#: ../../any.pm_.c:332
-#, fuzzy
-msgid "You must specify a root partition"
-msgstr "Ret eo deoc'h kaout ur parzhadur disloañ"
-
-#: ../../any.pm_.c:333
-msgid "This label is already used"
-msgstr "En implij eo ar skridennad-se endeo"
-
-#: ../../any.pm_.c:657
-#, c-format
-msgid "Found %s %s interfaces"
-msgstr "Kavet etrefas %s %s"
-
-#: ../../any.pm_.c:658
-msgid "Do you have another one?"
-msgstr "Hag un all hoc'h eus ?"
-
-#: ../../any.pm_.c:659
-#, c-format
-msgid "Do you have any %s interfaces?"
-msgstr "Hag un etrefas %s bennak a zo ganeoc'h ?"
-
-#: ../../any.pm_.c:661 ../../any.pm_.c:824 ../../interactive.pm_.c:132
-#: ../../my_gtk.pm_.c:286
-msgid "No"
-msgstr "Ket"
-
-#: ../../any.pm_.c:661 ../../any.pm_.c:823 ../../interactive.pm_.c:132
-#: ../../my_gtk.pm_.c:286
-msgid "Yes"
-msgstr "Ya"
-
-#: ../../any.pm_.c:662
-msgid "See hardware info"
-msgstr "Gwelet titouroù periantel"
-
-#. -PO: the first %s is the card type (scsi, network, sound,...)
-#. -PO: the second is the vendor+model name
-#: ../../any.pm_.c:678
-#, c-format
-msgid "Installing driver for %s card %s"
-msgstr "O staliañ ur sturier evit kartenn %s %s"
-
-#: ../../any.pm_.c:679
-#, c-format
-msgid "(module %s)"
-msgstr "(mollad %s)"
-
-#: ../../any.pm_.c:690
-#, c-format
-msgid ""
-"You may now provide its options to module %s.\n"
-"Note that any address should be entered with the prefix 0x like '0x123'"
-msgstr ""
-
-#: ../../any.pm_.c:696
-#, c-format
-msgid ""
-"You may now provide options to module %s.\n"
-"Options are in format ``name=value name2=value2 ...''.\n"
-"For instance, ``io=0x300 irq=7''"
-msgstr ""
-"Bremañ e c'hellit pourvezañ e zibarzhoù d'ar mollad %s.\n"
-"Diouzh ar furmad ``anv=talvoud anv2=talvoud2...'' eo an dibaboù.\n"
-"Da skouer, ``io=0x300 irq=7''"
-
-#: ../../any.pm_.c:698
-msgid "Module options:"
-msgstr "Dibarzhoù ar mollad :"
-
-#. -PO: the %s is the driver type (scsi, network, sound,...)
-#: ../../any.pm_.c:710
-#, c-format
-msgid "Which %s driver should I try?"
-msgstr "Pe sturier %s a zlefen amprouiñ ?"
-
-#: ../../any.pm_.c:719
-#, c-format
-msgid ""
-"In some cases, the %s driver needs to have extra information to work\n"
-"properly, although it normally works fine without. Would you like to "
-"specify\n"
-"extra options for it or allow the driver to probe your machine for the\n"
-"information it needs? Occasionally, probing will hang a computer, but it "
-"should\n"
-"not cause any damage."
-msgstr ""
-"E degouezhoù 'zo, ar sturier %s en deus ezhomm titouroù ouzhpenn evit mont\n"
-"en-dro reizh, daoust ma da en-dro mat hepto peurvuiañ. Ha mennout a rit "
-"spisaat\n"
-"dibaboù ouzphenn evitañ, pe aotren d'ar sturier amprouiñ ho penvek evit\n"
-"an titouroù en deus ezhomm ? A-wechoù, amprouiñ a c'hell sac'hañ un "
-"urzhiataer,\n"
-"hogen ne raio reuz ebet."
-
-#: ../../any.pm_.c:723
-msgid "Autoprobe"
-msgstr "Embrouiñ"
-
-#: ../../any.pm_.c:723
-msgid "Specify options"
-msgstr "Spisait dibarzhoù"
-
-#: ../../any.pm_.c:735
-#, c-format
-msgid ""
-"Loading module %s failed.\n"
-"Do you want to try again with other parameters?"
-msgstr ""
-"Kargañ ar mollad %s a zo sac'het.\n"
-"Mennout a rit klask adarre gant arventennoù all ?"
-
-#: ../../any.pm_.c:751
-msgid "access to X programs"
-msgstr ""
-
-#: ../../any.pm_.c:752
-msgid "access to rpm tools"
-msgstr ""
-
-#: ../../any.pm_.c:753
-msgid "allow \"su\""
-msgstr ""
-
-#: ../../any.pm_.c:754
-msgid "access to administrative files"
-msgstr ""
-
-#: ../../any.pm_.c:755
-msgid "access to network tools"
-msgstr ""
-
-#: ../../any.pm_.c:756
-msgid "access to compilation tools"
-msgstr ""
-
-#: ../../any.pm_.c:761
-#, c-format
-msgid "(already added %s)"
-msgstr "(ouzhpennet %s endeo)"
-
-#: ../../any.pm_.c:766
-msgid "This password is too simple"
-msgstr "Re eeun eo an tremeger"
-
-#: ../../any.pm_.c:767
-msgid "Please give a user name"
-msgstr "Roit un anv arveriad mar plij"
-
-#: ../../any.pm_.c:768
-msgid ""
-"The user name must contain only lower cased letters, numbers, `-' and `_'"
-msgstr ""
-"An anv arveriad a zle bezañ ennañ lizherennoù munut, sifroù, `-' ha `_' "
-"hepken"
-
-#: ../../any.pm_.c:769
-#, fuzzy
-msgid "The user name is too long"
-msgstr "En implij eo an anv arveriad-se endeo"
-
-#: ../../any.pm_.c:770
-msgid "This user name is already added"
-msgstr "En implij eo an anv arveriad-se endeo"
-
-#: ../../any.pm_.c:774
-msgid "Add user"
-msgstr "Ouzhpennañ un arveriad"
-
-#: ../../any.pm_.c:775
-#, c-format
-msgid ""
-"Enter a user\n"
-"%s"
-msgstr ""
-"Skrivit un arveriad\n"
-"%s"
-
-#: ../../any.pm_.c:776
-msgid "Accept user"
-msgstr "Aotren an arveriad"
-
-#: ../../any.pm_.c:787
-msgid "Real name"
-msgstr "Anv gwirion"
-
-#: ../../any.pm_.c:788 ../../printerdrake.pm_.c:864
-#: ../../printerdrake.pm_.c:979
-msgid "User name"
-msgstr "Anv arveriad"
-
-#: ../../any.pm_.c:791
-msgid "Shell"
-msgstr "Shell"
-
-#: ../../any.pm_.c:793
-msgid "Icon"
-msgstr "Arlun"
-
-#: ../../any.pm_.c:820
-msgid "Autologin"
-msgstr "Autologin"
-
-#: ../../any.pm_.c:821
-#, fuzzy
-msgid ""
-"I can set up your computer to automatically log on one user.\n"
-"Do you want to use this feature?"
-msgstr ""
-"Kefluniañ ho urzhiataer evit lañsañ X ent emgefreek pa loc'ho a c'hellañ.\n"
-"Mennout a rit lañsañ X pa adloc'hit ?"
-
-#: ../../any.pm_.c:825
-msgid "Choose the default user:"
-msgstr "Dibabit ar arveriad dre ziouer"
-
-#: ../../any.pm_.c:826
-#, fuzzy
-msgid "Choose the window manager to run:"
-msgstr "Dibabit ar benveg a vennit staliañ"
-
-#: ../../any.pm_.c:841
-msgid "Please choose a language to use."
-msgstr "Diuzit ar yezh da implijout, mar plij."
-
-#: ../../any.pm_.c:843
-msgid ""
-"Mandrake Linux can support multiple languages. Select\n"
-"the languages you would like to install. They will be available\n"
-"when your installation is complete and you restart your system."
-msgstr "Gallout a rit dibab yezhoù all hag a vo hegerz goude staliañ"
-
-#: ../../any.pm_.c:857 ../../install_steps_interactive.pm_.c:690
-#: ../../standalone/drakxtv_.c:73
-msgid "All"
-msgstr "An holl"
-
-#: ../../any.pm_.c:978
-msgid "Allow all users"
-msgstr "Aotreiñ an holl dud"
-
-#: ../../any.pm_.c:978
-msgid "No sharing"
-msgstr "N'ev ket lodañ"
-
-#: ../../any.pm_.c:988 ../../install_any.pm_.c:1199 ../../standalone.pm_.c:59
-#, fuzzy, c-format
-msgid "The package %s needs to be installed. Do you want to install it?"
-msgstr ""
-"Bremanaet e tle bezañ ar pabak-mañ\n"
-"Ha sur oc'h e mennit e ziuzañ ?"
-
-#: ../../any.pm_.c:991
-msgid ""
-"You can export using NFS or Samba. Please select which you'd like to use."
-msgstr ""
-
-#: ../../any.pm_.c:999 ../../install_any.pm_.c:1204 ../../standalone.pm_.c:64
-#, c-format
-msgid "Mandatory package %s is missing"
-msgstr ""
-
-#: ../../any.pm_.c:1005
-msgid ""
-"Would you like to allow users to share some of their directories?\n"
-"Allowing this will permit users to simply click on \"Share\" in konqueror "
-"and nautilus.\n"
-"\n"
-"\"Custom\" permit a per-user granularity.\n"
-msgstr ""
-
-#: ../../any.pm_.c:1019
-msgid "Launch userdrake"
-msgstr ""
-
-#: ../../any.pm_.c:1021
-msgid ""
-"The per-user sharing uses the group \"fileshare\". \n"
-"You can use userdrake to add a user in this group."
-msgstr ""
-
-#: ../../any.pm_.c:1072
-msgid "Welcome To Crackers"
-msgstr "Bezit deuet mat, preizherien !"
-
-#: ../../any.pm_.c:1073
-msgid "Poor"
-msgstr "Paour"
-
-#: ../../any.pm_.c:1074 ../../mouse.pm_.c:31
-msgid "Standard"
-msgstr "Skouer"
-
-#: ../../any.pm_.c:1075
-msgid "High"
-msgstr "Uhel"
-
-#: ../../any.pm_.c:1076
-#, fuzzy
-msgid "Higher"
-msgstr "Uhel"
-
-#: ../../any.pm_.c:1077
-msgid "Paranoid"
-msgstr "Ankeniet"
-
-#: ../../any.pm_.c:1080
-msgid ""
-"This level is to be used with care. It makes your system more easy to use,\n"
-"but very sensitive: it must not be used for a machine connected to others\n"
-"or to the Internet. There is no password access."
-msgstr ""
-"Ret eo implijout al live-mañ gant evezh. Ober a ra d'ho reizhiad bezañ\n"
-"aesoc'h da implijout, hogen kizidig-tre : arabat e implj evit un ardivink\n"
-"kevreet ouzh lod all pe ouzh ar genrouedad. N'eus ket a haeziñ dre dremenger."
-
-#: ../../any.pm_.c:1083
-msgid ""
-"Password are now enabled, but use as a networked computer is still not "
-"recommended."
-msgstr ""
-"Gweredekaet eo bremañ an tremenger, hogen dierbedet eo c'hoazh an implij en "
-"ur rouedad"
-
-#: ../../any.pm_.c:1084
-#, fuzzy
-msgid ""
-"This is the standard security recommended for a computer that will be used "
-"to connect to the Internet as a client."
-msgstr ""
-"Setu al live surentez standard a vez erbedet evit un urzhiataer a vo "
-"implijet\n"
-"evit kevreañ evel arval ouzh ar Genrouedad. Bremañ ez eus gwiriadennoù "
-"surentez."
-
-#: ../../any.pm_.c:1085
-msgid ""
-"There are already some restrictions, and more automatic checks are run every "
-"night."
-msgstr ""
-
-#: ../../any.pm_.c:1086
-#, fuzzy
-msgid ""
-"With this security level, the use of this system as a server becomes "
-"possible.\n"
-"The security is now high enough to use the system as a server which can "
-"accept\n"
-"connections from many clients. Note: if your machine is only a client on the "
-"Internet, you should choose a lower level."
-msgstr ""
-"Gant al live surentez-mañ e teu posupl implijout ar reizhiad-mañ evel ur "
-"servijer.\n"
-"Uhel a-walc'h eo bremañ ar surentez evit implijout ar reizhiad evel ur "
-"servijer\n"
-"o tigemer kevreadennoù a-berzh arvaloù niverus."
-
-#: ../../any.pm_.c:1089
-#, fuzzy
-msgid ""
-"This is similar to the previous level, but the system is entirely closed and "
-"security features are at their maximum."
-msgstr ""
-"Kemer a reomp arc'hweloù al live 4, hogen bremañ eo peurserret ar reizhiad.\n"
-"Arc'hweloù surentez a zo en o muiañ"
-
-#: ../../any.pm_.c:1095
-#, fuzzy
-msgid "DrakSec Basic Options"
-msgstr "Parzhadur"
-
-#: ../../any.pm_.c:1096
-#, fuzzy
-msgid "Please choose the desired security level"
-msgstr "Dibabit al live surentez"
-
-#: ../../any.pm_.c:1099
-msgid "Security level"
-msgstr "Live surentez"
-
-#: ../../any.pm_.c:1101
-msgid "Use libsafe for servers"
-msgstr "Implijit libsafe gant ar servijer"
-
-#: ../../any.pm_.c:1102
-msgid ""
-"A library which defends against buffer overflow and format string attacks."
-msgstr ""
-
-#: ../../any.pm_.c:1103
-msgid "Security Administrator (login or email)"
-msgstr ""
-
-#: ../../any.pm_.c:1192
-msgid ""
-"Here you can choose the key or key combination that will \n"
-"allow switching between the different keyboard layouts\n"
-"(eg: latin and non latin)"
-msgstr ""
-
-# NOTE: this message will be displayed at boot time; that is
-# only the ascii charset will be available on most machines
-# so use only 7bit for this message (and do transliteration or
-# leave it in English, as it is the best for your language)
-#
-#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
-#: ../../bootloader.pm_.c:429
-#, c-format
-msgid ""
-"Welcome to %s the operating system chooser!\n"
-"\n"
-"Choose an operating system in the list above or\n"
-"wait %d seconds for default boot.\n"
-"\n"
-msgstr ""
-"Degemer mat e %s, an dibaber reizhiad oberian~ !\n"
-"\n"
-"Dibabit an dibaber reizhiad pe\n"
-"gortozit %d eilennoù\n"
-"\n"
-
-# NOTE: this message will be displayed by grub at boot time; that is
-# using the BIOS font; that means cp437 charset on 99.99% of PC computers
-# out there. It is the nsuggested that for non latin languages an ascii
-# transliteration be used; or maybe the english text be used; as it is best
-#
-# The lines must fit on screen, aka length < 80
-# and only one line per string for the GRUB messages
-#
-#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
-#. -PO: and keep them smaller than 79 chars long
-#: ../../bootloader.pm_.c:989
-msgid "Welcome to GRUB the operating system chooser!"
-msgstr "Degemer mat e GRUB an dibaber reizhiad oberia¤ !"
-
-#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
-#. -PO: and keep them smaller than 79 chars long
-#: ../../bootloader.pm_.c:992
-#, c-format
-msgid "Use the %c and %c keys for selecting which entry is highlighted."
-msgstr "Implijit ar stokelloù %c ha %c evit diuz pe enmont zo war wel"
-
-#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
-#. -PO: and keep them smaller than 79 chars long
-#: ../../bootloader.pm_.c:995
-msgid "Press enter to boot the selected OS, 'e' to edit the"
-msgstr "Stokit enkas evit loc'ha¤ ar RK diuzet, 'e' evit aoza¤ an"
-
-#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
-#. -PO: and keep them smaller than 79 chars long
-#: ../../bootloader.pm_.c:998
-msgid "commands before booting, or 'c' for a command-line."
-msgstr "urzhiado— kent loc'ha¤, pe 'c' evit ul linenn-urzhia¤."
-
-#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
-#. -PO: and keep them smaller than 79 chars long
-#: ../../bootloader.pm_.c:1001
-#, c-format
-msgid "The highlighted entry will be booted automatically in %d seconds."
-msgstr "An enmont war wel a vo loc'het ent emgefreek e %d eilenn."
-
-#: ../../bootloader.pm_.c:1005
-msgid "not enough room in /boot"
-msgstr ""
-
-#. -PO: "Desktop" and "Start Menu" are the name of the directories found in c:\windows
-#. -PO: so you may need to put them in English or in a different language if MS-windows doesn't exist in your language
-#: ../../bootloader.pm_.c:1105
-msgid "Desktop"
-msgstr "Gorretaol"
-
-#. -PO: "Desktop" and "Start Menu" are the name of the directories found in c:\windows
-#: ../../bootloader.pm_.c:1107
-msgid "Start Menu"
-msgstr "Meuziad Lañsañ"
-
-#: ../../bootloader.pm_.c:1126
-#, fuzzy, c-format
-msgid "You can't install the bootloader on a %s partition\n"
-msgstr "Pelec'h e mennit staliañ ar c'harger loc'hañ ?"
-
-#: ../../bootlook.pm_.c:46 ../../standalone/drakperm_.c:15
-#: ../../standalone/draksplash_.c:26
-msgid "no help implemented yet.\n"
-msgstr "N'ev ket skoazell.\n"
-
-#: ../../bootlook.pm_.c:62
-#, fuzzy
-msgid "Boot Style Configuration"
-msgstr "Kefluniadur goude staliañ"
-
-#: ../../bootlook.pm_.c:79 ../../harddrake/ui.pm_.c:62
-#: ../../harddrake/ui.pm_.c:63 ../../standalone/drakfloppy_.c:82
-#: ../../standalone/logdrake_.c:102
-msgid "/_File"
-msgstr "/_Restr"
-
-#: ../../bootlook.pm_.c:80 ../../standalone/drakfloppy_.c:83
-#: ../../standalone/logdrake_.c:108
-msgid "/File/_Quit"
-msgstr "/Restr/_Kuitaat"
-
-#: ../../bootlook.pm_.c:80 ../../harddrake/ui.pm_.c:63
-#: ../../standalone/drakfloppy_.c:83 ../../standalone/logdrake_.c:108
-msgid "<control>Q"
-msgstr ""
-
-#: ../../bootlook.pm_.c:91
-msgid "NewStyle Categorizing Monitor"
-msgstr ""
-
-#: ../../bootlook.pm_.c:92
-#, fuzzy
-msgid "NewStyle Monitor"
-msgstr "Skramm"
-
-#: ../../bootlook.pm_.c:93
-#, fuzzy
-msgid "Traditional Monitor"
-msgstr "Kemmañ ar skramm"
-
-#: ../../bootlook.pm_.c:94
-msgid "Traditional Gtk+ Monitor"
-msgstr ""
-
-#: ../../bootlook.pm_.c:95
-msgid "Launch Aurora at boot time"
-msgstr ""
-
-#: ../../bootlook.pm_.c:98
-#, fuzzy
-msgid "Lilo/grub mode"
-msgstr "Anv domani"
-
-#: ../../bootlook.pm_.c:98
-#, fuzzy
-msgid "Yaboot mode"
-msgstr "Trobarzhell loc'hañ"
-
-#: ../../bootlook.pm_.c:146
-#, fuzzy
-msgid "Install themes"
-msgstr "Staliañ ar reizhiad"
-
-#: ../../bootlook.pm_.c:147
-msgid ""
-"Display theme\n"
-"under console"
-msgstr ""
-
-#: ../../bootlook.pm_.c:148
-#, fuzzy
-msgid "Create new theme"
-msgstr "Krouiñ ur parzhadur nevez"
-
-#: ../../bootlook.pm_.c:193
-#, c-format
-msgid "Backup %s to %s.old"
-msgstr ""
-
-#: ../../bootlook.pm_.c:194 ../../bootlook.pm_.c:197 ../../bootlook.pm_.c:200
-#: ../../bootlook.pm_.c:230 ../../bootlook.pm_.c:232 ../../bootlook.pm_.c:242
-#: ../../bootlook.pm_.c:251 ../../bootlook.pm_.c:258
-#: ../../diskdrake/dav.pm_.c:77 ../../diskdrake/hd_gtk.pm_.c:116
-#: ../../diskdrake/interactive.pm_.c:340 ../../diskdrake/interactive.pm_.c:355
-#: ../../diskdrake/interactive.pm_.c:469 ../../diskdrake/interactive.pm_.c:474
-#: ../../diskdrake/smbnfs_gtk.pm_.c:45 ../../fsedit.pm_.c:239
-#: ../../install_steps.pm_.c:75 ../../install_steps_interactive.pm_.c:67
-#: ../../interactive/http.pm_.c:119 ../../interactive/http.pm_.c:120
-#: ../../standalone/draksplash_.c:34
-msgid "Error"
-msgstr "Fazi"
-
-#: ../../bootlook.pm_.c:194
-msgid "unable to backup lilo message"
-msgstr ""
-
-#: ../../bootlook.pm_.c:196
-#, fuzzy, c-format
-msgid "Copy %s to %s"
-msgstr "Adskrivañ %s"
-
-#: ../../bootlook.pm_.c:197
-msgid "can't change lilo message"
-msgstr ""
-
-#: ../../bootlook.pm_.c:200
-msgid "Lilo message not found"
-msgstr ""
-
-#: ../../bootlook.pm_.c:230
-msgid "Can't write /etc/sysconfig/bootsplash."
-msgstr ""
-
-#: ../../bootlook.pm_.c:230
-#, fuzzy, c-format
-msgid "Write %s"
-msgstr "XFree %s"
-
-#: ../../bootlook.pm_.c:232
-msgid ""
-"Can't write /etc/sysconfig/bootsplash\n"
-"File not found."
-msgstr ""
-
-#: ../../bootlook.pm_.c:243
-#, c-format
-msgid "Can't launch mkinitrd -f /boot/initrd-%s.img %s."
-msgstr ""
-
-#: ../../bootlook.pm_.c:246
-#, c-format
-msgid "Make initrd 'mkinitrd -f /boot/initrd-%s.img %s'."
-msgstr ""
-
-#: ../../bootlook.pm_.c:252
-msgid ""
-"Can't relaunch LiLo!\n"
-"Launch \"lilo\" as root in command line to complete LiLo theme installation."
-msgstr ""
-
-#: ../../bootlook.pm_.c:256
-msgid "Relaunch 'lilo'"
-msgstr ""
-
-#: ../../bootlook.pm_.c:258 ../../standalone/draksplash_.c:165
-#: ../../standalone/draksplash_.c:329 ../../standalone/draksplash_.c:456
-#, fuzzy
-msgid "Notice"
-msgstr "frondenn"
-
-#: ../../bootlook.pm_.c:259
-msgid "LiLo and Bootsplash themes installation successfull"
-msgstr ""
-
-#: ../../bootlook.pm_.c:259
-#, fuzzy
-msgid "Theme installation failed!"
-msgstr "Diuzit renkad ar staliadur"
-
-#: ../../bootlook.pm_.c:267
-#, fuzzy, c-format
-msgid ""
-"You are currently using %s as your boot manager.\n"
-"Click on Configure to launch the setup wizard."
-msgstr "Lugerezh ar voullerez"
-
-#: ../../bootlook.pm_.c:269 ../../standalone/drakbackup_.c:2429
-#: ../../standalone/drakbackup_.c:2439 ../../standalone/drakbackup_.c:2449
-#: ../../standalone/drakbackup_.c:2457 ../../standalone/drakgw_.c:526
-msgid "Configure"
-msgstr "Kefluniañ"
-
-#: ../../bootlook.pm_.c:276
-#, fuzzy
-msgid "Splash selection"
-msgstr "Diuz pakadoù unan hag unan"
-
-#: ../../bootlook.pm_.c:279
-#, fuzzy
-msgid "Themes"
-msgstr "Gwezenn"
-
-#: ../../bootlook.pm_.c:281
-msgid ""
-"\n"
-"Select theme for\n"
-"lilo and bootsplash,\n"
-"you can choose\n"
-"them separatly"
-msgstr ""
-
-#: ../../bootlook.pm_.c:284
-msgid "Lilo screen"
-msgstr ""
-
-#: ../../bootlook.pm_.c:289
-msgid "Bootsplash"
-msgstr ""
-
-#: ../../bootlook.pm_.c:324
-msgid "System mode"
-msgstr ""
-
-#: ../../bootlook.pm_.c:326
-msgid "Launch the graphical environment when your system starts"
-msgstr ""
-
-#: ../../bootlook.pm_.c:331
-msgid "No, I don't want autologin"
-msgstr ""
-
-#: ../../bootlook.pm_.c:333
-msgid "Yes, I want autologin with this (user, desktop)"
-msgstr ""
-
-#: ../../bootlook.pm_.c:343 ../../network/netconnect.pm_.c:97
-#: ../../standalone/drakTermServ_.c:173 ../../standalone/drakTermServ_.c:300
-#: ../../standalone/drakTermServ_.c:405 ../../standalone/drakbackup_.c:4193
-#: ../../standalone/drakbackup_.c:4956 ../../standalone/drakconnect_.c:108
-#: ../../standalone/drakconnect_.c:140 ../../standalone/drakconnect_.c:296
-#: ../../standalone/drakconnect_.c:435 ../../standalone/drakconnect_.c:521
-#: ../../standalone/drakconnect_.c:564 ../../standalone/drakconnect_.c:667
-#: ../../standalone/drakfont_.c:612 ../../standalone/drakfont_.c:799
-#: ../../standalone/drakfont_.c:876 ../../standalone/drakfont_.c:963
-#: ../../ugtk.pm_.c:289
-msgid "OK"
-msgstr "YA"
-
-#: ../../bootlook.pm_.c:403
-#, c-format
-msgid "can not open /etc/inittab for reading: %s"
-msgstr ""
-
-#: ../../common.pm_.c:99
-msgid "GB"
-msgstr "Go"
-
-#: ../../common.pm_.c:99
-msgid "KB"
-msgstr "Ko"
-
-#: ../../common.pm_.c:99
-msgid "MB"
-msgstr "Mo"
-
-#: ../../common.pm_.c:107
-msgid "TB"
-msgstr "To"
-
-#: ../../common.pm_.c:115
-#, c-format
-msgid "%d minutes"
-msgstr "%d munutennoù"
-
-#: ../../common.pm_.c:117
-msgid "1 minute"
-msgstr "1 munutenn"
-
-#: ../../common.pm_.c:119
-#, c-format
-msgid "%d seconds"
-msgstr "%d eilenn"
-
-#: ../../common.pm_.c:164
-#, fuzzy
-msgid "Can't make screenshots before partitioning"
-msgstr "N'hellan ouzpennañ parzhadur ebet ken"
-
-#: ../../common.pm_.c:171
-#, fuzzy, c-format
-msgid "Screenshots will be available after install in %s"
-msgstr "Gallout a rit dibab yezhoù all hag a vo hegerz goude staliañ"
-
-#: ../../crypto.pm_.c:14 ../../crypto.pm_.c:28 ../../network/tools.pm_.c:104
-#: ../../network/tools.pm_.c:113
-msgid "France"
-msgstr "Gall"
-
-#: ../../crypto.pm_.c:15
-msgid "Costa Rica"
-msgstr ""
-
-#: ../../crypto.pm_.c:16 ../../crypto.pm_.c:29 ../../network/tools.pm_.c:104
-#: ../../network/tools.pm_.c:116
-msgid "Belgium"
-msgstr "Beljik"
-
-#: ../../crypto.pm_.c:17 ../../crypto.pm_.c:30
-msgid "Czech Republic"
-msgstr "Tchek"
-
-#: ../../crypto.pm_.c:18 ../../crypto.pm_.c:31
-msgid "Germany"
-msgstr "Alaman"
-
-#: ../../crypto.pm_.c:19 ../../crypto.pm_.c:32
-msgid "Greece"
-msgstr "Gres"
-
-#: ../../crypto.pm_.c:20 ../../crypto.pm_.c:33
-msgid "Norway"
-msgstr "Norvegek"
-
-#: ../../crypto.pm_.c:21 ../../crypto.pm_.c:34
-msgid "Sweden"
-msgstr "Suis"
-
-#: ../../crypto.pm_.c:22 ../../crypto.pm_.c:36 ../../network/tools.pm_.c:104
-#: ../../network/tools.pm_.c:114
-msgid "Netherlands"
-msgstr ""
-
-#: ../../crypto.pm_.c:23 ../../crypto.pm_.c:37 ../../network/tools.pm_.c:104
-#: ../../network/tools.pm_.c:115 ../../standalone/drakxtv_.c:68
-msgid "Italy"
-msgstr "Italian"
-
-#: ../../crypto.pm_.c:24 ../../crypto.pm_.c:38
-#, fuzzy
-msgid "Austria"
-msgstr "a-steud"
-
-#: ../../crypto.pm_.c:35 ../../crypto.pm_.c:61 ../../network/tools.pm_.c:104
-#: ../../network/tools.pm_.c:117
-msgid "United States"
-msgstr "Amerika"
-
-#: ../../diskdrake/dav.pm_.c:19
-msgid ""
-"WebDAV is a protocol that allows you to mount a web server's directory\n"
-"locally, and treat it like a local filesystem (provided the web server is\n"
-"configured as a WebDAV server). If you would like to add WebDAV mount\n"
-"points, select \"New\"."
-msgstr ""
-
-#: ../../diskdrake/dav.pm_.c:27
-msgid "New"
-msgstr "Nevez"
-
-#: ../../diskdrake/dav.pm_.c:63 ../../diskdrake/interactive.pm_.c:388
-#: ../../diskdrake/smbnfs_gtk.pm_.c:81
-msgid "Unmount"
-msgstr "Divarc'hañ"
-
-#: ../../diskdrake/dav.pm_.c:64 ../../diskdrake/interactive.pm_.c:385
-#: ../../diskdrake/smbnfs_gtk.pm_.c:82
-msgid "Mount"
-msgstr "Marc'hañ"
-
-#: ../../diskdrake/dav.pm_.c:65
-msgid "Server"
-msgstr "Servijer"
-
-#: ../../diskdrake/dav.pm_.c:66 ../../diskdrake/interactive.pm_.c:379
-#: ../../diskdrake/interactive.pm_.c:568 ../../diskdrake/interactive.pm_.c:595
-#: ../../diskdrake/removable.pm_.c:24 ../../diskdrake/removable_gtk.pm_.c:15
-#: ../../diskdrake/smbnfs_gtk.pm_.c:85
-msgid "Mount point"
-msgstr "Poent marc'hañ"
-
-#: ../../diskdrake/dav.pm_.c:85
-#, fuzzy
-msgid "Please enter the WebDAV server URL"
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../diskdrake/dav.pm_.c:88
-msgid "The URL must begin with http:// or https://"
-msgstr ""
-
-#: ../../diskdrake/dav.pm_.c:109
-#, fuzzy
-msgid "Server: "
-msgstr "Servijer"
-
-#: ../../diskdrake/dav.pm_.c:110 ../../diskdrake/interactive.pm_.c:440
-#: ../../diskdrake/interactive.pm_.c:1089
-#: ../../diskdrake/interactive.pm_.c:1164
-msgid "Mount point: "
-msgstr "Poent marc'hañ : "
-
-#: ../../diskdrake/dav.pm_.c:111 ../../diskdrake/interactive.pm_.c:1170
-#, fuzzy, c-format
-msgid "Options: %s"
-msgstr "Parzhadur"
-
-#: ../../diskdrake/hd_gtk.pm_.c:94
-msgid "Please make a backup of your data first"
-msgstr "Gwarezit ho roadoù da gentañ mar plij"
-
-#: ../../diskdrake/hd_gtk.pm_.c:94 ../../diskdrake/interactive.pm_.c:934
-#: ../../diskdrake/interactive.pm_.c:943
-#: ../../diskdrake/interactive.pm_.c:1009
-msgid "Read carefully!"
-msgstr "Lennit aketus !"
-
-#: ../../diskdrake/hd_gtk.pm_.c:97
-msgid ""
-"If you plan to use aboot, be carefull to leave a free space (2048 sectors is "
-"enough)\n"
-"at the beginning of the disk"
-msgstr ""
-"M'emaoc'h e soñj implijout aboot, taolit evezh leuskel un egor dieub (2048 "
-"rann\n"
-"a zo a-walc'h) e deroù ar bladenn"
-
-#: ../../diskdrake/hd_gtk.pm_.c:151
-msgid "Wizard"
-msgstr "Skoazeller"
-
-#: ../../diskdrake/hd_gtk.pm_.c:184 ../../diskdrake/removable_gtk.pm_.c:24
-msgid "Choose action"
-msgstr "Dibabit un obererezh"
-
-#: ../../diskdrake/hd_gtk.pm_.c:188
-msgid ""
-"You have one big FAT partition\n"
-"(generally used by MicroSoft Dos/Windows).\n"
-"I suggest you first resize that partition\n"
-"(click on it, then click on \"Resize\")"
-msgstr ""
-"Ur mell barzhadur FAT hoc'h eus\n"
-"(implijet gant MicroSoft Dos/Windows peurliesañ).\n"
-"Aliañ a ran ouzoc'h adventañ ar parzhadur-se\n"
-"(klikit warni, da c'houde klikit war \"Adventañ\")"
-
-#
-#: ../../diskdrake/hd_gtk.pm_.c:191
-msgid "Please click on a partition"
-msgstr "Klikit war ur parzhadur mar plij"
-
-#: ../../diskdrake/hd_gtk.pm_.c:205 ../../diskdrake/smbnfs_gtk.pm_.c:69
-#: ../../install_steps_gtk.pm_.c:465
-msgid "Details"
-msgstr "Munudoù"
-
-#: ../../diskdrake/hd_gtk.pm_.c:252
-#, fuzzy
-msgid "No hard drives found"
-msgstr "N'ev ket Moullerez lec'hel!\n"
-
-#: ../../diskdrake/hd_gtk.pm_.c:323
-msgid "Ext2"
-msgstr "Ext2"
-
-#: ../../diskdrake/hd_gtk.pm_.c:323
-msgid "FAT"
-msgstr "FAT"
-
-#: ../../diskdrake/hd_gtk.pm_.c:323
-msgid "HFS"
-msgstr "HFS"
-
-#: ../../diskdrake/hd_gtk.pm_.c:323
-#, fuzzy
-msgid "Journalised FS"
-msgstr "marc'hañ sac'het"
-
-#: ../../diskdrake/hd_gtk.pm_.c:323
-msgid "SunOS"
-msgstr "SunOS"
-
-#: ../../diskdrake/hd_gtk.pm_.c:323
-msgid "Swap"
-msgstr "Disloañ"
-
-#: ../../diskdrake/hd_gtk.pm_.c:324 ../../diskdrake/interactive.pm_.c:1105
-msgid "Empty"
-msgstr "Goullo"
-
-#: ../../diskdrake/hd_gtk.pm_.c:324 ../../install_steps_gtk.pm_.c:325
-#: ../../install_steps_gtk.pm_.c:383 ../../mouse.pm_.c:165
-#: ../../services.pm_.c:157 ../../standalone/drakbackup_.c:1756
-msgid "Other"
-msgstr "All"
-
-#: ../../diskdrake/hd_gtk.pm_.c:328
-msgid "Filesystem types:"
-msgstr "Seurt ar reizhiadoù restroù :"
-
-#: ../../diskdrake/hd_gtk.pm_.c:345 ../../diskdrake/interactive.pm_.c:402
-msgid "Create"
-msgstr "Krouiñ"
-
-#: ../../diskdrake/hd_gtk.pm_.c:345 ../../diskdrake/interactive.pm_.c:380
-#: ../../diskdrake/interactive.pm_.c:531 ../../diskdrake/removable.pm_.c:26
-#: ../../diskdrake/removable.pm_.c:49 ../../diskdrake/removable_gtk.pm_.c:17
-msgid "Type"
-msgstr "Seurt"
-
-#: ../../diskdrake/hd_gtk.pm_.c:345 ../../diskdrake/hd_gtk.pm_.c:347
-#, c-format
-msgid "Use ``%s'' instead"
-msgstr "Grit kentoc'h gant ``%s''"
-
-#: ../../diskdrake/hd_gtk.pm_.c:347 ../../diskdrake/interactive.pm_.c:389
-msgid "Delete"
-msgstr "Dilemel"
-
-#: ../../diskdrake/hd_gtk.pm_.c:351
-msgid "Use ``Unmount'' first"
-msgstr "Implijit ``Divarc'hañ'' da gentañ"
-
-#: ../../diskdrake/hd_gtk.pm_.c:352 ../../diskdrake/interactive.pm_.c:518
-#, c-format
-msgid ""
-"After changing type of partition %s, all data on this partition will be lost"
-msgstr ""
-"Goude kemmañ seurt ar parzhadur %s, holl roadoù ar parzhadur-se a vo kollet"
-
-#: ../../diskdrake/interactive.pm_.c:174
-msgid "Choose a partition"
-msgstr "Dibabit un parzhadur"
-
-#: ../../diskdrake/interactive.pm_.c:174
-msgid "Choose another partition"
-msgstr "Dibabit un parzhadur all"
-
-#: ../../diskdrake/interactive.pm_.c:199
-msgid "Exit"
-msgstr "Kuitaat"
-
-#: ../../diskdrake/interactive.pm_.c:221
-msgid "Toggle to expert mode"
-msgstr "Tremen er mod mailh"
-
-#: ../../diskdrake/interactive.pm_.c:221
-msgid "Toggle to normal mode"
-msgstr "Tremen er mod boas"
-
-#: ../../diskdrake/interactive.pm_.c:221
-msgid "Undo"
-msgstr "Dizober"
-
-#: ../../diskdrake/interactive.pm_.c:240
-msgid "Continue anyway?"
-msgstr "Kenderc'hel evelato ?"
-
-#: ../../diskdrake/interactive.pm_.c:245
-msgid "Quit without saving"
-msgstr "Kuitaat hep enrollañ"
-
-#: ../../diskdrake/interactive.pm_.c:245
-msgid "Quit without writing the partition table?"
-msgstr "Kuitaat hep skrivañ an daolenn barzhañ ?"
-
-#: ../../diskdrake/interactive.pm_.c:250
-#, fuzzy
-msgid "Do you want to save /etc/fstab modifications"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../diskdrake/interactive.pm_.c:263
-msgid "Auto allocate"
-msgstr "Ac'hubiñ ent emgefreek"
-
-#: ../../diskdrake/interactive.pm_.c:263
-msgid "Clear all"
-msgstr "Skarañ an holl"
-
-#: ../../diskdrake/interactive.pm_.c:263
-#: ../../install_steps_interactive.pm_.c:214
-#, fuzzy
-msgid "More"
-msgstr "Dilec'hiañ"
-
-#: ../../diskdrake/interactive.pm_.c:267
-#, fuzzy
-msgid "Hard drive information"
-msgstr "Dinoiñ ar bladenn galet"
-
-#: ../../diskdrake/interactive.pm_.c:298
-msgid "All primary partitions are used"
-msgstr "Ac'hubet eo an holl barzhadurioù kentañ renk"
-
-#: ../../diskdrake/interactive.pm_.c:299
-msgid "I can't add any more partition"
-msgstr "N'hellan ouzpennañ parzhadur ebet ken"
-
-#: ../../diskdrake/interactive.pm_.c:300
-msgid ""
-"To have more partitions, please delete one to be able to create an extended "
-"partition"
-msgstr ""
-"Evit kaout muioc'h a barzhadurioù, lamit unan evit ma c'hellot krouiñ ur "
-"parzhadur astennet mar plij"
-
-#: ../../diskdrake/interactive.pm_.c:310
-#, fuzzy
-msgid "Save partition table"
-msgstr "Skrivañ an daolenn barzhañ"
-
-#: ../../diskdrake/interactive.pm_.c:311
-#, fuzzy
-msgid "Restore partition table"
-msgstr "Taolenn barzhañ saveteerezh"
-
-#: ../../diskdrake/interactive.pm_.c:312
-msgid "Rescue partition table"
-msgstr "Taolenn barzhañ saveteerezh"
-
-#: ../../diskdrake/interactive.pm_.c:314
-#, fuzzy
-msgid "Reload partition table"
-msgstr "Taolenn barzhañ saveteerezh"
-
-#: ../../diskdrake/interactive.pm_.c:319
-#, fuzzy
-msgid "Removable media automounting"
-msgstr "Emvarc'hañ ar skoroù lem/laka"
-
-#: ../../diskdrake/interactive.pm_.c:328 ../../diskdrake/interactive.pm_.c:348
-msgid "Select file"
-msgstr "Diuzit ar restr"
-
-#: ../../diskdrake/interactive.pm_.c:335
-msgid ""
-"The backup partition table has not the same size\n"
-"Still continue?"
-msgstr ""
-"N'eo ket heñvel ment an daolenn barzhañ gwarezet\n"
-"Kenderc'hel memestra ?"
-
-#: ../../diskdrake/interactive.pm_.c:349 ../../harddrake/sound.pm_.c:200
-msgid "Warning"
-msgstr "Ho evezh"
-
-#: ../../diskdrake/interactive.pm_.c:350
-msgid ""
-"Insert a floppy in drive\n"
-"All data on this floppy will be lost"
-msgstr ""
-"Lakait ur bladennig el lenner\n"
-"Kollet e vo holl roadoù ar bladennig-se"
-
-#: ../../diskdrake/interactive.pm_.c:361
-msgid "Trying to rescue partition table"
-msgstr "O klask assevel an daolenn barzhañ"
-
-#: ../../diskdrake/interactive.pm_.c:367
-#, fuzzy
-msgid "Detailed information"
-msgstr "Diskouez titouroù"
-
-#: ../../diskdrake/interactive.pm_.c:382 ../../diskdrake/interactive.pm_.c:662
-msgid "Resize"
-msgstr "Adventañ"
-
-#: ../../diskdrake/interactive.pm_.c:383 ../../diskdrake/interactive.pm_.c:715
-msgid "Move"
-msgstr "Dilec'hiañ"
-
-#: ../../diskdrake/interactive.pm_.c:384
-msgid "Format"
-msgstr "Furmadiñ"
-
-#: ../../diskdrake/interactive.pm_.c:386
-msgid "Add to RAID"
-msgstr "Ouzhpennañ da RAID"
-
-#: ../../diskdrake/interactive.pm_.c:387
-msgid "Add to LVM"
-msgstr "Ouzhpennañ da LVM"
-
-#: ../../diskdrake/interactive.pm_.c:390
-msgid "Remove from RAID"
-msgstr "Lemel diwar RAID"
-
-#: ../../diskdrake/interactive.pm_.c:391
-msgid "Remove from LVM"
-msgstr "Lemel diwar LVM"
-
-#: ../../diskdrake/interactive.pm_.c:392
-msgid "Modify RAID"
-msgstr "Kemmañ RAID"
-
-#: ../../diskdrake/interactive.pm_.c:393
-msgid "Use for loopback"
-msgstr "Implij da saveteiñ"
-
-#: ../../diskdrake/interactive.pm_.c:433
-msgid "Create a new partition"
-msgstr "Krouiñ ur parzhadur nevez"
-
-#: ../../diskdrake/interactive.pm_.c:436
-msgid "Start sector: "
-msgstr "Rann kregiñ : "
-
-#: ../../diskdrake/interactive.pm_.c:438 ../../diskdrake/interactive.pm_.c:815
-msgid "Size in MB: "
-msgstr "Ment e Mo : "
-
-#: ../../diskdrake/interactive.pm_.c:439 ../../diskdrake/interactive.pm_.c:816
-msgid "Filesystem type: "
-msgstr "Seurt ar reizhiad restroù : "
-
-#: ../../diskdrake/interactive.pm_.c:444
-msgid "Preference: "
-msgstr "Dibarzh : "
-
-#: ../../diskdrake/interactive.pm_.c:469
-msgid ""
-"You can't create a new partition\n"
-"(since you reached the maximal number of primary partitions).\n"
-"First remove a primary partition and create an extended partition."
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:499
-#, fuzzy
-msgid "Remove the loopback file?"
-msgstr "O furmadiñ ar restr saveteiñ %s"
-
-#: ../../diskdrake/interactive.pm_.c:529
-msgid "Change partition type"
-msgstr "Kemmañ seurt ar parzhadur"
-
-#: ../../diskdrake/interactive.pm_.c:530 ../../diskdrake/removable.pm_.c:48
-#, fuzzy
-msgid "Which filesystem do you want?"
-msgstr "Pe seurt parzhadur a vennit ?"
-
-#: ../../diskdrake/interactive.pm_.c:536
-msgid "Switching from ext2 to ext3"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:566
-#, c-format
-msgid "Where do you want to mount loopback file %s?"
-msgstr "Pelec'h e mennit marc'hañ ar restr saveteiñ %s ?"
-
-#: ../../diskdrake/interactive.pm_.c:567
-#, c-format
-msgid "Where do you want to mount device %s?"
-msgstr "Pelec'h e mennit marc'hañ an drobarzhell %s ?"
-
-#: ../../diskdrake/interactive.pm_.c:573
-msgid ""
-"Can't unset mount point as this partition is used for loop back.\n"
-"Remove the loopback first"
-msgstr ""
-"N'hellan ket dizober ar poent marc'hañ dre m'eo implijet ar parzhadur-se\n"
-"evit saveteiñ. Lamit ar saveteiñ da gentañ"
-
-#: ../../diskdrake/interactive.pm_.c:594
-#, fuzzy, c-format
-msgid "Where do you want to mount %s?"
-msgstr "Pelec'h e mennit marc'hañ an drobarzhell %s ?"
-
-#: ../../diskdrake/interactive.pm_.c:618
-msgid "Computing FAT filesystem bounds"
-msgstr "O jediñ bevennoù ar reizhiad restroù FAT"
-
-#: ../../diskdrake/interactive.pm_.c:618 ../../diskdrake/interactive.pm_.c:677
-#: ../../install_interactive.pm_.c:133
-msgid "Resizing"
-msgstr "Oc'h adventañ"
-
-#: ../../diskdrake/interactive.pm_.c:650
-#, fuzzy
-msgid "This partition is not resizeable"
-msgstr "Pe seurt parzhadur a vennit ?"
-
-#: ../../diskdrake/interactive.pm_.c:655
-msgid "All data on this partition should be backed-up"
-msgstr "Mat e vije gwareziñ holl roadoù ar parzhadur-se"
-
-#: ../../diskdrake/interactive.pm_.c:657
-#, c-format
-msgid "After resizing partition %s, all data on this partition will be lost"
-msgstr "Goude adventañ ar parzhadur %s e vo kollet holl roadoù ar parzhadur-se"
-
-#: ../../diskdrake/interactive.pm_.c:662
-msgid "Choose the new size"
-msgstr "Dibabit ar ment nevez"
-
-#: ../../diskdrake/interactive.pm_.c:663
-msgid "New size in MB: "
-msgstr "Ment nevez e Mo : "
-
-#: ../../diskdrake/interactive.pm_.c:716
-msgid "Which disk do you want to move it to?"
-msgstr "Da beseurt pladenn e mennit dilec'hiañ ?"
-
-#: ../../diskdrake/interactive.pm_.c:717
-msgid "Sector"
-msgstr "Rann"
-
-#: ../../diskdrake/interactive.pm_.c:718
-msgid "Which sector do you want to move it to?"
-msgstr "Da beseurt rann e mennit dilec'hiañ ?"
-
-#: ../../diskdrake/interactive.pm_.c:721
-msgid "Moving"
-msgstr "O tilec'hiañ"
-
-#: ../../diskdrake/interactive.pm_.c:721
-msgid "Moving partition..."
-msgstr "O tilec'hiañ ur parzhadur..."
-
-#: ../../diskdrake/interactive.pm_.c:738
-msgid "Choose an existing RAID to add to"
-msgstr "Dibabit da be RAID ouzhpennañ"
-
-#: ../../diskdrake/interactive.pm_.c:739 ../../diskdrake/interactive.pm_.c:756
-msgid "new"
-msgstr "nevez"
-
-#: ../../diskdrake/interactive.pm_.c:754
-msgid "Choose an existing LVM to add to"
-msgstr "Dibabit da be LVM ouzhpennañ"
-
-#: ../../diskdrake/interactive.pm_.c:759
-msgid "LVM name?"
-msgstr "Anv LVM?"
-
-#: ../../diskdrake/interactive.pm_.c:800
-msgid "This partition can't be used for loopback"
-msgstr "N'heller ket implijout ar parzhadur-mañ evit saveteiñ"
-
-#: ../../diskdrake/interactive.pm_.c:813
-msgid "Loopback"
-msgstr "Saveteiñ"
-
-#: ../../diskdrake/interactive.pm_.c:814
-msgid "Loopback file name: "
-msgstr "Anv ar restr saveteiñ : "
-
-#: ../../diskdrake/interactive.pm_.c:819
-#, fuzzy
-msgid "Give a file name"
-msgstr "Anv gwirion"
-
-#: ../../diskdrake/interactive.pm_.c:822
-msgid "File already used by another loopback, choose another one"
-msgstr "Restr implijet gant ur saveteiñ all endeo, dibabit unan all"
-
-#: ../../diskdrake/interactive.pm_.c:823
-msgid "File already exists. Use it?"
-msgstr "Ar restr a zo endeo. E implijout ?"
-
-#: ../../diskdrake/interactive.pm_.c:846
-msgid "Mount options"
-msgstr "Dibarzhoù marc'hañ"
-
-#: ../../diskdrake/interactive.pm_.c:853
-msgid "Various"
-msgstr "A bep sort"
-
-#: ../../diskdrake/interactive.pm_.c:917 ../../standalone/drakfloppy_.c:104
-msgid "device"
-msgstr "trobarzhell"
-
-#: ../../diskdrake/interactive.pm_.c:918
-msgid "level"
-msgstr "live"
-
-#: ../../diskdrake/interactive.pm_.c:919
-msgid "chunk size"
-msgstr "ment diaoz"
-
-#: ../../diskdrake/interactive.pm_.c:934
-msgid "Be careful: this operation is dangerous."
-msgstr "Bezit war evezh : arvarus eo an obererezh-mañ."
-
-#: ../../diskdrake/interactive.pm_.c:949
-#, fuzzy
-msgid "What type of partitioning?"
-msgstr "Peseurt moullerez hoc'h eus ?"
-
-#: ../../diskdrake/interactive.pm_.c:965
-#, fuzzy, c-format
-msgid "The package %s is needed. Install it?"
-msgstr ""
-"Bremanaet e tle bezañ ar pabak-mañ\n"
-"Ha sur oc'h e mennit e ziuzañ ?"
-
-#: ../../diskdrake/interactive.pm_.c:979
-msgid ""
-"Sorry I won't accept to create /boot so far onto the drive (on a cylinder > "
-"1024).\n"
-"Either you use LILO and it won't work, or you don't use LILO and you don't "
-"need /boot"
-msgstr ""
-"Ma zigarezit na asantiñ krouiñ /boot ken pell war ar bladenn (war ur granenn "
-"> 1024).\n"
-"Pe e implijit LILO ha ne daio ket en-dro, pe ne rit ket ha n'hoc'h eus ket "
-"ezhomm a /boot"
-
-#: ../../diskdrake/interactive.pm_.c:983
-msgid ""
-"The partition you've selected to add as root (/) is physically located "
-"beyond\n"
-"the 1024th cylinder of the hard drive, and you have no /boot partition.\n"
-"If you plan to use the LILO boot manager, be careful to add a /boot partition"
-msgstr ""
-"Lec'hiet eo ar parzhadur hoc'h eus diuzet da ouzphennañ evel gwrizienn (/) "
-"en tu-hont\n"
-"d'ar 1024vet kranenn eus ar bladenn galet, ha n'hoc'h eus ket a barzhadur /"
-"boot.\n"
-"Ma vennit implijout ar merour loc'hañ LILO, taolit pled da ouzhpennañ ur "
-"parzhadur /boot"
-
-#: ../../diskdrake/interactive.pm_.c:989
-msgid ""
-"You've selected a software RAID partition as root (/).\n"
-"No bootloader is able to handle this without a /boot partition.\n"
-"So be careful to add a /boot partition"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:1009
-#, c-format
-msgid "Partition table of drive %s is going to be written to disk!"
-msgstr "War-nes bezañ skrivet war bladenn eo taolenn barzhañ an ardivink %s !"
-
-#: ../../diskdrake/interactive.pm_.c:1013
-msgid "You'll need to reboot before the modification can take place"
-msgstr "Ret e vo deoc'h adloc'hañ a-raok ma talvezo ar c'hemm"
-
-#: ../../diskdrake/interactive.pm_.c:1024
-#, c-format
-msgid "After formatting partition %s, all data on this partition will be lost"
-msgstr ""
-"Goude furmadiñ ar parzhadur %s, holl roadoù ar parzhadur-se a vo kollet"
-
-#: ../../diskdrake/interactive.pm_.c:1026
-msgid "Formatting"
-msgstr "O furmadiñ"
-
-#: ../../diskdrake/interactive.pm_.c:1027
-#, c-format
-msgid "Formatting loopback file %s"
-msgstr "O furmadiñ ar restr saveteiñ %s"
-
-#: ../../diskdrake/interactive.pm_.c:1028
-#: ../../install_steps_interactive.pm_.c:459
-#, c-format
-msgid "Formatting partition %s"
-msgstr "O furmadiñ ar parzhadur %s"
-
-#: ../../diskdrake/interactive.pm_.c:1039
-#, fuzzy
-msgid "Hide files"
-msgstr "mkraid sac'het"
-
-#: ../../diskdrake/interactive.pm_.c:1039
-#, fuzzy
-msgid "Move files to the new partition"
-msgstr "Krouiñ ur parzhadur nevez"
-
-#: ../../diskdrake/interactive.pm_.c:1040
-#, c-format
-msgid ""
-"Directory %s already contains data\n"
-"(%s)"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:1051
-#, fuzzy
-msgid "Moving files to the new partition"
-msgstr "Krouiñ ur parzhadur nevez"
-
-#: ../../diskdrake/interactive.pm_.c:1055
-#, c-format
-msgid "Copying %s"
-msgstr "Adskrivañ %s"
-
-#: ../../diskdrake/interactive.pm_.c:1059
-#, fuzzy, c-format
-msgid "Removing %s"
-msgstr "Spisterioù"
-
-#: ../../diskdrake/interactive.pm_.c:1069
-#, c-format
-msgid "partition %s is now known as %s"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:1090
-#: ../../diskdrake/interactive.pm_.c:1149
-msgid "Device: "
-msgstr "Trobarzhell : "
-
-#: ../../diskdrake/interactive.pm_.c:1091
-#, c-format
-msgid "DOS drive letter: %s (just a guess)\n"
-msgstr "Lizher ar bladenn DOS : %s (diwar varteze hepken)\n"
-
-#: ../../diskdrake/interactive.pm_.c:1095
-#: ../../diskdrake/interactive.pm_.c:1103
-#: ../../diskdrake/interactive.pm_.c:1168
-msgid "Type: "
-msgstr "Seurt : "
-
-#: ../../diskdrake/interactive.pm_.c:1099
-msgid "Name: "
-msgstr "Anv: "
-
-#: ../../diskdrake/interactive.pm_.c:1107
-#, c-format
-msgid "Start: sector %s\n"
-msgstr "O kregiñ : rann %s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1108
-#, c-format
-msgid "Size: %s"
-msgstr "Ment: %s"
-
-#: ../../diskdrake/interactive.pm_.c:1110
-#, c-format
-msgid ", %s sectors"
-msgstr ", %s rann"
-
-#: ../../diskdrake/interactive.pm_.c:1112
-#, fuzzy, c-format
-msgid "Cylinder %d to %d\n"
-msgstr "Kranenn %d da granenn %d\n"
-
-#: ../../diskdrake/interactive.pm_.c:1113
-msgid "Formatted\n"
-msgstr "Furmadet\n"
-
-#: ../../diskdrake/interactive.pm_.c:1114
-msgid "Not formatted\n"
-msgstr "Ket furmadet\n"
-
-#: ../../diskdrake/interactive.pm_.c:1115
-msgid "Mounted\n"
-msgstr "Marc'het\n"
-
-#: ../../diskdrake/interactive.pm_.c:1116
-#, c-format
-msgid "RAID md%s\n"
-msgstr "RAID md%s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1118
-#, fuzzy, c-format
-msgid ""
-"Loopback file(s):\n"
-" %s\n"
-msgstr "Restr(où) saveteiñ : %s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1119
-msgid ""
-"Partition booted by default\n"
-" (for MS-DOS boot, not for lilo)\n"
-msgstr ""
-"Parzhadur loc'het dre ziouer\n"
-" (evit loc'hañ MS-DOS, ket evit lilo)\n"
-
-#: ../../diskdrake/interactive.pm_.c:1121
-#, c-format
-msgid "Level %s\n"
-msgstr "Live %s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1122
-#, c-format
-msgid "Chunk size %s\n"
-msgstr "Ment diaoz %s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1123
-#, c-format
-msgid "RAID-disks %s\n"
-msgstr "Pladennoù RAID %s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1125
-#, c-format
-msgid "Loopback file name: %s"
-msgstr "Anv ar restr saveteiñ : %s"
-
-#: ../../diskdrake/interactive.pm_.c:1128
-msgid ""
-"\n"
-"Chances are, this partition is\n"
-"a Driver partition, you should\n"
-"probably leave it alone.\n"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:1131
-msgid ""
-"\n"
-"This special Bootstrap\n"
-"partition is for\n"
-"dual-booting your system.\n"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:1150
-msgid "Read-only"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:1151
-#, c-format
-msgid "Size: %s\n"
-msgstr "Ment: %s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1152
-#, c-format
-msgid "Geometry: %s cylinders, %s heads, %s sectors\n"
-msgstr "Mentoniezh : %s kranenn, %s penn, %s rann\n"
-
-#: ../../diskdrake/interactive.pm_.c:1153
-msgid "Info: "
-msgstr "Titouroù: "
-
-#: ../../diskdrake/interactive.pm_.c:1154
-#, c-format
-msgid "LVM-disks %s\n"
-msgstr "Pladennoù LVM %s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1155
-#, c-format
-msgid "Partition table type: %s\n"
-msgstr "Seurt taolenn barzhañ : %s\n"
-
-#: ../../diskdrake/interactive.pm_.c:1156
-#, fuzzy, c-format
-msgid "on channel %d id %d\n"
-msgstr "war bus %d Nn %d\n"
-
-#: ../../diskdrake/interactive.pm_.c:1186
-#, fuzzy
-msgid "Filesystem encryption key"
-msgstr "Seurt ar reizhiad restroù : "
-
-#: ../../diskdrake/interactive.pm_.c:1187
-msgid "Choose your filesystem encryption key"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:1190
-#, fuzzy, c-format
-msgid "This encryption key is too simple (must be at least %d characters long)"
-msgstr "Re eeun eo an tremenger-se (%d arouezenn a zo ret d'an nebeutañ)"
-
-#: ../../diskdrake/interactive.pm_.c:1191
-#, fuzzy
-msgid "The encryption keys do not match"
-msgstr "An tremegerioù ne glot ket"
-
-#: ../../diskdrake/interactive.pm_.c:1194
-msgid "Encryption key"
-msgstr ""
-
-#: ../../diskdrake/interactive.pm_.c:1195
-msgid "Encryption key (again)"
-msgstr ""
-
-#: ../../diskdrake/removable.pm_.c:47
-#, fuzzy
-msgid "Change type"
-msgstr "Kemmañ seurt ar parzhadur"
-
-#
-#: ../../diskdrake/removable_gtk.pm_.c:28
-#, fuzzy
-msgid "Please click on a medium"
-msgstr "Klikit war ur parzhadur mar plij"
-
-#: ../../diskdrake/smbnfs_gtk.pm_.c:162
-#, c-format
-msgid "Can't login using username %s (bad password?)"
-msgstr ""
-
-#: ../../diskdrake/smbnfs_gtk.pm_.c:166 ../../diskdrake/smbnfs_gtk.pm_.c:175
-#, fuzzy
-msgid "Domain Authentication Required"
-msgstr "Dilesadur"
-
-#: ../../diskdrake/smbnfs_gtk.pm_.c:167
-#, fuzzy
-msgid "Another one"
-msgstr "dedennus"
-
-#: ../../diskdrake/smbnfs_gtk.pm_.c:167
-#, fuzzy
-msgid "Which username"
-msgstr "Anv arveriad"
-
-#: ../../diskdrake/smbnfs_gtk.pm_.c:176
-msgid ""
-"Please enter your username, password and domain name to access this host."
-msgstr ""
-
-#: ../../diskdrake/smbnfs_gtk.pm_.c:178 ../../standalone/drakbackup_.c:3529
-#, fuzzy
-msgid "Username"
-msgstr "Anv arveriad"
-
-#: ../../diskdrake/smbnfs_gtk.pm_.c:180
-#, fuzzy
-msgid "Domain"
-msgstr "Domani NIS"
-
-#: ../../diskdrake/smbnfs_gtk.pm_.c:200
-#, fuzzy
-msgid "Search servers"
-msgstr "Servijer DNS"
-
-#: ../../fs.pm_.c:545 ../../fs.pm_.c:555 ../../fs.pm_.c:559 ../../fs.pm_.c:563
-#: ../../fs.pm_.c:567 ../../fs.pm_.c:571
-#, c-format
-msgid "%s formatting of %s failed"
-msgstr "furmadiñ er seurt %s eus %s a zo sac'het"
-
-#: ../../fs.pm_.c:608
-#, c-format
-msgid "I don't know how to format %s in type %s"
-msgstr "N'ouzon ket penaos furmadiñ %s er seurt %s"
-
-#: ../../fs.pm_.c:682 ../../fs.pm_.c:725
-#, c-format
-msgid "mounting partition %s in directory %s failed"
-msgstr ""
-
-#: ../../fs.pm_.c:740 ../../partition_table.pm_.c:598
-#, c-format
-msgid "error unmounting %s: %s"
-msgstr "fazi en ur zivarc'hañ %s : %s"
-
-#: ../../fsedit.pm_.c:21
-msgid "simple"
-msgstr "eeun"
-
-#: ../../fsedit.pm_.c:25
-msgid "with /usr"
-msgstr "gant /usr"
-
-#: ../../fsedit.pm_.c:30
-msgid "server"
-msgstr "servijer"
-
-#: ../../fsedit.pm_.c:240
-#, fuzzy, c-format
-msgid ""
-"I can't read the partition table of device %s, it's too corrupted for me :(\n"
-"I can try to go on, erasing over bad partitions (ALL DATA will be lost!).\n"
-"The other solution is to not allow DrakX to modify the partition table.\n"
-"(the error is %s)\n"
-"\n"
-"Do you agree to loose all the partitions?\n"
-msgstr ""
-"N'hellañ ket lenn ho taolenn barzhañ, re vrein eo evidon :(\n"
-"Klask a rin kenderc'hel en ur ziverkañ ar parzhadurioù siek"
-
-#: ../../fsedit.pm_.c:501
-msgid "You can't use JFS for partitions smaller than 16MB"
-msgstr ""
-
-#: ../../fsedit.pm_.c:502
-msgid "You can't use ReiserFS for partitions smaller than 32MB"
-msgstr ""
-
-#: ../../fsedit.pm_.c:521
-msgid "Mount points must begin with a leading /"
-msgstr "Poentoù marc'hañ a rank kregiñ gant /"
-
-#: ../../fsedit.pm_.c:522
-#, c-format
-msgid "There is already a partition with mount point %s\n"
-msgstr "Bez' ez eus ur parzhadur e boent marc'hañ %s endeo\n"
-
-#: ../../fsedit.pm_.c:526
-#, c-format
-msgid "You can't use a LVM Logical Volume for mount point %s"
-msgstr ""
-
-#: ../../fsedit.pm_.c:528
-msgid "This directory should remain within the root filesystem"
-msgstr ""
-
-#: ../../fsedit.pm_.c:530
-msgid ""
-"You need a true filesystem (ext2/ext3, reiserfs, xfs, or jfs) for this mount "
-"point\n"
-msgstr ""
-
-#: ../../fsedit.pm_.c:532
-#, c-format
-msgid "You can't use an encrypted file system for mount point %s"
-msgstr ""
-
-#: ../../fsedit.pm_.c:599
-msgid "Not enough free space for auto-allocating"
-msgstr ""
-
-#: ../../fsedit.pm_.c:601
-msgid "Nothing to do"
-msgstr ""
-
-#: ../../fsedit.pm_.c:694
-#, c-format
-msgid "Error opening %s for writing: %s"
-msgstr "Fazi en ur zigeriñ %s evit skrivañ : %s"
-
-#: ../../harddrake/sound.pm_.c:168
-msgid "No alternative driver"
-msgstr ""
-
-#: ../../harddrake/sound.pm_.c:169
-#, c-format
-msgid ""
-"There's no known OSS/ALSA alternative driver for your sound card (%s) which "
-"currently uses \"%s\""
-msgstr ""
-
-#: ../../harddrake/sound.pm_.c:171
-#, fuzzy
-msgid "Sound configuration"
-msgstr "Kefluniadur"
-
-#: ../../harddrake/sound.pm_.c:172
-#, c-format
-msgid ""
-"Here you can select an alternative driver (either OSS or ALSA) for your "
-"sound card (%s)."
-msgstr ""
-
-#: ../../harddrake/sound.pm_.c:174
-#, c-format
-msgid ""
-"\n"
-"\n"
-"Your card currently use the %s\"%s\" driver (default driver for your card is "
-"\"%s\")"
-msgstr ""
-
-#: ../../harddrake/sound.pm_.c:176
-#, fuzzy
-msgid "Driver:"
-msgstr "Servijer"
-
-#: ../../harddrake/sound.pm_.c:181 ../../standalone/drakTermServ_.c:246
-#: ../../standalone/drakbackup_.c:3932 ../../standalone/drakbackup_.c:3965
-#: ../../standalone/drakbackup_.c:3991 ../../standalone/drakbackup_.c:4018
-#: ../../standalone/drakbackup_.c:4045 ../../standalone/drakbackup_.c:4084
-#: ../../standalone/drakbackup_.c:4105 ../../standalone/drakbackup_.c:4132
-#: ../../standalone/drakbackup_.c:4162 ../../standalone/drakbackup_.c:4188
-#: ../../standalone/drakbackup_.c:4213 ../../standalone/drakfont_.c:700
-msgid "Help"
-msgstr "Skoazell"
-
-#: ../../harddrake/sound.pm_.c:183
-msgid "Switching between ALSA and OSS help"
-msgstr ""
-
-#: ../../harddrake/sound.pm_.c:184
-msgid ""
-"OSS (Open Sound System) was the first sound API. It's an OS independant "
-"sound API (it's available on most unices systems) but it's a very basic and "
-"limited API.\n"
-"What's more, OSS drivers all reinvent the wheel.\n"
-"\n"
-"ALSA (Advanced Linux Sound Architecture) is a modularized architecture "
-"which\n"
-"supports quite a large range of ISA, USB and PCI cards.\n"
-"\n"
-"It also provides a much higher API than OSS.\n"
-"\n"
-"To use alsa, one can either use:\n"
-"- the old compatibility OSS api\n"
-"- the new ALSA api that provides many enhanced features but requires using "
-"the ALSA library.\n"
-msgstr ""
-
-#: ../../harddrake/sound.pm_.c:200
-#, c-format
-msgid ""
-"The old \"%s\" driver is blacklisted.\n"
-"\n"
-"It has been reported to oopses the kernel on unloading.\n"
-"\n"
-"The new \"%s\" driver'll only be used on next bootstrap."
-msgstr ""
-
-#: ../../harddrake/sound.pm_.c:203 ../../standalone/drakconnect_.c:301
-#, fuzzy
-msgid "Please Wait... Applying the configuration"
-msgstr "Amprouiñ ar c'hefluniadur"
-
-#: ../../harddrake/sound.pm_.c:203 ../../harddrake/ui.pm_.c:111
-#: ../../interactive.pm_.c:391
-msgid "Please wait"
-msgstr "Gortozit mar plij"
-
-#: ../../harddrake/sound.pm_.c:208
-#, fuzzy
-msgid "No known driver"
-msgstr "Sturier X"
-
-#: ../../harddrake/sound.pm_.c:209
-#, c-format
-msgid "There's no known driver for your sound card (%s)"
-msgstr ""
-
-#: ../../harddrake/sound.pm_.c:212
-#, fuzzy
-msgid "Unkown driver"
-msgstr "Sturier X"
-
-#: ../../harddrake/sound.pm_.c:213
-#, c-format
-msgid ""
-"The \"%s\" driver for your sound card is unlisted\n"
-"\n"
-"Please send the output of the \"lspcidrake -v\" command to\n"
-"<install at mandrakesoft dot com>\n"
-"with subject: unlisted sound driver \"%s\""
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:16
-#, fuzzy
-msgid "Model"
-msgstr "Logodenn"
-
-#: ../../harddrake/ui.pm_.c:16
-#, fuzzy
-msgid "hard disk model"
-msgstr "Memor kartenn (DMA)"
-
-#: ../../harddrake/ui.pm_.c:17
-#, fuzzy
-msgid "Channel"
-msgstr "Nullañ"
-
-#: ../../harddrake/ui.pm_.c:17
-msgid "EIDE/SCSI channel"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:19
-msgid "Bus"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:20
-msgid ""
-"this is the physical bus on which the device is plugged (eg: PCI, USB, ...)"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:21
-#, fuzzy
-msgid "Module"
-msgstr "Logodenn"
-
-#: ../../harddrake/ui.pm_.c:21
-msgid "the module of the GNU/Linux kernel that handle that device"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:22
-msgid "Media class"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:22
-msgid "class of hardware device"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:23 ../../printerdrake.pm_.c:1562
-#, fuzzy
-msgid "Description"
-msgstr "Spisait dibarzhoù"
-
-#: ../../harddrake/ui.pm_.c:23
-msgid "this field describe the device"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:25
-#, fuzzy
-msgid "Bus identification"
-msgstr "Dilesadur"
-
-#: ../../harddrake/ui.pm_.c:26
-msgid ""
-"- PCI and USB devices: this list the vendor, device, subvendor and subdevice "
-"PCI/USB ids"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:28
-msgid "Location on the bus"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:29
-msgid ""
-"- pci devices: this gives the PCI slot, device and function of this card\n"
-"- eide devices: the device is either a slave or a master device\n"
-"- scsi devices: the scsi bus and the scsi device ids"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:32
-#, fuzzy
-msgid "Old device file"
-msgstr "Diuzit ar restr"
-
-#: ../../harddrake/ui.pm_.c:33
-msgid "old static device name used in dev package"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:34
-#, fuzzy
-msgid "New devfs device"
-msgstr "Trobarzhell an dreuzell"
-
-#: ../../harddrake/ui.pm_.c:35
-msgid "new dinamic device name generated by incore kernel devfs"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:36
-#, fuzzy
-msgid "Number of buttons"
-msgstr "2 nozelenn"
-
-#: ../../harddrake/ui.pm_.c:37
-msgid "the vendor name of the device"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:38
-#, fuzzy
-msgid "Alternative drivers"
-msgstr "O voullañ pajenn(où) skrid..."
-
-#: ../../harddrake/ui.pm_.c:39
-msgid "the list of alternative drivers for this sound card"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:63
-#, fuzzy
-msgid "/_Quit"
-msgstr "Kuitaat"
-
-#: ../../harddrake/ui.pm_.c:64 ../../harddrake/ui.pm_.c:65
-#: ../../harddrake/ui.pm_.c:71 ../../harddrake/ui.pm_.c:73
-#: ../../standalone/logdrake_.c:111
-msgid "/_Help"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:65
-#, fuzzy
-msgid "/_Help..."
-msgstr "Skoazell"
-
-#: ../../harddrake/ui.pm_.c:66
-msgid "Harddrake help"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:67
-msgid ""
-"Description of the fields:\n"
-"\n"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:71
-msgid "/_Report Bug"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:73
-#, fuzzy
-msgid "/_About..."
-msgstr "Marc'hañ"
-
-#: ../../harddrake/ui.pm_.c:74
-msgid "About Harddrake"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:75
-msgid ""
-"This is HardDrake, a Mandrake hardware configuration tool.\n"
-"Version:"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:76
-#, fuzzy
-msgid "Author:"
-msgstr "Embrouiñ"
-
-#: ../../harddrake/ui.pm_.c:86
-#, fuzzy
-msgid "Harddrake2 version "
-msgstr "Dinoiñ ar bladenn galet"
-
-#: ../../harddrake/ui.pm_.c:101
-#, fuzzy
-msgid "Detected hardware"
-msgstr "Gwelet titouroù periantel"
-
-#: ../../harddrake/ui.pm_.c:103
-#, fuzzy
-msgid "Information"
-msgstr "Diskouez titouroù"
-
-#: ../../harddrake/ui.pm_.c:106
-#, fuzzy
-msgid "Configure module"
-msgstr "Kefluniañ al logodenn"
-
-#: ../../harddrake/ui.pm_.c:107
-msgid "Run config tool"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:111
-#, fuzzy
-msgid "Detection in progress"
-msgstr "Poent marc'hañ doubl %s"
-
-#: ../../harddrake/ui.pm_.c:148
-msgid "You can configure each parameter of the module here."
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:166
-#, fuzzy, c-format
-msgid "Running \"%s\" ..."
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../harddrake/ui.pm_.c:180
-#, c-format
-msgid "Probing %s class\n"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:201
-msgid "primary"
-msgstr ""
-
-#: ../../harddrake/ui.pm_.c:201
-#, fuzzy
-msgid "secondary"
-msgstr "%d eilenn"
-
-#: ../../harddrake/v4l.pm_.c:15 ../../harddrake/v4l.pm_.c:65
-#, fuzzy
-msgid "Auto-detect"
-msgstr "Dilesadur"
-
-#: ../../harddrake/v4l.pm_.c:66 ../../harddrake/v4l.pm_.c:186
-#, fuzzy
-msgid "Unknown|Generic"
-msgstr "Rummel"
-
-#: ../../harddrake/v4l.pm_.c:98
-msgid "Unknown|CPH05X (bt878) [many vendors]"
-msgstr ""
-
-#: ../../harddrake/v4l.pm_.c:99
-msgid "Unknown|CPH06X (bt878) [many vendors]"
-msgstr ""
-
-#: ../../harddrake/v4l.pm_.c:210
-msgid ""
-"For most modern TV cards, the bttv module of the GNU/Linux kernel just auto-"
-"detect the rights parameters.\n"
-"If your card is misdetected, you can force the right tuner and card types "
-"here. Just select your tv card parameters if needed"
-msgstr ""
-
-#: ../../harddrake/v4l.pm_.c:213
-#, fuzzy
-msgid "Card model:"
-msgstr "Memor kartenn (DMA)"
-
-#: ../../harddrake/v4l.pm_.c:214
-#, fuzzy
-msgid "Tuner type:"
-msgstr "Kemmañ seurt ar parzhadur"
-
-#: ../../harddrake/v4l.pm_.c:215
-msgid "Number of capture buffers:"
-msgstr ""
-
-#: ../../harddrake/v4l.pm_.c:215
-msgid "number of capture buffers for mmap'ed capture"
-msgstr ""
-
-#: ../../harddrake/v4l.pm_.c:217
-#, fuzzy
-msgid "PLL setting:"
-msgstr "O furmadiñ"
-
-#: ../../harddrake/v4l.pm_.c:218
-msgid "Radio support:"
-msgstr ""
-
-#: ../../harddrake/v4l.pm_.c:218
-msgid "enable radio support"
-msgstr ""
-
-#: ../../help.pm_.c:13
-msgid ""
-"GNU/Linux is a multiuser system, and this means that each user can have his\n"
-"own preferences, his own files and so on. You can read the ``User Guide''\n"
-"to learn more this concept. But unlike \"root\", which is the\n"
-"administrator, the users you add here will not be entitled to change\n"
-"anything except their own files and their own configurations. You will have\n"
-"to create at least one regular user for yourself. That account is where you\n"
-"should log in for routine use. Although it is very practical to log in as\n"
-"\"root\" everyday, it may also be very dangerous! The slightest mistake\n"
-"could mean that your system would not work any more. If you make a serious\n"
-"mistake as a regular user, you may only lose some information, but not the\n"
-"entire system.\n"
-"\n"
-"First, you have to enter your real name. This is not mandatory, of course\n"
-"-- as you can actually enter whatever you want. DrakX will then take the\n"
-"first word you have entered in the box and will bring it over to the \"User\n"
-"name\". This is the name this particular user will use to log onto the\n"
-"system. You can change it. You then have to enter a password here. A\n"
-"non-privileged (regular) user's password is not as crucial as the \"root\"\n"
-"one from a security point of view, but that is no reason to neglect it:\n"
-"after all, your files are at risk.\n"
-"\n"
-"If you click on \"Accept user\", you can then add as many as you want. Add\n"
-"a user for each one of the people meant to use that computer. When you are\n"
-"finish adding all the users you want, select \"Done\".\n"
-"\n"
-"Clicking the \"Advanced\" button allows you to change the default \"shell\"\n"
-"for that user (bash by default).\n"
-"\n"
-"When you are finished adding all users, you will be proposed to choose a\n"
-"user which can automatically log into the system when the computer boots\n"
-"up. If you are interested in that feature (and do not care much about local\n"
-"security), choose the desired user and window manager, then click \"Yes\".\n"
-"If you are not interested in this feature, click \"No\"."
-msgstr ""
-
-#: ../../help.pm_.c:48
-msgid ""
-"Listed above are the existing Linux partitions detected on your hard drive.\n"
-"You can keep the choices made by the wizard, they are good for most common\n"
-"installations. If you make any changes, you must at least define a root\n"
-"partition (\"/\"). Do not choose too small a partition or you will not be\n"
-"able to install enough software. If you want to store your data on a\n"
-"separate partition, you will also need to create a \"/home\" partition\n"
-"(only possible if you have more than one Linux partition available).\n"
-"\n"
-"Each partition is listed as follows: \"Name\", \"Capacity\".\n"
-"\n"
-"\"Name\" is structured: \"hard drive type\", \"hard drive number\",\n"
-"\"partition number\" (for example, \"hda1\").\n"
-"\n"
-"\"Hard drive type\" is \"hd\" if your hard drive is an IDE hard drive and\n"
-"\"sd\" if it is a SCSI hard drive.\n"
-"\n"
-"\"Hard drive number\" is always a letter after \"hd\" or \"sd\". For IDE\n"
-"hard drives:\n"
-"\n"
-" * \"a\" means \"master hard drive on the primary IDE controller\";\n"
-"\n"
-" * \"b\" means \"slave hard drive on the primary IDE controller\";\n"
-"\n"
-" * \"c\" means \"master hard drive on the secondary IDE controller\";\n"
-"\n"
-" * \"d\" means \"slave hard drive on the secondary IDE controller\".\n"
-"\n"
-"With SCSI hard drives, an \"a\" means \"lowest SCSI ID\", a \"b\" means\n"
-"\"second lowest SCSI ID\", etc."
-msgstr ""
-
-#: ../../help.pm_.c:79
-msgid ""
-"The Mandrake Linux installation is spread out over several CD-ROMs. DrakX\n"
-"knows if a selected package is located on another CD-ROM and will eject the\n"
-"current CD and ask you to insert a different one as required."
-msgstr ""
-
-#: ../../help.pm_.c:84
-msgid ""
-"It is now time to specify which programs you wish to install on your\n"
-"system. There are thousands of packages available for Mandrake Linux, and\n"
-"you are not supposed to know them all by heart.\n"
-"\n"
-"If you are performing a standard installation from a CD-ROM, you will first\n"
-"be asked to specify the CDs you currently have (in Expert mode only). Check\n"
-"the CD labels and highlight the boxes corresponding to the CDs you have\n"
-"available for installation. Click \"OK\" when you are ready to continue.\n"
-"\n"
-"Packages are sorted in groups corresponding to a particular use of your\n"
-"machine. The groups themselves are sorted into four sections:\n"
-"\n"
-" * \"Workstation\": if you plan to use your machine as a workstation,\n"
-"select one or more of the corresponding groups;\n"
-"\n"
-" * \"Development\": if your machine is to be used for programming, choose\n"
-"the desired group(s);\n"
-"\n"
-" * \"Server\": if your machine is intended to be a server, you will be able\n"
-"to select which of the most common services you wish to install on your\n"
-"machine;\n"
-"\n"
-" * \"Graphical Environment\": finally, this is where you will choose your\n"
-"preferred graphical environment. At least one must be selected if you want\n"
-"to have a graphical workstation!\n"
-"\n"
-"Moving the mouse cursor over a group name will display a short explanatory\n"
-"text about that group. If you unselect all groups when performing a regular\n"
-"installation (by opposition to an upgrade), a dialog will pop up proposing\n"
-"different options for a minimal installation:\n"
-"\n"
-" * \"With X\": install the fewest packages possible to have a working\n"
-"graphical desktop;\n"
-"\n"
-" * \"With basic documentation\": installs the base system plus basic\n"
-"utilities and their documentation. This installation is suitable for\n"
-"setting up a server;\n"
-"\n"
-" * \"Truly minimal install\": will install the strict minimum necessary to\n"
-"get a working Linux system, in command line only. This installation is\n"
-"about 65Mb large.\n"
-"\n"
-"You can check the \"Individual package selection\" box, which is useful if\n"
-"you are familiar with the packages being offered or if you want to have\n"
-"total control over what will be installed.\n"
-"\n"
-"If you started the installation in \"Upgrade\" mode, you can unselect all\n"
-"groups to avoid installing any new package. This is useful to repair or\n"
-"update an existing system."
-msgstr ""
-
-#: ../../help.pm_.c:135
-msgid ""
-"Finally, depending on whether or not you chose to be able to select\n"
-"individual packages, you will be presented a tree containing all packages\n"
-"classified by groups and subgroups. While browsing the tree, you can select\n"
-"entire groups, subgroups, or individual packages.\n"
-"\n"
-"Whenever you select a package on the tree, a description appears on the\n"
-"right. When your selection is finished, click the \"Install\" button which\n"
-"will then launch the installation process. Depending on the speed of your\n"
-"hardware and the number of packages that need to be installed, it may take\n"
-"a while to complete the process. An installation time estimate is displayed\n"
-"on the screen, to help you gauge if there is sufficient time to enjoy a cup\n"
-"of coffee.\n"
-"\n"
-"!! If a server package has been selected, either intentionally or because\n"
-"it was part of a whole group, you will be asked to confirm that you really\n"
-"want those servers to be installed. Under Mandrake Linux, any installed\n"
-"servers are started by default at boot time. Even if they are safe and have\n"
-"no known issues at the time the distribution was shipped, it may happen\n"
-"that security holes are discovered after this version of Mandrake Linux was\n"
-"finalized. If you do not know what a particular service is supposed to do\n"
-"or why it is being installed, then click \"No\". Clicking \"Yes\" will\n"
-"install the listed services and they will be started automatically by\n"
-"default. !!\n"
-"\n"
-"The \"Automatic dependencies\" option simply disables the warning dialog\n"
-"which appears whenever the installer automatically selects a package. This\n"
-"occurs because it has determined that it needs to satisfy a dependency with\n"
-"another package in order to successfully complete the installation.\n"
-"\n"
-"The tiny floppy disk icon at the bottom of the list allows to load the\n"
-"package list chosen during a previous installation. Clicking on this icon\n"
-"will ask you to insert a floppy disk previously created at the end of\n"
-"another installation. See the second tip of the previous step on how to\n"
-"create such a floppy disk."
-msgstr ""
-
-#: ../../help.pm_.c:171
-msgid ""
-"You are now able to set up your Internet/network connection. If you wish to\n"
-"connect your computer to the Internet or to a local network, click \"OK\".\n"
-"The autodetection of network devices and modem will be launched. If this\n"
-"detection fails, uncheck the \"Use auto-detection\" box next time. You may\n"
-"also choose not to configure the network, or do it later; in that case,\n"
-"simply click the \"Cancel\" button.\n"
-"\n"
-"Available connections are: traditional modem, ISDN modem, ADSL connection,\n"
-"cable modem, and finally a simple LAN connection (Ethernet).\n"
-"\n"
-"Here, we will not detail each configuration. Simply make sure that you have\n"
-"all the parameters from your Internet Service Provider or system\n"
-"administrator.\n"
-"\n"
-"You can consult the ``Starter Guide'' chapter about Internet connections\n"
-"for details about the configuration, or simply wait until your system is\n"
-"installed and use the program described there to configure your connection.\n"
-"\n"
-"If you wish to configure the network later after installation, or if you\n"
-"are finished configuring your network connection, click \"Cancel\"."
-msgstr ""
-
-#: ../../help.pm_.c:193
-#, fuzzy
-msgid ""
-"You may now choose which services you wish to start at boot time.\n"
-"\n"
-"Here are listed all the services available with the current installation.\n"
-"Review them carefully and uncheck those which are not always needed at boot\n"
-"time.\n"
-"\n"
-"You can get a short explanatory text about a service by selecting a\n"
-"specific service. However, if you are not sure whether a service is useful\n"
-"or not, it is safer to leave the default behavior.\n"
-"\n"
-"!! At this stage, be very careful if you intend to use your machine as a\n"
-"server: you will probably not want to start any services which you do not\n"
-"need. Please remember that several services can be dangerous if they are\n"
-"enabled on a server. In general, select only the services you really need.\n"
-"!!"
-msgstr ""
-"Bremañ e c'hellit diuz pe servijoù a vennit e vije lañset pa loc'her.\n"
-"Pa zeu ho logodenn war un draez, ul lagadenn skoazell a zeuio war wel hag\n"
-"a zisplego pal ar servij-se.\n"
-"\n"
-"Bezit aketuz-kenañ el lankad-mañ ma vennit implijout ho ardivink evel ur\n"
-"servijer : mennout a rit emichañs chom hep loc'hañ kement servij n'ho peus "
-"ket\n"
-"c'hoant."
-
-#: ../../help.pm_.c:210
-msgid ""
-"GNU/Linux manages time in GMT (Greenwich Mean Time) and translates it in\n"
-"local time according to the time zone you selected. It is however possible\n"
-"to deactivate this by unselecting \"Hardware clock set to GMT\" so that the\n"
-"hardware clock is the same as the system clock. This is useful when the\n"
-"machine is hosting another operating system like Windows.\n"
-"\n"
-"The \"Automatic time synchronization\" option will automatically regulate\n"
-"the clock by connecting to a remote time server on the Internet. In the\n"
-"list that is presented, choose a server located near you. Of course you\n"
-"must have a working Internet connection for this feature to work. It will\n"
-"actually install on your machine a time server which can be optionally used\n"
-"by other machines on your local network."
-msgstr ""
-
-#: ../../help.pm_.c:224
-msgid ""
-"X (for X Window System) is the heart of the GNU/Linux graphical interface\n"
-"on which all the graphical environments (KDE, GNOME, AfterStep,\n"
-"WindowMaker, etc.) bundled with Mandrake Linux rely.\n"
-"\n"
-"You will be presented the list of available resolutions and color depth\n"
-"available for your hardware. Choose the one that best suit your needs (you\n"
-"will be able to change that after installation though). When you are\n"
-"satisfied with the sample shown in the monitor, click \"OK\". A window will\n"
-"then appear and ask you if you can see it.\n"
-"\n"
-"If you are doing an \"Expert\" installation, you will enter the X\n"
-"configuration wizard. See the corresponding section of the manual for more\n"
-"information about this wizard.\n"
-"\n"
-"If you can see the message during the test, and answer \"Yes\", then DrakX\n"
-"will proceed to the next step. If you cannot see the message, it simply\n"
-"means that the configuration was wrong and the test will automatically end\n"
-"after 10 seconds, restoring the screen. Refer then to the video\n"
-"configuration section of the user guide for more information on how to\n"
-"configure your display."
-msgstr ""
-
-#: ../../help.pm_.c:246
-msgid ""
-"Finally, you will be asked whether you want to see the graphical interface\n"
-"at boot. Note this question will be asked even if you chose not to test the\n"
-"configuration. Obviously, you want to answer \"No\" if your machine is to\n"
-"act as a server, or if you were not successful in getting the display\n"
-"configured."
-msgstr ""
-
-#: ../../help.pm_.c:253
-msgid ""
-"The Mandrake Linux CD-ROM has a built-in rescue mode. You can access it by\n"
-"booting from the CD-ROM, press the >>F1<< key at boot and type >>rescue<<\n"
-"at the prompt. But in case your computer cannot boot from the CD-ROM, you\n"
-"should come back to this step for help in at least two situations:\n"
-"\n"
-" * when installing the bootloader, DrakX will rewrite the boot sector (\n"
-"MBR) of your main disk (unless you are using another boot manager), to\n"
-"allow you to start up with either Windows or GNU/Linux (assuming you have\n"
-"Windows in your system). If you need to reinstall Windows, the Microsoft\n"
-"install process will rewrite the boot sector, and then you will not be able\n"
-"to start GNU/Linux!\n"
-"\n"
-" * if a problem arises and you cannot start up GNU/Linux from the hard\n"
-"disk, this floppy disk will be the only means of starting up GNU/Linux. It\n"
-"contains a fair number of system tools for restoring a system, which has\n"
-"crashed due to a power failure, an unfortunate typing error, a typo in a\n"
-"password, or any other reason.\n"
-"\n"
-"If you say \"Yes\", you will be asked to enter a disk inside the drive. The\n"
-"floppy disk you will insert must be empty or contain data which you do not\n"
-"need. You will not have to format it since DrakX will rewrite the whole\n"
-"disk."
-msgstr ""
-
-#: ../../help.pm_.c:277
-msgid ""
-"You now need to choose where you want to install the Mandrake Linux\n"
-"operating system on your hard drive. If your hard drive is empty or if an\n"
-"existing operating system is using all the available space, you will need\n"
-"to partition it. Basically, partitioning a hard drive consists of logically\n"
-"dividing it to create space to install your new Mandrake Linux system.\n"
-"\n"
-"Because the partitioning process' effects are usually irreversible,\n"
-"partitioning can be intimidating and stressful if you are an inexperienced\n"
-"user. Fortunately, there is a wizard which simplifies this process. Before\n"
-"beginning, please consult the manual and take your time.\n"
-"\n"
-"If you are running the installation in Expert mode, you will enter\n"
-"DiskDrake, the Mandrake Linux partitioning tool, which allows you to\n"
-"fine-tune your partitions. See the DiskDrake section in the ``Starter\n"
-"Guide''. From the installation interface, you can use the wizards as\n"
-"described here by clicking the dialog's \"Wizard\" button.\n"
-"\n"
-"If partitions have already been defined, either from a previous\n"
-"installation or from another partitioning tool, simply select those to\n"
-"install your Linux system.\n"
-"\n"
-"If partitions are not defined, you will need to create them using the\n"
-"wizard. Depending on your hard drive configuration, several options are\n"
-"available.\n"
-"\n"
-" * \"Use free space\": this option will simply lead to an automatic\n"
-"partitioning of your blank drive(s). You will not be prompted further;\n"
-"\n"
-" * \"Use existing partition\": the wizard has detected one or more existing\n"
-"Linux partitions on your hard drive. If you want to use them, choose this\n"
-"option. You will then be asked to choose the mount points associated to\n"
-"each of the partitions. The legacy mount points are selected by default,\n"
-"and you should generally keep them.\n"
-"\n"
-" * \"Use the free space on the Windows partition\": if Microsoft Windows is\n"
-"installed on your hard drive and takes all the space available on it, you\n"
-"have to create free space for Linux data. To do so, you can delete your\n"
-"Microsoft Windows partition and data (see ``Erase entire disk'' or ``Expert\n"
-"mode'' solutions) or resize your Microsoft Windows partition. Resizing can\n"
-"be performed without the loss of any data, provided you previously\n"
-"defragment the Windows partition. Backing up your data won't hurt either..\n"
-"This solution is recommended if you want to use both Mandrake Linux and\n"
-"Microsoft Windows on the same computer.\n"
-"\n"
-" Before choosing this option, please understand that after this\n"
-"procedure, the size of your Microsoft Windows partition will be smaller\n"
-"than at the present time. You will have less free space under Microsoft\n"
-"Windows to store your data or to install new software;\n"
-"\n"
-" * \"Erase entire disk\": if you want to delete all data and all partitions\n"
-"present on your hard drive and replace them with your new Mandrake Linux\n"
-"system, choose this option. Be careful with this solution because you will\n"
-"not be able to revert your choice after you confirm;\n"
-"\n"
-" !! If you choose this option, all data on your disk will be lost. !!\n"
-"\n"
-" * \"Remove Windows\": this will simply erase everything on the drive and\n"
-"begin fresh, partitioning everything from scratch. All data on your disk\n"
-"will be lost;\n"
-"\n"
-" !! If you choose this option, all data on your disk will be lost. !!\n"
-"\n"
-" * \"Expert mode\": choose this option if you want to manually partition\n"
-"your hard drive. Be careful -- it is a powerful but dangerous option. You\n"
-"can very easily lose all your data. Hence, do not choose this unless you\n"
-"know what you are doing. To know how to use the DiskDrake utility used\n"
-"here, refer to the section ``Managing Your Partitions'' of the ````Starter\n"
-"Guide''''"
-msgstr ""
-
-#: ../../help.pm_.c:347
-msgid ""
-"There you are. Installation is now completed and your GNU/Linux system is\n"
-"ready to use. Just click \"OK\" to reboot the system. You can start\n"
-"GNU/Linux or Windows, whichever you prefer (if you are dual-booting), as\n"
-"soon as the computer has booted up again.\n"
-"\n"
-"The \"Advanced\" button (in Expert mode only) shows two more buttons to:\n"
-"\n"
-" * \"generate auto-install floppy\": to create an installation floppy disk\n"
-"which will automatically perform a whole installation without the help of\n"
-"an operator, similar to the installation you just configured.\n"
-"\n"
-" Note that two different options are available after clicking the button:\n"
-"\n"
-" * \"Replay\". This is a partially automated installation as the\n"
-"partitioning step (and only this one) remains interactive;\n"
-"\n"
-" * \"Automated\". Fully automated installation: the hard disk is\n"
-"completely rewritten, all data is lost.\n"
-"\n"
-" This feature is very handy when installing a great number of similar\n"
-"machines. See the Auto install section on our web site;\n"
-"\n"
-" * \"Save packages selection\"(*): saves the package selection as done\n"
-"previously. Then, when doing another installation, insert the floppy inside\n"
-"the drive and run the installation going to the help screen by pressing on\n"
-"the [F1] key, and by issuing >>linux defcfg=\"floppy\"<<.\n"
-"\n"
-"(*) You need a FAT-formatted floppy (to create one under GNU/Linux, type\n"
-"\"mformat a:\")"
-msgstr ""
-
-#: ../../help.pm_.c:378
-msgid ""
-"Any partitions that have been newly defined must be formatted for use\n"
-"(formatting means creating a filesystem on it).\n"
-"\n"
-"At this time, you may wish to reformat some already existing partitions to\n"
-"erase any data they contain. If you wish to do that, please select those\n"
-"partitions as well.\n"
-"\n"
-"Please note that it is not necessary to reformat all pre-existing\n"
-"partitions. You must reformat the partitions containing the operating\n"
-"system (such as \"/\", \"/usr\" or \"/var\") but you do not have to\n"
-"reformat partitions containing data that you wish to keep (typically\n"
-"\"/home\").\n"
-"\n"
-"Please be careful when selecting partitions. After formatting, all data on\n"
-"the selected partitions will be deleted and you will not be able to recover\n"
-"it.\n"
-"\n"
-"Click on \"OK\" when you are ready to format partitions.\n"
-"\n"
-"Click on \"Cancel\" if you want to choose another partition for your new\n"
-"Mandrake Linux operating system installation.\n"
-"\n"
-"Click on \"Advanced\" if you wish to select partitions that will be checked\n"
-"for bad blocks on the disk."
-msgstr ""
-
-#: ../../help.pm_.c:404
-#, fuzzy
-msgid ""
-"Your new Mandrake Linux operating system is currently being installed.\n"
-"Depending on the number of packages you will be installing and the speed of\n"
-"your computer, this operation could take from a few minutes to a\n"
-"significant amount of time.\n"
-"\n"
-"Please be patient."
-msgstr "Gortozit mar plij"
-
-#: ../../help.pm_.c:412
-msgid ""
-"At the time you are installing Mandrake Linux, it is likely that some\n"
-"packages have been updated since the initial release. Some bugs may have\n"
-"been fixed, and security issues solved. To allow you to benefit from these\n"
-"updates, you are now able to download them from the Internet. Choose\n"
-"\"Yes\" if you have a working Internet connection, or \"No\" if you prefer\n"
-"to install updated packages later.\n"
-"\n"
-"Choosing \"Yes\" displays a list of places from which updates can be\n"
-"retrieved. Choose the one nearest you. Then a package-selection tree\n"
-"appears: review the selection, and press \"Install\" to retrieve and\n"
-"install the selected package(s), or \"Cancel\" to abort."
-msgstr ""
-
-#: ../../help.pm_.c:425
-msgid ""
-"Before continuing, you should read carefully the terms of the license. It\n"
-"covers the whole Mandrake Linux distribution, and if you do not agree with\n"
-"all the terms included in it, click on the \"Refuse\" button which will\n"
-"immediately terminate the installation. To continue with the installation,\n"
-"click on the \"Accept\" button."
-msgstr ""
-
-#: ../../help.pm_.c:432
-msgid ""
-"At this point, it is time to choose the security level desired for the\n"
-"machine. As a rule of thumb, the more exposed the machine is, and the more\n"
-"the data stored in it is crucial, the higher the security level should be.\n"
-"However, a higher security level is generally obtained at the expense of\n"
-"ease of use. Refer to the \"msec\" chapter of the ``Reference Manual'' to\n"
-"get more information about the meaning of these levels.\n"
-"\n"
-"If you do not know what to choose, keep the default option."
-msgstr ""
-
-#: ../../help.pm_.c:442
-msgid ""
-"At this point, you need to choose which partition(s) will be used for the\n"
-"installation of your Mandrake Linux system. If partitions have already been\n"
-"defined, either from a previous installation of GNU/Linux or from another\n"
-"partitioning tool, you can use existing partitions. Otherwise, hard drive\n"
-"partitions must be defined.\n"
-"\n"
-"To create partitions, you must first select a hard drive. You can select\n"
-"the disk for partitioning by clicking on ``hda'' for the first IDE drive,\n"
-"``hdb'' for the second, ``sda'' for the first SCSI drive and so on.\n"
-"\n"
-"To partition the selected hard drive, you can use these options:\n"
-"\n"
-" * \"Clear all\": this option deletes all partitions on the selected hard\n"
-"drive;\n"
-"\n"
-" * \"Auto allocate\": this option enables to automatically create ext3 and\n"
-"swap partitions on your hard drive's free space;\n"
-"\n"
-"\"More\": gives access to additional features:\n"
-"\n"
-" * \"Save partition table\": saves the partition table to a floppy. Useful\n"
-"for later partition-table recovery, if necessary. It is strongly\n"
-"recommended to perform this step;\n"
-"\n"
-" * \"Restore partition table\": allows to restore a previously saved\n"
-"partition table from a floppy disk;\n"
-"\n"
-" * \"Rescue partition table\": if your partition table is damaged, you can\n"
-"try to recover it using this option. Please be careful and remember that it\n"
-"can fail;\n"
-"\n"
-" * \"Reload partition table\": discards all changes and loads your initial\n"
-"partition table;\n"
-"\n"
-" * \"Removable media automounting\": unchecking this option will force\n"
-"users to manually mount and unmount removable medias such as floppies and\n"
-"CD-ROMs.\n"
-"\n"
-" * \"Wizard\": use this option if you wish to use a wizard to partition\n"
-"your hard drive. This is recommended if you do not have a good knowledge of\n"
-"partitioning;\n"
-"\n"
-" * \"Undo\": use this option to cancel your changes;\n"
-"\n"
-" * \"Toggle to normal/expert mode\": allows additional actions on\n"
-"partitions (type, options, format) and gives more information;\n"
-"\n"
-" * \"Done\": when you are finished partitioning your hard drive, this will\n"
-"save your changes back to disk.\n"
-"\n"
-"Note: you can reach any option using the keyboard. Navigate through the\n"
-"partitions using [Tab] and [Up/Down] arrows.\n"
-"\n"
-"When a partition is selected, you can use:\n"
-"\n"
-" * Ctrl-c to create a new partition (when an empty partition is selected);\n"
-"\n"
-" * Ctrl-d to delete a partition;\n"
-"\n"
-" * Ctrl-m to set the mount point.\n"
-"\n"
-"To get information about the different filesystem types available, please\n"
-"read the ext2FS chapter from the ``Reference Manual''.\n"
-"\n"
-"If you are installing on a PPC machine, you will want to create a small HFS\n"
-"``bootstrap'' partition of at least 1MB, which will be used by the yaboot\n"
-"bootloader. If you opt to make the partition a bit larger, say 50MB, you\n"
-"may find it a useful place to store a spare kernel and ramdisk images for\n"
-"emergency boot situations."
-msgstr ""
-
-#: ../../help.pm_.c:513
-msgid ""
-"More than one Microsoft partition has been detected on your hard drive.\n"
-"Please choose the one you want to resize in order to install your new\n"
-"Mandrake Linux operating system.\n"
-"\n"
-"Each partition is listed as follows: \"Linux name\", \"Windows name\"\n"
-"\"Capacity\".\n"
-"\n"
-"\"Linux name\" is structured: \"hard drive type\", \"hard drive number\",\n"
-"\"partition number\" (for example, \"hda1\").\n"
-"\n"
-"\"Hard drive type\" is \"hd\" if your hard dive is an IDE hard drive and\n"
-"\"sd\" if it is a SCSI hard drive.\n"
-"\n"
-"\"Hard drive number\" is always a letter after \"hd\" or \"sd\". With IDE\n"
-"hard drives:\n"
-"\n"
-" * \"a\" means \"master hard drive on the primary IDE controller\";\n"
-"\n"
-" * \"b\" means \"slave hard drive on the primary IDE controller\";\n"
-"\n"
-" * \"c\" means \"master hard drive on the secondary IDE controller\";\n"
-"\n"
-" * \"d\" means \"slave hard drive on the secondary IDE controller\".\n"
-"\n"
-"With SCSI hard drives, an \"a\" means \"lowest SCSI ID\", a \"b\" means\n"
-"\"second lowest SCSI ID\", etc.\n"
-"\n"
-"\"Windows name\" is the letter of your hard drive under Windows (the first\n"
-"disk or partition is called \"C:\")."
-msgstr ""
-
-#: ../../help.pm_.c:544
-#, fuzzy
-msgid "Please be patient. This operation can take several minutes."
-msgstr "Gortozit mar plij."
-
-#: ../../help.pm_.c:547
-msgid ""
-"DrakX now needs to know if you want to perform a default (\"Recommended\")\n"
-"installation or if you want to have greater control (\"Expert\") over your\n"
-"installation. You can also choose to do a new installation or upgrade your\n"
-"existing Mandrake Linux system:\n"
-"\n"
-" * \"Install\": completely wipes out the old system. However, depending on\n"
-"what is currently installed on your machine, you may be able to keep some\n"
-"old partitions (Linux or otherwise) unchanged;\n"
-"\n"
-" * \"Upgrade\": this installation class allows to simply update the\n"
-"packages currently installed on your Mandrake Linux system. It keeps your\n"
-"hard drives' current partitions as well as user configurations. All other\n"
-"configuration steps remain available, similar to a normal installation;\n"
-"\n"
-" * \"Upgrade Packages Only\": this new installation class allows you to\n"
-"upgrade an existing Mandrake Linux system while keeping all system\n"
-"configurations unchanged. Adding new packages to the current installation\n"
-"is also possible.\n"
-"\n"
-"Upgrades should work fine on Mandrake Linux systems using version \"8.1\"\n"
-"or later.\n"
-"\n"
-"Depending on your GNU/Linux knowledge, select one of the following choices:\n"
-"\n"
-" * Recommended: choose this if you have never installed a GNU/Linux\n"
-"operating system. The installation will be very easy and you will only be\n"
-"asked a few questions;\n"
-"\n"
-" * Expert: if you have a good GNU/Linux understanding, you may wish to\n"
-"perform a highly customized installation. Some of the decisions you will\n"
-"have to make may be difficult if you do not have good GNU/Linux knowledge,\n"
-"so it is not recommended that those without a fair amount of experience\n"
-"select this installation class."
-msgstr ""
-
-#: ../../help.pm_.c:582
-msgid ""
-"Normally, DrakX selects the right keyboard for you (depending on the\n"
-"language you have chosen). However, you might not have a keyboard that\n"
-"corresponds exactly to your language: for example, if you are an English\n"
-"speaking Swiss person, you may still want your keyboard to be a Swiss\n"
-"keyboard. Or if you speak English but are located in Quebec, you may find\n"
-"yourself in the same situation. In both cases, you will have to go back to\n"
-"this installation step and select an appropriate keyboard from the list.\n"
-"\n"
-"Click on the \"More\" button to be presented with the complete list of\n"
-"supported keyboards.\n"
-"\n"
-"If you choose a keyboard layout based on a non-latin alphabet, you will be\n"
-"asked in the next dialog to choose the key binding that will switch the\n"
-"keyboard layout between the latin and non-latin layouts."
-msgstr ""
-
-#: ../../help.pm_.c:598
-msgid ""
-"The first step is to choose your preferred language.\n"
-"\n"
-"Please choose your preferred language for installation and system usage.\n"
-"\n"
-"Clicking on the \"Advanced\" button will allow you to select other\n"
-"languages to be installed on your workstation. Selecting other languages\n"
-"will install the language-specific files for system documentation and\n"
-"applications. For example, if you host users from Spain on your machine,\n"
-"select English as the main language in the tree view and in the Advanced\n"
-"section, click on the box corresponding to \"Spanish|Spain\".\n"
-"\n"
-"Note that multiple languages may be installed. Once you have selected any\n"
-"additional locales, click the \"OK\" button to continue.\n"
-"\n"
-"To switch from one language to the other, you can launch the\n"
-"\"/usr/sbin/localedrake\" command as \"root\" to change the whole system\n"
-"language, or as a simple user to only change that user's default language."
-msgstr ""
-
-#: ../../help.pm_.c:617
-msgid ""
-"DrakX generally detects the number of buttons your mouse possesses. If not,\n"
-"it assumes you have a two-button mouse and will set it up for third-button\n"
-"emulation. DrakX will automatically know whether it is a PS/2, serial or\n"
-"USB mouse.\n"
-"\n"
-"If you wish to specify a different type of mouse, select the appropriate\n"
-"type from the provided list.\n"
-"\n"
-"If you choose a mouse other than the default, a test screen will be\n"
-"displayed. Use the buttons and wheel to verify that the settings are\n"
-"correct. If the mouse is not working well, press the space bar or [Return]\n"
-"to \"Cancel\" and choose again.\n"
-"\n"
-"Sometimes, wheel mouses are not automatically detected. You will need to\n"
-"manually select it in the list. Be sure to select the one corresponding to\n"
-"the correct port it is attached to. After you have pressed the \"OK\"\n"
-"button, a mouse image will be displayed. You then need to move the wheel of\n"
-"your mouse to activate it correctly. Then test that all buttons and\n"
-"movements are correct."
-msgstr ""
-
-#: ../../help.pm_.c:638
-#, fuzzy
-msgid ""
-"Please select the correct port. For example, the \"COM1\" port under\n"
-"Windows is named \"ttyS0\" under GNU/Linux."
-msgstr ""
-"Diuzit ar porzh a zere mar plij. Da skouer, porzh COM1 dindan MS Windows\n"
-"a vez anvet ttyS0 gant Linux."
-
-#: ../../help.pm_.c:642
-msgid ""
-"This is the most crucial decision in regards with the security of your\n"
-"GNU/Linux system: you have to enter the \"root\" password. \"Root\" is the\n"
-"system administrator and is the only one authorized to make updates, add\n"
-"users, change the overall system configuration, and so on. In short,\n"
-"\"root\" can do everything! That is why you must choose a password that is\n"
-"difficult to guess -- DrakX will tell you if it is too easy. As you can\n"
-"see, you can choose not to enter a password, but we strongly advise you\n"
-"against this if only for one reason: do not think that because you booted\n"
-"GNU/Linux that your other operating systems are safe from mistakes. Since\n"
-"\"root\" can overcome all limitations and unintentionally erase all data on\n"
-"partitions by carelessly accessing the partitions themselves, it is\n"
-"important for it to be difficult to become \"root\".\n"
-"\n"
-"The password should be a mixture of alphanumeric characters and at least 8\n"
-"characters long. Never write down the \"root\" password -- it makes it too\n"
-"easy to compromise a system.\n"
-"\n"
-"However, please do not make the password too long or complicated because\n"
-"you must be able to remember it without too much effort.\n"
-"\n"
-"The password will not be displayed on screen as you type it in. Hence, you\n"
-"will have to type the password twice to reduce the chance of a typing\n"
-"error. If you do happen to make the same typing error twice, this\n"
-"``incorrect'' password will have to be used the first time you connect.\n"
-"\n"
-"In Expert mode, you will be asked if you will be connecting to an\n"
-"authentication server, like NIS or LDAP.\n"
-"\n"
-"If your network uses either LDAP, NIS, or PDC Windows Domain authentication\n"
-"services, select the appropriate one as \"authentication\". If you have no\n"
-"clue, ask your network administrator.\n"
-"\n"
-"If your computer is not connected to any administrated network, you will\n"
-"want to choose \"Local files\" for authentication."
-msgstr ""
-
-#: ../../help.pm_.c:678
-msgid ""
-"LILO and grub are GNU/Linux bootloaders. Normally, this stage is totally\n"
-"automated. In fact, DrakX analyzes the disk boot sector and acts\n"
-"accordingly, depending on what it finds there:\n"
-"\n"
-" * if a Windows boot sector is found, it will replace it with a grub/LILO\n"
-"boot sector. Hence, you will be able to load either GNU/Linux or another\n"
-"OS;\n"
-"\n"
-" * if a grub or LILO boot sector is found, it will replace it with a new\n"
-"one.\n"
-"\n"
-"if in doubt, DrakX will display a dialog with various options.\n"
-"\n"
-" * \"Bootloader to use\": you have three choices:\n"
-"\n"
-" * \"GRUB\": if you prefer grub (text menu);\n"
-"\n"
-" * \"LILO with graphical menu\": if you prefer LILO with its graphical\n"
-"interface;\n"
-"\n"
-" * \"LILO with text menu\": if you prefer LILO with its text menu\n"
-"interface.\n"
-"\n"
-" * \"Boot device\": in most cases, you will not change the default\n"
-"(\"/dev/hda\"), but if you prefer, the bootloader can be installed on the\n"
-"second hard drive (\"/dev/hdb\"), or even on a floppy disk (\"/dev/fd0\");\n"
-"\n"
-" * \"Delay before booting the default image\": when rebooting the computer,\n"
-"this is the delay granted to the user to choose -- in the bootloader menu,\n"
-"another boot entry than the default one.\n"
-"\n"
-"!! Beware that if you choose not to install a bootloader (by selecting\n"
-"\"Cancel\" here), you must ensure that you have a way to boot your Mandrake\n"
-"Linux system! Also, be sure you know what you do before changing any of the\n"
-"options. !!\n"
-"\n"
-"Clicking the \"Advanced\" button in this dialog will offer many advanced\n"
-"options, which are reserved for the expert user."
-msgstr ""
-
-#: ../../help.pm_.c:718
-#, fuzzy
-msgid ""
-"After you have configured the general bootloader parameters, the list of\n"
-"boot options which will be available at boot time will be displayed.\n"
-"\n"
-"If there is another operating system installed on your machine, it will\n"
-"automatically be added to the boot menu. Here, you can choose to fine-tune\n"
-"the existing options. Select an entry and click \"Modify\" to modify or\n"
-"remove it. \"Add\" creates a new entry. and \"Done\" goes on to the next\n"
-"installation step.\n"
-"\n"
-"You may also not want to give access to these other operating systems to\n"
-"anyone. In which case, you can delete the corresponding entries. But then,\n"
-"you will need a boot disk in order to boot those other operating systems!"
-msgstr ""
-"LILO (the LInux LOader) ha Grub a zo kargerien loc'hañ : barrek int da "
-"loc'hañ\n"
-"pe Linux pe forzh pe reizhiad korvoiñ all bezañt war ho urzhiataer.\n"
-"Peurvuiañ, ar reizhiadoù korvoiñ all-se a vez dinoet ha staliet reizh.\n"
-"Ma n'eo ket kont evel-hen, gallout a rit ouzhpennañ un enmont gant an dorn\n"
-"er skramm-mañ. Taolit pled da zibab an arventennoù reizh.\n"
-"\n"
-"\n"
-"Gallout a rafec'h ivez mennout na lakaat hegerz hini ebet eus ar reizhiadoù\n"
-"korvoiñ-se, neuze n'hoc'h eus ken nemet dilemel an enmontoù a zegouezh. "
-"Hogen\n"
-"neuze e vo ret deoc'h kaout ur bladennig loc'hañ evit loc'hañ anezho."
-
-#: ../../help.pm_.c:732
-#, fuzzy
-msgid ""
-"You must indicate where you wish to place the information required to boot\n"
-"GNU/Linux.\n"
-"\n"
-"Unless you know exactly what you are doing, choose \"First sector of drive\n"
-"(MBR)\"."
-msgstr ""
-"Ret eo deoc'h menegiñ pelec'h e mennit\n"
-"lec'hiañ an titouroù ret evit loc'hañ Linux.\n"
-"\n"
-"\n"
-"Nemet ma ouifec'h resis ar pezh a rit, dibabit \"Rann gentañ\n"
-"ar bladenn (MBR)\"."
-
-#: ../../help.pm_.c:739
-msgid ""
-"Here, we select a printing system for your computer. Other OSes may offer\n"
-"you one, but Mandrake Linux offers two.\n"
-"\n"
-" * \"pdq\" -- which means ``print, don't queue'', is the choice if you have\n"
-"a direct connection to your printer and you want to be able to panic out of\n"
-"printer jams, and you do not have networked printers. It will handle only\n"
-"very simple network cases and is somewhat slow for networks. Pick \"pdq\"\n"
-"if this is your first voyage to GNU/Linux. You can change your choices\n"
-"after installation by running PrinterDrake from the Mandrake Control Center\n"
-"and clicking the expert button.\n"
-"\n"
-" * \"CUPS\" -- ``Common Unix Printing System'', is excellent at printing to\n"
-"your local printer and also halfway-around the planet. It is simple and can\n"
-"act as a server or a client for the ancient \"lpd\" printing system. Hence,\n"
-"it is compatible with the systems that went before. It can do many tricks,\n"
-"but the basic setup is almost as easy as \"pdq\". If you need this to\n"
-"emulate an \"lpd\" server, you must turn on the \"cups-lpd\" daemon. It has\n"
-"graphical front-ends for printing or choosing printer options."
-msgstr ""
-
-#: ../../help.pm_.c:759
-msgid ""
-"DrakX now detects any IDE device present in your computer. It will also\n"
-"scan for one or more PCI SCSI cards on your system. If a SCSI card is\n"
-"found, DrakX will automatically install the appropriate driver.\n"
-"\n"
-"Because hardware detection does not always detect a piece of hardware,\n"
-"DrakX will ask you to confirm if a PCI SCSI card is present. Click \"Yes\"\n"
-"if you know that there is a SCSI card installed in your machine. You will\n"
-"be presented with a list of SCSI cards to choose from. Click \"No\" if you\n"
-"have no SCSI hardware. If you are unsure, you can check the list of\n"
-"hardware detected in your machine by selecting \"See hardware info\" and\n"
-"clicking \"OK\". Examine the hardware list and then click on the \"OK\"\n"
-"button to return to the SCSI interface question.\n"
-"\n"
-"If you have to manually specify your adapter, DrakX will ask if you want to\n"
-"specify options for it. You should allow DrakX to probe the hardware for\n"
-"the card-specific options which the hardware needs to initialize. This\n"
-"usually works well.\n"
-"\n"
-"If DrakX is not able to probe for the options which need to be passed, you\n"
-"will need to manually provide options to the driver."
-msgstr ""
-
-#: ../../help.pm_.c:781
-msgid ""
-"You can add additional entries for yaboot, either for other operating\n"
-"systems, alternate kernels, or for an emergency boot image.\n"
-"\n"
-"For other OSes, the entry consists only of a label and the \"root\"\n"
-"partition.\n"
-"\n"
-"For Linux, there are a few possible options:\n"
-"\n"
-" * Label: this is simply the name you will have to type at the yaboot\n"
-"prompt to select this boot option;\n"
-"\n"
-" * Image: this would be the name of the kernel to boot. Typically, vmlinux\n"
-"or a variation of vmlinux with an extension;\n"
-"\n"
-" * Root: the \"root\" device or ``/'' for your Linux installation;\n"
-"\n"
-" * Append: on Apple hardware, the kernel append option is used quite often\n"
-"to assist in initializing video hardware, or to enable keyboard mouse\n"
-"button emulation for the often lacking 2nd and 3rd mouse buttons on a stock\n"
-"Apple mouse. The following are some examples:\n"
-"\n"
-" video=aty128fb:vmode:17,cmode:32,mclk:71 adb_buttons=103,111\n"
-"hda=autotune\n"
-"\n"
-" video=atyfb:vmode:12,cmode:24 adb_buttons=103,111\n"
-"\n"
-" * Initrd: this option can be used either to load initial modules, before\n"
-"the boot device is available, or to load a ramdisk image for an emergency\n"
-"boot situation;\n"
-"\n"
-" * Initrd-size: the default ramdisk size is generally 4,096 bytes. If you\n"
-"need to allocate a large ramdisk, this option can be used;\n"
-"\n"
-" * Read-write: normally the \"root\" partition is initially brought up in\n"
-"read-only, to allow a filesystem check before the system becomes ``live''.\n"
-"Here, you can override this option;\n"
-"\n"
-" * NoVideo: should the Apple video hardware prove to be exceptionally\n"
-"problematic, you can select this option to boot in ``novideo'' mode, with\n"
-"native frame buffer support;\n"
-"\n"
-" * Default: selects this entry as being the default Linux selection,\n"
-"selectable by just pressing ENTER at the yaboot prompt. This entry will\n"
-"also be highlighted with a ``*'', if you press [Tab] to see the boot\n"
-"selections."
-msgstr ""
-
-#: ../../help.pm_.c:828
-msgid ""
-"Yaboot is a bootloader for NewWorld MacIntosh hardware. It is able to boot\n"
-"either GNU/Linux, MacOS or MacOSX if present on your computer. Normally,\n"
-"these other operating systems are correctly detected and installed. If this\n"
-"is not the case, you can add an entry by hand in this screen. Be careful to\n"
-"choose the correct parameters.\n"
-"\n"
-"Yaboot's main options are:\n"
-"\n"
-" * Init Message: a simple text message displayed before the boot prompt;\n"
-"\n"
-" * Boot Device: indicates where you want to place the information required\n"
-"to boot to GNU/Linux. Generally, you set up a bootstrap partition earlier\n"
-"to hold this information;\n"
-"\n"
-" * Open Firmware Delay: unlike LILO, there are two delays available with\n"
-"yaboot. The first delay is measured in seconds and at this point, you can\n"
-"choose between CD, OF boot, MacOS or Linux;\n"
-"\n"
-" * Kernel Boot Timeout: this timeout is similar to the LILO boot delay.\n"
-"After selecting Linux, you will have this delay in 0.1 second before your\n"
-"default kernel description is selected;\n"
-"\n"
-" * Enable CD Boot?: checking this option allows you to choose ``C'' for CD\n"
-"at the first boot prompt;\n"
-"\n"
-" * Enable OF Boot?: checking this option allows you to choose ``N'' for\n"
-"Open Firmware at the first boot prompt;\n"
-"\n"
-" * Default OS: you can select which OS will boot by default when the Open\n"
-"Firmware Delay expires."
-msgstr ""
-
-#: ../../help.pm_.c:860
-msgid ""
-"Here are presented various parameters concerning your machine. Depending on\n"
-"your installed hardware, you may (or may not), see the following entries:\n"
-"\n"
-" * \"Mouse\": check the current mouse configuration and click on the button\n"
-"to change it if necessary;\n"
-"\n"
-" * \"Keyboard\": check the current keyboard map configuration and click on\n"
-"the button to change that if necessary;\n"
-"\n"
-" * \"Timezone\": DrakX, by default, guesses your time zone from the\n"
-"language you have chosen. But here again, as for the choice of a keyboard,\n"
-"you may not be in the country for which the chosen language should\n"
-"correspond. Hence, you may need to click on the \"Timezone\" button in\n"
-"order to configure the clock according to the time zone you are in;\n"
-"\n"
-" * \"Printer\": clicking on the \"No Printer\" button will open the printer\n"
-"configuration wizard. Consult the correpsonding chapter of the ``Starter\n"
-"Guide'' for more information on how to setup a new printer. The interface\n"
-"presented there is similar to the one used at installation time;\n"
-"\n"
-" * \"Sound card\": if a sound card is detected on your system, it will be\n"
-"displayed here. No modification possible at installation time;\n"
-"\n"
-" * \"TV card\": if a TV card is detected on your system, it will be\n"
-"displayed here. No modification possible at installation time;\n"
-"\n"
-" * \"ISDN card\": if an ISDN card is detected on your system, it will be\n"
-"displayed here. You can click on the button to change the parameters\n"
-"associated to it."
-msgstr ""
-
-#: ../../help.pm_.c:891
-msgid ""
-"Choose the hard drive you want to erase in order to install your new\n"
-"Mandrake Linux partition. Be careful, all data present on it will be lost\n"
-"and will not be recoverable!"
-msgstr ""
-
-#: ../../help.pm_.c:896
-msgid ""
-"Click on \"OK\" if you want to delete all data and partitions present on\n"
-"this hard drive. Be careful, after clicking on \"OK\", you will not be able\n"
-"to recover any data and partitions present on this hard drive, including\n"
-"any Windows data.\n"
-"\n"
-"Click on \"Cancel\" to stop this operation without losing any data and\n"
-"partitions present on this hard drive."
-msgstr ""
-
-#: ../../install2.pm_.c:111
-#, c-format
-msgid ""
-"Can't access kernel modules corresponding to your kernel (file %s is "
-"missing), this generally means your boot floppy in not in sync with the "
-"Installation medium (please create a newer boot floppy)"
-msgstr ""
-
-#: ../../install2.pm_.c:167
-#, c-format
-msgid "You must also format %s"
-msgstr ""
-
-#: ../../install_any.pm_.c:423
-#, c-format
-msgid ""
-"You have selected the following server(s): %s\n"
-"\n"
-"\n"
-"These servers are activated by default. They don't have any known security\n"
-"issues, but some new could be found. In that case, you must make sure to "
-"upgrade\n"
-"as soon as possible.\n"
-"\n"
-"\n"
-"Do you really want to install these servers?\n"
-msgstr ""
-
-#: ../../install_any.pm_.c:441
-#, c-format
-msgid ""
-"The following packages will be removed to allow upgrading your system: %s\n"
-"\n"
-"\n"
-"Do you really want to remove these packages?\n"
-msgstr ""
-
-#: ../../install_any.pm_.c:471
-msgid "Can't use broadcast with no NIS domain"
-msgstr "N'hellañ ket implijout ar skignañ hep domani NIS"
-
-#: ../../install_any.pm_.c:870
-#, fuzzy, c-format
-msgid "Insert a FAT formatted floppy in drive %s"
-msgstr "Lakait ur bladennig el lenner %s"
-
-#: ../../install_any.pm_.c:874
-msgid "This floppy is not FAT formatted"
-msgstr ""
-
-#: ../../install_any.pm_.c:886
-msgid ""
-"To use this saved packages selection, boot installation with ``linux "
-"defcfg=floppy''"
-msgstr ""
-
-#: ../../install_any.pm_.c:909 ../../partition_table.pm_.c:767
-#, c-format
-msgid "Error reading file %s"
-msgstr "Fazi en ur lenn ar restr %s"
-
-#: ../../install_any.pm_.c:1031
-msgid ""
-"An error occurred - no valid devices were found on which to create new "
-"filesystems. Please check your hardware for the cause of this problem"
-msgstr ""
-"C'hoarvezet ez eus ur fazi - n'eus bet kavet trobarzhell reizh ebet a-benn "
-"krouiñ reizhiadoù restroù nevez warni. Gwiriit abeg ar gudenn-mañ en ho "
-"ardivinkaj mar plij "
-
-#: ../../install_interactive.pm_.c:23
-#, c-format
-msgid ""
-"Some hardware on your computer needs ``proprietary'' drivers to work.\n"
-"You can find some information about them at: %s"
-msgstr ""
-
-#: ../../install_interactive.pm_.c:58
-msgid ""
-"You must have a root partition.\n"
-"For this, create a partition (or click on an existing one).\n"
-"Then choose action ``Mount point'' and set it to `/'"
-msgstr ""
-"Ret eo deoc'h kaout ur parzhadur gwrizienn.\n"
-"Evit se, krouit ur parzhadur (pe glikit war unan a zo c'hoazh).\n"
-"Da c'houde dibabit an ober ``Poent marc'hañ'' ha lakait anezhañ da `/'"
-
-#: ../../install_interactive.pm_.c:63
-msgid "You must have a swap partition"
-msgstr "Ret eo deoc'h kaout ur parzhadur disloañ"
-
-#: ../../install_interactive.pm_.c:64
-msgid ""
-"You don't have a swap partition.\n"
-"\n"
-"Continue anyway?"
-msgstr ""
-"N'hoc'h eus ket a barzhadur disloañ\n"
-"\n"
-"Kenderc'hel evelato ?"
-
-#: ../../install_interactive.pm_.c:67 ../../install_steps.pm_.c:169
-#, fuzzy
-msgid "You must have a FAT partition mounted in /boot/efi"
-msgstr "Ret eo deoc'h kaout ur parzhadur disloañ"
-
-#: ../../install_interactive.pm_.c:92
-#, fuzzy
-msgid "Use free space"
-msgstr "Implij da saveteiñ"
-
-#: ../../install_interactive.pm_.c:94
-msgid "Not enough free space to allocate new partitions"
-msgstr ""
-
-#: ../../install_interactive.pm_.c:102
-#, fuzzy
-msgid "Use existing partitions"
-msgstr "O furmadiñ parzhadurioù"
-
-#: ../../install_interactive.pm_.c:104
-#, fuzzy
-msgid "There is no existing partition to use"
-msgstr "O klask assevel an daolenn barzhañ"
-
-#: ../../install_interactive.pm_.c:111
-#, fuzzy
-msgid "Use the Windows partition for loopback"
-msgstr "Implij da saveteiñ"
-
-#: ../../install_interactive.pm_.c:114
-#, fuzzy
-msgid "Which partition do you want to use for Linux4Win?"
-msgstr "Pe barzhadur a vennit implijout evit lakaat Linux4Win ?"
-
-#: ../../install_interactive.pm_.c:116
-msgid "Choose the sizes"
-msgstr "Dibabit ar mentoù"
-
-#: ../../install_interactive.pm_.c:117
-msgid "Root partition size in MB: "
-msgstr "Ment ar parzhadur gwrizienn e Mo : "
-
-#: ../../install_interactive.pm_.c:118
-msgid "Swap partition size in MB: "
-msgstr "Ment ar parzhadur disloañ e Mo : "
-
-#: ../../install_interactive.pm_.c:128
-msgid "Use the free space on the Windows partition"
-msgstr ""
-
-#: ../../install_interactive.pm_.c:131
-#, fuzzy
-msgid "Which partition do you want to resize?"
-msgstr "Pe seurt parzhadur a vennit ?"
-
-#: ../../install_interactive.pm_.c:133
-#, fuzzy
-msgid "Resizing Windows partition"
-msgstr "O jediñ bevennoù ar reizhiad restroù FAT"
-
-#: ../../install_interactive.pm_.c:136
-#, c-format
-msgid ""
-"The FAT resizer is unable to handle your partition, \n"
-"the following error occured: %s"
-msgstr ""
-
-#: ../../install_interactive.pm_.c:139
-msgid ""
-"Your Windows partition is too fragmented. Please reboot your computer under "
-"Windows, run the ``defrag'' utility, then restart the Mandrake Linux "
-"installation."
-msgstr ""
-
-#: ../../install_interactive.pm_.c:140
-#, fuzzy
-msgid ""
-"WARNING!\n"
-"\n"
-"DrakX will now resize your Windows partition. Be careful:\n"
-"this operation is dangerous. If you have not already done\n"
-"so, you should first exit the installation, run scandisk\n"
-"under Windows (and optionally run defrag), then restart the\n"
-"installation. You should also backup your data.\n"
-"When sure, press Ok."
-msgstr ""
-"HO EVEZH !\n"
-"\n"
-"Ezhomm en deus DrakX adventañ ho parzhadur Windows bremañ. Bezit war "
-"evezh :\n"
-"arvarus eo an obererezh-se. Ma n'hoc'h eus ket graet c'hoazh, gwelloc'h e\n"
-"vije deoc'h seveniñ da gentañ scandisk (ha diouzh ret seveniñ defrag) war "
-"ar\n"
-"parzhadur-se, ha gwareziñ ho roadoù. Pa vezit sur, gwaskit \"Mat eo\""
-
-#: ../../install_interactive.pm_.c:150
-#, fuzzy
-msgid "Which size do you want to keep for Windows on"
-msgstr "Da beseurt rann e mennit dilec'hiañ ?"
-
-#: ../../install_interactive.pm_.c:151
-#, c-format
-msgid "partition %s"
-msgstr "parzhadur %s"
-
-#: ../../install_interactive.pm_.c:158
-#, fuzzy, c-format
-msgid "FAT resizing failed: %s"
-msgstr "Adventañ ent emgefreek sac'het"
-
-#: ../../install_interactive.pm_.c:173
-msgid ""
-"There is no FAT partition to resize or to use as loopback (or not enough "
-"space left)"
-msgstr ""
-
-#: ../../install_interactive.pm_.c:179
-msgid "Erase entire disk"
-msgstr "Chetan an holl planedenn"
-
-#: ../../install_interactive.pm_.c:179
-msgid "Remove Windows(TM)"
-msgstr "Chetan Windows(TM)"
-
-#: ../../install_interactive.pm_.c:182
-msgid "You have more than one hard drive, which one do you install linux on?"
-msgstr ""
-
-#: ../../install_interactive.pm_.c:185
-#, fuzzy, c-format
-msgid "ALL existing partitions and their data will be lost on drive %s"
-msgstr "Goude adventañ ar parzhadur %s e vo kollet holl roadoù ar parzhadur-se"
-
-#: ../../install_interactive.pm_.c:193
-#, fuzzy
-msgid "Custom disk partitioning"
-msgstr "O furmadiñ parzhadurioù"
-
-#: ../../install_interactive.pm_.c:197
-msgid "Use fdisk"
-msgstr "Implijit fdisk"
-
-#: ../../install_interactive.pm_.c:200
-#, fuzzy, c-format
-msgid ""
-"You can now partition %s.\n"
-"When you are done, don't forget to save using `w'"
-msgstr ""
-"Gallout a rit bremañ parzhañ ho pladenn galet %s\n"
-"Pa 'z eo graet, na zisoñjit ket enrollañ dre implijout `w'"
-
-#: ../../install_interactive.pm_.c:229
-#, fuzzy
-msgid "You don't have enough free space on your Windows partition"
-msgstr "N'hoc'h eus parzhadur windows ebet !"
-
-#: ../../install_interactive.pm_.c:245
-#, fuzzy
-msgid "I can't find any room for installing"
-msgstr "N'hellan ouzpennañ parzhadur ebet ken"
-
-#: ../../install_interactive.pm_.c:248
-msgid "The DrakX Partitioning wizard found the following solutions:"
-msgstr ""
-
-#: ../../install_interactive.pm_.c:252
-#, fuzzy, c-format
-msgid "Partitioning failed: %s"
-msgstr "Seurt taolenn barzhañ : %s\n"
-
-#: ../../install_interactive.pm_.c:262
-msgid "Bringing up the network"
-msgstr "O lañsañ ar rouedad"
-
-#: ../../install_interactive.pm_.c:267
-msgid "Bringing down the network"
-msgstr "O tizenaouiñ ar rouedad"
-
-#: ../../install_steps.pm_.c:76
-msgid ""
-"An error occurred, but I don't know how to handle it nicely.\n"
-"Continue at your own risk."
-msgstr ""
-"Degouezhet ez eus ur fazi, hogen n'ouzon ket e verañ naet.\n"
-"Kendalc'hit war ho mar."
-
-#: ../../install_steps.pm_.c:211
-#, c-format
-msgid "Duplicate mount point %s"
-msgstr "Poent marc'hañ doubl %s"
-
-#: ../../install_steps.pm_.c:380
-msgid ""
-"Some important packages didn't get installed properly.\n"
-"Either your cdrom drive or your cdrom is defective.\n"
-"Check the cdrom on an installed computer using \"rpm -qpl Mandrake/RPMS/*.rpm"
-"\"\n"
-msgstr ""
-
-#: ../../install_steps.pm_.c:452
-#, c-format
-msgid "Welcome to %s"
-msgstr "Degemer e %s"
-
-#: ../../install_steps.pm_.c:542 ../../install_steps.pm_.c:781
-msgid "No floppy drive available"
-msgstr "Lenner pladennig hegerz ebet"
-
-#: ../../install_steps_auto_install.pm_.c:76
-#: ../../install_steps_stdio.pm_.c:22
-#, c-format
-msgid "Entering step `%s'\n"
-msgstr "O kregiñ gant al lankad `%s'\n"
-
-#: ../../install_steps_gtk.pm_.c:150
-msgid ""
-"Your system is low on resources. You may have some problem installing\n"
-"Mandrake Linux. If that occurs, you can try a text install instead. For "
-"this,\n"
-"press `F1' when booting on CDROM, then enter `text'."
-msgstr ""
-
-#: ../../install_steps_gtk.pm_.c:161 ../../install_steps_interactive.pm_.c:231
-msgid "Install Class"
-msgstr "Renkad staliañ"
-
-#: ../../install_steps_gtk.pm_.c:164
-#, fuzzy
-msgid "Please choose one of the following classes of installation:"
-msgstr "Dibabit unan eus ar renkadoù staliañ a-heul mar plij :"
-
-#: ../../install_steps_gtk.pm_.c:237 ../../install_steps_interactive.pm_.c:676
-msgid "Package Group Selection"
-msgstr "Diuzadenn strollad pakadoù"
-
-#: ../../install_steps_gtk.pm_.c:270 ../../install_steps_interactive.pm_.c:691
-msgid "Individual package selection"
-msgstr "Diuz pakadoù unan hag unan"
-
-#: ../../install_steps_gtk.pm_.c:293 ../../install_steps_interactive.pm_.c:614
-#, c-format
-msgid "Total size: %d / %d MB"
-msgstr "Ment hollek : %d / %d Mo"
-
-#: ../../install_steps_gtk.pm_.c:335
-msgid "Bad package"
-msgstr "Pakad siek"
-
-#: ../../install_steps_gtk.pm_.c:336
-#, c-format
-msgid "Name: %s\n"
-msgstr "Anv : %s\n"
-
-#: ../../install_steps_gtk.pm_.c:337
-#, c-format
-msgid "Version: %s\n"
-msgstr "Stumm : %s\n"
-
-#: ../../install_steps_gtk.pm_.c:338
-#, c-format
-msgid "Size: %d KB\n"
-msgstr "Ment : %d Ko\n"
-
-#: ../../install_steps_gtk.pm_.c:339
-#, c-format
-msgid "Importance: %s\n"
-msgstr "Talvoudegezh : %s\n"
-
-#: ../../install_steps_gtk.pm_.c:361
-#, fuzzy
-msgid ""
-"You can't select this package as there is not enough space left to install it"
-msgstr "N'hellit ket andiuz ar pakad-mañ. Staliet eo endo"
-
-#: ../../install_steps_gtk.pm_.c:366
-#, fuzzy
-msgid "The following packages are going to be installed"
-msgstr "Ar pakadoù a-heul a zo war-nes bezañ distaliet"
-
-#: ../../install_steps_gtk.pm_.c:367
-#, fuzzy
-msgid "The following packages are going to be removed"
-msgstr "Ar pakadoù a-heul a zo war-nes bezañ staliet/lamet"
-
-#: ../../install_steps_gtk.pm_.c:379
-msgid "You can't select/unselect this package"
-msgstr "N'hellit ket diuz/andiuz ar pakad-mañ"
-
-#: ../../install_steps_gtk.pm_.c:391
-msgid "This is a mandatory package, it can't be unselected"
-msgstr "Hemañ a zo ur pakad ret, n'hell ket bezañ andiuzet"
-
-#: ../../install_steps_gtk.pm_.c:393
-msgid "You can't unselect this package. It is already installed"
-msgstr "N'hellit ket andiuz ar pakad-mañ. Staliet eo endo"
-
-#: ../../install_steps_gtk.pm_.c:396
-msgid ""
-"This package must be upgraded.\n"
-"Are you sure you want to deselect it?"
-msgstr ""
-"Bremanaet e tle bezañ ar pabak-mañ\n"
-"Ha sur oc'h e mennit e ziuzañ ?"
-
-#: ../../install_steps_gtk.pm_.c:399
-msgid "You can't unselect this package. It must be upgraded"
-msgstr "N'hellit ket andiuz ar pakad-mañ. Ret eo dezhañ bezañ bremanaet"
-
-#: ../../install_steps_gtk.pm_.c:404
-msgid "Show automatically selected packages"
-msgstr ""
-
-#: ../../install_steps_gtk.pm_.c:405 ../../install_steps_interactive.pm_.c:255
-#: ../../install_steps_interactive.pm_.c:259
-#: ../../standalone/drakbackup_.c:4259
-msgid "Install"
-msgstr "Staliañ"
-
-#: ../../install_steps_gtk.pm_.c:408
-#, fuzzy
-msgid "Load/Save on floppy"
-msgstr "Enrollañ war bladennig"
-
-#: ../../install_steps_gtk.pm_.c:409
-#, fuzzy
-msgid "Updating package selection"
-msgstr "Diuz pakadoù unan hag unan"
-
-#: ../../install_steps_gtk.pm_.c:414
-#, fuzzy
-msgid "Minimal install"
-msgstr "Distaliañ"
-
-#: ../../install_steps_gtk.pm_.c:429 ../../install_steps_interactive.pm_.c:522
-msgid "Choose the packages you want to install"
-msgstr "Dibabit ar pakadoù a vennit staliañ"
-
-#: ../../install_steps_gtk.pm_.c:445 ../../install_steps_interactive.pm_.c:760
-msgid "Installing"
-msgstr "O staliañ"
-
-#: ../../install_steps_gtk.pm_.c:451
-msgid "Estimating"
-msgstr "O vrasjediñ"
-
-#: ../../install_steps_gtk.pm_.c:458
-msgid "Time remaining "
-msgstr "Amzer a chom"
-
-#: ../../install_steps_gtk.pm_.c:470
-msgid "Please wait, preparing installation..."
-msgstr "Gortozit mar plij, o prientiñ ar staliadur"
-
-#: ../../install_steps_gtk.pm_.c:554
-#, c-format
-msgid "%d packages"
-msgstr "%d pakad"
-
-#: ../../install_steps_gtk.pm_.c:559
-#, c-format
-msgid "Installing package %s"
-msgstr "O staliañ ar pakad %s"
-
-#: ../../install_steps_gtk.pm_.c:596 ../../install_steps_interactive.pm_.c:189
-#: ../../install_steps_interactive.pm_.c:784
-#: ../../standalone/drakautoinst_.c:202
-msgid "Accept"
-msgstr "Aotren"
-
-#: ../../install_steps_gtk.pm_.c:596 ../../install_steps_interactive.pm_.c:189
-#: ../../install_steps_interactive.pm_.c:784
-#, fuzzy
-msgid "Refuse"
-msgstr "Adventañ"
-
-#: ../../install_steps_gtk.pm_.c:597 ../../install_steps_interactive.pm_.c:785
-#, c-format
-msgid ""
-"Change your Cd-Rom!\n"
-"\n"
-"Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when "
-"done.\n"
-"If you don't have it, press Cancel to avoid installation from this Cd-Rom."
-msgstr ""
-"Kemmit ho Cd-Rom!\n"
-"\n"
-"Lakait el lenner ar Cd-Rom warnañ an diketenn \"%s\" mar plij ha gwaskit Mat "
-"eo da c'houde.\n"
-"Ma n'emañ ket ganeoc'h gwaskit Nullañ evit chom hep staliañ ar Cd-Rom-se."
-
-#: ../../install_steps_gtk.pm_.c:611 ../../install_steps_gtk.pm_.c:615
-#: ../../install_steps_interactive.pm_.c:797
-#: ../../install_steps_interactive.pm_.c:801
-msgid "Go on anyway?"
-msgstr "Kenderc'hel evelato ?"
-
-#: ../../install_steps_gtk.pm_.c:611 ../../install_steps_interactive.pm_.c:797
-msgid "There was an error ordering packages:"
-msgstr "Ur fazi a zo bet en ur rummañ pakadoù :"
-
-#: ../../install_steps_gtk.pm_.c:615 ../../install_steps_interactive.pm_.c:801
-msgid "There was an error installing packages:"
-msgstr "Ur fazi a zo bet en ur staliañ ar pakadoù :"
-
-#: ../../install_steps_interactive.pm_.c:10
-msgid ""
-"\n"
-"Warning\n"
-"\n"
-"Please read carefully the terms below. If you disagree with any\n"
-"portion, you are not allowed to install the next CD media. Press 'Refuse' \n"
-"to continue the installation without using these media.\n"
-"\n"
-"\n"
-"Some components contained in the next CD media are not governed\n"
-"by the GPL License or similar agreements. Each such component is then\n"
-"governed by the terms and conditions of its own specific license. \n"
-"Please read carefully and comply with such specific licenses before \n"
-"you use or redistribute the said components. \n"
-"Such licenses will in general prevent the transfer, duplication \n"
-"(except for backup purposes), redistribution, reverse engineering, \n"
-"de-assembly, de-compilation or modification of the component. \n"
-"Any breach of agreement will immediately terminate your rights under \n"
-"the specific license. Unless the specific license terms grant you such\n"
-"rights, you usually cannot install the programs on more than one\n"
-"system, or adapt it to be used on a network. In doubt, please contact \n"
-"directly the distributor or editor of the component. \n"
-"Transfer to third parties or copying of such components including the \n"
-"documentation is usually forbidden.\n"
-"\n"
-"\n"
-"All rights to the components of the next CD media belong to their \n"
-"respective authors and are protected by intellectual property and \n"
-"copyright laws applicable to software programs.\n"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:67
-msgid "An error occurred"
-msgstr "Ur fazi a zo bet"
-
-#: ../../install_steps_interactive.pm_.c:85
-#, fuzzy
-msgid "Do you really want to leave the installation?"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../install_steps_interactive.pm_.c:112
-msgid "License agreement"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:113
-msgid ""
-"Introduction\n"
-"\n"
-"The operating system and the different components available in the Mandrake "
-"Linux distribution \n"
-"shall be called the \"Software Products\" hereafter. The Software Products "
-"include, but are not \n"
-"restricted to, the set of programs, methods, rules and documentation related "
-"to the operating \n"
-"system and the different components of the Mandrake Linux distribution.\n"
-"\n"
-"\n"
-"1. License Agreement\n"
-"\n"
-"Please read this document carefully. This document is a license agreement "
-"between you and \n"
-"MandrakeSoft S.A. which applies to the Software Products.\n"
-"By installing, duplicating or using the Software Products in any manner, you "
-"explicitly \n"
-"accept and fully agree to conform to the terms and conditions of this "
-"License. \n"
-"If you disagree with any portion of the License, you are not allowed to "
-"install, duplicate or use \n"
-"the Software Products. \n"
-"Any attempt to install, duplicate or use the Software Products in a manner "
-"which does not comply \n"
-"with the terms and conditions of this License is void and will terminate "
-"your rights under this \n"
-"License. Upon termination of the License, you must immediately destroy all "
-"copies of the \n"
-"Software Products.\n"
-"\n"
-"\n"
-"2. Limited Warranty\n"
-"\n"
-"The Software Products and attached documentation are provided \"as is\", "
-"with no warranty, to the \n"
-"extent permitted by law.\n"
-"MandrakeSoft S.A. will, in no circumstances and to the extent permitted by "
-"law, be liable for any special,\n"
-"incidental, direct or indirect damages whatsoever (including without "
-"limitation damages for loss of \n"
-"business, interruption of business, financial loss, legal fees and penalties "
-"resulting from a court \n"
-"judgment, or any other consequential loss) arising out of the use or "
-"inability to use the Software \n"
-"Products, even if MandrakeSoft S.A. has been advised of the possibility or "
-"occurence of such \n"
-"damages.\n"
-"\n"
-"LIMITED LIABILITY LINKED TO POSSESSING OR USING PROHIBITED SOFTWARE IN SOME "
-"COUNTRIES\n"
-"\n"
-"To the extent permitted by law, MandrakeSoft S.A. or its distributors will, "
-"in no circumstances, be \n"
-"liable for any special, incidental, direct or indirect damages whatsoever "
-"(including without \n"
-"limitation damages for loss of business, interruption of business, financial "
-"loss, legal fees \n"
-"and penalties resulting from a court judgment, or any other consequential "
-"loss) arising out \n"
-"of the possession and use of software components or arising out of "
-"downloading software components \n"
-"from one of Mandrake Linux sites which are prohibited or restricted in some "
-"countries by local laws.\n"
-"This limited liability applies to, but is not restricted to, the strong "
-"cryptography components \n"
-"included in the Software Products.\n"
-"\n"
-"\n"
-"3. The GPL License and Related Licenses\n"
-"\n"
-"The Software Products consist of components created by different persons or "
-"entities. Most \n"
-"of these components are governed under the terms and conditions of the GNU "
-"General Public \n"
-"Licence, hereafter called \"GPL\", or of similar licenses. Most of these "
-"licenses allow you to use, \n"
-"duplicate, adapt or redistribute the components which they cover. Please "
-"read carefully the terms \n"
-"and conditions of the license agreement for each component before using any "
-"component. Any question \n"
-"on a component license should be addressed to the component author and not "
-"to MandrakeSoft.\n"
-"The programs developed by MandrakeSoft S.A. are governed by the GPL License. "
-"Documentation written \n"
-"by MandrakeSoft S.A. is governed by a specific license. Please refer to the "
-"documentation for \n"
-"further details.\n"
-"\n"
-"\n"
-"4. Intellectual Property Rights\n"
-"\n"
-"All rights to the components of the Software Products belong to their "
-"respective authors and are \n"
-"protected by intellectual property and copyright laws applicable to software "
-"programs.\n"
-"MandrakeSoft S.A. reserves its rights to modify or adapt the Software "
-"Products, as a whole or in \n"
-"parts, by all means and for all purposes.\n"
-"\"Mandrake\", \"Mandrake Linux\" and associated logos are trademarks of "
-"MandrakeSoft S.A. \n"
-"\n"
-"\n"
-"5. Governing Laws \n"
-"\n"
-"If any portion of this agreement is held void, illegal or inapplicable by a "
-"court judgment, this \n"
-"portion is excluded from this contract. You remain bound by the other "
-"applicable sections of the \n"
-"agreement.\n"
-"The terms and conditions of this License are governed by the Laws of "
-"France.\n"
-"All disputes on the terms of this license will preferably be settled out of "
-"court. As a last \n"
-"resort, the dispute will be referred to the appropriate Courts of Law of "
-"Paris - France.\n"
-"For any question on this document, please contact MandrakeSoft S.A. \n"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:191
-msgid "Are you sure you refuse the licence?"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:211
-#: ../../install_steps_interactive.pm_.c:1021
-#: ../../standalone/keyboarddrake_.c:31
-msgid "Keyboard"
-msgstr "Stokellaoueg"
-
-#: ../../install_steps_interactive.pm_.c:212
-#, fuzzy
-msgid "Please choose your keyboard layout."
-msgstr "Dibabit reizhadur ho stokellaoueg, mar plij."
-
-#: ../../install_steps_interactive.pm_.c:213
-#, fuzzy
-msgid "Here is the full list of keyboards available"
-msgstr "stokellaoueg"
-
-#: ../../install_steps_interactive.pm_.c:231
-msgid "Which installation class do you want?"
-msgstr "Pe renkad staliañ a fell deoc'h ?"
-
-#: ../../install_steps_interactive.pm_.c:235
-msgid "Install/Update"
-msgstr "Staliañ/Bremanaat"
-
-#: ../../install_steps_interactive.pm_.c:235
-msgid "Is this an install or an update?"
-msgstr "Hag ur staliadur pe ur bremanadur eo ?"
-
-#: ../../install_steps_interactive.pm_.c:244
-msgid "Recommended"
-msgstr "Erbedet"
-
-#: ../../install_steps_interactive.pm_.c:247
-#: ../../install_steps_interactive.pm_.c:250
-msgid "Expert"
-msgstr "Mailh"
-
-#: ../../install_steps_interactive.pm_.c:255
-#: ../../install_steps_interactive.pm_.c:259
-msgid "Upgrade"
-msgstr "Bremanaat"
-
-#: ../../install_steps_interactive.pm_.c:255
-#: ../../install_steps_interactive.pm_.c:259
-msgid "Upgrade packages only"
-msgstr "Bremanaat pakadoù hep ken"
-
-#: ../../install_steps_interactive.pm_.c:275
-msgid "Please choose the type of your mouse."
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../install_steps_interactive.pm_.c:281 ../../standalone/mousedrake_.c:60
-msgid "Mouse Port"
-msgstr "Porzh al logodenn"
-
-#: ../../install_steps_interactive.pm_.c:282 ../../standalone/mousedrake_.c:61
-msgid "Please choose on which serial port your mouse is connected to."
-msgstr "Dibabit ar porzh a-steud m'eo luget ho logodenn outañ, mar plij."
-
-#: ../../install_steps_interactive.pm_.c:290
-msgid "Buttons emulation"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:292
-msgid "Button 2 Emulation"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:293
-msgid "Button 3 Emulation"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:314
-msgid "Configuring PCMCIA cards..."
-msgstr "O kefluniañ kartennoù PCMCIA..."
-
-#: ../../install_steps_interactive.pm_.c:314
-msgid "PCMCIA"
-msgstr "PCMCIA"
-
-#: ../../install_steps_interactive.pm_.c:321
-msgid "Configuring IDE"
-msgstr "Kefluniañ IDE"
-
-#: ../../install_steps_interactive.pm_.c:321
-msgid "IDE"
-msgstr "IDE"
-
-#: ../../install_steps_interactive.pm_.c:338
-msgid "No partition available"
-msgstr "parzhadur hegerz ebet"
-
-#: ../../install_steps_interactive.pm_.c:341
-msgid "Scanning partitions to find mount points"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:349
-msgid "Choose the mount points"
-msgstr "Dibabit at poentoù marc'hañ"
-
-#: ../../install_steps_interactive.pm_.c:379
-msgid ""
-"No free space for 1MB bootstrap! Install will continue, but to boot your "
-"system, you'll need to create the bootstrap partition in DiskDrake"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:388
-#, fuzzy
-msgid "No root partition found to perform an upgrade"
-msgstr "Parzhadur gwrizienn kavet ebet"
-
-#: ../../install_steps_interactive.pm_.c:389
-msgid "Root Partition"
-msgstr "Parzhadur gwrizienn"
-
-#: ../../install_steps_interactive.pm_.c:390
-msgid "What is the root partition (/) of your system?"
-msgstr "Pehini eo parzhadur gwrizienn (/) ho reizhiad ?"
-
-#: ../../install_steps_interactive.pm_.c:404
-msgid "You need to reboot for the partition table modifications to take place"
-msgstr "Ret eo deoc'h adloc'hañ evit ma talvezo kemmoù an daolenn barzhañ"
-
-#: ../../install_steps_interactive.pm_.c:428
-msgid "Choose the partitions you want to format"
-msgstr "Dibabit ar parzhadur a vennit furmadiñ"
-
-#: ../../install_steps_interactive.pm_.c:429
-msgid "Check bad blocks?"
-msgstr "Gwiriañ ar bloc'hoù siek ?"
-
-#: ../../install_steps_interactive.pm_.c:456
-msgid "Formatting partitions"
-msgstr "O furmadiñ parzhadurioù"
-
-#: ../../install_steps_interactive.pm_.c:458
-#, c-format
-msgid "Creating and formatting file %s"
-msgstr "O krouiñ hag o furmadiñ ar restr saveteiñ %s"
-
-#: ../../install_steps_interactive.pm_.c:463
-#, c-format
-msgid ""
-"Failed to check filesystem %s. Do you want to repair the errors? (beware, "
-"you can loose data)"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:465
-msgid "Not enough swap space to fulfill installation, please add some"
-msgstr "Ket a-walc'h a zisloañ evit peurstaliañ, kreskit anezhañ mar plij"
-
-#: ../../install_steps_interactive.pm_.c:472
-#, fuzzy
-msgid "Looking for available packages and rebuilding rpm database..."
-msgstr "O klask ar pakadoù hegerz"
-
-#: ../../install_steps_interactive.pm_.c:473
-msgid "Looking for available packages..."
-msgstr "O klask ar pakadoù hegerz"
-
-#: ../../install_steps_interactive.pm_.c:476
-#, fuzzy
-msgid "Looking at packages already installed..."
-msgstr "N'hellit ket andiuz ar pakad-mañ. Staliet eo endo"
-
-#: ../../install_steps_interactive.pm_.c:480
-msgid "Finding packages to upgrade..."
-msgstr "O kavout pakadoù da vremanaat"
-
-#: ../../install_steps_interactive.pm_.c:498
-#, fuzzy, c-format
-msgid ""
-"Your system does not have enough space left for installation or upgrade (%d "
-"> %d)"
-msgstr "Ho reizhiad n'eus ket wa-walc'h a egor evit staliañ pe vremanaat"
-
-#: ../../install_steps_interactive.pm_.c:534
-msgid ""
-"Please choose load or save package selection on floppy.\n"
-"The format is the same as auto_install generated floppies."
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:536
-msgid "Load from floppy"
-msgstr "Assevel adalek ar pladennig"
-
-#: ../../install_steps_interactive.pm_.c:536
-msgid "Save on floppy"
-msgstr "Enrollañ war bladennig"
-
-#: ../../install_steps_interactive.pm_.c:540
-msgid "Loading from floppy"
-msgstr "Assevelañ adalek ar pladennig"
-
-#: ../../install_steps_interactive.pm_.c:540
-msgid "Package selection"
-msgstr "Diuzadenn pakadoù"
-
-#: ../../install_steps_interactive.pm_.c:545
-#, fuzzy
-msgid "Insert a floppy containing package selection"
-msgstr "Lakait ur bladennig el lenner %s"
-
-#: ../../install_steps_interactive.pm_.c:627
-msgid "Selected size is larger than available space"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:642
-#, fuzzy
-msgid "Type of install"
-msgstr "Dibabit pakadoù da staliañ"
-
-#: ../../install_steps_interactive.pm_.c:643
-msgid ""
-"You haven't selected any group of packages.\n"
-"Please choose the minimal installation you want:"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:646
-msgid "With X"
-msgstr "Gant X"
-
-#: ../../install_steps_interactive.pm_.c:648
-msgid "With basic documentation (recommended!)"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:649
-msgid "Truly minimal install (especially no urpmi)"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:734
-msgid ""
-"If you have all the CDs in the list below, click Ok.\n"
-"If you have none of those CDs, click Cancel.\n"
-"If only some CDs are missing, unselect them, then click Ok."
-msgstr ""
-"M'hoc'h eus an holl CDoù er roll a-is, gwaskit Mat eo.\n"
-"Ma n'hoc'h eus hini eus ar CDoù-se, gwaskit Nullañ.\n"
-"Ma fazi deoc'h lod eus ar CDoù, andiuzit anezho ha gwaskit Mat eo."
-
-#: ../../install_steps_interactive.pm_.c:739
-#, c-format
-msgid "Cd-Rom labeled \"%s\""
-msgstr "Cd-Rom skridennet \"%s\""
-
-#: ../../install_steps_interactive.pm_.c:760
-msgid "Preparing installation"
-msgstr "O prientiñ ar staliadur"
-
-#: ../../install_steps_interactive.pm_.c:769
-#, c-format
-msgid ""
-"Installing package %s\n"
-"%d%%"
-msgstr ""
-"O staliañ ar pakad %s\n"
-"%d%%"
-
-#: ../../install_steps_interactive.pm_.c:815
-msgid "Post-install configuration"
-msgstr "Kefluniadur goude staliañ"
-
-#: ../../install_steps_interactive.pm_.c:821
-#, fuzzy, c-format
-msgid "Please insert the Boot floppy used in drive %s"
-msgstr "Lakait ur bladennig el lenner %s"
-
-#: ../../install_steps_interactive.pm_.c:827
-#, fuzzy, c-format
-msgid "Please insert the Update Modules floppy in drive %s"
-msgstr "Lakait ur bladennig gwerc'h el lenner %s"
-
-#: ../../install_steps_interactive.pm_.c:847
-msgid ""
-"You now have the opportunity to download encryption software.\n"
-"\n"
-"WARNING:\n"
-"\n"
-"Due to different general requirements applicable to these software and "
-"imposed\n"
-"by various jurisdictions, customer and/or end user of theses software "
-"should\n"
-"ensure that the laws of his/their jurisdiction allow him/them to download, "
-"stock\n"
-"and/or use these software.\n"
-"\n"
-"In addition customer and/or end user shall particularly be aware to not "
-"infringe\n"
-"the laws of his/their jurisdiction. Should customer and/or end user not\n"
-"respect the provision of these applicable laws, he/they will incure serious\n"
-"sanctions.\n"
-"\n"
-"In no event shall Mandrakesoft nor its manufacturers and/or suppliers be "
-"liable\n"
-"for special, indirect or incidental damages whatsoever (including, but not\n"
-"limited to loss of profits, business interruption, loss of commercial data "
-"and\n"
-"other pecuniary losses, and eventual liabilities and indemnification to be "
-"paid\n"
-"pursuant to a court decision) arising out of use, possession, or the sole\n"
-"downloading of these software, to which customer and/or end user could\n"
-"eventually have access after having sign up the present agreement.\n"
-"\n"
-"\n"
-"For any queries relating to these agreement, please contact \n"
-"Mandrakesoft, Inc.\n"
-"2400 N. Lincoln Avenue Suite 243\n"
-"Altadena California 91001\n"
-"USA"
-msgstr ""
-"Tu zo deoc'h bremañ ezkargañ meziantoù gouestlet d'ar rinegouriezh.\n"
-"\n"
-"HO EVEZH :\n"
-"\n"
-"Abalamour m'eo disheñvel ar pennaennoù meur o talvezout evit ar meziantoù-"
-"mañ hervez\n"
-"gwiraouriezhoù disheñvel, ret eo d'an arval ha/pe arveriad en diwezh ar "
-"meziantoù-mañ\n"
-"gwiriañ eo aotreet da ezskargañ, mirout ha/pe implijout ar meziantoù-mañ\n"
-"gouez d'al lezennoù en e/he gwiraouriezh.\n"
-"\n"
-"Ouzhpenn an arval ha/pe arveriad en diwezh a rank bezañ war evezh chom hep "
-"terriñ\n"
-"lezennoù e/he gwiraouriezh. Ma c'hoarvezfe gant an arval ha/pe arveriad\n"
-"en diwezh na zoujañ ouzh termenoù lezennoù o talvezout, e telezfe kastizoù\n"
-"kriz.\n"
-"\n"
-"E nep degouezh ne vo dalc'het Mandrakesoft nag e oberatourien na/pe e "
-"bourvezerien\n"
-"atebek eus nep gaou dibar, ameeun pe zarvoudus a c'hoarvezfe (ha pa vefe\n"
-"zoken e-touez traoù all koll gounid, arsav aferioù, koll roadoù kenwerzhel "
-"ha\n"
-"kolloù arc'hant all, hag atebegezh pe zigoll diouzh an dro da vezañ paeet\n"
-"da heul ur barnadeg) o tont diouzh implij, perc'hennañ, pe zoken ezkargañ\n"
-"ar meziantoù-mañ, a c'hellfe an arval ha/pe arveriad en diwezh bezañ\n"
-"grataet goude bezañ sinet an emglev-mañ.\n"
-"\n"
-"\n"
-"Evit forzh pe c'houlenn a-zivout an emglevioù-se, darempredit mar plij\n"
-"Mandrakesoft, Inc.\n"
-"2400 N. Lincoln Avenue Suite 243\n"
-"Altadena California 91001\n"
-"SUA"
-
-#: ../../install_steps_interactive.pm_.c:886
-msgid ""
-"You now have the opportunity to download updated packages. These packages\n"
-"have been released after the distribution was released. They may\n"
-"contain security or bug fixes.\n"
-"\n"
-"To download these packages, you will need to have a working Internet \n"
-"connection.\n"
-"\n"
-"Do you want to install the updates ?"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:901
-#, fuzzy
-msgid ""
-"Contacting Mandrake Linux web site to get the list of available mirrors..."
-msgstr "O taremprediñ ar melezour evit kaout roll ar pakadoù hegerz"
-
-#: ../../install_steps_interactive.pm_.c:906
-msgid "Choose a mirror from which to get the packages"
-msgstr "Dibabit ur melezour da dapout ar pakadoù diwarnañ"
-
-#: ../../install_steps_interactive.pm_.c:915
-msgid "Contacting the mirror to get the list of available packages..."
-msgstr "O taremprediñ ar melezour evit kaout roll ar pakadoù hegerz"
-
-#: ../../install_steps_interactive.pm_.c:943
-msgid "Which is your timezone?"
-msgstr "Pe seurt a vo ho takad-eur ?"
-
-#: ../../install_steps_interactive.pm_.c:948
-#, fuzzy
-msgid "Hardware clock set to GMT"
-msgstr "Ha war GMT eo lakaet ho eurier periantel ?"
-
-#: ../../install_steps_interactive.pm_.c:949
-msgid "Automatic time synchronization (using NTP)"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:956
-msgid "NTP Server"
-msgstr "Servijer NTP"
-
-#: ../../install_steps_interactive.pm_.c:990
-#: ../../install_steps_interactive.pm_.c:998
-#, fuzzy
-msgid "Remote CUPS server"
-msgstr "Steud a-bell"
-
-#: ../../install_steps_interactive.pm_.c:991
-#, fuzzy
-msgid "No printer"
-msgstr "Moullerez lec'hel"
-
-#: ../../install_steps_interactive.pm_.c:1008
-#, fuzzy
-msgid "Do you have an ISA sound card?"
-msgstr "Hag un all hoc'h eus ?"
-
-#: ../../install_steps_interactive.pm_.c:1010
-msgid "Run \"sndconfig\" after installation to configure your sound card"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1012
-msgid "No sound card detected. Try \"harddrake\" after installation"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1017 ../../steps.pm_.c:27
-msgid "Summary"
-msgstr "Evit diverriñ"
-
-#: ../../install_steps_interactive.pm_.c:1020
-msgid "Mouse"
-msgstr "Logodenn"
-
-#: ../../install_steps_interactive.pm_.c:1022
-msgid "Timezone"
-msgstr "Takad-eur"
-
-#: ../../install_steps_interactive.pm_.c:1023 ../../printerdrake.pm_.c:2985
-#: ../../printerdrake.pm_.c:3074
-msgid "Printer"
-msgstr "Moullerez"
-
-#: ../../install_steps_interactive.pm_.c:1025
-msgid "ISDN card"
-msgstr "Kartenn ISDN"
-
-#: ../../install_steps_interactive.pm_.c:1028
-#: ../../install_steps_interactive.pm_.c:1030
-msgid "Sound card"
-msgstr "Kartenn son"
-
-#: ../../install_steps_interactive.pm_.c:1032
-msgid "TV card"
-msgstr "Kartenn pellwel"
-
-#: ../../install_steps_interactive.pm_.c:1072
-#: ../../install_steps_interactive.pm_.c:1097
-#: ../../install_steps_interactive.pm_.c:1101
-msgid "LDAP"
-msgstr "LDAP"
-
-#: ../../install_steps_interactive.pm_.c:1073
-#: ../../install_steps_interactive.pm_.c:1097
-#: ../../install_steps_interactive.pm_.c:1110
-msgid "NIS"
-msgstr "NIS"
-
-#: ../../install_steps_interactive.pm_.c:1074
-#: ../../install_steps_interactive.pm_.c:1097
-#: ../../install_steps_interactive.pm_.c:1118
-#: ../../install_steps_interactive.pm_.c:1124
-#, fuzzy
-msgid "Windows Domain"
-msgstr "Titouroù"
-
-#: ../../install_steps_interactive.pm_.c:1075
-#: ../../install_steps_interactive.pm_.c:1097
-msgid "Local files"
-msgstr "Restroù lec'hel"
-
-#: ../../install_steps_interactive.pm_.c:1084
-#: ../../install_steps_interactive.pm_.c:1085 ../../steps.pm_.c:24
-msgid "Set root password"
-msgstr "Termeniñ tremenger root"
-
-#: ../../install_steps_interactive.pm_.c:1086
-msgid "No password"
-msgstr "Tremenger ebet"
-
-#: ../../install_steps_interactive.pm_.c:1091
-#, c-format
-msgid "This password is too short (it must be at least %d characters long)"
-msgstr "Re eeun eo an tremenger-se (%d arouezenn a zo ret d'an nebeutañ)"
-
-#: ../../install_steps_interactive.pm_.c:1097 ../../network/modem.pm_.c:49
-#: ../../standalone/drakconnect_.c:625 ../../standalone/logdrake_.c:173
-msgid "Authentication"
-msgstr "Dilesadur"
-
-#: ../../install_steps_interactive.pm_.c:1105
-#, fuzzy
-msgid "Authentication LDAP"
-msgstr "Dilesadur"
-
-#: ../../install_steps_interactive.pm_.c:1106
-msgid "LDAP Base dn"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1107
-msgid "LDAP Server"
-msgstr "Servijer LDAP"
-
-#: ../../install_steps_interactive.pm_.c:1113
-msgid "Authentication NIS"
-msgstr "Dilesadur NIS"
-
-#: ../../install_steps_interactive.pm_.c:1114
-msgid "NIS Domain"
-msgstr "Domani NIS"
-
-#: ../../install_steps_interactive.pm_.c:1115
-msgid "NIS Server"
-msgstr "Servijer NIS"
-
-#: ../../install_steps_interactive.pm_.c:1121
-msgid ""
-"For this to work for a W2K PDC, you will probably need to have the admin "
-"run: C:\\>net localgroup \"Pre-Windows 2000 Compatible Access\" everyone /"
-"add and reboot the server.\n"
-"You will also need the username/password of a Domain Admin to join the "
-"machine to the Windows(TM) domain.\n"
-"If networking is not yet enabled, Drakx will attempt to join the domain "
-"after the network setup step.\n"
-"Should this setup fail for some reason and domain authentication is not "
-"working, run 'smbpasswd -j DOMAIN -U USER%PASSWORD' using your Windows(tm) "
-"Domain, and Admin Username/Password, after system boot.\n"
-"The command 'wbinfo -t' will test whether your authentication secrets are "
-"good."
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1123
-#, fuzzy
-msgid "Authentication Windows Domain"
-msgstr "Dilesadur"
-
-#: ../../install_steps_interactive.pm_.c:1125
-#, fuzzy
-msgid "Domain Admin User Name"
-msgstr "Anv ar domani"
-
-#: ../../install_steps_interactive.pm_.c:1126
-msgid "Domain Admin Password"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1161
-#, fuzzy
-msgid ""
-"A custom bootdisk provides a way of booting into your Linux system without\n"
-"depending on the normal bootloader. This is useful if you don't want to "
-"install\n"
-"SILO on your system, or another operating system removes SILO, or SILO "
-"doesn't\n"
-"work with your hardware configuration. A custom bootdisk can also be used "
-"with\n"
-"the Mandrake rescue image, making it much easier to recover from severe "
-"system\n"
-"failures.\n"
-"\n"
-"If you want to create a bootdisk for your system, insert a floppy in the "
-"first\n"
-"drive and press \"Ok\"."
-msgstr ""
-"Ur bladenn loc'hañ neuziet a ro un tu da loc'hañ ho reizhiad Linux hep "
-"bezañ\n"
-"dindan beli ar c'harger loc'hañ boas. Talvoudus eo ma ne mennit ket staliañ "
-"LILO\n"
-"(pe grub) war ho reizhiad, pe ma skarzh ur reizhiad oberiañ LILO, pe ma ne\n"
-"da ket en-dro LILO war ho kefluniadur periantel. Ur bladenn loc'hañ neuziet\n"
-"a c'hell ivez bezañ implijet gant ar skeudenn saveteiñ Mandrake, en ur "
-"aesaat an\n"
-"assevel pa vefec'h sac'het grevus. Mennout a rit krouiñ ur bladenn loc'hañ "
-"evit\n"
-"ho reizhiad ?"
-
-#: ../../install_steps_interactive.pm_.c:1177
-msgid "First floppy drive"
-msgstr "Lenner pladennig kentañ"
-
-#: ../../install_steps_interactive.pm_.c:1178
-msgid "Second floppy drive"
-msgstr "Eil lenner pladennig"
-
-#: ../../install_steps_interactive.pm_.c:1179 ../../printerdrake.pm_.c:2515
-msgid "Skip"
-msgstr "Tremen e-biou"
-
-#: ../../install_steps_interactive.pm_.c:1184
-#, c-format
-msgid ""
-"A custom bootdisk provides a way of booting into your Linux system without\n"
-"depending on the normal bootloader. This is useful if you don't want to "
-"install\n"
-"LILO (or grub) on your system, or another operating system removes LILO, or "
-"LILO doesn't\n"
-"work with your hardware configuration. A custom bootdisk can also be used "
-"with\n"
-"the Mandrake rescue image, making it much easier to recover from severe "
-"system\n"
-"failures. Would you like to create a bootdisk for your system?\n"
-"%s"
-msgstr ""
-"Ur bladenn loc'hañ neuziet a ro un tu da loc'hañ ho reizhiad Linux hep "
-"bezañ\n"
-"dindan beli ar c'harger loc'hañ boas. Talvoudus eo ma ne mennit ket staliañ "
-"LILO\n"
-"(pe grub) war ho reizhiad, pe ma skarzh ur reizhiad oberiañ LILO, pe ma ne\n"
-"da ket en-dro LILO war ho kefluniadur periantel. Ur bladenn loc'hañ neuziet\n"
-"a c'hell ivez bezañ implijet gant ar skeudenn saveteiñ Mandrake, en ur "
-"aesaat an\n"
-"assevel pa vefec'h sac'het grevus. Mennout a rit krouiñ ur bladenn loc'hañ "
-"evit\n"
-"ho reizhiad ?\n"
-"%s"
-
-#: ../../install_steps_interactive.pm_.c:1190
-msgid ""
-"\n"
-"\n"
-"(WARNING! You're using XFS for your root partition,\n"
-"creating a bootdisk on a 1.44 Mb floppy will probably fail,\n"
-"because XFS needs a very large driver)."
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1198
-msgid "Sorry, no floppy drive available"
-msgstr "Ho tigarez, lenner pladennig hegerz ebet"
-
-#: ../../install_steps_interactive.pm_.c:1202
-msgid "Choose the floppy drive you want to use to make the bootdisk"
-msgstr ""
-"Dibabit al lenner pladennig a vennit implijout evit ober ar bladenn loc'hañ"
-
-#: ../../install_steps_interactive.pm_.c:1206
-#, fuzzy, c-format
-msgid "Insert a floppy in %s"
-msgstr "Lakait ur bladennig el lenner %s"
-
-#: ../../install_steps_interactive.pm_.c:1209
-msgid "Creating bootdisk..."
-msgstr "O krouiñ ar bladenn loc'hañ"
-
-#: ../../install_steps_interactive.pm_.c:1216
-msgid "Preparing bootloader..."
-msgstr "O prientiñ ar c'harger loc'hañ"
-
-#: ../../install_steps_interactive.pm_.c:1227
-msgid ""
-"You appear to have an OldWorld or Unknown\n"
-" machine, the yaboot bootloader will not work for you.\n"
-"The install will continue, but you'll\n"
-" need to use BootX to boot your machine"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1233
-msgid "Do you want to use aboot?"
-msgstr "Mennout a rit implijout aboot?"
-
-#: ../../install_steps_interactive.pm_.c:1236
-msgid ""
-"Error installing aboot, \n"
-"try to force installation even if that destroys the first partition?"
-msgstr ""
-"Fazi en ur staliañ aboot,\n"
-"klask rediañ ar staliadur zoken ma tistruj ar parzhadur kentañ ?"
-
-#: ../../install_steps_interactive.pm_.c:1243
-msgid "Installing bootloader"
-msgstr "Staliañ ar c'harger loc'hañ"
-
-#: ../../install_steps_interactive.pm_.c:1249
-#, fuzzy
-msgid "Installation of bootloader failed. The following error occured:"
-msgstr "Staliadur LILO a zo sac'het. Degouezhet eo ar fazi a heul :"
-
-#: ../../install_steps_interactive.pm_.c:1257
-#, c-format
-msgid ""
-"You may need to change your Open Firmware boot-device to\n"
-" enable the bootloader. If you don't see the bootloader prompt at\n"
-" reboot, hold down Command-Option-O-F at reboot and enter:\n"
-" setenv boot-device %s,\\\\:tbxi\n"
-" Then type: shut-down\n"
-"At your next boot you should see the bootloader prompt."
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1291
-#: ../../standalone/drakautoinst_.c:79
-#, c-format
-msgid "Insert a blank floppy in drive %s"
-msgstr "Lakait ur bladennig gwerc'h el lenner %s"
-
-#: ../../install_steps_interactive.pm_.c:1295
-msgid "Creating auto install floppy..."
-msgstr "O krouiñ ur bladennig staliañ emgefreek"
-
-#: ../../install_steps_interactive.pm_.c:1306
-msgid ""
-"Some steps are not completed.\n"
-"\n"
-"Do you really want to quit now?"
-msgstr ""
-"Lankadoù 'zo n'int ket peurc'hraet.\n"
-"\n"
-"Mennout a rit kuitaat da vat bremañ ?"
-
-#: ../../install_steps_interactive.pm_.c:1317
-#, c-format
-msgid ""
-"Congratulations, installation is complete.\n"
-"Remove the boot media and press return to reboot.\n"
-"\n"
-"\n"
-"For information on fixes which are available for this release of Mandrake "
-"Linux,\n"
-"consult the Errata available from:\n"
-"\n"
-"\n"
-"%s\n"
-"\n"
-"\n"
-"Information on configuring your system is available in the post\n"
-"install chapter of the Official Mandrake Linux User's Guide."
-msgstr ""
-"Gourc'hemennoù, peurc'hraet eo ar staliadur.\n"
-"Lamit ar bladenn loc'hañ ha gwaskit enkas evit adloc'hañ.\n"
-"\n"
-"\n"
-"Evit titouroù war palastroù hegerz evit stumm-mañ Mandrake Linux,\n"
-"sellit ouzh ar meneger fazioù hegerz e \n"
-"\n"
-"\n"
-"%s\n"
-"\n"
-"\n"
-"Titouroù war gefluniañ ho reizhiad a zo hegerz e rannbennad Goude\n"
-"Staliañ Sturier ofisiel an Arveriad Mandrake Linux."
-
-#: ../../install_steps_interactive.pm_.c:1330
-msgid "http://www.mandrakelinux.com/en/90errata.php3"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1335
-#, fuzzy
-msgid "Generate auto install floppy"
-msgstr "O krouiñ ur bladennig staliañ emgefreek"
-
-#: ../../install_steps_interactive.pm_.c:1337
-msgid ""
-"The auto install can be fully automated if wanted,\n"
-"in that case it will take over the hard drive!!\n"
-"(this is meant for installing on another box).\n"
-"\n"
-"You may prefer to replay the installation.\n"
-msgstr ""
-
-#: ../../install_steps_interactive.pm_.c:1342
-msgid "Automated"
-msgstr "Emgefreek"
-
-#: ../../install_steps_interactive.pm_.c:1342
-#, fuzzy
-msgid "Replay"
-msgstr "Adkargañ"
-
-#: ../../install_steps_interactive.pm_.c:1345
-#, fuzzy
-msgid "Save packages selection"
-msgstr "Diuz pakadoù unan hag unan"
-
-#: ../../install_steps_newt.pm_.c:22
-#, c-format
-msgid "Mandrake Linux Installation %s"
-msgstr "Staliadur Mandrake Linux %s"
-
-#. -PO This string must fit in a 80-char wide text screen
-#: ../../install_steps_newt.pm_.c:35
-msgid ""
-" <Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen "
-msgstr ""
-" <Tab>/<Alt-Tab> etre elfennoù | <Esaouenn> a ziuz | <F12> skramm a heul "
-
-#: ../../interactive.pm_.c:87
-msgid "kdesu missing"
-msgstr "kdesu mank"
-
-#: ../../interactive.pm_.c:89 ../../interactive.pm_.c:100
-msgid "consolehelper missing"
-msgstr ""
-
-#: ../../interactive.pm_.c:152
-msgid "Choose a file"
-msgstr "Dibabit ur restr"
-
-#: ../../interactive.pm_.c:320
-msgid "Advanced"
-msgstr "Barek"
-
-#: ../../interactive.pm_.c:321 ../../security/main.pm_.c:220
-#, fuzzy
-msgid "Basic"
-msgstr "Diazez"
-
-#: ../../interactive/newt.pm_.c:195 ../../my_gtk.pm_.c:158
-#: ../../printerdrake.pm_.c:2169
-msgid "<- Previous"
-msgstr "<- Diaraog"
-
-#: ../../interactive/newt.pm_.c:195 ../../interactive/newt.pm_.c:197
-#: ../../standalone/drakbackup_.c:4114 ../../standalone/drakbackup_.c:4141
-#: ../../standalone/drakbackup_.c:4171 ../../standalone/drakbackup_.c:4197
-msgid "Next"
-msgstr "A heul"
-
-#: ../../interactive/stdio.pm_.c:29 ../../interactive/stdio.pm_.c:149
-msgid "Bad choice, try again\n"
-msgstr "Dibab fall, klaskit adarre\n"
-
-#: ../../interactive/stdio.pm_.c:30 ../../interactive/stdio.pm_.c:150
-#, c-format
-msgid "Your choice? (default %s) "
-msgstr "Ho tibab ? (%s dre ziouer)"
-
-#: ../../interactive/stdio.pm_.c:54
-#, c-format
-msgid ""
-"Entries you'll have to fill:\n"
-"%s"
-msgstr ""
-
-#: ../../interactive/stdio.pm_.c:70
-#, fuzzy, c-format
-msgid "Your choice? (0/1, default `%s') "
-msgstr "Ho tibab ? (%s dre ziouer)"
-
-#: ../../interactive/stdio.pm_.c:95
-#, c-format
-msgid "Button `%s': %s"
-msgstr "Nozel `%s': %s"
-
-#: ../../interactive/stdio.pm_.c:96
-#, fuzzy
-msgid "Do you want to click on this button?"
-msgstr "Mennout a rit implijout SILO ?"
-
-#: ../../interactive/stdio.pm_.c:105
-msgid " enter `void' for void entry"
-msgstr ""
-
-#: ../../interactive/stdio.pm_.c:105
-#, fuzzy, c-format
-msgid "Your choice? (default `%s'%s) "
-msgstr "Ho tibab ? (%s dre ziouer)"
-
-#: ../../interactive/stdio.pm_.c:123
-#, c-format
-msgid "=> There are many things to choose from (%s).\n"
-msgstr ""
-
-#: ../../interactive/stdio.pm_.c:126
-msgid ""
-"Please choose the first number of the 10-range you wish to edit,\n"
-"or just hit Enter to proceed.\n"
-"Your choice? "
-msgstr ""
-
-#: ../../interactive/stdio.pm_.c:139
-#, c-format
-msgid ""
-"=> Notice, a label changed:\n"
-"%s"
-msgstr ""
-
-#: ../../interactive/stdio.pm_.c:146
-msgid "Re-submit"
-msgstr ""
-
-#: ../../keyboard.pm_.c:152 ../../keyboard.pm_.c:187
-msgid "Czech (QWERTZ)"
-msgstr "Tchek (QWERTZ)"
-
-#: ../../keyboard.pm_.c:153 ../../keyboard.pm_.c:189
-msgid "German"
-msgstr "Alaman"
-
-#: ../../keyboard.pm_.c:154
-msgid "Dvorak"
-msgstr "Dvorak"
-
-#: ../../keyboard.pm_.c:155 ../../keyboard.pm_.c:197
-msgid "Spanish"
-msgstr "Spagnol"
-
-#: ../../keyboard.pm_.c:156 ../../keyboard.pm_.c:198
-msgid "Finnish"
-msgstr "Finnek"
-
-#: ../../keyboard.pm_.c:157 ../../keyboard.pm_.c:199
-msgid "French"
-msgstr "Gall"
-
-#: ../../keyboard.pm_.c:158 ../../keyboard.pm_.c:231
-msgid "Norwegian"
-msgstr "Norvegek"
-
-#: ../../keyboard.pm_.c:159
-msgid "Polish"
-msgstr "Polonek"
-
-#: ../../keyboard.pm_.c:160 ../../keyboard.pm_.c:239
-msgid "Russian"
-msgstr "Rusiek"
-
-#: ../../keyboard.pm_.c:162 ../../keyboard.pm_.c:241
-msgid "Swedish"
-msgstr "Svedek"
-
-#: ../../keyboard.pm_.c:163 ../../keyboard.pm_.c:257
-msgid "UK keyboard"
-msgstr "Stokellaoueg RU"
-
-#: ../../keyboard.pm_.c:164 ../../keyboard.pm_.c:258
-msgid "US keyboard"
-msgstr "Stokellaoueg SUA"
-
-#: ../../keyboard.pm_.c:166
-#, fuzzy
-msgid "Albanian"
-msgstr "Ukrainiek"
-
-#: ../../keyboard.pm_.c:167
-msgid "Armenian (old)"
-msgstr "Armeniek (kozh)"
-
-#: ../../keyboard.pm_.c:168
-msgid "Armenian (typewriter)"
-msgstr "Armeniek (skriverez)"
-
-#: ../../keyboard.pm_.c:169
-msgid "Armenian (phonetic)"
-msgstr "Armeniek (soniadel)"
-
-#: ../../keyboard.pm_.c:174
-msgid "Azerbaidjani (latin)"
-msgstr "Azerbaidjanek (latin)"
-
-#: ../../keyboard.pm_.c:176
-msgid "Belgian"
-msgstr "Belgian"
-
-#: ../../keyboard.pm_.c:177
-#, fuzzy
-msgid "Bengali"
-msgstr "Taolenn"
-
-#: ../../keyboard.pm_.c:178
-#, fuzzy
-msgid "Bulgarian (phonetic)"
-msgstr "Armeniek (soniadel)"
-
-#: ../../keyboard.pm_.c:179
-msgid "Bulgarian (BDS)"
-msgstr "Bulgarek (BDS)"
-
-#: ../../keyboard.pm_.c:180
-msgid "Brazilian (ABNT-2)"
-msgstr "Brasilek (ABNT-2)"
-
-#: ../../keyboard.pm_.c:183
-#, fuzzy
-msgid "Bosnian"
-msgstr "Estoniek"
-
-#: ../../keyboard.pm_.c:184
-#, fuzzy
-msgid "Belarusian"
-msgstr "Bulgarek"
-
-#: ../../keyboard.pm_.c:185
-msgid "Swiss (German layout)"
-msgstr "Suis (reizhadur alaman)"
-
-#: ../../keyboard.pm_.c:186
-msgid "Swiss (French layout)"
-msgstr "Suis (reizhadur gall)"
-
-#: ../../keyboard.pm_.c:188
-msgid "Czech (QWERTY)"
-msgstr "Tchek (QWERTY)"
-
-#: ../../keyboard.pm_.c:190
-msgid "German (no dead keys)"
-msgstr "Alaman (stokell marv ebet)"
-
-#: ../../keyboard.pm_.c:191
-msgid "Devanagari"
-msgstr ""
-
-#: ../../keyboard.pm_.c:192
-msgid "Danish"
-msgstr "Danek"
-
-#: ../../keyboard.pm_.c:193
-msgid "Dvorak (US)"
-msgstr "Dvorak (US)"
-
-#: ../../keyboard.pm_.c:194
-msgid "Dvorak (Norwegian)"
-msgstr "Dvorak (Norvegek)"
-
-#: ../../keyboard.pm_.c:195
-msgid "Dvorak (Swedish)"
-msgstr "Dvorak (Svedek)"
-
-#: ../../keyboard.pm_.c:196
-msgid "Estonian"
-msgstr "Estoniek"
-
-#: ../../keyboard.pm_.c:200
-msgid "Georgian (\"Russian\" layout)"
-msgstr "Jorjiek (reizhadur \"Rusiek\")"
-
-#: ../../keyboard.pm_.c:201
-msgid "Georgian (\"Latin\" layout)"
-msgstr "Jorjiek (reizhadur \"Latin\")"
-
-#: ../../keyboard.pm_.c:202
-msgid "Greek"
-msgstr "Gresian"
-
-#: ../../keyboard.pm_.c:203
-msgid "Gujarati"
-msgstr ""
-
-#: ../../keyboard.pm_.c:204
-msgid "Gurmukhi"
-msgstr ""
-
-#: ../../keyboard.pm_.c:205
-msgid "Hungarian"
-msgstr "Hungarian"
-
-#: ../../keyboard.pm_.c:206
-msgid "Croatian"
-msgstr "Kroatek"
-
-#: ../../keyboard.pm_.c:207
-msgid "Israeli"
-msgstr "Israelian"
-
-#: ../../keyboard.pm_.c:208
-msgid "Israeli (Phonetic)"
-msgstr "Israelian (soniadel)"
-
-#: ../../keyboard.pm_.c:209
-#, fuzzy
-msgid "Iranian"
-msgstr "Ukrainiek"
-
-#: ../../keyboard.pm_.c:210
-msgid "Icelandic"
-msgstr "Islandek"
-
-#: ../../keyboard.pm_.c:211
-msgid "Italian"
-msgstr "Italian"
-
-#: ../../keyboard.pm_.c:212
-msgid "Inuktitut"
-msgstr ""
-
-#: ../../keyboard.pm_.c:213
-msgid "Japanese 106 keys"
-msgstr ""
-
-#: ../../keyboard.pm_.c:216
-#, fuzzy
-msgid "Korean keyboard"
-msgstr "Reizhadur Stokellaoueg RU"
-
-#: ../../keyboard.pm_.c:217
-msgid "Latin American"
-msgstr "Amerikan Latin"
-
-#: ../../keyboard.pm_.c:218
-#, fuzzy
-msgid "Laotian"
-msgstr "Titouroù"
-
-#: ../../keyboard.pm_.c:219
-msgid "Lithuanian AZERTY (old)"
-msgstr "Lituaniek AZERTY (kozh)"
-
-#: ../../keyboard.pm_.c:221
-msgid "Lithuanian AZERTY (new)"
-msgstr "Lituaniek AZERTY (nevez)"
-
-#: ../../keyboard.pm_.c:222
-msgid "Lithuanian \"number row\" QWERTY"
-msgstr "Lituaniek QUERTY \"linenn sifroù\""
-
-#: ../../keyboard.pm_.c:223
-msgid "Lithuanian \"phonetic\" QWERTY"
-msgstr "Lituaniek QUERTY \"soniadel\""
-
-#: ../../keyboard.pm_.c:224
-#, fuzzy
-msgid "Latvian"
-msgstr "Titouroù"
-
-#: ../../keyboard.pm_.c:225
-msgid "Macedonian"
-msgstr "Makedonia"
-
-#: ../../keyboard.pm_.c:226
-msgid "Myanmar (Burmese)"
-msgstr ""
-
-#: ../../keyboard.pm_.c:227
-#, fuzzy
-msgid "Mongolian (cyrillic)"
-msgstr "Yougoslaviek (reizhadur latin)"
-
-#: ../../keyboard.pm_.c:228
-msgid "Maltese (UK)"
-msgstr ""
-
-#: ../../keyboard.pm_.c:229
-msgid "Maltese (US)"
-msgstr ""
-
-#: ../../keyboard.pm_.c:230
-msgid "Dutch"
-msgstr "Hollandek"
-
-#: ../../keyboard.pm_.c:232
-msgid "Polish (qwerty layout)"
-msgstr "Polonek (reizhadur qwerty)"
-
-#: ../../keyboard.pm_.c:233
-msgid "Polish (qwertz layout)"
-msgstr "Polonek (reizhadur qwerty)"
-
-#: ../../keyboard.pm_.c:234
-msgid "Portuguese"
-msgstr "Portugalek"
-
-#: ../../keyboard.pm_.c:235
-msgid "Canadian (Quebec)"
-msgstr "Kanadian (Kebek)"
-
-#: ../../keyboard.pm_.c:237
-#, fuzzy
-msgid "Romanian (qwertz)"
-msgstr "Rusiek (Yawerty)"
-
-#: ../../keyboard.pm_.c:238
-#, fuzzy
-msgid "Romanian (qwerty)"
-msgstr "Rusiek (Yawerty)"
-
-#: ../../keyboard.pm_.c:240
-msgid "Russian (Yawerty)"
-msgstr "Rusiek (Yawerty)"
-
-#: ../../keyboard.pm_.c:242
-msgid "Slovenian"
-msgstr "Slovek"
-
-#: ../../keyboard.pm_.c:243
-msgid "Slovakian (QWERTZ)"
-msgstr "Slovakek (QWERTZ)"
-
-#: ../../keyboard.pm_.c:244
-msgid "Slovakian (QWERTY)"
-msgstr "Slovakek (QWERTY)"
-
-#: ../../keyboard.pm_.c:246
-#, fuzzy
-msgid "Serbian (cyrillic)"
-msgstr "Yougoslaviek (reizhadur latin)"
-
-#: ../../keyboard.pm_.c:248
-#, fuzzy
-msgid "Tamil (Unicode)"
-msgstr "i18n (brav)"
-
-#: ../../keyboard.pm_.c:249
-msgid "Tamil (TSCII)"
-msgstr ""
-
-#: ../../keyboard.pm_.c:250
-msgid "Thai keyboard"
-msgstr "Stokellaoueg Thai"
-
-#: ../../keyboard.pm_.c:252
-#, fuzzy
-msgid "Tajik keyboard"
-msgstr "Stokellaoueg Thai"
-
-#: ../../keyboard.pm_.c:253
-msgid "Turkish (traditional \"F\" model)"
-msgstr "Turkek (hengounel doare \"F\")"
-
-#: ../../keyboard.pm_.c:254
-msgid "Turkish (modern \"Q\" model)"
-msgstr "Turkek (arnevez doare \"Q\")"
-
-#: ../../keyboard.pm_.c:256
-msgid "Ukrainian"
-msgstr "Ukrainiek"
-
-#: ../../keyboard.pm_.c:259
-msgid "US keyboard (international)"
-msgstr "Stokellaoueg SUA (etrevroadel)"
-
-#: ../../keyboard.pm_.c:260
-#, fuzzy
-msgid "Vietnamese \"numeric row\" QWERTY"
-msgstr "Lituaniek QUERTY \"linenn sifroù\""
-
-#: ../../keyboard.pm_.c:261
-msgid "Yugoslavian (latin)"
-msgstr "Yougoslaviek (latin)"
-
-#: ../../keyboard.pm_.c:268
-msgid "Right Alt key"
-msgstr ""
-
-#: ../../keyboard.pm_.c:269
-msgid "Both Shift keys simultaneously"
-msgstr ""
-
-#: ../../keyboard.pm_.c:270
-msgid "Control and Shift keys simultaneously"
-msgstr ""
-
-#: ../../keyboard.pm_.c:271
-msgid "CapsLock key"
-msgstr ""
-
-#: ../../keyboard.pm_.c:272
-msgid "Ctrl and Alt keys simultaneously"
-msgstr ""
-
-#: ../../keyboard.pm_.c:273
-msgid "Alt and Shift keys simultaneously"
-msgstr ""
-
-#: ../../keyboard.pm_.c:274
-msgid "\"Menu\" key"
-msgstr ""
-
-#: ../../keyboard.pm_.c:275
-msgid "Left \"Windows\" key"
-msgstr ""
-
-#: ../../keyboard.pm_.c:276
-msgid "Right \"Windows\" key"
-msgstr ""
-
-#: ../../loopback.pm_.c:32
-#, c-format
-msgid "Circular mounts %s\n"
-msgstr "Marc'hañ kelc'hiek %s\n"
-
-#: ../../lvm.pm_.c:103
-msgid "Remove the logical volumes first\n"
-msgstr ""
-
-#: ../../modparm.pm_.c:50
-#, fuzzy
-msgid "a number"
-msgstr "Niverenn bellgomz"
-
-#: ../../modparm.pm_.c:52
-#, c-format
-msgid "%d comma separated numbers"
-msgstr ""
-
-#: ../../modparm.pm_.c:52
-#, c-format
-msgid "%d comma separated strings"
-msgstr ""
-
-#: ../../modparm.pm_.c:54
-msgid "comma separated numbers"
-msgstr ""
-
-#: ../../modparm.pm_.c:54
-#, fuzzy
-msgid "comma separated strings"
-msgstr "Furmadiñ parzhadurioù"
-
-#: ../../modules.pm_.c:293
-msgid ""
-"PCMCIA support no longer exists for 2.2 kernels. Please use a 2.4 kernel."
-msgstr ""
-
-#: ../../mouse.pm_.c:25
-msgid "Sun - Mouse"
-msgstr "Logodenn Sun"
-
-#: ../../mouse.pm_.c:32
-msgid "Logitech MouseMan+"
-msgstr "Logitech MouseMan+"
-
-#: ../../mouse.pm_.c:33
-msgid "Generic PS2 Wheel Mouse"
-msgstr "Logodenn rummel PS2 rodellek"
-
-#: ../../mouse.pm_.c:34
-msgid "GlidePoint"
-msgstr "GlidePoint"
-
-#: ../../mouse.pm_.c:36 ../../mouse.pm_.c:65
-msgid "Kensington Thinking Mouse"
-msgstr "Logodenn Kensington Thinking"
-
-#: ../../mouse.pm_.c:37 ../../mouse.pm_.c:61
-msgid "Genius NetMouse"
-msgstr "Genius NetMouse"
-
-#: ../../mouse.pm_.c:38
-msgid "Genius NetScroll"
-msgstr "Genius NetScroll"
-
-#: ../../mouse.pm_.c:39 ../../mouse.pm_.c:48
-#, fuzzy
-msgid "Microsoft Explorer"
-msgstr "Microsoft IntelliMouse"
-
-#: ../../mouse.pm_.c:44 ../../mouse.pm_.c:70
-msgid "1 button"
-msgstr "1 nozelenn"
-
-#: ../../mouse.pm_.c:45 ../../mouse.pm_.c:53
-msgid "Generic 2 Button Mouse"
-msgstr "Logodenn rummel 2 nozelenn"
-
-#: ../../mouse.pm_.c:47
-msgid "Wheel"
-msgstr "Rodel"
-
-#: ../../mouse.pm_.c:51
-msgid "serial"
-msgstr "a-steud"
-
-#: ../../mouse.pm_.c:54
-msgid "Generic 3 Button Mouse"
-msgstr "Logodenn rummel 3 nozelenn"
-
-#: ../../mouse.pm_.c:55
-msgid "Microsoft IntelliMouse"
-msgstr "Microsoft IntelliMouse"
-
-#: ../../mouse.pm_.c:56
-msgid "Logitech MouseMan"
-msgstr "Logitech MouseMan+/FirstMouse+"
-
-#: ../../mouse.pm_.c:57
-msgid "Mouse Systems"
-msgstr "Mouse Systems"
-
-#: ../../mouse.pm_.c:59
-msgid "Logitech CC Series"
-msgstr "Logitech doare CC"
-
-#: ../../mouse.pm_.c:60
-msgid "Logitech MouseMan+/FirstMouse+"
-msgstr "Logitech MouseMan+/FirstMouse+"
-
-#: ../../mouse.pm_.c:62
-msgid "MM Series"
-msgstr "Doare MM"
-
-#: ../../mouse.pm_.c:63
-msgid "MM HitTablet"
-msgstr "MM HitTablet"
-
-#: ../../mouse.pm_.c:64
-msgid "Logitech Mouse (serial, old C7 type)"
-msgstr "Logodenn Logitech (a-steud, seurt C7 kozh)"
-
-#: ../../mouse.pm_.c:68
-msgid "busmouse"
-msgstr "Logodenn bus"
-
-#: ../../mouse.pm_.c:71
-msgid "2 buttons"
-msgstr "2 nozelenn"
-
-#: ../../mouse.pm_.c:72
-msgid "3 buttons"
-msgstr "3 nozelenn"
-
-#: ../../mouse.pm_.c:75
-msgid "none"
-msgstr "ebet"
-
-#: ../../mouse.pm_.c:77
-msgid "No mouse"
-msgstr "Logodenn ebet"
-
-#: ../../mouse.pm_.c:486
-#, fuzzy
-msgid "Please test the mouse"
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../mouse.pm_.c:487
-#, fuzzy
-msgid "To activate the mouse,"
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../mouse.pm_.c:488
-msgid "MOVE YOUR WHEEL!"
-msgstr "FIÑV HO RODELL !"
-
-#: ../../my_gtk.pm_.c:64
-#, fuzzy
-msgid "-adobe-utopia-regular-r-*-*-25-*-*-*-p-*-iso8859-*,*-r-*"
-msgstr "-adobe-utopia-medium-r-normal-*-12-*-*-*-p-*-iso8859-*,*-r-*"
-
-#: ../../my_gtk.pm_.c:159
-msgid "Finish"
-msgstr "Disoc'h"
-
-#: ../../my_gtk.pm_.c:159 ../../printerdrake.pm_.c:2171
-msgid "Next ->"
-msgstr "A heul ->"
-
-#: ../../my_gtk.pm_.c:287
-msgid "Is this correct?"
-msgstr "Ha reizh eo ?"
-
-#: ../../my_gtk.pm_.c:359 ../../services.pm_.c:222
-msgid "Info"
-msgstr "Titouroù"
-
-#: ../../my_gtk.pm_.c:380
-msgid "Expand Tree"
-msgstr "Astenn ar wezenn"
-
-#: ../../my_gtk.pm_.c:381
-msgid "Collapse Tree"
-msgstr "Plegañ ar wezenn"
-
-#: ../../my_gtk.pm_.c:382
-msgid "Toggle between flat and group sorted"
-msgstr "Gwintañ etre kompez ha rummet dre strollad"
-
-#: ../../network/adsl.pm_.c:23 ../../network/ethernet.pm_.c:36
-#, fuzzy
-msgid "Connect to the Internet"
-msgstr "Anv ar gevreadenn"
-
-#: ../../network/adsl.pm_.c:24
-msgid ""
-"The most common way to connect with adsl is pppoe.\n"
-"Some connections use pptp, a few ones use dhcp.\n"
-"If you don't know, choose 'use pppoe'"
-msgstr ""
-
-#: ../../network/adsl.pm_.c:26
-msgid "Alcatel speedtouch usb"
-msgstr ""
-
-#: ../../network/adsl.pm_.c:26
-msgid "use dhcp"
-msgstr "implijit dhcp"
-
-#: ../../network/adsl.pm_.c:26
-msgid "use pppoe"
-msgstr "implijit pppoe"
-
-#: ../../network/adsl.pm_.c:26
-msgid "use pptp"
-msgstr "implijit pptp"
-
-#: ../../network/drakfirewall.pm_.c:12
-#, fuzzy
-msgid "Web Server"
-msgstr "Servijer"
-
-#: ../../network/drakfirewall.pm_.c:17
-#, fuzzy
-msgid "Domain Name Server"
-msgstr "Anv ar domani"
-
-#: ../../network/drakfirewall.pm_.c:32
-#, fuzzy
-msgid "Mail Server"
-msgstr "Stlennvonioù"
-
-#: ../../network/drakfirewall.pm_.c:37
-#, fuzzy
-msgid "POP and IMAP Server"
-msgstr "Servijer LDAP"
-
-#: ../../network/drakfirewall.pm_.c:111
-#, fuzzy
-msgid "No network card"
-msgstr "kartenn rouedad kavet ebet"
-
-#: ../../network/drakfirewall.pm_.c:129
-msgid ""
-"drakfirewall configurator\n"
-"\n"
-"This configures a personal firewall for this Mandrake Linux machine.\n"
-"For a powerful dedicated firewall solution, please look to the\n"
-"specialized MandrakeSecurity Firewall distribution."
-msgstr ""
-
-#: ../../network/drakfirewall.pm_.c:147
-msgid "Which services would you like to allow the Internet to connect to?"
-msgstr ""
-
-#: ../../network/drakfirewall.pm_.c:148
-msgid ""
-"You can enter miscellaneous ports. \n"
-"Valid examples are: 139/tcp 139/udp.\n"
-"Have a look at /etc/services for information."
-msgstr ""
-
-#: ../../network/drakfirewall.pm_.c:154
-#, c-format
-msgid ""
-"Invalid port given: %s.\n"
-"The proper format is \"port/tcp\" or \"port/udp\", \n"
-"where port is between 1 and 65535."
-msgstr ""
-
-#: ../../network/drakfirewall.pm_.c:162
-msgid "Everything (no firewall)"
-msgstr ""
-
-#: ../../network/drakfirewall.pm_.c:164
-#, fuzzy
-msgid "Other ports"
-msgstr "Amprouiñ ar porzhioù"
-
-#: ../../network/ethernet.pm_.c:37
-#, fuzzy
-msgid ""
-"Which dhcp client do you want to use?\n"
-"Default is dhcpcd"
-msgstr "Pe seurt parzhadur a vennit ?"
-
-#: ../../network/ethernet.pm_.c:88
-msgid ""
-"No ethernet network adapter has been detected on your system.\n"
-"I cannot set up this connection type."
-msgstr ""
-
-#: ../../network/ethernet.pm_.c:92 ../../standalone/drakgw_.c:236
-#, fuzzy
-msgid "Choose the network interface"
-msgstr "Dibabit ar ment nevez"
-
-#: ../../network/ethernet.pm_.c:93
-#, fuzzy
-msgid ""
-"Please choose which network adapter you want to use to connect to Internet"
-msgstr "Dibabit ar porzh a-steud m'eo luget ho logodenn outañ, mar plij."
-
-#: ../../network/ethernet.pm_.c:178
-msgid "no network card found"
-msgstr "kartenn rouedad kavet ebet"
-
-#: ../../network/ethernet.pm_.c:202 ../../network/network.pm_.c:362
-msgid "Configuring network"
-msgstr "Kefluniañ ar rouedad"
-
-#: ../../network/ethernet.pm_.c:203
-#, fuzzy
-msgid ""
-"Please enter your host name if you know it.\n"
-"Some DHCP servers require the hostname to work.\n"
-"Your host name should be a fully-qualified host name,\n"
-"such as ``mybox.mylab.myco.com''."
-msgstr ""
-"Roit ho anv ostiz mar plij.\n"
-"Un anv peurzoareet a zlefe bezañ hini o ostiz,\n"
-"evel ``mabenveg.mastal.makomp.com''.\n"
-"Gallout a rit ivez reiñ chomlec'h IP an dreuzell m'hoc'h eus unan"
-
-#: ../../network/ethernet.pm_.c:207 ../../network/network.pm_.c:367
-msgid "Host name"
-msgstr "Anv an ostiz"
-
-#: ../../network/isdn.pm_.c:21 ../../network/isdn.pm_.c:44
-#: ../../network/netconnect.pm_.c:90 ../../network/netconnect.pm_.c:104
-#: ../../network/netconnect.pm_.c:159 ../../network/netconnect.pm_.c:174
-#: ../../network/netconnect.pm_.c:201 ../../network/netconnect.pm_.c:224
-#: ../../network/netconnect.pm_.c:232
-#, fuzzy
-msgid "Network Configuration Wizard"
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../network/isdn.pm_.c:22
-#, fuzzy
-msgid "External ISDN modem"
-msgstr "Mailh"
-
-#: ../../network/isdn.pm_.c:22
-msgid "Internal ISDN card"
-msgstr ""
-
-#: ../../network/isdn.pm_.c:22
-#, fuzzy
-msgid "What kind is your ISDN connection?"
-msgstr "Ouzh pe borzh a-steud eo luget ho logodenn ?"
-
-#: ../../network/isdn.pm_.c:45
-msgid ""
-"Which ISDN configuration do you prefer?\n"
-"\n"
-"* The Old configuration uses isdn4net. It contains powerful\n"
-" tools, but is tricky to configure, and not standard.\n"
-"\n"
-"* The New configuration is easier to understand, more\n"
-" standard, but with less tools.\n"
-"\n"
-"We recommand the light configuration.\n"
-msgstr ""
-
-#: ../../network/isdn.pm_.c:54
-#, fuzzy
-msgid "New configuration (isdn-light)"
-msgstr "o lenn ar c'hefluniadur"
-
-#: ../../network/isdn.pm_.c:54
-#, fuzzy
-msgid "Old configuration (isdn4net)"
-msgstr "o lenn ar c'hefluniadur"
-
-#: ../../network/isdn.pm_.c:170 ../../network/isdn.pm_.c:188
-#: ../../network/isdn.pm_.c:200 ../../network/isdn.pm_.c:206
-#: ../../network/isdn.pm_.c:213 ../../network/isdn.pm_.c:223
-msgid "ISDN Configuration"
-msgstr "Kefluniadur ISDN"
-
-#: ../../network/isdn.pm_.c:170
-msgid ""
-"Select your provider.\n"
-"If it isn't listed, choose Unlisted."
-msgstr ""
-
-#: ../../network/isdn.pm_.c:183
-msgid "Europe protocol"
-msgstr ""
-
-#: ../../network/isdn.pm_.c:183
-msgid "Europe protocol (EDSS1)"
-msgstr ""
-
-#: ../../network/isdn.pm_.c:185
-#, fuzzy
-msgid "Protocol for the rest of the world"
-msgstr "Amprouiñ ar c'hefluniadur"
-
-#: ../../network/isdn.pm_.c:185
-msgid ""
-"Protocol for the rest of the world\n"
-"No D-Channel (leased lines)"
-msgstr ""
-
-#: ../../network/isdn.pm_.c:189
-#, fuzzy
-msgid "Which protocol do you want to use?"
-msgstr "Pe seurt parzhadur a vennit ?"
-
-#: ../../network/isdn.pm_.c:200
-#, c-format
-msgid "Found \"%s\" interface do you want to use it ?"
-msgstr ""
-
-#: ../../network/isdn.pm_.c:207
-#, fuzzy
-msgid "What kind of card do you have?"
-msgstr "Peseurt moullerez hoc'h eus ?"
-
-#: ../../network/isdn.pm_.c:208
-msgid "I don't know"
-msgstr ""
-
-#: ../../network/isdn.pm_.c:208
-msgid "ISA / PCMCIA"
-msgstr "ISA / PCMCIA"
-
-#: ../../network/isdn.pm_.c:208
-msgid "PCI"
-msgstr "PCI"
-
-#: ../../network/isdn.pm_.c:214
-msgid ""
-"\n"
-"If you have an ISA card, the values on the next screen should be right.\n"
-"\n"
-"If you have a PCMCIA card, you have to know the \"irq\" and \"io\" of your "
-"card.\n"
-msgstr ""
-
-#: ../../network/isdn.pm_.c:218
-msgid "Abort"
-msgstr "Dilaoskel"
-
-#: ../../network/isdn.pm_.c:218
-#, fuzzy
-msgid "Continue"
-msgstr "Kenderc'hel evelato ?"
-
-#: ../../network/isdn.pm_.c:224
-#, fuzzy
-msgid "Which is your ISDN card?"
-msgstr "Pehini eo ho takad-eur ?"
-
-#: ../../network/isdn.pm_.c:243
-msgid ""
-"I have detected an ISDN PCI card, but I don't know its type. Please select a "
-"PCI card on the next screen."
-msgstr ""
-
-#: ../../network/isdn.pm_.c:252
-msgid "No ISDN PCI card found. Please select one on the next screen."
-msgstr ""
-
-#: ../../network/modem.pm_.c:39
-msgid "Please choose which serial port your modem is connected to."
-msgstr "Dibabit ouzh pe borzh a-steud eo luget ho modem, mar plij."
-
-#: ../../network/modem.pm_.c:44
-msgid "Dialup options"
-msgstr "Dibarzhoù sifrennañ"
-
-#: ../../network/modem.pm_.c:45 ../../standalone/drakconnect_.c:621
-msgid "Connection name"
-msgstr "Anv ar gevreadenn"
-
-#: ../../network/modem.pm_.c:46 ../../standalone/drakconnect_.c:622
-#, fuzzy
-msgid "Phone number"
-msgstr "Niverenn bellgomz"
-
-#: ../../network/modem.pm_.c:47 ../../standalone/drakconnect_.c:623
-msgid "Login ID"
-msgstr "Anv ereañ"
-
-#: ../../network/modem.pm_.c:49 ../../standalone/drakconnect_.c:625
-msgid "CHAP"
-msgstr "CHAP"
-
-#: ../../network/modem.pm_.c:49 ../../standalone/drakconnect_.c:625
-msgid "PAP"
-msgstr "PAP"
-
-#: ../../network/modem.pm_.c:49 ../../standalone/drakconnect_.c:625
-msgid "Script-based"
-msgstr "Diazezet war ur skrid"
-
-#: ../../network/modem.pm_.c:49 ../../standalone/drakconnect_.c:625
-msgid "Terminal-based"
-msgstr "Diazezet war un dermenell"
-
-#: ../../network/modem.pm_.c:50 ../../standalone/drakconnect_.c:626
-msgid "Domain name"
-msgstr "Anv ar domani"
-
-#: ../../network/modem.pm_.c:51 ../../standalone/drakconnect_.c:627
-msgid "First DNS Server (optional)"
-msgstr "Servijer DNS kentañ (da zilenn)"
-
-#: ../../network/modem.pm_.c:52 ../../standalone/drakconnect_.c:628
-msgid "Second DNS Server (optional)"
-msgstr "Eil servijer DNS (da zilenn)"
-
-#: ../../network/netconnect.pm_.c:29
-msgid ""
-"\n"
-"You can disconnect or reconfigure your connection."
-msgstr ""
-
-#: ../../network/netconnect.pm_.c:29 ../../network/netconnect.pm_.c:32
-#, fuzzy
-msgid ""
-"\n"
-"You can reconfigure your connection."
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../network/netconnect.pm_.c:29
-#, fuzzy
-msgid "You are currently connected to internet."
-msgstr "Da beseurt pladenn e mennit dilec'hiañ ?"
-
-#: ../../network/netconnect.pm_.c:32
-#, fuzzy
-msgid ""
-"\n"
-"You can connect to Internet or reconfigure your connection."
-msgstr "Anv ar gevreadenn"
-
-#: ../../network/netconnect.pm_.c:32
-#, fuzzy
-msgid "You are not currently connected to Internet."
-msgstr "Da beseurt pladenn e mennit dilec'hiañ ?"
-
-#: ../../network/netconnect.pm_.c:36
-#, fuzzy
-msgid "Connect"
-msgstr "Anv ar gevreadenn"
-
-#: ../../network/netconnect.pm_.c:38
-#, fuzzy
-msgid "Disconnect"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../network/netconnect.pm_.c:40
-#, fuzzy
-msgid "Configure the connection"
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../network/netconnect.pm_.c:45
-#, fuzzy
-msgid "Internet connection & configuration"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../network/netconnect.pm_.c:95
-#, fuzzy, c-format
-msgid "We are now going to configure the %s connection."
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../network/netconnect.pm_.c:104
-#, fuzzy, c-format
-msgid ""
-"\n"
-"\n"
-"\n"
-"We are now going to configure the %s connection.\n"
-"\n"
-"\n"
-"Press OK to continue."
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../network/netconnect.pm_.c:133 ../../network/netconnect.pm_.c:251
-#: ../../network/netconnect.pm_.c:271 ../../network/tools.pm_.c:63
-msgid "Network Configuration"
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../network/netconnect.pm_.c:134
-msgid ""
-"Because you are doing a network installation, your network is already "
-"configured.\n"
-"Click on Ok to keep your configuration, or cancel to reconfigure your "
-"Internet & Network connection.\n"
-msgstr ""
-
-#: ../../network/netconnect.pm_.c:160
-msgid ""
-"Welcome to The Network Configuration Wizard.\n"
-"\n"
-"We are about to configure your internet/network connection.\n"
-"If you don't want to use the auto detection, deselect the checkbox.\n"
-msgstr ""
-
-#: ../../network/netconnect.pm_.c:166
-#, fuzzy
-msgid "Choose the profile to configure"
-msgstr "Dibabit ar ment nevez"
-
-#: ../../network/netconnect.pm_.c:167
-msgid "Use auto detection"
-msgstr ""
-
-#: ../../network/netconnect.pm_.c:168 ../../printerdrake.pm_.c:3199
-#: ../../standalone/drakconnect_.c:274 ../../standalone/drakconnect_.c:277
-#: ../../standalone/drakfloppy_.c:146
-msgid "Expert Mode"
-msgstr "Mod mailh"
-
-#: ../../network/netconnect.pm_.c:174 ../../printerdrake.pm_.c:399
-msgid "Detecting devices..."
-msgstr "O tinoiñ trobarzhelloù..."
-
-#: ../../network/netconnect.pm_.c:185 ../../network/netconnect.pm_.c:194
-#, fuzzy
-msgid "Normal modem connection"
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../network/netconnect.pm_.c:185 ../../network/netconnect.pm_.c:194
-#, fuzzy, c-format
-msgid "detected on port %s"
-msgstr "Poent marc'hañ doubl %s"
-
-#: ../../network/netconnect.pm_.c:186 ../../network/netconnect.pm_.c:195
-#, fuzzy
-msgid "ISDN connection"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../network/netconnect.pm_.c:186 ../../network/netconnect.pm_.c:195
-#, c-format
-msgid "detected %s"
-msgstr "kavoutet %s"
-
-#: ../../network/netconnect.pm_.c:187 ../../network/netconnect.pm_.c:196
-#, fuzzy
-msgid "ADSL connection"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../network/netconnect.pm_.c:187 ../../network/netconnect.pm_.c:196
-#, c-format
-msgid "detected on interface %s"
-msgstr "kavoutet war %s"
-
-#: ../../network/netconnect.pm_.c:188 ../../network/netconnect.pm_.c:197
-#, fuzzy
-msgid "Cable connection"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../network/netconnect.pm_.c:188 ../../network/netconnect.pm_.c:197
-#, fuzzy
-msgid "cable connection detected"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../network/netconnect.pm_.c:189 ../../network/netconnect.pm_.c:198
-#, fuzzy
-msgid "LAN connection"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../network/netconnect.pm_.c:189 ../../network/netconnect.pm_.c:198
-msgid "ethernet card(s) detected"
-msgstr "kartenn(où) ethernet kavoutet"
-
-#: ../../network/netconnect.pm_.c:201
-#, fuzzy
-msgid "Choose the connection you want to configure"
-msgstr "Dibabit ar benveg a vennit staliañ"
-
-#: ../../network/netconnect.pm_.c:225
-msgid ""
-"You have configured multiple ways to connect to the Internet.\n"
-"Choose the one you want to use.\n"
-"\n"
-msgstr ""
-
-#: ../../network/netconnect.pm_.c:226
-#, fuzzy
-msgid "Internet connection"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../network/netconnect.pm_.c:232
-#, fuzzy
-msgid "Do you want to start the connection at boot?"
-msgstr "Mennout a rit implijout aboot ?"
-
-#: ../../network/netconnect.pm_.c:246
-#, fuzzy
-msgid "Network configuration"
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../network/netconnect.pm_.c:247
-msgid "The network needs to be restarted"
-msgstr ""
-
-#: ../../network/netconnect.pm_.c:251
-#, fuzzy, c-format
-msgid ""
-"A problem occured while restarting the network: \n"
-"\n"
-"%s"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../network/netconnect.pm_.c:261
-msgid ""
-"Congratulations, the network and Internet configuration is finished.\n"
-"The configuration will now be applied to your system.\n"
-"\n"
-msgstr ""
-
-#: ../../network/netconnect.pm_.c:265
-msgid ""
-"After this is done, we recommend that you restart your X environment to "
-"avoid any hostname-related problems."
-msgstr ""
-
-#: ../../network/netconnect.pm_.c:266
-msgid ""
-"Problems occured during configuration.\n"
-"Test your connection via net_monitor or mcc. If your connection doesn't "
-"work, you might want to relaunch the configuration."
-msgstr ""
-
-#: ../../network/network.pm_.c:291
-msgid ""
-"WARNING: this device has been previously configured to connect to the "
-"Internet.\n"
-"Simply accept to keep this device configured.\n"
-"Modifying the fields below will override this configuration."
-msgstr ""
-
-#: ../../network/network.pm_.c:296
-msgid ""
-"Please enter the IP configuration for this machine.\n"
-"Each item should be entered as an IP address in dotted-decimal\n"
-"notation (for example, 1.2.3.4)."
-msgstr ""
-"Skrivit ar c'hefluniadur IP evit ar benveg-mañ mar plij.\n"
-"Pep mellad a zlefe bezañ skrivet evel ur chomlec'h IP e stumm\n"
-"sifroù dekvel pikoù etrezo (da skouer 1.2.3.4)."
-
-#: ../../network/network.pm_.c:306 ../../network/network.pm_.c:307
-#, c-format
-msgid "Configuring network device %s"
-msgstr "O kefluniañ an drobarzhell rouedad %s"
-
-#: ../../network/network.pm_.c:307
-#, fuzzy, c-format
-msgid " (driver %s)"
-msgstr "Servijer XFree86 : %s\n"
-
-#: ../../network/network.pm_.c:309 ../../standalone/drakconnect_.c:231
-#: ../../standalone/drakconnect_.c:467
-msgid "IP address"
-msgstr "Chomlec'h IP"
-
-#: ../../network/network.pm_.c:310 ../../standalone/drakconnect_.c:468
-msgid "Netmask"
-msgstr "Maskl rouedad"
-
-#: ../../network/network.pm_.c:311
-msgid "(bootp/dhcp)"
-msgstr "(bootp/dhcp)"
-
-#: ../../network/network.pm_.c:311
-msgid "Automatic IP"
-msgstr "IP emgefreek"
-
-#: ../../network/network.pm_.c:312
-#, fuzzy
-msgid "Start at boot"
-msgstr "Krouiñ ur bladennig loc'hañ"
-
-#: ../../network/network.pm_.c:333 ../../printerdrake.pm_.c:875
-msgid "IP address should be in format 1.2.3.4"
-msgstr "Er furmad 1.2.3.4 e tlefe bezañ ar chomlec'h IP"
-
-#: ../../network/network.pm_.c:363
-msgid ""
-"Please enter your host name.\n"
-"Your host name should be a fully-qualified host name,\n"
-"such as ``mybox.mylab.myco.com''.\n"
-"You may also enter the IP address of the gateway if you have one"
-msgstr ""
-"Roit ho anv ostiz mar plij.\n"
-"Un anv peurzoareet a zlefe bezañ hini o ostiz,\n"
-"evel ``mabenveg.mastal.makomp.com''.\n"
-"Gallout a rit ivez reiñ chomlec'h IP an dreuzell m'hoc'h eus unan"
-
-#: ../../network/network.pm_.c:368
-msgid "DNS server"
-msgstr "Servijer DNS"
-
-#: ../../network/network.pm_.c:369
-#, c-format
-msgid "Gateway (e.g. %s)"
-msgstr ""
-
-#: ../../network/network.pm_.c:371
-msgid "Gateway device"
-msgstr "Trobarzhell an dreuzell"
-
-#: ../../network/network.pm_.c:376
-#, fuzzy
-msgid "DNS server address should be in format 1.2.3.4"
-msgstr "Er furmad 1.2.3.4 e tlefe bezañ ar chomlec'h IP"
-
-#: ../../network/network.pm_.c:380
-#, fuzzy
-msgid "Gateway address should be in format 1.2.3.4"
-msgstr "Er furmad 1.2.3.4 e tlefe bezañ ar chomlec'h IP"
-
-#: ../../network/network.pm_.c:394
-#, fuzzy
-msgid "Proxies configuration"
-msgstr "Kefluniadur goude staliañ"
-
-#: ../../network/network.pm_.c:395
-msgid "HTTP proxy"
-msgstr "Proksi HTTP"
-
-#: ../../network/network.pm_.c:396
-msgid "FTP proxy"
-msgstr "Proksi FTP"
-
-#: ../../network/network.pm_.c:397
-msgid "Track network card id (useful for laptops)"
-msgstr ""
-
-#: ../../network/network.pm_.c:400
-msgid "Proxy should be http://..."
-msgstr "http://... a zlefe bezañ ar proksi"
-
-#: ../../network/network.pm_.c:401 ../../proxy.pm_.c:65
-#, fuzzy
-msgid "Url should begin with 'ftp:' or 'http:'"
-msgstr "http://... a zlefe bezañ ar proksi"
-
-#: ../../network/shorewall.pm_.c:24
-#, fuzzy
-msgid "Firewalling configuration detected!"
-msgstr "o lenn ar c'hefluniadur"
-
-#: ../../network/shorewall.pm_.c:25
-msgid ""
-"Warning! An existing firewalling configuration has been detected. You may "
-"need some manual fix after installation."
-msgstr ""
-
-#: ../../network/tools.pm_.c:41
-#, fuzzy
-msgid "Internet configuration"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../network/tools.pm_.c:42
-#, fuzzy
-msgid "Do you want to try to connect to the Internet now?"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../network/tools.pm_.c:46 ../../standalone/drakconnect_.c:196
-#, fuzzy
-msgid "Testing your connection..."
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../network/tools.pm_.c:56
-#, fuzzy
-msgid "The system is now connected to Internet."
-msgstr "Da beseurt pladenn e mennit dilec'hiañ ?"
-
-#: ../../network/tools.pm_.c:57
-msgid "For security reason, it will be disconnected now."
-msgstr ""
-
-#: ../../network/tools.pm_.c:58
-#, fuzzy
-msgid ""
-"The system doesn't seem to be connected to internet.\n"
-"Try to reconfigure your connection."
-msgstr "Anv ar gevreadenn"
-
-#: ../../network/tools.pm_.c:82
-#, fuzzy
-msgid "Connection Configuration"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../network/tools.pm_.c:83
-msgid "Please fill or check the field below"
-msgstr ""
-
-#: ../../network/tools.pm_.c:85 ../../standalone/drakconnect_.c:607
-msgid "Card IRQ"
-msgstr "IRQ kartenn"
-
-#: ../../network/tools.pm_.c:86 ../../standalone/drakconnect_.c:608
-msgid "Card mem (DMA)"
-msgstr "Memor kartenn (DMA)"
-
-#: ../../network/tools.pm_.c:87 ../../standalone/drakconnect_.c:609
-msgid "Card IO"
-msgstr "IO kartenn"
-
-#: ../../network/tools.pm_.c:88 ../../standalone/drakconnect_.c:610
-msgid "Card IO_0"
-msgstr "IO_0 kartenn"
-
-#: ../../network/tools.pm_.c:89 ../../standalone/drakconnect_.c:611
-msgid "Card IO_1"
-msgstr "IO_1 kartenn"
-
-#: ../../network/tools.pm_.c:90 ../../standalone/drakconnect_.c:612
-msgid "Your personal phone number"
-msgstr ""
-
-#: ../../network/tools.pm_.c:91 ../../standalone/drakconnect_.c:613
-msgid "Provider name (ex provider.net)"
-msgstr ""
-
-#: ../../network/tools.pm_.c:92 ../../standalone/drakconnect_.c:614
-#, fuzzy
-msgid "Provider phone number"
-msgstr "Niverenn bellgomz"
-
-#: ../../network/tools.pm_.c:93 ../../standalone/drakconnect_.c:615
-msgid "Provider dns 1 (optional)"
-msgstr "Dibarzhoù ar voullerez (da zilenn)"
-
-#: ../../network/tools.pm_.c:94 ../../standalone/drakconnect_.c:616
-msgid "Provider dns 2 (optional)"
-msgstr "Dibarzhoù ar voullerez (da zilenn)"
-
-#: ../../network/tools.pm_.c:95
-#, fuzzy
-msgid "Choose your country"
-msgstr "Dibabit ho stokellaoueg"
-
-#: ../../network/tools.pm_.c:96 ../../standalone/drakconnect_.c:619
-#, fuzzy
-msgid "Dialing mode"
-msgstr "Anv domani"
-
-#: ../../network/tools.pm_.c:97 ../../standalone/drakconnect_.c:631
-#, fuzzy
-msgid "Connection speed"
-msgstr "Anv ar gevreadenn"
-
-#: ../../network/tools.pm_.c:98 ../../standalone/drakconnect_.c:632
-#, fuzzy
-msgid "Connection timeout (in sec)"
-msgstr "Anv ar gevreadenn"
-
-#: ../../network/tools.pm_.c:99 ../../standalone/drakconnect_.c:617
-#, fuzzy
-msgid "Account Login (user name)"
-msgstr "Poent marc'hañ"
-
-#: ../../network/tools.pm_.c:100 ../../standalone/drakconnect_.c:618
-#: ../../standalone/drakconnect_.c:649
-#, fuzzy
-msgid "Account Password"
-msgstr "Tremenger"
-
-#: ../../network/tools.pm_.c:104 ../../network/tools.pm_.c:118
-msgid "United Kingdom"
-msgstr ""
-
-#: ../../partition_table.pm_.c:602
-msgid "mount failed: "
-msgstr "marc'hañ sac'het : "
-
-#: ../../partition_table.pm_.c:666
-msgid "Extended partition not supported on this platform"
-msgstr ""
-
-#: ../../partition_table.pm_.c:684
-msgid ""
-"You have a hole in your partition table but I can't use it.\n"
-"The only solution is to move your primary partitions to have the hole next "
-"to the extended partitions."
-msgstr ""
-"Un toull a zo en ho taolenn barzhañ hogen n'hellan ket e implijout.\n"
-"Fiñval ar parzhadurioù kentañ derez evit ma vo an toull stok ouzh ar "
-"parzhadurioù astennet eo an diskoulm"
-
-#: ../../partition_table.pm_.c:774
-#, c-format
-msgid "Restoring from file %s failed: %s"
-msgstr "Assevel adalek ar restr %s sac'het %s"
-
-#: ../../partition_table.pm_.c:776
-msgid "Bad backup file"
-msgstr "Restr gwareziñ siek"
-
-#: ../../partition_table.pm_.c:798
-#, c-format
-msgid "Error writing to file %s"
-msgstr "Fazi en ur skrivañ er restr %s"
-
-#: ../../partition_table/raw.pm_.c:189
-msgid ""
-"Something bad is happening on your drive. \n"
-"A test to check the integrity of data has failed. \n"
-"It means writing anything on the disk will end up with random trash"
-msgstr ""
-
-#: ../../pkgs.pm_.c:26
-msgid "must have"
-msgstr "a rankfec'h kaout"
-
-#: ../../pkgs.pm_.c:27
-msgid "important"
-msgstr "a-bouez"
-
-#: ../../pkgs.pm_.c:28
-msgid "very nice"
-msgstr "brav-tre"
-
-#: ../../pkgs.pm_.c:29
-msgid "nice"
-msgstr "brav"
-
-#: ../../pkgs.pm_.c:30
-msgid "maybe"
-msgstr "marteze"
-
-#: ../../printer.pm_.c:26
-msgid "CUPS - Common Unix Printing System"
-msgstr ""
-
-#: ../../printer.pm_.c:27
-msgid "LPRng - LPR New Generation"
-msgstr ""
-
-#: ../../printer.pm_.c:28
-msgid "LPD - Line Printer Daemon"
-msgstr ""
-
-#: ../../printer.pm_.c:29
-msgid "PDQ - Print, Don't Queue"
-msgstr ""
-
-#: ../../printer.pm_.c:34 ../../printer.pm_.c:1144
-msgid "CUPS"
-msgstr "CUPS"
-
-#: ../../printer.pm_.c:35
-msgid "LPRng"
-msgstr "LPRng"
-
-#: ../../printer.pm_.c:36
-msgid "LPD"
-msgstr "LPD"
-
-#: ../../printer.pm_.c:37
-msgid "PDQ"
-msgstr "PDQ"
-
-#: ../../printer.pm_.c:49
-msgid "Local printer"
-msgstr "Moullerez lec'hel"
-
-#: ../../printer.pm_.c:50
-#, fuzzy
-msgid "Remote printer"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printer.pm_.c:51
-#, fuzzy
-msgid "Printer on remote CUPS server"
-msgstr "Steud a-bell"
-
-#: ../../printer.pm_.c:52 ../../printerdrake.pm_.c:898
-#, fuzzy
-msgid "Printer on remote lpd server"
-msgstr "lpd a-bell"
-
-#: ../../printer.pm_.c:53
-#, fuzzy
-msgid "Network printer (TCP/Socket)"
-msgstr "Dibarzhoù ar voullerez NetWare"
-
-#: ../../printer.pm_.c:54
-#, fuzzy
-msgid "Printer on SMB/Windows 95/98/NT server"
-msgstr "SMB/Windows 95/98/NT"
-
-#: ../../printer.pm_.c:55
-#, fuzzy
-msgid "Printer on NetWare server"
-msgstr "Servijer moullañ"
-
-#: ../../printer.pm_.c:56 ../../printerdrake.pm_.c:902
-#, fuzzy
-msgid "Enter a printer device URI"
-msgstr "Trobarzhell ar voullerez"
-
-#: ../../printer.pm_.c:57
-msgid "Pipe job into a command"
-msgstr ""
-
-#: ../../printer.pm_.c:328 ../../printer.pm_.c:370 ../../printer.pm_.c:552
-msgid "Unknown Model"
-msgstr ""
-
-#: ../../printer.pm_.c:754 ../../printer.pm_.c:945 ../../printer.pm_.c:1337
-#: ../../printerdrake.pm_.c:2305 ../../printerdrake.pm_.c:3462
-msgid "Unknown model"
-msgstr ""
-
-#: ../../printer.pm_.c:782
-msgid "Local Printers"
-msgstr "Moullerezioù lec'hel"
-
-#: ../../printer.pm_.c:784 ../../printer.pm_.c:1145
-msgid "Remote Printers"
-msgstr "Moullerezio* a-bell"
-
-#: ../../printer.pm_.c:791 ../../printerdrake.pm_.c:417
-#, c-format
-msgid " on parallel port \\/*%s"
-msgstr ""
-
-#: ../../printer.pm_.c:794 ../../printerdrake.pm_.c:419
-#, c-format
-msgid ", USB printer \\/*%s"
-msgstr ", Mouluriez USB \\/*%s"
-
-#: ../../printer.pm_.c:799
-#, c-format
-msgid ", multi-function device on parallel port \\/*%s"
-msgstr ""
-
-#: ../../printer.pm_.c:802
-msgid ", multi-function device on USB"
-msgstr ""
-
-#: ../../printer.pm_.c:804
-msgid ", multi-function device on HP JetDirect"
-msgstr ""
-
-#: ../../printer.pm_.c:806
-msgid ", multi-function device"
-msgstr ""
-
-#: ../../printer.pm_.c:809
-#, fuzzy, c-format
-msgid ", printing to %s"
-msgstr "Fazi en ur skrivañ er restr %s"
-
-#: ../../printer.pm_.c:811
-#, c-format
-msgid " on LPD server \"%s\", printer \"%s\""
-msgstr ""
-
-#: ../../printer.pm_.c:813
-#, c-format
-msgid ", TCP/IP host \"%s\", port %s"
-msgstr ""
-
-#: ../../printer.pm_.c:817
-#, c-format
-msgid " on SMB/Windows server \"%s\", share \"%s\""
-msgstr ""
-
-#: ../../printer.pm_.c:821
-#, c-format
-msgid " on Novell server \"%s\", printer \"%s\""
-msgstr ""
-
-#: ../../printer.pm_.c:823
-#, c-format
-msgid ", using command %s"
-msgstr ""
-
-#: ../../printer.pm_.c:942 ../../printerdrake.pm_.c:1701
-msgid "Raw printer (No driver)"
-msgstr ""
-
-#: ../../printer.pm_.c:1114
-#, fuzzy, c-format
-msgid "(on %s)"
-msgstr "(mollad %s)"
-
-#: ../../printer.pm_.c:1116
-msgid "(on this machine)"
-msgstr ""
-
-#: ../../printer.pm_.c:1141
-#, fuzzy, c-format
-msgid "On CUPS server \"%s\""
-msgstr "IP ar servijer SMB"
-
-#: ../../printer.pm_.c:1147 ../../printerdrake.pm_.c:3119
-#: ../../printerdrake.pm_.c:3130 ../../printerdrake.pm_.c:3351
-#: ../../printerdrake.pm_.c:3403 ../../printerdrake.pm_.c:3429
-#: ../../printerdrake.pm_.c:3604 ../../printerdrake.pm_.c:3606
-msgid " (Default)"
-msgstr " (Dre ziouer)"
-
-#: ../../printerdrake.pm_.c:25
-msgid "Select Printer Connection"
-msgstr "Diuzit lugerezh ar voullerez"
-
-#: ../../printerdrake.pm_.c:26
-msgid "How is the printer connected?"
-msgstr "Penaos eo luget ar voullerez ?"
-
-#: ../../printerdrake.pm_.c:28
-msgid ""
-"\n"
-"Printers on remote CUPS servers you do not have to configure here; these "
-"printers will be automatically detected."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:36
-msgid "Printer auto-detection (Local, TCP/Socket, and SMB printers)"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:84 ../../printerdrake.pm_.c:3183
-#, fuzzy
-msgid "CUPS configuration"
-msgstr "Kefluniadur"
-
-#: ../../printerdrake.pm_.c:85 ../../printerdrake.pm_.c:3184
-#, fuzzy
-msgid "Specify CUPS server"
-msgstr "Steud a-bell"
-
-#: ../../printerdrake.pm_.c:86
-msgid ""
-"To get access to printers on remote CUPS servers in your local network you "
-"do not have to configure anything; the CUPS servers inform your machine "
-"automatically about their printers. All printers currently known to your "
-"machine are listed in the \"Remote printers\" section in the main window of "
-"Printerdrake. When your CUPS server is not in your local network, you have "
-"to enter the CUPS server IP address and optionally the port number to get "
-"the printer information from the server, otherwise leave these fields blank."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:87
-msgid ""
-"\n"
-"Normally, CUPS is automatically configured according to your network "
-"environment, so that you can access the printers on the CUPS servers in your "
-"local network. If this does not work correctly, turn off \"Automatic CUPS "
-"configuration\" and edit your file /etc/cups/cupsd.conf manually. Do not "
-"forget to restart CUPS afterwards (command: \"service cups restart\")."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:91
-#, fuzzy
-msgid "The IP address should look like 192.168.1.20"
-msgstr "Er furmad 1.2.3.4 e tlefe bezañ ar chomlec'h IP"
-
-#: ../../printerdrake.pm_.c:95 ../../printerdrake.pm_.c:1109
-msgid "The port number should be an integer!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:102
-#, fuzzy
-msgid "CUPS server IP"
-msgstr "IP ar servijer SMB"
-
-#: ../../printerdrake.pm_.c:103 ../../printerdrake.pm_.c:1129
-#, fuzzy
-msgid "Port"
-msgstr "Paour"
-
-#: ../../printerdrake.pm_.c:105
-#, fuzzy
-msgid "Automatic CUPS configuration"
-msgstr "Kefluniadur goude staliañ"
-
-#: ../../printerdrake.pm_.c:177 ../../printerdrake.pm_.c:247
-#: ../../printerdrake.pm_.c:1574 ../../printerdrake.pm_.c:1578
-#: ../../printerdrake.pm_.c:1696 ../../printerdrake.pm_.c:2248
-#: ../../printerdrake.pm_.c:2401 ../../printerdrake.pm_.c:2460
-#: ../../printerdrake.pm_.c:2533 ../../printerdrake.pm_.c:2554
-#: ../../printerdrake.pm_.c:2747 ../../printerdrake.pm_.c:2788
-#: ../../printerdrake.pm_.c:2793 ../../printerdrake.pm_.c:2827
-#: ../../printerdrake.pm_.c:2832 ../../printerdrake.pm_.c:2869
-#: ../../printerdrake.pm_.c:2922 ../../printerdrake.pm_.c:2942
-#: ../../printerdrake.pm_.c:2956 ../../printerdrake.pm_.c:2990
-#: ../../printerdrake.pm_.c:3036 ../../printerdrake.pm_.c:3054
-#: ../../printerdrake.pm_.c:3143 ../../printerdrake.pm_.c:3217
-#: ../../printerdrake.pm_.c:3519 ../../printerdrake.pm_.c:3574
-#: ../../printerdrake.pm_.c:3627 ../../standalone/printerdrake_.c:57
-#, fuzzy
-msgid "Printerdrake"
-msgstr "Moullerez"
-
-#: ../../printerdrake.pm_.c:178
-#, fuzzy
-msgid "Checking your system..."
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:186
-msgid ""
-"There are no printers found which are directly connected to your machine"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:198
-#, fuzzy
-msgid ""
-"The following printers\n"
-"\n"
-msgstr "Ar pakadoù a-heul a zo war-nes bezañ staliet/lamet"
-
-#: ../../printerdrake.pm_.c:199
-#, fuzzy
-msgid ""
-"The following printer\n"
-"\n"
-msgstr "Ar pakadoù a-heul a zo war-nes bezañ staliet/lamet"
-
-#: ../../printerdrake.pm_.c:201
-msgid ""
-"\n"
-"and one unknown printer are "
-msgstr ""
-
-#: ../../printerdrake.pm_.c:203
-#, c-format
-msgid ""
-"\n"
-"and %d unknown printers are "
-msgstr ""
-
-#: ../../printerdrake.pm_.c:207
-msgid ""
-"\n"
-"are "
-msgstr ""
-
-#: ../../printerdrake.pm_.c:208
-msgid ""
-"\n"
-"is "
-msgstr ""
-
-#: ../../printerdrake.pm_.c:210
-#, fuzzy
-msgid "directly connected to your system"
-msgstr "Da beseurt pladenn e mennit dilec'hiañ ?"
-
-#: ../../printerdrake.pm_.c:213
-msgid ""
-"\n"
-"There is one unknown printer directly connected to your system"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:215
-#, c-format
-msgid ""
-"\n"
-"There are %d unknown printers directly connected to your system"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:221
-#, fuzzy
-msgid " (Make sure that all your printers are connected and turned on).\n"
-msgstr "Dibabit ouzh pe borzh a-steud eo luget ho modem, mar plij."
-
-#: ../../printerdrake.pm_.c:235
-msgid ""
-"Do you want to enable printing on the printers mentioned above or on "
-"printers in the local network?\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:236
-#, fuzzy
-msgid "Do you want to enable printing on printers in the local network?\n"
-msgstr "Ha mennout a rit amprouiñ moullañ skrid ?"
-
-#: ../../printerdrake.pm_.c:238
-#, fuzzy
-msgid "Do you want to enable printing on the printers mentioned above?\n"
-msgstr "Mennout a rit implijout aboot ?"
-
-#: ../../printerdrake.pm_.c:239
-msgid "Are you sure that you want to set up printing on this machine?\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:240
-#, c-format
-msgid ""
-"NOTE: Depending on the printer model and the printing system up to %d MB of "
-"additional software will be installed."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:279 ../../printerdrake.pm_.c:291
-#: ../../printerdrake.pm_.c:361 ../../printerdrake.pm_.c:3165
-#: ../../printerdrake.pm_.c:3290
-#, fuzzy
-msgid "Add a new printer"
-msgstr "Moullerez lec'hel"
-
-#: ../../printerdrake.pm_.c:280
-msgid ""
-"\n"
-"Welcome to the Printer Setup Wizard\n"
-"\n"
-"This wizard allows you to install local or remote printers to be used from "
-"this machine and also from other machines in the network.\n"
-"\n"
-"It asks you for all necessary information to set up the printer and gives "
-"you access to all available printer drivers, driver options, and printer "
-"connection types."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:293
-msgid ""
-"\n"
-"Welcome to the Printer Setup Wizard\n"
-"\n"
-"This wizard will help you to install your printer(s) connected to this "
-"computer, connected directly to the network or to a remote Windows machine.\n"
-"\n"
-"If you have printer(s) connected to this machine, Please plug it/them in on "
-"this computer and turn it/them on so that it/they can be auto-detected. Also "
-"your network printer(s) and you Windows machines must be connected and "
-"turned on.\n"
-"\n"
-"Note that auto-detecting printers on the network takes longer than the auto-"
-"detection of only the printers connected to this machine. So turn off the "
-"auto-detection of network and/or Windows-hosted printers when you don't need "
-"it.\n"
-"\n"
-" Click on \"Next\" when you are ready, and on \"Cancel\" when you do not "
-"want to set up your printer(s) now."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:302 ../../printerdrake.pm_.c:319
-msgid ""
-"\n"
-"Welcome to the Printer Setup Wizard\n"
-"\n"
-"This wizard will help you to install your printer(s) connected to this "
-"computer.\n"
-"\n"
-"If you have printer(s) connected to this machine, Please plug it/them in on "
-"this computer and turn it/them on so that it/they can be auto-detected.\n"
-"\n"
-" Click on \"Next\" when you are ready, and on \"Cancel\" when you do not "
-"want to set up your printer(s) now."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:310
-msgid ""
-"\n"
-"Welcome to the Printer Setup Wizard\n"
-"\n"
-"This wizard will help you to install your printer(s) connected to this "
-"computer or connected directly to the network.\n"
-"\n"
-"If you have printer(s) connected to this machine, Please plug it/them in on "
-"this computer and turn it/them on so that it/they can be auto-detected. Also "
-"your network printer(s) must be connected and turned on.\n"
-"\n"
-"Note that auto-detecting printers on the network takes longer than the auto-"
-"detection of only the printers connected to this machine. So turn off the "
-"auto-detection of network printers when you don't need it.\n"
-"\n"
-" Click on \"Next\" when you are ready, and on \"Cancel\" when you do not "
-"want to set up your printer(s) now."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:328
-#, fuzzy
-msgid "Auto-detect printers connected to this machine"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:331
-msgid "Auto-detect printers connected directly to the local network"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:334
-msgid "Auto-detect printers connected to machines running Microsoft Windows"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:362
-msgid ""
-"\n"
-"Congratulations, your printer is now installed and configured!\n"
-"\n"
-"You can print using the \"Print\" command of your application (usually in "
-"the \"File\" menu).\n"
-"\n"
-"If you want to add, remove, or rename a printer, or if you want to change "
-"the default option settings (paper input tray, printout quality, ...), "
-"select \"Printer\" in the \"Hardware\" section of the Mandrake Control "
-"Center."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:399 ../../printerdrake.pm_.c:590
-#: ../../printerdrake.pm_.c:805 ../../printerdrake.pm_.c:1045
-#, fuzzy
-msgid "Printer auto-detection"
-msgstr "Dilesadur"
-
-#: ../../printerdrake.pm_.c:421
-#, c-format
-msgid ", network printer \"%s\", port %s"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:423
-#, fuzzy, c-format
-msgid ", printer \"%s\" on SMB/Windows server \"%s\""
-msgstr "SMB/Windows 95/98/NT"
-
-#: ../../printerdrake.pm_.c:429
-#, fuzzy, c-format
-msgid "Detected %s"
-msgstr "Poent marc'hañ doubl %s"
-
-#: ../../printerdrake.pm_.c:433 ../../printerdrake.pm_.c:464
-#: ../../printerdrake.pm_.c:483
-#, c-format
-msgid "Printer on parallel port \\/*%s"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:435 ../../printerdrake.pm_.c:466
-#: ../../printerdrake.pm_.c:488
-#, c-format
-msgid "USB printer \\/*%s"
-msgstr "Moullerez USB \\/*%s"
-
-#: ../../printerdrake.pm_.c:437
-#, fuzzy, c-format
-msgid "Network printer \"%s\", port %s"
-msgstr "Dibarzhoù ar voullerez NetWare"
-
-#: ../../printerdrake.pm_.c:439
-#, fuzzy, c-format
-msgid "Printer \"%s\" on SMB/Windows server \"%s\""
-msgstr "SMB/Windows 95/98/NT"
-
-#: ../../printerdrake.pm_.c:575 ../../printerdrake.pm_.c:600
-msgid "Local Printer"
-msgstr "Moullerez lec'hel"
-
-#: ../../printerdrake.pm_.c:576
-msgid ""
-"No local printer found! To manually install a printer enter a device name/"
-"file name in the input line (Parallel Ports: /dev/lp0, /dev/lp1, ..., "
-"equivalent to LPT1:, LPT2:, ..., 1st USB printer: /dev/usb/lp0, 2nd USB "
-"printer: /dev/usb/lp1, ...)."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:580
-#, fuzzy
-msgid "You must enter a device or file name!"
-msgstr "Trobarzhell ar voullerez"
-
-#: ../../printerdrake.pm_.c:591
-#, fuzzy
-msgid "No printer found!"
-msgstr "N'ev ket Moullerez lec'hel!\n"
-
-#: ../../printerdrake.pm_.c:601
-#, fuzzy
-msgid "Available printers"
-msgstr "Pakadoù hegerz"
-
-#: ../../printerdrake.pm_.c:605
-msgid ""
-"The following printer was auto-detected, if it is not the one you want to "
-"configure, enter a device name/file name in the input line"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:606
-msgid ""
-"Here is a list of all auto-detected printers. Please choose the printer you "
-"want to set up or enter a device name/file name in the input line"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:608
-msgid ""
-"The following printer was auto-detected. The configuration of the printer "
-"will work fully automatically. If your printer was not correctly detected or "
-"if you prefer a customized printer configuration, turn on \"Manual "
-"configuration\"."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:609
-msgid ""
-"Here is a list of all auto-detected printers. Please choose the printer you "
-"want to set up. The configuration of the printer will work fully "
-"automatically. If your printer was not correctly detected or if you prefer a "
-"customized printer configuration, turn on \"Manual configuration\"."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:611
-msgid ""
-"Please choose the port where your printer is connected to or enter a device "
-"name/file name in the input line"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:612
-#, fuzzy
-msgid "Please choose the port where your printer is connected to."
-msgstr "Dibabit ouzh pe borzh a-steud eo luget ho modem, mar plij."
-
-#: ../../printerdrake.pm_.c:614
-msgid ""
-" (Parallel Ports: /dev/lp0, /dev/lp1, ..., equivalent to LPT1:, LPT2:, ..., "
-"1st USB printer: /dev/usb/lp0, 2nd USB printer: /dev/usb/lp1, ...)."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:619
-#, fuzzy
-msgid "You must choose/enter a printer/device!"
-msgstr "Trobarzhell ar voullerez"
-
-#: ../../printerdrake.pm_.c:639
-#, fuzzy
-msgid "Manual configuration"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../printerdrake.pm_.c:693
-msgid "Remote lpd Printer Options"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:694
-#, fuzzy
-msgid ""
-"To use a remote lpd printer, you need to supply the hostname of the printer "
-"server and the printer name on that server."
-msgstr ""
-"A-benn implijout ur steud moulañ lpd a-bell, ret eo deoc'h\n"
-"pourvezañ anv ostiz ar servijer moullañ hag anv as steud\n"
-"war ar servijer-se ma zlefe bezañ kaset an dleadoù moullañ."
-
-#: ../../printerdrake.pm_.c:695
-#, fuzzy
-msgid "Remote host name"
-msgstr "Anv an ostiz a-bell"
-
-#: ../../printerdrake.pm_.c:696
-#, fuzzy
-msgid "Remote printer name"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:699
-#, fuzzy
-msgid "Remote host name missing!"
-msgstr "Anv an ostiz a-bell"
-
-#: ../../printerdrake.pm_.c:703
-#, fuzzy
-msgid "Remote printer name missing!"
-msgstr "Anv an ostiz a-bell"
-
-#: ../../printerdrake.pm_.c:727 ../../printerdrake.pm_.c:1244
-#, fuzzy, c-format
-msgid "Detected model: %s %s"
-msgstr "Poent marc'hañ doubl %s"
-
-#: ../../printerdrake.pm_.c:805 ../../printerdrake.pm_.c:1045
-#, fuzzy
-msgid "Scanning network..."
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../printerdrake.pm_.c:814 ../../printerdrake.pm_.c:835
-#, c-format
-msgid ", printer \"%s\" on server \"%s\""
-msgstr ""
-
-#: ../../printerdrake.pm_.c:817 ../../printerdrake.pm_.c:838
-#, fuzzy, c-format
-msgid "Printer \"%s\" on server \"%s\""
-msgstr "O tizenaouiñ ar rouedad"
-
-#: ../../printerdrake.pm_.c:858
-msgid "SMB (Windows 9x/NT) Printer Options"
-msgstr "Dibarzhoù moullañ SMB (Windows 9x/NT)"
-
-#: ../../printerdrake.pm_.c:859
-#, fuzzy
-msgid ""
-"To print to a SMB printer, you need to provide the SMB host name (Note! It "
-"may be different from its TCP/IP hostname!) and possibly the IP address of "
-"the print server, as well as the share name for the printer you wish to "
-"access and any applicable user name, password, and workgroup information."
-msgstr ""
-"Evit moullañ war ur voullerez SMB eo ret deoc'h pourvezañ\n"
-"anv an ostiz SMB (Ho evezh ! Disheñvel e c'hell bezañ diouzh\n"
-"e anv ostiz TCP/IP !) ha marteze chomlec'h IP ar servijer moullañ,\n"
-"kement hag anv rannet ar voullerez a glaskit tizhout ha ne vern pe\n"
-"ditour a anv arveriad, tremenger ha strollad labour en implij."
-
-#: ../../printerdrake.pm_.c:860
-msgid ""
-" If the desired printer was auto-detected, simply choose it from the list "
-"and then add user name, password, and/or workgroup if needed."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:861
-msgid "SMB server host"
-msgstr "Anv ar servijer SMB"
-
-#: ../../printerdrake.pm_.c:862
-msgid "SMB server IP"
-msgstr "IP ar servijer SMB"
-
-#: ../../printerdrake.pm_.c:863
-msgid "Share name"
-msgstr "Anv rannet"
-
-#: ../../printerdrake.pm_.c:866
-msgid "Workgroup"
-msgstr "Strollad labour"
-
-#: ../../printerdrake.pm_.c:868
-#, fuzzy
-msgid "Auto-detected"
-msgstr "Dilesadur"
-
-#: ../../printerdrake.pm_.c:879
-msgid "Either the server name or the server's IP must be given!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:883
-msgid "Samba share name missing!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:889
-msgid "SECURITY WARNING!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:890
-#, c-format
-msgid ""
-"You are about to set up printing to a Windows account with password. Due to "
-"a fault in the architecture of the Samba client software the password is put "
-"in clear text into the command line of the Samba client used to transmit the "
-"print job to the Windows server. So it is possible for every user on this "
-"machine to display the password on the screen by issuing commands as \"ps "
-"auxwww\".\n"
-"\n"
-"We recommend to make use of one of the following alternatives (in all cases "
-"you have to make sure that only machines from your local network have access "
-"to your Windows server, for example by means of a firewall):\n"
-"\n"
-"Use a password-less account on your Windows server, as the \"GUEST\" account "
-"or a special account dedicated for printing. Do not remove the password "
-"protection from a personal account or the administrator account.\n"
-"\n"
-"Set up your Windows server to make the printer available under the LPD "
-"protocol. Then set up printing from this machine with the \"%s\" connection "
-"type in Printerdrake.\n"
-"\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:900
-#, c-format
-msgid ""
-"Set up your Windows server to make the printer available under the IPP "
-"protocol and set up printing from this machine with the \"%s\" connection "
-"type in Printerdrake.\n"
-"\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:903
-msgid ""
-"Connect your printer to a Linux server and let your Windows machine(s) "
-"connect to it as a client.\n"
-"\n"
-"Do you really want to continue setting up this printer as you are doing now?"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:975
-msgid "NetWare Printer Options"
-msgstr "Dibarzhoù ar voullerez NetWare"
-
-#: ../../printerdrake.pm_.c:976
-#, fuzzy
-msgid ""
-"To print on a NetWare printer, you need to provide the NetWare print server "
-"name (Note! it may be different from its TCP/IP hostname!) as well as the "
-"print queue name for the printer you wish to access and any applicable user "
-"name and password."
-msgstr ""
-"Evit moullañ war ur voullerez NetWare eo ret deoc'h pourvezañ anv ar\n"
-"servijer moullañ NetWare (Ho evezh ! Disheñvel e c'hell bezañ diouzh e\n"
-"anv ostiz TCP/IP !) kement hag anv ar steud moullañ evit ar voullerez\n"
-"a glaskit tizhout ha ne vern pe anv arveriad ha tremenger en implij."
-
-#: ../../printerdrake.pm_.c:977
-msgid "Printer Server"
-msgstr "Servijer moullañ"
-
-#: ../../printerdrake.pm_.c:978
-msgid "Print Queue Name"
-msgstr "Anv ar steud moullañ"
-
-#: ../../printerdrake.pm_.c:983
-msgid "NCP server name missing!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:987
-msgid "NCP queue name missing!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1054 ../../printerdrake.pm_.c:1074
-#, c-format
-msgid ", host \"%s\", port %s"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1057 ../../printerdrake.pm_.c:1077
-#, c-format
-msgid "Host \"%s\", port %s"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1097
-#, fuzzy
-msgid "TCP/Socket Printer Options"
-msgstr "Dibarzhoù ar voullerez NetWare"
-
-#: ../../printerdrake.pm_.c:1099
-msgid ""
-"Choose one of the auto-detected printers from the list or enter the hostname "
-"or IP and the optional port number (default is 9100) into the input fields."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1100
-msgid ""
-"To print to a TCP or socket printer, you need to provide the host name or IP "
-"of the printer and optionally the port number (default is 9100). On HP "
-"JetDirect servers the port number is usually 9100, on other servers it can "
-"vary. See the manual of your hardware."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1105
-#, fuzzy
-msgid "Printer host name or IP missing!"
-msgstr "Dibarzhoù ar voullerez"
-
-#: ../../printerdrake.pm_.c:1127
-#, fuzzy
-msgid "Printer host name or IP"
-msgstr "Anv ar voullerez"
-
-#: ../../printerdrake.pm_.c:1177 ../../printerdrake.pm_.c:1179
-#, fuzzy
-msgid "Printer Device URI"
-msgstr "Trobarzhell ar voullerez"
-
-#: ../../printerdrake.pm_.c:1178
-msgid ""
-"You can specify directly the URI to access the printer. The URI must fulfill "
-"either the CUPS or the Foomatic specifications. Note that not all URI types "
-"are supported by all the spoolers."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1193
-msgid "A valid URI must be entered!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1560
-msgid ""
-"Every printer needs a name (for example \"printer\"). The Description and "
-"Location fields do not need to be filled in. They are comments for the users."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1561
-msgid "Name of printer"
-msgstr "Anv ar moullerez"
-
-#: ../../printerdrake.pm_.c:1563
-#, fuzzy
-msgid "Location"
-msgstr "Titouroù"
-
-#: ../../printerdrake.pm_.c:1575 ../../printerdrake.pm_.c:1697
-msgid "Reading printer database..."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1579
-msgid "Preparing printer database..."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1676
-#, fuzzy
-msgid "Your printer model"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:1677
-#, c-format
-msgid ""
-"Printerdrake has compared the model name resulting from the printer auto-"
-"detection with the models listed in its printer database to find the best "
-"match. This choice can be wrong, especially when your printer is not listed "
-"at all in the database. So check whether the choice is correct and click "
-"\"The model is correct\" if so and if not, click \"Select model manually\" "
-"so that you can choose your printer model manually on the next screen.\n"
-"\n"
-"For your printer Printerdrake has found:\n"
-"\n"
-"%s"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1682 ../../printerdrake.pm_.c:1685
-#, fuzzy
-msgid "The model is correct"
-msgstr "Ha reizh eo ?"
-
-#: ../../printerdrake.pm_.c:1683 ../../printerdrake.pm_.c:1684
-#: ../../printerdrake.pm_.c:1687
-#, fuzzy
-msgid "Select model manually"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:1704
-#, fuzzy
-msgid "Printer model selection"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../printerdrake.pm_.c:1705
-#, fuzzy
-msgid "Which printer model do you have?"
-msgstr "Peseurt moullerez hoc'h eus ?"
-
-#: ../../printerdrake.pm_.c:1706
-msgid ""
-"\n"
-"\n"
-"Please check whether Printerdrake did the auto-detection of your printer "
-"model correctly. Search the correct model in the list when the cursor is "
-"standing on a wrong model or on \"Raw printer\"."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1709
-msgid ""
-"If your printer is not listed, choose a compatible (see printer manual) or a "
-"similar one."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1786
-#, fuzzy
-msgid "OKI winprinter configuration"
-msgstr "Kefluniañ ar modem"
-
-#: ../../printerdrake.pm_.c:1787
-msgid ""
-"You are configuring an OKI laser winprinter. These printers\n"
-"use a very special communication protocol and therefore they work only when "
-"connected to the first parallel port. When your printer is connected to "
-"another port or to a print server box please connect the printer to the "
-"first parallel port before you print a test page. Otherwise the printer will "
-"not work. Your connection type setting will be ignored by the driver."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1830 ../../printerdrake.pm_.c:1857
-#, fuzzy
-msgid "Lexmark inkjet configuration"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../printerdrake.pm_.c:1831
-msgid ""
-"The inkjet printer drivers provided by Lexmark only support local printers, "
-"no printers on remote machines or print server boxes. Please connect your "
-"printer to a local port or configure it on the machine where it is connected "
-"to."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1858
-msgid ""
-"To be able to print with your Lexmark inkjet and this configuration, you "
-"need the inkjet printer drivers provided by Lexmark (http://www.lexmark."
-"com/). Click on the \"Drivers\" link. Then choose your model and afterwards "
-"\"Linux\" as operating system. The drivers come as RPM packages or shell "
-"scripts with interactive graphical installation. You do not need to do this "
-"configuration by the graphical frontends. Cancel directly after the license "
-"agreement. Then print printhead alignment pages with \"lexmarkmaintain\" and "
-"adjust the head alignment settings with this program."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1861
-msgid "GDI Laser Printer using the Zenographics ZJ-Stream Format"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:1862
-msgid ""
-"Your printer belongs to the group of GDI laser printers (winprinters) sold "
-"by different manufacturers which uses the Zenographics ZJ-stream raster "
-"format for the data sent to the printer. The driver for these printers is "
-"still in a very early development stage and so it will perhaps not always "
-"work properly. Especially it is possible that the printer only works when "
-"you choose the A4 paper size.\n"
-"\n"
-"Some of these printers, as the HP LaserJet 1000, for which this driver was "
-"originally created, need their firmware to be uploaded to them after they "
-"are turned on. In the case of the HP LaserJet 1000 you have to search the "
-"printer's Windows driver CD or your Windows partition for the file "
-"\"sihp1000.img\" and upload the file to the printer with one of the "
-"following commands:\n"
-"\n"
-" lpr -o raw sihp1000.img\n"
-" cat sihp1000.img > /dev/usb/lp0\n"
-"\n"
-"The first command can be given by any normal user, the second must be given "
-"as root. After having done so you can print normally.\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2085
-msgid ""
-"Printer default settings\n"
-"\n"
-"You should make sure that the page size and the ink type/printing mode (if "
-"available) and also the hardware configuration of laser printers (memory, "
-"duplex unit, extra trays) are set correctly. Note that with a very high "
-"printout quality/resolution printing can get substantially slower."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2094
-#, c-format
-msgid "Option %s must be an integer number!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2098
-#, c-format
-msgid "Option %s must be a number!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2103
-#, c-format
-msgid "Option %s out of range!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2142
-#, fuzzy, c-format
-msgid ""
-"Do you want to set this printer (\"%s\")\n"
-"as the default printer?"
-msgstr "Ha mennout a rit amprouiñ moullañ skrid ?"
-
-#: ../../printerdrake.pm_.c:2165
-#, fuzzy
-msgid "Test pages"
-msgstr "Amprouiñ ar porzhioù"
-
-#: ../../printerdrake.pm_.c:2166
-msgid ""
-"Please select the test pages you want to print.\n"
-"Note: the photo test page can take a rather long time to get printed and on "
-"laser printers with too low memory it can even not come out. In most cases "
-"it is enough to print the standard test page."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2170
-#, fuzzy
-msgid "No test pages"
-msgstr "Ya, moullit an div bajenn arnod"
-
-#: ../../printerdrake.pm_.c:2171
-#, fuzzy
-msgid "Print"
-msgstr "Moullerez"
-
-#: ../../printerdrake.pm_.c:2228
-#, fuzzy
-msgid "Standard test page"
-msgstr "Diorren"
-
-#: ../../printerdrake.pm_.c:2231
-msgid "Alternative test page (Letter)"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2234
-#, fuzzy
-msgid "Alternative test page (A4)"
-msgstr "O voullañ pajenn(où) skrid..."
-
-#: ../../printerdrake.pm_.c:2236
-#, fuzzy
-msgid "Photo test page"
-msgstr "O voullañ pajenn(où) skrid..."
-
-#: ../../printerdrake.pm_.c:2240
-#, fuzzy
-msgid "Do not print any test page"
-msgstr "O voullañ pajenn(où) skrid..."
-
-#: ../../printerdrake.pm_.c:2249 ../../printerdrake.pm_.c:2402
-msgid "Printing test page(s)..."
-msgstr "O voullañ pajenn(où) skrid..."
-
-#: ../../printerdrake.pm_.c:2274
-#, fuzzy, c-format
-msgid ""
-"Test page(s) have been sent to the printer.\n"
-"It may take some time before the printer starts.\n"
-"Printing status:\n"
-"%s\n"
-"\n"
-msgstr ""
-"Pajenn(où) arnod zo bet kaset d'an diaoul moullañ.\n"
-"Ur pennadig e c'hell padout a-raok ma loc'hfe a voullerez.\n"
-"Stad ar moullañ :\n"
-"%s\n"
-"\n"
-"Ha mont a ra en-dro reizh ?"
-
-#: ../../printerdrake.pm_.c:2278
-#, fuzzy
-msgid ""
-"Test page(s) have been sent to the printer.\n"
-"It may take some time before the printer starts.\n"
-msgstr ""
-"Pajenn(où) arnod zo bet kaset d'an diaoul moullañ.\n"
-"Ur pennadig e c'hell padout a-raok ma loc'hfe a voullerez.\n"
-"Ha mont a ra en-dro reizh ?"
-
-#: ../../printerdrake.pm_.c:2285
-msgid "Did it work properly?"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2307 ../../printerdrake.pm_.c:3464
-#, fuzzy
-msgid "Raw printer"
-msgstr "Moullerez lec'hel"
-
-#: ../../printerdrake.pm_.c:2333
-#, c-format
-msgid ""
-"To print a file from the command line (terminal window) you can either use "
-"the command \"%s <file>\" or a graphical printing tool: \"xpp <file>\" or "
-"\"kprinter <file>\". The graphical tools allow you to choose the printer and "
-"to modify the option settings easily.\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2335
-msgid ""
-"These commands you can also use in the \"Printing command\" field of the "
-"printing dialogs of many applications, but here do not supply the file name "
-"because the file to print is provided by the application.\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2338 ../../printerdrake.pm_.c:2355
-#: ../../printerdrake.pm_.c:2365
-#, c-format
-msgid ""
-"\n"
-"The \"%s\" command also allows to modify the option settings for a "
-"particular printing job. Simply add the desired settings to the command "
-"line, e. g. \"%s <file>\". "
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2341 ../../printerdrake.pm_.c:2381
-#, c-format
-msgid ""
-"To know about the options available for the current printer read either the "
-"list shown below or click on the \"Print option list\" button.%s%s\n"
-"\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2345
-msgid ""
-"Here is a list of the available printing options for the current printer:\n"
-"\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2350 ../../printerdrake.pm_.c:2360
-#, c-format
-msgid ""
-"To print a file from the command line (terminal window) use the command \"%s "
-"<file>\".\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2352 ../../printerdrake.pm_.c:2362
-#: ../../printerdrake.pm_.c:2372
-msgid ""
-"This command you can also use in the \"Printing command\" field of the "
-"printing dialogs of many applications. But here do not supply the file name "
-"because the file to print is provided by the application.\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2357 ../../printerdrake.pm_.c:2367
-msgid ""
-"To get a list of the options available for the current printer click on the "
-"\"Print option list\" button."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2370
-#, c-format
-msgid ""
-"To print a file from the command line (terminal window) use the command \"%s "
-"<file>\" or \"%s <file>\".\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2374
-msgid ""
-"You can also use the graphical interface \"xpdq\" for setting options and "
-"handling printing jobs.\n"
-"If you are using KDE as desktop environment you have a \"panic button\", an "
-"icon on the desktop, labeled with \"STOP Printer!\", which stops all print "
-"jobs immediately when you click it. This is for example useful for paper "
-"jams.\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2378
-#, c-format
-msgid ""
-"\n"
-"The \"%s\" and \"%s\" commands also allow to modify the option settings for "
-"a particular printing job. Simply add the desired settings to the command "
-"line, e. g. \"%s <file>\".\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2388
-#, fuzzy, c-format
-msgid "Printing/Scanning/Photo Cards on \"%s\""
-msgstr "O tizenaouiñ ar rouedad"
-
-#: ../../printerdrake.pm_.c:2389
-#, fuzzy, c-format
-msgid "Printing/Scanning on \"%s\""
-msgstr "O tizenaouiñ ar rouedad"
-
-#: ../../printerdrake.pm_.c:2391
-#, fuzzy, c-format
-msgid "Printing/Photo Card Access on \"%s\""
-msgstr "O tizenaouiñ ar rouedad"
-
-#: ../../printerdrake.pm_.c:2392
-#, fuzzy, c-format
-msgid "Printing on the printer \"%s\""
-msgstr "O tizenaouiñ ar rouedad"
-
-#: ../../printerdrake.pm_.c:2395 ../../printerdrake.pm_.c:2398
-#: ../../printerdrake.pm_.c:2399 ../../printerdrake.pm_.c:2400
-#: ../../printerdrake.pm_.c:3448 ../../standalone/drakTermServ_.c:248
-#: ../../standalone/drakbackup_.c:1562 ../../standalone/drakbackup_.c:4210
-#: ../../standalone/drakbug_.c:130 ../../standalone/drakfont_.c:705
-#: ../../standalone/drakfont_.c:1014
-#, fuzzy
-msgid "Close"
-msgstr "Logodenn USB"
-
-#: ../../printerdrake.pm_.c:2398
-#, fuzzy
-msgid "Print option list"
-msgstr "Dibarzhoù ar voullerez"
-
-#: ../../printerdrake.pm_.c:2418
-#, c-format
-msgid ""
-"Your multi-function device was configured automatically to be able to scan. "
-"Now you can scan with \"scanimage\" (\"scanimage -d hp:%s\" to specify the "
-"scanner when you have more than one) from the command line or with the "
-"graphical interfaces \"xscanimage\" or \"xsane\". If you are using the GIMP, "
-"you can also scan by choosing the appropriate point in the \"File\"/\"Acquire"
-"\" menu. Call also \"man scanimage\" on the command line to get more "
-"information.\n"
-"\n"
-"Do not use \"scannerdrake\" for this device!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2439
-msgid ""
-"Your printer was configured automatically to give you access to the photo "
-"card drives from your PC. Now you can access your photo cards using the "
-"graphical program \"MtoolsFM\" (Menu: \"Applications\" -> \"File tools\" -> "
-"\"MTools File Manager\") or the command line utilities \"mtools\" (enter "
-"\"man mtools\" on the command line for more info). You find the card's file "
-"system under the drive letter \"p:\", or subsequent drive letters when you "
-"have more than one HP printer with photo card drives. In \"MtoolsFM\" you "
-"can switch between drive letters with the field at the upper-right corners "
-"of the file lists."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2461 ../../printerdrake.pm_.c:2923
-#: ../../printerdrake.pm_.c:3218
-msgid "Reading printer data..."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2481 ../../printerdrake.pm_.c:2509
-#: ../../printerdrake.pm_.c:2544
-#, fuzzy
-msgid "Transfer printer configuration"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../printerdrake.pm_.c:2482
-#, c-format
-msgid ""
-"You can copy the printer configuration which you have done for the spooler %"
-"s to %s, your current spooler. All the configuration data (printer name, "
-"description, location, connection type, and default option settings) is "
-"overtaken, but jobs will not be transferred.\n"
-"Not all queues can be transferred due to the following reasons:\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2485
-msgid ""
-"CUPS does not support printers on Novell servers or printers sending the "
-"data into a free-formed command.\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2487
-msgid ""
-"PDQ only supports local printers, remote LPD printers, and Socket/TCP "
-"printers.\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2489
-msgid "LPD and LPRng do not support IPP printers.\n"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2491
-msgid ""
-"In addition, queues not created with this program or \"foomatic-configure\" "
-"cannot be transferred."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2492
-msgid ""
-"\n"
-"Also printers configured with the PPD files provided by their manufacturers "
-"or with native CUPS drivers cannot be transferred."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2493
-msgid ""
-"\n"
-"Mark the printers which you want to transfer and click \n"
-"\"Transfer\"."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2496
-msgid "Do not transfer printers"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2497 ../../printerdrake.pm_.c:2514
-msgid "Transfer"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2510
-#, c-format
-msgid ""
-"A printer named \"%s\" already exists under %s. \n"
-"Click \"Transfer\" to overwrite it.\n"
-"You can also type a new name or skip this printer."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2518
-msgid "Name of printer should contain only letters, numbers and the underscore"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2523
-#, c-format
-msgid ""
-"The printer \"%s\" already exists,\n"
-"do you really want to overwrite its configuration?"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2531
-#, fuzzy
-msgid "New printer name"
-msgstr "Moullerez lec'hel"
-
-#: ../../printerdrake.pm_.c:2534
-#, c-format
-msgid "Transferring %s..."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2545
-#, c-format
-msgid ""
-"You have transferred your former default printer (\"%s\"), Should it be also "
-"the default printer under the new printing system %s?"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2555
-msgid "Refreshing printer data..."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2563 ../../printerdrake.pm_.c:2638
-#: ../../printerdrake.pm_.c:2650
-#, fuzzy
-msgid "Configuration of a remote printer"
-msgstr "Kefluniañ ar voullerez"
-
-#: ../../printerdrake.pm_.c:2564
-#, fuzzy
-msgid "Starting network..."
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../printerdrake.pm_.c:2599 ../../printerdrake.pm_.c:2603
-#: ../../printerdrake.pm_.c:2605
-#, fuzzy
-msgid "Configure the network now"
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../printerdrake.pm_.c:2600
-#, fuzzy
-msgid "Network functionality not configured"
-msgstr "Skramm ket kefluniet"
-
-#: ../../printerdrake.pm_.c:2601
-msgid ""
-"You are going to configure a remote printer. This needs working network "
-"access, but your network is not configured yet. If you go on without network "
-"configuration, you will not be able to use the printer which you are "
-"configuring now. How do you want to proceed?"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2604
-#, fuzzy
-msgid "Go on without configuring the network"
-msgstr "Kefluniañ ar rouedad"
-
-#: ../../printerdrake.pm_.c:2640
-msgid ""
-"The network configuration done during the installation cannot be started "
-"now. Please check whether the network gets accessable after booting your "
-"system and correct the configuration using the Mandrake Control Center, "
-"section \"Network & Internet\"/\"Connection\", and afterwards set up the "
-"printer, also using the Mandrake Control Center, section \"Hardware\"/"
-"\"Printer\""
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2641
-msgid ""
-"The network access was not running and could not be started. Please check "
-"your configuration and your hardware. Then try to configure your remote "
-"printer again."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2651
-#, fuzzy
-msgid "Restarting printing system..."
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:2689
-#, fuzzy
-msgid "high"
-msgstr "Uhel"
-
-#: ../../printerdrake.pm_.c:2689
-#, fuzzy
-msgid "paranoid"
-msgstr "Ankeniet"
-
-#: ../../printerdrake.pm_.c:2690
-#, c-format
-msgid "Installing a printing system in the %s security level"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2691
-#, c-format
-msgid ""
-"You are about to install the printing system %s on a system running in the %"
-"s security level.\n"
-"\n"
-"This printing system runs a daemon (background process) which waits for "
-"print jobs and handles them. This daemon is also accessable by remote "
-"machines through the network and so it is a possible point for attacks. "
-"Therefore only a few selected daemons are started by default in this "
-"security level.\n"
-"\n"
-"Do you really want to configure printing on this machine?"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2723
-msgid "Starting the printing system at boot time"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2724
-#, c-format
-msgid ""
-"The printing system (%s) will not be started automatically when the machine "
-"is booted.\n"
-"\n"
-"It is possible that the automatic starting was turned off by changing to a "
-"higher security level, because the printing system is a potential point for "
-"attacks.\n"
-"\n"
-"Do you want to have the automatic starting of the printing system turned on "
-"again?"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2748 ../../printerdrake.pm_.c:2789
-#: ../../printerdrake.pm_.c:2828 ../../printerdrake.pm_.c:2870
-#: ../../printerdrake.pm_.c:2991
-msgid "Checking installed software..."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2794
-msgid "Removing LPRng..."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2833
-msgid "Removing LPD..."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:2906
-#, fuzzy
-msgid "Select Printer Spooler"
-msgstr "Diuzit lugerezh ar voullerez"
-
-#: ../../printerdrake.pm_.c:2907
-#, fuzzy
-msgid "Which printing system (spooler) do you want to use?"
-msgstr "Pe seurt parzhadur a vennit ?"
-
-#: ../../printerdrake.pm_.c:2943
-#, fuzzy, c-format
-msgid "Configuring printer \"%s\"..."
-msgstr "Kefluniañ ar voullerez"
-
-#: ../../printerdrake.pm_.c:2957
-#, fuzzy
-msgid "Installing Foomatic..."
-msgstr "O staliañ ar pakad %s"
-
-#: ../../printerdrake.pm_.c:3027 ../../printerdrake.pm_.c:3068
-#: ../../printerdrake.pm_.c:3465 ../../printerdrake.pm_.c:3538
-msgid "Printer options"
-msgstr "Dibarzhoù ar voullerez"
-
-#: ../../printerdrake.pm_.c:3037
-#, fuzzy
-msgid "Preparing Printerdrake..."
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:3055 ../../printerdrake.pm_.c:3628
-#, fuzzy
-msgid "Configuring applications..."
-msgstr "Kefluniañ ar voullerez"
-
-#: ../../printerdrake.pm_.c:3075
-#, fuzzy
-msgid "Would you like to configure printing?"
-msgstr "Mennout a rit kefluniañ ur voullerez ?"
-
-#: ../../printerdrake.pm_.c:3087
-msgid "Printing system: "
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3147
-#, fuzzy
-msgid ""
-"The following printers are configured. Double-click on a printer to change "
-"its settings; to make it the default printer; to view information about it; "
-"or to make a printer on a remote CUPS server available for Star Office/"
-"OpenOffice.org/GIMP."
-msgstr ""
-"Setu da heul ar steudadoù moullañ.\n"
-"Gallout a rit ouzhpennañ lod pe gemmañ a re a zo."
-
-#: ../../printerdrake.pm_.c:3148
-#, fuzzy
-msgid ""
-"The following printers are configured. Double-click on a printer to change "
-"its settings; to make it the default printer; or to view information about "
-"it."
-msgstr ""
-"Setu da heul ar steudadoù moullañ.\n"
-"Gallout a rit ouzhpennañ lod pe gemmañ a re a zo."
-
-#: ../../printerdrake.pm_.c:3175
-msgid "Refresh printer list (to display all available remote CUPS printers)"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3193
-#, fuzzy
-msgid "Change the printing system"
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../printerdrake.pm_.c:3198 ../../standalone/drakconnect_.c:277
-#, fuzzy
-msgid "Normal Mode"
-msgstr "Boas"
-
-#: ../../printerdrake.pm_.c:3358 ../../printerdrake.pm_.c:3408
-#: ../../printerdrake.pm_.c:3621
-#, fuzzy
-msgid "Do you want to configure another printer?"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../printerdrake.pm_.c:3443
-#, fuzzy
-msgid "Modify printer configuration"
-msgstr "Kefluniañ ar modem"
-
-#: ../../printerdrake.pm_.c:3445
-#, fuzzy, c-format
-msgid ""
-"Printer %s\n"
-"What do you want to modify on this printer?"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../printerdrake.pm_.c:3449
-msgid "Do it!"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3454 ../../printerdrake.pm_.c:3509
-#, fuzzy
-msgid "Printer connection type"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../printerdrake.pm_.c:3455 ../../printerdrake.pm_.c:3513
-#, fuzzy
-msgid "Printer name, description, location"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../printerdrake.pm_.c:3457 ../../printerdrake.pm_.c:3531
-msgid "Printer manufacturer, model, driver"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3458 ../../printerdrake.pm_.c:3532
-msgid "Printer manufacturer, model"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3467 ../../printerdrake.pm_.c:3542
-msgid "Set this printer as the default"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3469 ../../printerdrake.pm_.c:3547
-msgid "Add this printer to Star Office/OpenOffice.org/GIMP"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3470 ../../printerdrake.pm_.c:3556
-msgid "Remove this printer from Star Office/OpenOffice.org/GIMP"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3471 ../../printerdrake.pm_.c:3565
-#, fuzzy
-msgid "Print test pages"
-msgstr "O voullañ pajenn(où) skrid..."
-
-#: ../../printerdrake.pm_.c:3472 ../../printerdrake.pm_.c:3567
-#, fuzzy
-msgid "Know how to use this printer"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../printerdrake.pm_.c:3474 ../../printerdrake.pm_.c:3569
-#, fuzzy
-msgid "Remove printer"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:3520
-#, fuzzy, c-format
-msgid "Removing old printer \"%s\"..."
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../printerdrake.pm_.c:3545
-#, fuzzy
-msgid "Default printer"
-msgstr "Moullerez lec'hel"
-
-#: ../../printerdrake.pm_.c:3546
-#, c-format
-msgid "The printer \"%s\" is set as the default printer now."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3550 ../../printerdrake.pm_.c:3553
-msgid "Adding printer to Star Office/OpenOffice.org/GIMP"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3551
-#, c-format
-msgid ""
-"The printer \"%s\" was successfully added to Star Office/OpenOffice.org/GIMP."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3554
-#, c-format
-msgid "Failed to add the printer \"%s\" to Star Office/OpenOffice.org/GIMP."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3559 ../../printerdrake.pm_.c:3562
-msgid "Removing printer from Star Office/OpenOffice.org/GIMP"
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3560
-#, c-format
-msgid ""
-"The printer \"%s\" was successfully removed from Star Office/OpenOffice.org/"
-"GIMP."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3563
-#, c-format
-msgid ""
-"Failed to remove the printer \"%s\" from Star Office/OpenOffice.org/GIMP."
-msgstr ""
-
-#: ../../printerdrake.pm_.c:3571
-#, fuzzy, c-format
-msgid "Do you really want to remove the printer \"%s\"?"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../printerdrake.pm_.c:3575
-#, fuzzy, c-format
-msgid "Removing printer \"%s\"..."
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../proxy.pm_.c:29 ../../proxy.pm_.c:37 ../../proxy.pm_.c:58
-#: ../../proxy.pm_.c:78
-#, fuzzy
-msgid "Proxy configuration"
-msgstr "Kefluniadur goude staliañ"
-
-#: ../../proxy.pm_.c:30
-msgid ""
-"Welcome to the proxy configuration utility.\n"
-"\n"
-"Here, you'll be able to set up your http and ftp proxies\n"
-"with or without login and password\n"
-msgstr ""
-
-#: ../../proxy.pm_.c:38
-msgid ""
-"Please fill in the http proxy informations\n"
-"Leave it blank if you don't want an http proxy"
-msgstr ""
-
-#: ../../proxy.pm_.c:39 ../../proxy.pm_.c:60
-msgid "URL"
-msgstr "URL"
-
-#: ../../proxy.pm_.c:40 ../../proxy.pm_.c:61
-#, fuzzy
-msgid "port"
-msgstr "Paour"
-
-#: ../../proxy.pm_.c:44
-#, fuzzy
-msgid "Url should begin with 'http:'"
-msgstr "http://... a zlefe bezañ ar proksi"
-
-#: ../../proxy.pm_.c:48 ../../proxy.pm_.c:69
-msgid "The port part should be numeric"
-msgstr ""
-
-#: ../../proxy.pm_.c:59
-msgid ""
-"Please fill in the ftp proxy informations\n"
-"Leave it blank if you don't want an ftp proxy"
-msgstr ""
-
-#: ../../proxy.pm_.c:79
-msgid ""
-"Please enter proxy login and password, if any.\n"
-"Leave it blank if you don't want login/passwd"
-msgstr ""
-
-#: ../../proxy.pm_.c:80
-#, fuzzy
-msgid "login"
-msgstr "Belgian"
-
-#: ../../proxy.pm_.c:82
-#, fuzzy
-msgid "password"
-msgstr "Tremenger"
-
-#: ../../proxy.pm_.c:84
-#, fuzzy
-msgid "re-type password"
-msgstr "Tremenger ebet"
-
-#: ../../proxy.pm_.c:88
-#, fuzzy
-msgid "The passwords don't match. Try again!"
-msgstr "An tremegerioù ne glot ket"
-
-#: ../../raid.pm_.c:35
-#, c-format
-msgid "Can't add a partition to _formatted_ RAID md%d"
-msgstr "N'hellan ket ouzhpennañ ur parzhadur da RAID md%d _furmadet_"
-
-#: ../../raid.pm_.c:108
-#, c-format
-msgid "Can't write file %s"
-msgstr "N'hellan ket skrivañ e %s"
-
-#: ../../raid.pm_.c:137
-msgid "mkraid failed"
-msgstr "mkraid sac'het"
-
-#: ../../raid.pm_.c:137
-msgid "mkraid failed (maybe raidtools are missing?)"
-msgstr "mkraid sac'het (raidtools a vank emichañs ?)"
-
-#: ../../raid.pm_.c:153
-#, c-format
-msgid "Not enough partitions for RAID level %d\n"
-msgstr "Ket a-walc'h a parzhadurioù evit RAID live %d\n"
-
-#: ../../security/main.pm_.c:35
-msgid ""
-"Standard: This is the standard security recommended for a computer that will "
-"be used to connect\n"
-" to the Internet as a client.\n"
-"\n"
-"High: There are already some restrictions, and more automatic checks "
-"are run every night.\n"
-"\n"
-"Higher: The security is now high enough to use the system as a server "
-"which can accept\n"
-" connections from many clients. If your machine is only a "
-"client on the Internet, you\n"
-"\t should choose a lower level.\n"
-"\n"
-"Paranoid: This is similar to the previous level, but the system is entirely "
-"closed and security\n"
-" features are at their maximum\n"
-"\n"
-"Security Administrator:\n"
-" If the 'Security Alerts' option is set, security alerts will "
-"be sent to this user (username or\n"
-"\t email)"
-msgstr ""
-
-#: ../../security/main.pm_.c:66
-#, fuzzy
-msgid "Security Level:"
-msgstr "Live surentez"
-
-#: ../../security/main.pm_.c:74
-#, fuzzy
-msgid "Security Alerts:"
-msgstr "Live surentez"
-
-#: ../../security/main.pm_.c:83
-#, fuzzy
-msgid "Security Administrator:"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../security/main.pm_.c:114 ../../security/main.pm_.c:150
-#, fuzzy, c-format
-msgid " (default: %s)"
-msgstr "? (%s dre ziouer)"
-
-#: ../../security/main.pm_.c:118 ../../security/main.pm_.c:154
-#: ../../security/main.pm_.c:179
-msgid ""
-"The following options can be set to customize your\n"
-"system security. If you need explanations, click on Help.\n"
-msgstr ""
-
-#: ../../security/main.pm_.c:226
-#, fuzzy
-msgid "Network Options"
-msgstr "Dibarzhoù ar mollad :"
-
-#: ../../security/main.pm_.c:235
-#, fuzzy
-msgid "System Options"
-msgstr "Dibarzhoù ar mollad :"
-
-#: ../../security/main.pm_.c:242
-msgid "Periodic Checks"
-msgstr ""
-
-#: ../../security/main.pm_.c:256
-#, fuzzy
-msgid "Please wait, setting security level..."
-msgstr "O termeniñ al live surentez"
-
-#: ../../security/main.pm_.c:262
-#, fuzzy
-msgid "Please wait, setting security options..."
-msgstr "Gortozit mar plij, o prientiñ ar staliadur"
-
-#: ../../services.pm_.c:14
-msgid "Launch the ALSA (Advanced Linux Sound Architecture) sound system"
-msgstr ""
-
-#: ../../services.pm_.c:15
-msgid "Anacron a periodic command scheduler."
-msgstr "Anacron, ur steuñvaer urzhiadoù mareadek."
-
-#: ../../services.pm_.c:16
-msgid ""
-"apmd is used for monitoring batery status and logging it via syslog.\n"
-"It can also be used for shutting down the machine when the battery is low."
-msgstr ""
-"servijout a ra apmd evit evezhiañ stad an daspugner hag he enrollañ dre "
-"syslog.\n"
-"Gallout a ra ivez servijout da lazhañ an ardivink pa vez izel an daspugner."
-
-#: ../../services.pm_.c:18
-msgid ""
-"Runs commands scheduled by the at command at the time specified when\n"
-"at was run, and runs batch commands when the load average is low enough."
-msgstr ""
-"Seveniñ an urzhiadoù steuñvaet gant an urzhiad at d'ar pred laket pa 'z eo\n"
-"bet sevenet at, ha seveniñ urzhiadoù dre lod pa 'z eo izel a-walc'h ar garg."
-
-#: ../../services.pm_.c:20
-msgid ""
-"cron is a standard UNIX program that runs user-specified programs\n"
-"at periodic scheduled times. vixie cron adds a number of features to the "
-"basic\n"
-"UNIX cron, including better security and more powerful configuration options."
-msgstr ""
-"Ur goulev standard UNIX eo cron evit seveniñ goulevioù diouzh c'hoant an\n"
-"arveriaded da goulzoù mareadek steuñvaet. vixie cron a ouzhpenn kalzig a "
-"arc'hweloù\n"
-"d'ar cron UNIX diazez, en o zouez surentez ha dibarzhoù kefluniañ gwelloc'h."
-
-#: ../../services.pm_.c:23
-msgid ""
-"GPM adds mouse support to text-based Linux applications such the\n"
-"Midnight Commander. It also allows mouse-based console cut-and-paste "
-"operations,\n"
-"and includes support for pop-up menus on the console."
-msgstr ""
-"GPM a zegas implij al logodenn d'an arloadoù Linux mod-skrid evel\n"
-"Midnight Commander. Reiñ a ra tu da seveniñ obererezhoù troc'hañ-ha-pegañ,\n"
-"ha skor evit meuziadoù kemperzhel war al letrin."
-
-#: ../../services.pm_.c:26
-msgid ""
-"HardDrake runs a hardware probe, and optionally configures\n"
-"new/changed hardware."
-msgstr ""
-
-#: ../../services.pm_.c:28
-msgid ""
-"Apache is a World Wide Web server. It is used to serve HTML files and CGI."
-msgstr ""
-"Ur servijer evit ar Gwiad Bedel eo Apache. Implijet e vez evit servijañ\n"
-"restroù HTML ha CGI."
-
-#: ../../services.pm_.c:29
-msgid ""
-"The internet superserver daemon (commonly called inetd) starts a\n"
-"variety of other internet services as needed. It is responsible for "
-"starting\n"
-"many services, including telnet, ftp, rsh, and rlogin. Disabling inetd "
-"disables\n"
-"all of the services it is responsible for."
-msgstr ""
-"An diaoul gourservijer kenrouedad (anvet inetd ordinal) a loc'h ur\n"
-"bochad a servijoù kenrouedad all diouzh an ezhomm. E karg loc'hañ meur a "
-"servijoù\n"
-"eo, en o zouez telnet, ftp, rsh, and rlogin. Dizoberiañ inetd a zizoberia\n"
-"an holl servijoù m'eo eñ atebek warno."
-
-#: ../../services.pm_.c:33
-msgid ""
-"Launch packet filtering for Linux kernel 2.2 series, to set\n"
-"up a firewall to protect your machine from network attacks."
-msgstr ""
-
-#: ../../services.pm_.c:35
-msgid ""
-"This package loads the selected keyboard map as set in\n"
-"/etc/sysconfig/keyboard. This can be selected using the kbdconfig utility.\n"
-"You should leave this enabled for most machines."
-msgstr ""
-"Ar pakad-mañ a garg ar stokellaoueg diuzet evel termenet e\n"
-"/etc/sysconfig/keyboard. Dre ar maveg kbdconfig e c'hell bezañ diuzet\n"
-"kement-se. Gwell deoc'h leuskel se gweredekaet war darn vuiañ an ardivinkoù."
-
-#: ../../services.pm_.c:38
-msgid ""
-"Automatic regeneration of kernel header in /boot for\n"
-"/usr/include/linux/{autoconf,version}.h"
-msgstr ""
-
-#: ../../services.pm_.c:40
-msgid "Automatic detection and configuration of hardware at boot."
-msgstr ""
-
-#: ../../services.pm_.c:41
-msgid ""
-"Linuxconf will sometimes arrange to perform various tasks\n"
-"at boot-time to maintain the system configuration."
-msgstr ""
-
-#: ../../services.pm_.c:43
-msgid ""
-"lpd is the print daemon required for lpr to work properly. It is\n"
-"basically a server that arbitrates print jobs to printer(s)."
-msgstr ""
-"An diaoul moullañ ret evit ma dafez en-ro reizh lpr eo lpd. Dre vras\n"
-"ez eo ur servijer a vera dleadoù moullañ evir ar voullerez(ed)."
-
-#: ../../services.pm_.c:45
-msgid ""
-"Linux Virtual Server, used to build a high-performance and highly\n"
-"available server."
-msgstr ""
-
-#: ../../services.pm_.c:47
-#, fuzzy
-msgid ""
-"named (BIND) is a Domain Name Server (DNS) that is used to resolve host "
-"names to IP addresses."
-msgstr ""
-"named (BIND) a zo ur Servijer Anvioù Domani (DNS) a zo implijet evit\n"
-"amdreiñ anvioù ostiz e chomlec'hioù IP."
-
-#: ../../services.pm_.c:48
-msgid ""
-"Mounts and unmounts all Network File System (NFS), SMB (Lan\n"
-"Manager/Windows), and NCP (NetWare) mount points."
-msgstr ""
-"Evit marc'hañ ha divarc'hañ poentoù marc'hañ an holl Reizhiadoù Restroù\n"
-"Rouedad (NFS), SMB (Lan Manager/Windows) ha NCP (NetWare)."
-
-#: ../../services.pm_.c:50
-msgid ""
-"Activates/Deactivates all network interfaces configured to start\n"
-"at boot time."
-msgstr ""
-"Oberia/Dizoberia an holl etrefasoù rouedad kefluniet da lañsañ\n"
-"da vare al loc'hañ."
-
-#: ../../services.pm_.c:52
-msgid ""
-"NFS is a popular protocol for file sharing across TCP/IP networks.\n"
-"This service provides NFS server functionality, which is configured via the\n"
-"/etc/exports file."
-msgstr ""
-"NFS a zo ur c'homenad brudet evit rannañ restroù dre rouedadoù TCP/IP.\n"
-"Ar servij-mañ a bourvez arc'hweloù ur servijer NFS, a vez kefluniaet dre ar\n"
-"restr /etc/exports."
-
-#: ../../services.pm_.c:55
-msgid ""
-"NFS is a popular protocol for file sharing across TCP/IP\n"
-"networks. This service provides NFS file locking functionality."
-msgstr ""
-"NFS a zo ur c'homenad brudet evit rannañ restroù dre rouedadoù\n"
-"TCP/IP. Ar servij-mañ a bourvez un arc'hwel morailhañ restroù NFS."
-
-#: ../../services.pm_.c:57
-msgid ""
-"Automatically switch on numlock key locker under console\n"
-"and XFree at boot."
-msgstr ""
-
-#: ../../services.pm_.c:59
-msgid "Support the OKI 4w and compatible winprinters."
-msgstr ""
-
-#: ../../services.pm_.c:60
-msgid ""
-"PCMCIA support is usually to support things like ethernet and\n"
-"modems in laptops. It won't get started unless configured so it is safe to "
-"have\n"
-"it installed on machines that don't need it."
-msgstr ""
-"Skorañ PCMCIA a zegas an tu da implijonut traoù evel ethernet ha modemoù\n"
-"e urzhiataeroù hezoug. Ne vo ket kroget hep bezañ bet kefluniet, rak-se eo "
-"diarvar\n"
-"e staliañ war ardivinkoù n'o deus ket ezhomm anezhañ."
-
-#: ../../services.pm_.c:63
-msgid ""
-"The portmapper manages RPC connections, which are used by\n"
-"protocols such as NFS and NIS. The portmap server must be running on "
-"machines\n"
-"which act as servers for protocols which make use of the RPC mechanism."
-msgstr ""
-"Ar c'hartenner porzhioù a vera kevreadennoù RPC, a zo implijet gant\n"
-"komenadoù evel NFS ha NIS. Ar servijer kartenn-porzhioù a rankfe mont en-"
-"dro\n"
-"war ardivinkoù anezho servijerien komenadoù a implij ar reizhiad RPC."
-
-#: ../../services.pm_.c:66
-#, fuzzy
-msgid ""
-"Postfix is a Mail Transport Agent, which is the program that moves mail from "
-"one machine to another."
-msgstr ""
-"Ur Gwazour Treuzdougen Postel eo Postfix, a zo ar goulev a\n"
-"zilech posteloù etre un ardivink hag un all."
-
-#: ../../services.pm_.c:67
-msgid ""
-"Saves and restores system entropy pool for higher quality random\n"
-"number generation."
-msgstr ""
-"Enroll hag assav poul dizurzh ar reizhiad evit genel niveroù\n"
-"dargouezhek gant gwelloc'h perzhded."
-
-#: ../../services.pm_.c:69
-msgid ""
-"Assign raw devices to block devices (such as hard drive\n"
-"partitions), for the use of applications such as Oracle"
-msgstr ""
-
-#: ../../services.pm_.c:71
-msgid ""
-"The routed daemon allows for automatic IP router table updated via\n"
-"the RIP protocol. While RIP is widely used on small networks, more complex\n"
-"routing protocols are needed for complex networks."
-msgstr ""
-"An diaoul routed a ro an tu da vremanaat ent emgefreek an taolenn henchañ\n"
-"IP dre ar c'homenad RIP. Tra ma vez implijet aliesig RIP war rouedadoù "
-"bihan,\n"
-"ezhomm a zo komenadoù henchañ kemplezhoc'h evit rouedadoù rouestlet."
-
-#: ../../services.pm_.c:74
-msgid ""
-"The rstat protocol allows users on a network to retrieve\n"
-"performance metrics for any machine on that network."
-msgstr ""
-"Ar c'homenad rstat a ro tu da implijerien ur rouedad da zastum\n"
-"muzulioù barregezh diwar ne vern pe ardivink er rouedad-se."
-
-#: ../../services.pm_.c:76
-msgid ""
-"The rusers protocol allows users on a network to identify who is\n"
-"logged in on other responding machines."
-msgstr ""
-"Ar c'homenad rusers a ro tu da implijerien ur rouedad da anavezout piv\n"
-"a zo kevreet ouzh ardivinkoù all a respont."
-
-#: ../../services.pm_.c:78
-msgid ""
-"The rwho protocol lets remote users get a list of all of the users\n"
-"logged into a machine running the rwho daemon (similiar to finger)."
-msgstr ""
-"Ar c'homenad rwho a bourchas da implijerien a-bell roll an holl arveriaded a "
-"zo\n"
-"kevreet ouzh un ardivink ma da en-dro warnañ an diaoul rwhod (heñvel ouzh "
-"finger)."
-
-#: ../../services.pm_.c:80
-msgid "Launch the sound system on your machine"
-msgstr ""
-
-#: ../../services.pm_.c:81
-msgid ""
-"Syslog is the facility by which many daemons use to log messages\n"
-"to various system log files. It is a good idea to always run syslog."
-msgstr ""
-"Syslog a zo ur gwazerezh ma enroll drezañ an diaouled niverus o "
-"c'hemennadoù\n"
-"e kerzhlevrioù liesseurt ar reizhiad. Ur mennozh mat eo seveniñ ingal syslog."
-
-#: ../../services.pm_.c:83
-msgid "Load the drivers for your usb devices."
-msgstr ""
-
-#: ../../services.pm_.c:84
-#, fuzzy
-msgid "Starts the X Font Server (this is mandatory for XFree to run)."
-msgstr ""
-"Enaou ha dizenaou ar servijer Fontoù X da vare al loc'hañ hag al lazhañ."
-
-#: ../../services.pm_.c:110 ../../services.pm_.c:152
-msgid "Choose which services should be automatically started at boot time"
-msgstr "Dibabit pe servijoù a zlefe bezañ lañset ent emgefreek pa loc'her"
-
-#: ../../services.pm_.c:122
-#, fuzzy
-msgid "Printing"
-msgstr "Moullerez"
-
-#: ../../services.pm_.c:123
-#, fuzzy
-msgid "Internet"
-msgstr "dedennus"
-
-#: ../../services.pm_.c:126
-msgid "File sharing"
-msgstr ""
-
-#: ../../services.pm_.c:128 ../../standalone/drakbackup_.c:1746
-#, fuzzy
-msgid "System"
-msgstr "Reizhiad/Diazez"
-
-#: ../../services.pm_.c:133
-#, fuzzy
-msgid "Remote Administration"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../services.pm_.c:141
-#, fuzzy
-msgid "Database Server"
-msgstr "Stlennvonioù"
-
-#: ../../services.pm_.c:170
-#, c-format
-msgid "Services: %d activated for %d registered"
-msgstr ""
-
-#: ../../services.pm_.c:186
-#, fuzzy
-msgid "Services"
-msgstr "trobarzhell"
-
-#: ../../services.pm_.c:198
-#, fuzzy
-msgid "running"
-msgstr "Ho evezh"
-
-#: ../../services.pm_.c:198
-#, fuzzy
-msgid "stopped"
-msgstr "Ouzhpennañ"
-
-#: ../../services.pm_.c:212
-msgid "Services and deamons"
-msgstr ""
-
-#: ../../services.pm_.c:217
-msgid ""
-"No additional information\n"
-"about this service, sorry."
-msgstr ""
-
-#: ../../services.pm_.c:224
-#, fuzzy
-msgid "On boot"
-msgstr "Gwrizienn"
-
-#: ../../services.pm_.c:236
-#, fuzzy
-msgid "Start"
-msgstr "Meuziad Lañsañ"
-
-#: ../../services.pm_.c:236
-#, fuzzy
-msgid "Stop"
-msgstr "Rann"
-
-#: ../../share/advertising/01-thanks.pl_.c:9
-msgid "Thank you for choosing Mandrake Linux 9.0"
-msgstr ""
-
-#: ../../share/advertising/01-thanks.pl_.c:10
-msgid "Welcome to the Open Source world"
-msgstr ""
-
-#: ../../share/advertising/01-thanks.pl_.c:11
-msgid ""
-"The success of MandrakeSoft is based upon the principle of Free Software. "
-"Your new operating system is the result of collaborative work on the part of "
-"the worldwide Linux Community"
-msgstr ""
-
-#: ../../share/advertising/02-community.pl_.c:9
-#, fuzzy
-msgid "Get involved in the Free Software world"
-msgstr "Amprouiñ ar c'hefluniadur"
-
-#: ../../share/advertising/02-community.pl_.c:10
-msgid "Want to know more about the Open Source community?"
-msgstr ""
-
-#: ../../share/advertising/02-community.pl_.c:11
-msgid ""
-"To share your own knowledge and help build Linux tools, join the discussion "
-"forums you'll find on our \"Community\" webpages"
-msgstr ""
-
-#: ../../share/advertising/03-internet.pl_.c:9
-#, fuzzy
-msgid "Get the most from the Internet"
-msgstr "Anv ar gevreadenn"
-
-#: ../../share/advertising/03-internet.pl_.c:10
-msgid ""
-"Mandrake Linux 9.0 has selected the best software for you. Surf the Web and "
-"view animations with Mozilla and Konqueror, or read your mail and handle "
-"your personal information with Evolution and Kmail"
-msgstr ""
-
-#: ../../share/advertising/04-multimedia.pl_.c:9
-msgid "Discover the most up-to-date graphical and multimedia tools!"
-msgstr ""
-
-#: ../../share/advertising/04-multimedia.pl_.c:10
-msgid "Push multimedia to its limits!"
-msgstr ""
-
-#: ../../share/advertising/04-multimedia.pl_.c:11
-msgid ""
-"Mandrake Linux 9.0 enables you to use the very latest software to play audio "
-"files, edit and handle your images or photos, and play videos"
-msgstr ""
-
-#: ../../share/advertising/05-games.pl_.c:9
-msgid "Games"
-msgstr "C'hoarioù"
-
-#: ../../share/advertising/05-games.pl_.c:10
-msgid ""
-"Mandrake Linux 9.0 provides the best Open Source games - arcade, action, "
-"strategy, ..."
-msgstr ""
-
-#: ../../share/advertising/06-mcc.pl_.c:9 ../../standalone/drakbug_.c:69
-#, fuzzy
-msgid "Mandrake Control Center"
-msgstr "Anv ar gevreadenn"
-
-#: ../../share/advertising/06-mcc.pl_.c:10
-msgid ""
-"Mandrake Linux 9.0 provides a powerful tool to fully customize and configure "
-"your machine"
-msgstr ""
-
-#: ../../share/advertising/07-desktop.pl_.c:9
-#, fuzzy
-msgid "User interfaces"
-msgstr "Etrefas arveriad/X"
-
-#: ../../share/advertising/07-desktop.pl_.c:10
-msgid ""
-"Mandrake Linux 9.0 provides you with 11 user interfaces that can be fully "
-"modified: KDE 3, Gnome 2, WindowMaker, ..."
-msgstr ""
-
-#: ../../share/advertising/08-development.pl_.c:9
-#, fuzzy
-msgid "Development simplified"
-msgstr "Diorren"
-
-#: ../../share/advertising/08-development.pl_.c:10
-msgid "Mandrake Linux 9.0 is the ultimate development platform"
-msgstr ""
-
-#: ../../share/advertising/08-development.pl_.c:11
-msgid ""
-"Use the full power of the GNU gcc 3 compiler as well as the best Open Source "
-"development environments"
-msgstr ""
-
-#: ../../share/advertising/09-server.pl_.c:9
-msgid "Turn your machine into a reliable server"
-msgstr ""
-
-#: ../../share/advertising/09-server.pl_.c:10
-msgid ""
-"Transform your machine into a powerful Linux server with a few clicks of "
-"your mouse: Web server, mail, firewall, router, file and print server, ..."
-msgstr ""
-
-#: ../../share/advertising/10-mnf.pl_.c:9
-msgid "Optimize your security"
-msgstr ""
-
-#: ../../share/advertising/10-mnf.pl_.c:10
-msgid ""
-"The MandrakeSecurity range includes the Multi Network Firewall product (M.N."
-"F.)"
-msgstr ""
-
-#: ../../share/advertising/10-mnf.pl_.c:11
-msgid ""
-"This firewall product includes network features that allow you to fulfill "
-"all your security needs"
-msgstr ""
-
-#: ../../share/advertising/10-mnf.pl_.c:12
-msgid "This product is available on MandrakeStore website"
-msgstr ""
-
-#: ../../share/advertising/11-mdkstore.pl_.c:9
-msgid "The official MandrakeSoft store"
-msgstr ""
-
-#: ../../share/advertising/11-mdkstore.pl_.c:10
-msgid ""
-"Our full range of Linux solutions, as well as special offers on products and "
-"other \"goodies,\" are available online on our e-store:"
-msgstr ""
-
-#: ../../share/advertising/12-mdkstore.pl_.c:9
-msgid "Strategic partners"
-msgstr ""
-
-#: ../../share/advertising/12-mdkstore.pl_.c:10
-msgid ""
-"MandrakeSoft works alongside a selection of companies offering professional "
-"solutions compatible with Mandrake Linux. A list of these partners is "
-"available on the MandrakeStore"
-msgstr ""
-
-#: ../../share/advertising/13-mdkcampus.pl_.c:9
-msgid "Discover MandrakeSoft's training catalogue Linux-Campus"
-msgstr ""
-
-#: ../../share/advertising/13-mdkcampus.pl_.c:10
-msgid ""
-"The training program has been created to respond to the needs of both end "
-"users and experts (Network and System administrators)"
-msgstr ""
-
-#: ../../share/advertising/13-mdkcampus.pl_.c:11
-msgid "Certify yourself on Linux"
-msgstr ""
-
-#: ../../share/advertising/13-mdkcampus.pl_.c:12
-msgid ""
-"Whether you choose to teach yourself online or via our network of training "
-"partners, the Linux-Campus catalogue prepares you for the acknowledged LPI "
-"certification program (worldwide professional technical certification)"
-msgstr ""
-
-#: ../../share/advertising/14-mdkexpert.pl_.c:9
-#, fuzzy
-msgid "Become a MandrakeExpert"
-msgstr "MandrakeExpert"
-
-#: ../../share/advertising/14-mdkexpert.pl_.c:10
-msgid ""
-"Find the solutions of your problems via MandrakeSoft's online support "
-"platform"
-msgstr ""
-
-#: ../../share/advertising/14-mdkexpert.pl_.c:11
-msgid ""
-"Join the MandrakeSoft support teams and the Linux Community online to share "
-"your knowledge and help others by becoming a recognized Expert on the online "
-"technical support website:"
-msgstr ""
-
-#: ../../share/advertising/15-mdkexpert-corporate.pl_.c:9
-#, fuzzy
-msgid "MandrakeExpert Corporate"
-msgstr "MandrakeExpert"
-
-#: ../../share/advertising/15-mdkexpert-corporate.pl_.c:10
-msgid "An online platform to respond to company's specific support needs"
-msgstr ""
-
-#: ../../share/advertising/15-mdkexpert-corporate.pl_.c:11
-msgid ""
-"All incidents will be followed up by a single qualified MandrakeSoft "
-"technical expert."
-msgstr ""
-
-#: ../../share/advertising/17-mdkclub.pl_.c:9
-msgid "Discover MandrakeClub and Mandrake Corporate Club"
-msgstr ""
-
-#: ../../share/advertising/17-mdkclub.pl_.c:10
-msgid ""
-"MandrakeClub and Mandrake Corporate Club were created for business and "
-"private users of Mandrake Linux who would like to directly support their "
-"favorite Linux distribution while also receiving special privileges. If you "
-"enjoy our products, if your company benefits from our products to gain a "
-"competititve edge, if you want to support Mandrake Linux development, join "
-"MandrakeClub!"
-msgstr ""
-
-#: ../../standalone.pm_.c:42
-msgid "Installing packages..."
-msgstr "O staliañ pakadoù..."
-
-#: ../../standalone/XFdrake_.c:147
-msgid "Please log out and then use Ctrl-Alt-BackSpace"
-msgstr "Dizereit mar plij ha neuze implijit Ctrl-Alt-WarGil"
-
-#: ../../standalone/XFdrake_.c:151
-#, c-format
-msgid "Please relog into %s to activate the changes"
-msgstr "Adereit ouzh %s evit bevaat ar c'hemmoù mar plij"
-
-#: ../../standalone/drakTermServ_.c:188
-#, fuzzy
-msgid "Mandrake Terminal Server Configuration"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../standalone/drakTermServ_.c:203
-#, fuzzy
-msgid "Enable Server"
-msgstr "Stlennvonioù"
-
-#: ../../standalone/drakTermServ_.c:210
-#, fuzzy
-msgid "Disable Server"
-msgstr "Stlennvonioù"
-
-#: ../../standalone/drakTermServ_.c:218
-#, fuzzy
-msgid "Start Server"
-msgstr "Servijer NIS"
-
-#: ../../standalone/drakTermServ_.c:225
-#, fuzzy
-msgid "Stop Server"
-msgstr "Servijer NIS"
-
-#: ../../standalone/drakTermServ_.c:233
-#, fuzzy
-msgid "Etherboot Floppy/ISO"
-msgstr "Krouiñ ur bladennig loc'hañ"
-
-#: ../../standalone/drakTermServ_.c:235
-msgid "Net Boot Images"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:239
-#, fuzzy
-msgid "Add/Del Users"
-msgstr "Ouzhpennañ un arveriad"
-
-#: ../../standalone/drakTermServ_.c:241
-msgid "Add/Del Clients"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:436
-msgid "Boot Floppy"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:438
-msgid "Boot ISO"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:507
-msgid "Build Whole Kernel -->"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:509 ../../standalone/drakTermServ_.c:539
-msgid "This will take a few minutes."
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:521
-msgid "No kernel selected!"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:524
-msgid "Build Single NIC -->"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:535
-#, fuzzy
-msgid "No nic selected!"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakTermServ_.c:538
-msgid "Build All Kernels -->"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:552
-#, fuzzy
-msgid "<-- Delete"
-msgstr "Dilemel"
-
-#: ../../standalone/drakTermServ_.c:559
-#, fuzzy
-msgid "Delete All NBIs"
-msgstr "Diuzit ar restr"
-
-#: ../../standalone/drakTermServ_.c:621
-#, fuzzy
-msgid "Add User -->"
-msgstr "Ouzhpennañ un arveriad"
-
-#: ../../standalone/drakTermServ_.c:629
-msgid "<-- Del User"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:694
-msgid "No net boot images created!"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:710
-msgid "Add Client -->"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:742
-msgid "<-- Del Client"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:748
-#, fuzzy
-msgid "dhcpd Config..."
-msgstr "Kefluniañ IDE"
-
-#: ../../standalone/drakTermServ_.c:873
-#, fuzzy
-msgid "dhcpd Server Configuration"
-msgstr "Kefluniadur"
-
-#: ../../standalone/drakTermServ_.c:874
-msgid ""
-"Most of these values were extracted\n"
-"from your running system. You can modify as needed."
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:875
-#, fuzzy
-msgid "Write Config"
-msgstr "Kefluniañ X"
-
-#: ../../standalone/drakTermServ_.c:965
-#, fuzzy
-msgid "Please insert floppy disk:"
-msgstr "Lakait ur bladennig el lenner %s"
-
-#: ../../standalone/drakTermServ_.c:969
-msgid "Couldn't access the floppy!"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:971
-msgid "Floppy can be removed now"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:974
-#, fuzzy
-msgid "No floppy drive available!"
-msgstr "Lenner pladennig hegerz ebet"
-
-#: ../../standalone/drakTermServ_.c:983
-#, c-format
-msgid "Etherboot ISO image is %s"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:985
-msgid "Something went wrong! - Is mkisofs installed?"
-msgstr ""
-
-#: ../../standalone/drakTermServ_.c:1004
-msgid "Need to create /etc/dhcpd.conf first!"
-msgstr ""
-
-#: ../../standalone/drakautoinst_.c:43
-msgid "Error!"
-msgstr "Fazi!"
-
-#: ../../standalone/drakautoinst_.c:44
-#, c-format
-msgid "I can't find needed image file `%s'."
-msgstr ""
-
-#: ../../standalone/drakautoinst_.c:46
-#, fuzzy
-msgid "Auto Install Configurator"
-msgstr "Kefluniadur goude staliañ"
-
-#: ../../standalone/drakautoinst_.c:47
-msgid ""
-"You are about to configure an Auto Install floppy. This feature is somewhat "
-"dangerous and must be used circumspectly.\n"
-"\n"
-"With that feature, you will be able to replay the installation you've "
-"performed on this computer, being interactively prompted for some steps, in "
-"order to change their values.\n"
-"\n"
-"For maximum safety, the partitioning and formatting will never be performed "
-"automatically, whatever you chose during the install of this computer.\n"
-"\n"
-"Do you want to continue?"
-msgstr ""
-
-#: ../../standalone/drakautoinst_.c:69
-#, fuzzy
-msgid "Automatic Steps Configuration"
-msgstr "Kefluniadur goude staliañ"
-
-#: ../../standalone/drakautoinst_.c:70
-msgid ""
-"Please choose for each step whether it will replay like your install, or it "
-"will be manual"
-msgstr ""
-
-#: ../../standalone/drakautoinst_.c:81 ../../standalone/drakautoinst_.c:82
-#, fuzzy
-msgid "Creating auto install floppy"
-msgstr "O krouiñ ur bladennig staliañ emgefreek"
-
-#: ../../standalone/drakautoinst_.c:144
-msgid ""
-"\n"
-"Welcome.\n"
-"\n"
-"The parameters of the auto-install are available in the sections on the left"
-msgstr ""
-
-#: ../../standalone/drakautoinst_.c:239 ../../standalone/drakgw_.c:480
-#: ../../standalone/scannerdrake_.c:119
-msgid "Congratulations!"
-msgstr "Gourc'hemennoù!"
-
-#: ../../standalone/drakautoinst_.c:240
-msgid ""
-"The floppy has been successfully generated.\n"
-"You may now replay your installation."
-msgstr ""
-
-#: ../../standalone/drakautoinst_.c:278
-#, fuzzy
-msgid "Auto Install"
-msgstr "Staliañ"
-
-#: ../../standalone/drakautoinst_.c:348
-#, fuzzy
-msgid "Add an item"
-msgstr "Ouzhpennañ un arveriad"
-
-#: ../../standalone/drakautoinst_.c:355
-#, fuzzy
-msgid "Remove the last item"
-msgstr "O furmadiñ ar restr saveteiñ %s"
-
-#: ../../standalone/drakbackup_.c:617
-msgid "Cron not available yet as non-root"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:723
-msgid "WARNING"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:724
-#, fuzzy
-msgid "FATAL"
-msgstr "FAT"
-
-#: ../../standalone/drakbackup_.c:725
-msgid "INFO"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:737
-msgid ""
-"\n"
-" DrakBackup Report \n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:738
-msgid ""
-"\n"
-" DrakBackup Daemon Report\n"
-"\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:742
-msgid ""
-"\n"
-" DrakBackup Report Details\n"
-"\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:763 ../../standalone/drakbackup_.c:836
-#: ../../standalone/drakbackup_.c:891
-#, fuzzy
-msgid "Total progess"
-msgstr "Amprouiñ ar porzhioù"
-
-#: ../../standalone/drakbackup_.c:818
-#, c-format
-msgid ""
-"%s exists, delete?\n"
-"\n"
-"Warning: If you've already done this process you'll probably\n"
-" need to purge the entry from authorized_keys on the server."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:827
-msgid "This may take a moment to generate the keys."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:834
-#, c-format
-msgid "ERROR: Cannot spawn %s."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:851
-#, c-format
-msgid "No password prompt on %s at port %s"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:852
-#, fuzzy, c-format
-msgid "Bad password on %s"
-msgstr "Tremenger ebet"
-
-#: ../../standalone/drakbackup_.c:853
-#, c-format
-msgid "Permission denied transferring %s to %s"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:854
-#, fuzzy, c-format
-msgid "Can't find %s on %s"
-msgstr "Fazi en ur zigeriñ %s evit skrivañ : %s"
-
-#: ../../standalone/drakbackup_.c:857
-#, c-format
-msgid "%s not responding"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:861
-#, c-format
-msgid ""
-"Transfer successful\n"
-"You may want to verify you can login to the server with:\n"
-"\n"
-"ssh -i %s %s\\@%s\n"
-"\n"
-"without being prompted for a password."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:905
-msgid "WebDAV remote site already in sync!"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:909
-msgid "WebDAV transfer failed!"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:930
-msgid "No CDR/DVDR in drive!"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:934
-msgid "Does not appear to be recordable media!"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:938
-msgid "Not erasable media!"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:977
-msgid "This may take a moment to erase the media."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1062
-msgid "Permission problem accessing CD."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1089
-#, c-format
-msgid "No tape in %s!"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1201 ../../standalone/drakbackup_.c:1250
-msgid "Backup system files..."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1251 ../../standalone/drakbackup_.c:1318
-#, fuzzy
-msgid "Hard Disk Backup files..."
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:1263
-#, fuzzy
-msgid "Backup User files..."
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:1264
-msgid "Hard Disk Backup Progress..."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1317
-#, fuzzy
-msgid "Backup Other files..."
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:1323
-#, fuzzy
-msgid "No changes to backup!"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:1339 ../../standalone/drakbackup_.c:1362
-#, c-format
-msgid ""
-"\n"
-"Drakbackup activities via %s:\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1346
-#, c-format
-msgid ""
-"file list sent by FTP: %s\n"
-" "
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1349
-msgid ""
-"\n"
-" FTP connection problem: It was not possible to send your backup files by "
-"FTP.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1367
-msgid ""
-"\n"
-"Drakbackup activities via CD:\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1372
-msgid ""
-"\n"
-"Drakbackup activities via tape:\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1381
-#, fuzzy
-msgid " Error during mail sending. \n"
-msgstr "Fazi en ur lenn ar restr %s"
-
-#: ../../standalone/drakbackup_.c:1406
-msgid "Can't create catalog!"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1519 ../../standalone/drakbackup_.c:1530
-#: ../../standalone/drakfont_.c:1004
-#, fuzzy
-msgid "File Selection"
-msgstr "Diuzadenn strollad pakadoù"
-
-#: ../../standalone/drakbackup_.c:1558
-msgid "Select the files or directories and click on 'Add'"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1602
-msgid ""
-"\n"
-"Please check all options that you need.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1603
-msgid ""
-"These options can backup and restore all files in your /etc directory.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1604
-#, fuzzy
-msgid "Backup your System files. (/etc directory)"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:1605
-msgid "Use incremental backup (do not replace old backups)"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1606
-msgid "Do not include critical files (passwd, group, fstab)"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1607
-msgid ""
-"With this option you will be able to restore any version\n"
-" of your /etc directory."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1624
-#, fuzzy
-msgid "Please check all users that you want to include in your backup."
-msgstr "Dibabit ar pakadoù a vennit staliañ, mar plij."
-
-#: ../../standalone/drakbackup_.c:1651
-msgid "Do not include the browser cache"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1652 ../../standalone/drakbackup_.c:1676
-msgid "Use Incremental Backups (do not replace old backups)"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1674 ../../standalone/drakfont_.c:1058
-#, fuzzy
-msgid "Remove Selected"
-msgstr "Lemel ar steudad"
-
-#: ../../standalone/drakbackup_.c:1712
-msgid "Windows (FAT32)"
-msgstr "Windows (FAT32)"
-
-#: ../../standalone/drakbackup_.c:1751
-#, fuzzy
-msgid "Users"
-msgstr "Anv arveriad"
-
-#: ../../standalone/drakbackup_.c:1777
-#, fuzzy
-msgid "Use network connection to backup"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:1779
-msgid "Net Method:"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1783
-msgid "Use Expect for SSH"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1784
-msgid ""
-"Create/Transfer\n"
-"backup keys for SSH"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1785
-msgid ""
-" Transfer \n"
-"Now"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1786
-msgid ""
-"Other (not drakbackup)\n"
-"keys in place already"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1790
-#, fuzzy
-msgid "Please enter the host name or IP."
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../standalone/drakbackup_.c:1795
-msgid ""
-"Please enter the directory (or module) to\n"
-" put the backup on this host."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1800
-#, fuzzy
-msgid "Please enter your login"
-msgstr "Klaskit adarre mar plij"
-
-#: ../../standalone/drakbackup_.c:1805
-#, fuzzy
-msgid "Please enter your password"
-msgstr "Klaskit adarre mar plij"
-
-#: ../../standalone/drakbackup_.c:1811
-#, fuzzy
-msgid "Remember this password"
-msgstr "Tremenger ebet"
-
-#: ../../standalone/drakbackup_.c:1822
-msgid "Need hostname, username and password!"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1917
-msgid "Use CD/DVDROM to backup"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1920
-msgid ""
-"Please choose your CD/DVD device\n"
-"(Press Enter to propogate settings to other fields.\n"
-"This field isn't necessary, only a tool to fill in the form.)"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:1925
-#, fuzzy
-msgid "Please choose your CD/DVD media size (Mb)"
-msgstr "Dibabit reizhadur ho stokellaoueg, mar plij."
-
-#
-#: ../../standalone/drakbackup_.c:1931
-#, fuzzy
-msgid "Please check for multisession CD"
-msgstr "Klikit war ur parzhadur mar plij"
-
-#
-#: ../../standalone/drakbackup_.c:1937
-#, fuzzy
-msgid "Please check if you are using CDRW media"
-msgstr "Klikit war ur parzhadur mar plij"
-
-#
-#: ../../standalone/drakbackup_.c:1943
-#, fuzzy
-msgid "Please check if you want to erase your RW media (1st Session)"
-msgstr "Klikit war ur parzhadur mar plij"
-
-#: ../../standalone/drakbackup_.c:1944
-msgid " Erase Now "
-msgstr ""
-
-#
-#: ../../standalone/drakbackup_.c:1950
-#, fuzzy
-msgid "Please check if you are using a DVDR device"
-msgstr "Klikit war ur parzhadur mar plij"
-
-#
-#: ../../standalone/drakbackup_.c:1956
-#, fuzzy
-msgid "Please check if you are using a DVDRAM device"
-msgstr "Klikit war ur parzhadur mar plij"
-
-#: ../../standalone/drakbackup_.c:1969
-msgid ""
-"Please enter your CD Writer device name\n"
-" ex: 0,1,0"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2002
-#, fuzzy
-msgid "No CD device defined!"
-msgstr "Diuzit ar restr"
-
-#: ../../standalone/drakbackup_.c:2050
-#, fuzzy
-msgid "Use tape to backup"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:2053
-msgid "Please enter the device name to use for backup"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2059
-#, fuzzy
-msgid "Please check if you want to use the non-rewinding device."
-msgstr "Dibabit ar pakadoù a vennit staliañ, mar plij."
-
-#: ../../standalone/drakbackup_.c:2065
-#, fuzzy
-msgid "Please check if you want to erase your tape before the backup."
-msgstr "Dibabit ar pakadoù a vennit staliañ, mar plij."
-
-#: ../../standalone/drakbackup_.c:2071
-#, fuzzy
-msgid "Please check if you want to eject your tape after the backup."
-msgstr "Dibabit ar pakadoù a vennit staliañ, mar plij."
-
-#: ../../standalone/drakbackup_.c:2077 ../../standalone/drakbackup_.c:2151
-#: ../../standalone/drakbackup_.c:3118
-msgid ""
-"Please enter the maximum size\n"
-" allowed for Drakbackup"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2142
-#, fuzzy
-msgid "Please enter the directory to save to:"
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../standalone/drakbackup_.c:2157 ../../standalone/drakbackup_.c:3124
-#, fuzzy
-msgid "Use quota for backup files."
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:2223
-#, fuzzy
-msgid "Network"
-msgstr "Taolenn"
-
-#: ../../standalone/drakbackup_.c:2228
-msgid "CDROM / DVDROM"
-msgstr "CDROM / DVDROM"
-
-#: ../../standalone/drakbackup_.c:2233
-msgid "HardDrive / NFS"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2238
-#, fuzzy
-msgid "Tape"
-msgstr "Seurt"
-
-#: ../../standalone/drakbackup_.c:2252 ../../standalone/drakbackup_.c:2256
-#: ../../standalone/drakbackup_.c:2260
-msgid "hourly"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2253 ../../standalone/drakbackup_.c:2257
-#: ../../standalone/drakbackup_.c:2260
-msgid "daily"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2254 ../../standalone/drakbackup_.c:2258
-#: ../../standalone/drakbackup_.c:2260
-msgid "weekly"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2255 ../../standalone/drakbackup_.c:2259
-#: ../../standalone/drakbackup_.c:2260
-msgid "monthly"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2273
-#, fuzzy
-msgid "Use daemon"
-msgstr "Anv arveriad"
-
-#: ../../standalone/drakbackup_.c:2278
-#, fuzzy
-msgid ""
-"Please choose the time \n"
-"interval between each backup"
-msgstr "Dibabit ar pakadoù a vennit staliañ, mar plij."
-
-#: ../../standalone/drakbackup_.c:2284
-#, fuzzy
-msgid ""
-"Please choose the\n"
-"media for backup."
-msgstr "Diuzit ar yezh da implijout, mar plij."
-
-#: ../../standalone/drakbackup_.c:2291
-msgid ""
-"Please be sure that the cron daemon is included in your services. \n"
-"\n"
-"Note that currently all 'net' medias also use the hard drive."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2328
-msgid "Send mail report after each backup to:"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2334
-msgid "Delete Hard Drive tar files after backup to other media."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2373
-msgid "What"
-msgstr "Petra"
-
-#: ../../standalone/drakbackup_.c:2378
-msgid "Where"
-msgstr "Pelec'h"
-
-#: ../../standalone/drakbackup_.c:2383
-msgid "When"
-msgstr "Pa"
-
-#: ../../standalone/drakbackup_.c:2388
-#, fuzzy
-msgid "More Options"
-msgstr "Dibarzhoù ar mollad :"
-
-#: ../../standalone/drakbackup_.c:2407 ../../standalone/drakbackup_.c:4532
-#, fuzzy
-msgid "Drakbackup Configuration"
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../standalone/drakbackup_.c:2425
-#, fuzzy
-msgid "Please choose where you want to backup"
-msgstr "Dibabit ar pakadoù a vennit staliañ, mar plij."
-
-#: ../../standalone/drakbackup_.c:2427
-msgid "on Hard Drive"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2437
-msgid "across Network"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2447
-msgid "on CDROM"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2455
-#, fuzzy
-msgid "on Tape Device"
-msgstr "Trobarzhell ar voullerez"
-
-#: ../../standalone/drakbackup_.c:2498
-#, fuzzy
-msgid "Please choose what you want to backup"
-msgstr "Dibabit ar pakadoù a vennit staliañ, mar plij."
-
-#: ../../standalone/drakbackup_.c:2499
-#, fuzzy
-msgid "Backup system"
-msgstr "Kefluniañ reizhiadoù restroù"
-
-#: ../../standalone/drakbackup_.c:2500
-msgid "Backup Users"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2503
-msgid "Select user manually"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2586
-msgid ""
-"\n"
-"Backup Sources: \n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2587
-msgid ""
-"\n"
-"- System Files:\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2589
-msgid ""
-"\n"
-"- User Files:\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2591
-msgid ""
-"\n"
-"- Other Files:\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2593
-#, c-format
-msgid ""
-"\n"
-"- Save on Hard drive on path: %s\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2596
-msgid ""
-"\n"
-"- Delete hard drive tar files after backup.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2602
-msgid ""
-"\n"
-"- Burn to CD"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2603
-msgid "RW"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2604
-#, fuzzy, c-format
-msgid " on device: %s"
-msgstr "Trobarzhell al logodenn : %s\n"
-
-#: ../../standalone/drakbackup_.c:2605
-msgid " (multi-session)"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2606
-#, c-format
-msgid ""
-"\n"
-"- Save to Tape on device: %s"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2607
-#, c-format
-msgid "\t\tErase=%s"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2610
-#, c-format
-msgid ""
-"\n"
-"- Save via %s on host: %s\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2611
-#, c-format
-msgid ""
-"\t\t user name: %s\n"
-"\t\t on path: %s \n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2612
-#, fuzzy
-msgid ""
-"\n"
-"- Options:\n"
-msgstr "Parzhadur"
-
-#: ../../standalone/drakbackup_.c:2613
-msgid "\tDo not include System Files\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2616
-msgid "\tBackups use tar and bzip2\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2618
-msgid "\tBackups use tar and gzip\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2621
-#, c-format
-msgid ""
-"\n"
-"- Daemon (%s) include:\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2622
-msgid "\t-Hard drive.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2623
-msgid "\t-CDROM.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2624
-msgid "\t-Tape \n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2625
-msgid "\t-Network by FTP.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2626
-msgid "\t-Network by SSH.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2627
-msgid "\t-Network by rsync.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2628
-msgid "\t-Network by webdav.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2630
-msgid "No configuration, please click Wizard or Advanced.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2636
-msgid ""
-"List of data to restore:\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2803
-msgid ""
-"List of data corrupted:\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2805
-#, fuzzy
-msgid "Please uncheck or remove it on next time."
-msgstr "Dibabit ouzh pe borzh a-steud eo luget ho modem, mar plij."
-
-#: ../../standalone/drakbackup_.c:2815
-msgid "Backup files are corrupted"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2836
-msgid " All of your selected data have been "
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2837
-#, c-format
-msgid " Successfuly Restored on %s "
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2955
-#, fuzzy
-msgid " Restore Configuration "
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../standalone/drakbackup_.c:2973
-msgid "OK to restore the other files."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:2990
-msgid "User list to restore (only the most recent date per user is important)"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3068
-#, fuzzy
-msgid "Backup the system files before:"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:3070
-#, fuzzy
-msgid "please choose the date to restore"
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../standalone/drakbackup_.c:3107
-#, fuzzy
-msgid "Use Hard Disk to backup"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:3110
-#, fuzzy
-msgid "Please enter the directory to save:"
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../standalone/drakbackup_.c:3153
-#, fuzzy
-msgid "FTP Connection"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakbackup_.c:3160
-#, fuzzy
-msgid "Secure Connection"
-msgstr "Diuzit lugerezh ar voullerez"
-
-#: ../../standalone/drakbackup_.c:3186
-#, fuzzy
-msgid "Restore from Hard Disk."
-msgstr "Assevel adalek ar pladennig"
-
-#: ../../standalone/drakbackup_.c:3188
-msgid "Please enter the directory where backups are stored"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3256
-#, fuzzy
-msgid "Select another media to restore from"
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../standalone/drakbackup_.c:3258
-#, fuzzy
-msgid "Other Media"
-msgstr "All"
-
-#: ../../standalone/drakbackup_.c:3263
-#, fuzzy
-msgid "Restore system"
-msgstr "Staliañ ar reizhiad"
-
-#: ../../standalone/drakbackup_.c:3264
-#, fuzzy
-msgid "Restore Users"
-msgstr "Adaozañ adalek ar restr"
-
-#: ../../standalone/drakbackup_.c:3265
-#, fuzzy
-msgid "Restore Other"
-msgstr "Adaozañ adalek ar restr"
-
-#: ../../standalone/drakbackup_.c:3267
-#, fuzzy
-msgid "select path to restore (instead of /)"
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../standalone/drakbackup_.c:3271
-msgid "Do new backup before restore (only for incremental backups.)"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3273
-msgid "Remove user directories before restore."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3386
-msgid ""
-"Restore Selected\n"
-"Catalog Entry"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3396
-#, fuzzy
-msgid ""
-"Restore Selected\n"
-"Files"
-msgstr "Lemel ar steudad"
-
-#: ../../standalone/drakbackup_.c:3413
-#, fuzzy
-msgid ""
-"Change\n"
-"Restore Path"
-msgstr "Adaozañ adalek ar restr"
-
-#: ../../standalone/drakbackup_.c:3479
-#, c-format
-msgid "Backup files not found at %s."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3492
-#, c-format
-msgid ""
-"Insert the CD with volume label %s\n"
-" in the CD drive under mount point /mnt/cdrom"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3492
-#, fuzzy
-msgid "Restore From CD"
-msgstr "Assevel adalek ar pladennig"
-
-#: ../../standalone/drakbackup_.c:3494
-#, c-format
-msgid "Not the correct CD label. Disk is labelled %s."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3504
-#, c-format
-msgid ""
-"Insert the tape with volume label %s\n"
-" in the tape drive device %s"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3504
-#, fuzzy
-msgid "Restore From Tape"
-msgstr "Taolenn barzhañ saveteerezh"
-
-#: ../../standalone/drakbackup_.c:3506
-#, c-format
-msgid "Not the correct tape label. Tape is labelled %s."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3526
-#, fuzzy
-msgid "Restore Via Network"
-msgstr "Adaozañ adalek ar restr"
-
-#: ../../standalone/drakbackup_.c:3526
-#, c-format
-msgid "Restore Via Network Protocol: %s"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3527
-#, fuzzy
-msgid "Host Name"
-msgstr "Anv an ostiz"
-
-#: ../../standalone/drakbackup_.c:3528
-msgid "Host Path or Module"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3535
-#, fuzzy
-msgid "Password required"
-msgstr "Tremenger"
-
-#: ../../standalone/drakbackup_.c:3541
-#, fuzzy
-msgid "Username required"
-msgstr "Anv arveriad"
-
-#: ../../standalone/drakbackup_.c:3544
-#, fuzzy
-msgid "Hostname required"
-msgstr "Anv an ostiz : "
-
-#: ../../standalone/drakbackup_.c:3549
-msgid "Path or Module required"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3562
-msgid "Files Restored..."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3565
-#, fuzzy
-msgid "Restore Failed..."
-msgstr "Adaozañ adalek ar restr"
-
-#: ../../standalone/drakbackup_.c:3803
-msgid "Restore all backups"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3812
-#, fuzzy
-msgid "Custom Restore"
-msgstr "Neuziet"
-
-#: ../../standalone/drakbackup_.c:3858
-msgid "CD in place - continue."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3864
-msgid "Browse to new restore repository."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:3867
-#, fuzzy
-msgid "Restore From Catalog"
-msgstr "Taolenn barzhañ saveteerezh"
-
-#: ../../standalone/drakbackup_.c:3895
-#, fuzzy
-msgid "Restore Progress"
-msgstr "Adaozañ adalek ar restr"
-
-#: ../../standalone/drakbackup_.c:3937 ../../standalone/drakbackup_.c:3970
-#: ../../standalone/drakbackup_.c:3996 ../../standalone/drakbackup_.c:4023
-#: ../../standalone/drakbackup_.c:4050 ../../standalone/drakbackup_.c:4110
-#: ../../standalone/drakbackup_.c:4137 ../../standalone/drakbackup_.c:4167
-#: ../../standalone/drakbackup_.c:4193
-msgid "Previous"
-msgstr "Diaraog"
-
-#: ../../standalone/drakbackup_.c:3941 ../../standalone/drakbackup_.c:4027
-#: ../../standalone/logdrake_.c:224
-msgid "Save"
-msgstr "Enrollañ"
-
-#: ../../standalone/drakbackup_.c:4000
-#, fuzzy
-msgid "Build Backup"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:4054 ../../standalone/drakbackup_.c:4634
-#, fuzzy
-msgid "Restore"
-msgstr "Adaozañ adalek ar restr"
-
-#: ../../standalone/drakbackup_.c:4233
-msgid ""
-"Error during sendmail.\n"
-" Your report mail was not sent.\n"
-" Please configure sendmail"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4257
-#, fuzzy
-msgid ""
-"The following packages need to be installed:\n"
-" @list_of_rpm_to_install"
-msgstr "Ar pakadoù a-heul a zo war-nes bezañ distaliet"
-
-#: ../../standalone/drakbackup_.c:4280
-msgid ""
-"Error during sending file via FTP.\n"
-" Please correct your FTP configuration."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4303
-#, fuzzy
-msgid "Please select data to restore..."
-msgstr "Diuzit ar yezh da implijout, mar plij."
-
-#: ../../standalone/drakbackup_.c:4324
-#, fuzzy
-msgid "Please select media for backup..."
-msgstr "Diuzit ar yezh da implijout, mar plij."
-
-#: ../../standalone/drakbackup_.c:4346
-#, fuzzy
-msgid "Please select data to backup..."
-msgstr "Diuzit ar yezh da implijout, mar plij."
-
-#: ../../standalone/drakbackup_.c:4368
-msgid ""
-"No configuration file found \n"
-"please click Wizard or Advanced."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4389
-msgid "Under Devel ... please wait."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4470
-#, fuzzy
-msgid "Backup system files"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:4472
-#, fuzzy
-msgid "Backup user files"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:4474
-#, fuzzy
-msgid "Backup other files"
-msgstr "Restr gwareziñ siek"
-
-#: ../../standalone/drakbackup_.c:4476 ../../standalone/drakbackup_.c:4509
-msgid "Total Progress"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4500
-msgid "files sending by FTP"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4504
-#, fuzzy
-msgid "Sending files..."
-msgstr "Enrollañ er restr"
-
-#: ../../standalone/drakbackup_.c:4590
-#, fuzzy
-msgid "Backup Now from configuration file"
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../standalone/drakbackup_.c:4595
-#, fuzzy
-msgid "View Backup Configuration."
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../standalone/drakbackup_.c:4616
-#, fuzzy
-msgid "Wizard Configuration"
-msgstr "Kefluniadur"
-
-#: ../../standalone/drakbackup_.c:4621
-#, fuzzy
-msgid "Advanced Configuration"
-msgstr "Kefluniadur"
-
-#: ../../standalone/drakbackup_.c:4626
-#, fuzzy
-msgid "Backup Now"
-msgstr "Kefluniañ reizhiadoù restroù"
-
-#: ../../standalone/drakbackup_.c:4660
-msgid "Drakbackup"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4711
-msgid ""
-"options description:\n"
-"\n"
-" In this step Drakbackup allow you to change:\n"
-"\n"
-" - The compression mode:\n"
-" \n"
-" If you check bzip2 compression, you will compress\n"
-" your data better than gzip (about 2-10 %).\n"
-" This option is not checked by default because\n"
-" this compression mode needs more time (about 1000% more).\n"
-" \n"
-" - The update mode:\n"
-"\n"
-" This option will update your backup, but this\n"
-" option is not really useful because you need to\n"
-" decompress your backup before you can update it.\n"
-" \n"
-" - the .backupignore mode:\n"
-"\n"
-" Like with cvs, Drakbackup will ignore all references\n"
-" included in .backupignore files in each directories.\n"
-" ex: \n"
-" /*> cat .backupignore*/\n"
-" *.o\n"
-" *~\n"
-" ...\n"
-" \n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4741
-msgid ""
-"\n"
-" Some errors during sendmail are caused by \n"
-" a bad configuration of postfix. To solve it you have to\n"
-" set myhostname or mydomain in /etc/postfix/main.cf\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4749
-msgid ""
-"options description:\n"
-"\n"
-" - Backup system files:\n"
-" \n"
-"\tThis option allows you to backup your /etc directory,\n"
-"\twhich contains all configuration files. Please be\n"
-"\tcareful during the restore step to not overwrite:\n"
-"\t\t/etc/passwd \n"
-"\t\t/etc/group \n"
-"\t\t/etc/fstab\n"
-"\n"
-" - Backup User files: \n"
-"\n"
-"\tThis option allows you select all users that you want \n"
-"\tto backup.\n"
-"\tTo preserve disk space, it is recommended that you \n"
-"\tdo not include web browser's cache.\n"
-"\n"
-" - Backup Other files: \n"
-"\n"
-"\tThis option allows you to add more data to save.\n"
-"\tWith the other backup it's not possible at the \n"
-"\tmoment to select incremental backup.\t\t\n"
-" \n"
-" - Incremental Backups:\n"
-"\n"
-"\tThe incremental backup is the most powerful \n"
-"\toption for backup. This option allows you \n"
-"\tto backup all your data the first time, and \n"
-"\tonly the changed afterward.\n"
-"\tThen you will be able, during the restore\n"
-"\tstep, to restore your data from a specified\n"
-"\tdate.\n"
-"\tIf you have not selected this option all\n"
-"\told backups are deleted before each backup. \n"
-"\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4788
-msgid ""
-"restore description:\n"
-" \n"
-"Only the most recent date will be used, because with incremental \n"
-"backups it is necessary to restore one by one each older backup.\n"
-"\n"
-"So if you don't want to restore a user please unselect all their\n"
-"check boxes.\n"
-"\n"
-"Otherwise, you are able to select only one of these.\n"
-"\n"
-" - Incremental Backups:\n"
-"\n"
-"\tThe incremental backup is the most powerful \n"
-"\toption to use. This option allows you to \n"
-"\tbackup all of your data the first time, and \n"
-"\tonly the changed data after.\n"
-"\tSo you will be able, during the restore\n"
-"\tstep, to restore your data from a specified\n"
-"\tdate.\n"
-"\tIf you have not selected this option all\n"
-"\told backups are deleted before each backup. \n"
-"\n"
-"\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4814 ../../standalone/drakbackup_.c:4891
-msgid ""
-" Copyright (C) 2001 MandrakeSoft by DUPONT Sebastien <dupont_s\\@epita.fr>"
-msgstr ""
-"Copyright (C) 2001 MandrakeSoft gant DUPONT Sebastien <dupont_s\\@epita.fr>"
-
-#: ../../standalone/drakbackup_.c:4816 ../../standalone/drakbackup_.c:4893
-msgid ""
-" updates 2002 MandrakeSoft by Stew Benedict <sbenedict\\@mandrakesoft.com>"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4818 ../../standalone/drakbackup_.c:4895
-msgid ""
-" This program is free software; you can redistribute it and/or modify\n"
-" it under the terms of the GNU General Public License as published by\n"
-" the Free Software Foundation; either version 2, or (at your option)\n"
-" any later version.\n"
-"\n"
-" This program is distributed in the hope that it will be useful,\n"
-" but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-" GNU General Public License for more details.\n"
-"\n"
-" You should have received a copy of the GNU General Public License\n"
-" along with this program; if not, write to the Free Software\n"
-" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4832
-msgid ""
-"Description:\n"
-"\n"
-" Drakbackup is used to backup your system.\n"
-" During the configuration you can select: \n"
-"\t- System files, \n"
-"\t- Users files, \n"
-"\t- Other files.\n"
-"\tor All your system ... and Other (like Windows Partitions)\n"
-"\n"
-" Drakbackup allows you to backup your system on:\n"
-"\t- Harddrive.\n"
-"\t- NFS.\n"
-"\t- CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.).\n"
-"\t- FTP.\n"
-"\t- Rsync.\n"
-"\t- Webdav.\n"
-"\t- Tape.\n"
-"\n"
-" Drakbackup allows you to restore your system to\n"
-" a user selected directory.\n"
-"\n"
-" Per default all backup will be stored on your\n"
-" /var/lib/drakbackup directory\n"
-"\n"
-" Configuration file:\n"
-"\t/etc/drakconf/drakbackup/drakbakup.conf\n"
-"\n"
-"\n"
-"Restore Step:\n"
-" \n"
-" During the restore step, DrakBackup will remove \n"
-" your original directory and verify that all \n"
-" backup files are not corrupted. It is recommended \n"
-" you do a last backup before restoring.\n"
-"\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4870
-msgid ""
-"options description:\n"
-"\n"
-"Please be careful when you are using ftp backup, because only \n"
-"backups that are already built are sent to the server.\n"
-"So at the moment, you need to build the backup on your hard \n"
-"drive before sending it to the server.\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4879
-msgid ""
-"\n"
-"Restore Backup Problems:\n"
-"\n"
-"During the restore step, Drakbackup will verify all your\n"
-"backup files before restoring them.\n"
-"Before the restore, Drakbackup will remove \n"
-"your original directory, and you will loose all your \n"
-"data. It is important to be careful and not modify the \n"
-"backup data files by hand.\n"
-msgstr ""
-
-#: ../../standalone/drakbackup_.c:4909
-msgid ""
-"Description:\n"
-"\n"
-" Drakbackup is used to backup your system.\n"
-" During the configuration you can select \n"
-"\t- System files, \n"
-"\t- Users files, \n"
-"\t- Other files.\n"
-"\tor All your system ... and Other (like Windows Partitions)\n"
-"\n"
-" Drakbackup allows you to backup your system on:\n"
-"\t- Harddrive.\n"
-"\t- NFS.\n"
-"\t- CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.).\n"
-"\t- FTP.\n"
-"\t- Rsync.\n"
-"\t- Webdav.\n"
-"\t- Tape.\n"
-"\n"
-" Drakbackup allows you to restore your system to\n"
-" a user selected directory.\n"
-"\n"
-" Per default all backup will be stored on your\n"
-" /var/lib/drakbackup directory\n"
-"\n"
-" Configuration file:\n"
-"\t/etc/drakconf/drakbackup/drakbakup.conf\n"
-"\n"
-"Restore Step:\n"
-" \n"
-" During the restore step, Drakbackup will remove\n"
-" your original directory and verify that all\n"
-" backup files are not corrupted. It is recommended\n"
-" you do a last backup before restoring.\n"
-" \n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakboot_.c:57
-#, c-format
-msgid "Installation of %s failed. The following error occured:"
-msgstr "Staliadur %s a zo sac'het. Degouezhet eo ar fazi a heul :"
-
-#: ../../standalone/drakbug_.c:40
-#, c-format
-msgid ""
-"drakbug version %s\n"
-"Copyright (C) 2002 MandrakeSoft.\n"
-"This is free software and may be redistributed under the terms of the GNU "
-"GPL.\n"
-"\n"
-"usage: drakbug [OPTIONS] [PROGRAM_NAME]\n"
-"\n"
-"OPTIONS:\n"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:47
-msgid " --help - print this help message.\n"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:48
-msgid " --report - program should be one of mandrake tools\n"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:49
-msgid " --incident - program should be one of mandrake tools\n"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:64
-msgid "Mandrake Bug Report Tool"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:70
-msgid "First Time Wizard"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:71
-msgid "Synchronization tool"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:72 ../../standalone/drakbug_.c:86
-#: ../../standalone/drakbug_.c:156 ../../standalone/drakbug_.c:158
-#: ../../standalone/drakbug_.c:162
-msgid "Standalone Tools"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:73
-msgid "HardDrake"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:74
-#, fuzzy
-msgid "Mandrake Online"
-msgstr "MandrakeConsulting"
-
-#: ../../standalone/drakbug_.c:75
-#, fuzzy
-msgid "Menudrake"
-msgstr "MandrakeStore"
-
-#: ../../standalone/drakbug_.c:76
-#, fuzzy
-msgid "Msec"
-msgstr "Logodenn"
-
-#: ../../standalone/drakbug_.c:77
-#, fuzzy
-msgid "Remote Control"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../standalone/drakbug_.c:78
-#, fuzzy
-msgid "Software Manager"
-msgstr "Anv rannet"
-
-#: ../../standalone/drakbug_.c:79
-msgid "Urpmi"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:80
-#, fuzzy
-msgid "Windows Migration tool"
-msgstr "Titouroù"
-
-#: ../../standalone/drakbug_.c:81
-#, fuzzy
-msgid "Userdrake"
-msgstr "Moullerez"
-
-#: ../../standalone/drakbug_.c:82
-#, fuzzy
-msgid "Configuration Wizards"
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../standalone/drakbug_.c:97
-#, fuzzy
-msgid "Application:"
-msgstr "X11/Arloadoù"
-
-#: ../../standalone/drakbug_.c:98
-#, fuzzy
-msgid "Package: "
-msgstr "Pakad"
-
-#: ../../standalone/drakbug_.c:99
-msgid "Kernel:"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:100
-#, fuzzy
-msgid "Release: "
-msgstr "Gortozit mar plij"
-
-#: ../../standalone/drakbug_.c:115
-msgid ""
-"\n"
-"\n"
-"To submit a bug report, click on the button report.\n"
-"This will open a web browser window on https://drakbug.mandrakesoft.com\n"
-" where you'll find a form to fill in.The information displayed above will "
-"be \n"
-"transferred to that server\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakbug_.c:134
-#, fuzzy
-msgid "Report"
-msgstr "Paour"
-
-#: ../../standalone/drakbug_.c:171
-#, fuzzy
-msgid "Not installed"
-msgstr "Dilezel ar staliadur"
-
-#: ../../standalone/drakbug_.c:189
-msgid "connecting to Bugzilla wizard ..."
-msgstr ""
-
-#: ../../standalone/drakbug_.c:196
-#, fuzzy
-msgid "No browser available! Please install one"
-msgstr "Gallout a rit dibab yezhoù all hag a vo hegerz goude staliañ"
-
-#: ../../standalone/drakconnect_.c:79
-#, fuzzy, c-format
-msgid "Network configuration (%d adapters)"
-msgstr "Kefluniadur ar rouedad"
-
-#: ../../standalone/drakconnect_.c:86 ../../standalone/drakconnect_.c:594
-#, fuzzy
-msgid "Profile: "
-msgstr "marc'hañ sac'het : "
-
-#: ../../standalone/drakconnect_.c:94
-msgid "Del profile..."
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:100
-msgid "Profile to delete:"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:128
-msgid "New profile..."
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:134
-msgid ""
-"Name of the profile to create (the new profile is created as a copy of the "
-"current one) :"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:160
-#, fuzzy
-msgid "Hostname: "
-msgstr "Anv an ostiz : "
-
-#: ../../standalone/drakconnect_.c:167
-#, fuzzy
-msgid "Internet access"
-msgstr "dedennus"
-
-#: ../../standalone/drakconnect_.c:180
-#, fuzzy
-msgid "Type:"
-msgstr "Seurt : "
-
-#: ../../standalone/drakconnect_.c:183 ../../standalone/drakconnect_.c:375
-msgid "Gateway:"
-msgstr "Treuzell : "
-
-#: ../../standalone/drakconnect_.c:183 ../../standalone/drakconnect_.c:375
-#, fuzzy
-msgid "Interface:"
-msgstr "dedennus"
-
-#: ../../standalone/drakconnect_.c:194
-msgid "Status:"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:201
-msgid "Wait please"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:219
-#, fuzzy
-msgid "Configure Internet Access..."
-msgstr "Kefluniañ servijoù"
-
-#: ../../standalone/drakconnect_.c:226 ../../standalone/drakconnect_.c:448
-#, fuzzy
-msgid "LAN configuration"
-msgstr "Kefluniadur"
-
-#: ../../standalone/drakconnect_.c:231
-#, fuzzy
-msgid "Driver"
-msgstr "Servijer"
-
-#: ../../standalone/drakconnect_.c:231
-#, fuzzy
-msgid "Interface"
-msgstr "dedennus"
-
-#: ../../standalone/drakconnect_.c:231
-msgid "Protocol"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:231
-#, fuzzy
-msgid "State"
-msgstr "Meuziad Lañsañ"
-
-#: ../../standalone/drakconnect_.c:243
-#, fuzzy
-msgid "Configure Local Area Network..."
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../standalone/drakconnect_.c:255
-msgid "Click here to launch the wizard ->"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:256
-msgid "Wizard..."
-msgstr "Skoazeller..."
-
-#: ../../standalone/drakconnect_.c:282
-msgid "Apply"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:383 ../../standalone/drakconnect_.c:406
-#, fuzzy
-msgid "Connected"
-msgstr "Anv ar gevreadenn"
-
-#: ../../standalone/drakconnect_.c:383 ../../standalone/drakconnect_.c:406
-#, fuzzy
-msgid "Not connected"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakconnect_.c:384 ../../standalone/drakconnect_.c:407
-msgid "Connect..."
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:384 ../../standalone/drakconnect_.c:407
-msgid "Disconnect..."
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:403
-msgid ""
-"Warning, another Internet connection has been detected, maybe using your "
-"network"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:430
-msgid ""
-"You don't have any configured interface.\n"
-"Configure them first by clicking on 'Configure'"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:452
-#, fuzzy
-msgid "LAN Configuration"
-msgstr "Kefluniadur"
-
-#: ../../standalone/drakconnect_.c:463
-#, c-format
-msgid "Adapter %s: %s"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:469
-msgid "Boot Protocol"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:470
-msgid "Started on boot"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:471
-msgid "DHCP client"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:496 ../../standalone/drakconnect_.c:499
-#, fuzzy
-msgid "activate now"
-msgstr "Bevaat"
-
-#: ../../standalone/drakconnect_.c:496 ../../standalone/drakconnect_.c:499
-#, fuzzy
-msgid "deactivate now"
-msgstr "Bevaat"
-
-#: ../../standalone/drakconnect_.c:502
-msgid ""
-"This interface has not been configured yet.\n"
-"Launch the configuration wizard in the main window"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:559
-msgid ""
-"You don't have any internet connection.\n"
-"Create one first by clicking on 'Configure'"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:583
-#, fuzzy
-msgid "Internet connection configuration"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakconnect_.c:587
-#, fuzzy
-msgid "Internet Connection Configuration"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakconnect_.c:596
-#, fuzzy
-msgid "Connection type: "
-msgstr "Anv ar gevreadenn"
-
-#: ../../standalone/drakconnect_.c:602
-msgid "Parameters"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:620
-msgid "Gateway"
-msgstr "Treuzell"
-
-#: ../../standalone/drakconnect_.c:629
-msgid "Ethernet Card"
-msgstr ""
-
-#: ../../standalone/drakconnect_.c:630
-msgid "DHCP Client"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:64
-msgid "usage: drakfloppy\n"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:68
-#, fuzzy
-msgid "-misc-Fixed-Medium-r-*-*-*-140-*-*-*-*-*-*,*"
-msgstr "-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*,*"
-
-#: ../../standalone/drakfloppy_.c:69
-#, fuzzy
-msgid "Module name"
-msgstr "Dibarzhoù ar mollad :"
-
-#: ../../standalone/drakfloppy_.c:69
-#, fuzzy
-msgid "Size"
-msgstr "Ment: %s"
-
-#: ../../standalone/drakfloppy_.c:74
-#, fuzzy
-msgid "drakfloppy"
-msgstr "Assevel adalek ar pladennig"
-
-#: ../../standalone/drakfloppy_.c:91
-#, fuzzy
-msgid "boot disk creation"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../standalone/drakfloppy_.c:99 ../../standalone/drakfloppy_.c:112
-msgid "default"
-msgstr "dre ziouer"
-
-#: ../../standalone/drakfloppy_.c:115
-#, c-format
-msgid "DrakFloppy Error: %s"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:126
-#, fuzzy
-msgid "kernel version"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../standalone/drakfloppy_.c:132
-#, fuzzy
-msgid "General"
-msgstr "Rummel"
-
-#: ../../standalone/drakfloppy_.c:137
-#, fuzzy
-msgid "Expert Area"
-msgstr "Mod mailh"
-
-#: ../../standalone/drakfloppy_.c:140
-msgid "mkinitrd optional arguments"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:141
-#, fuzzy
-msgid "Add a module"
-msgstr "Ouzhpennañ un arveriad"
-
-#: ../../standalone/drakfloppy_.c:161
-#, fuzzy
-msgid "force"
-msgstr "Dilec'hiañ"
-
-#: ../../standalone/drakfloppy_.c:162
-msgid "if needed"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:163
-msgid "omit scsi modules"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:164
-msgid "omit raid modules"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:200
-#, fuzzy
-msgid "Remove a module"
-msgstr "Eilpennañ urzh ar pajennoù"
-
-#: ../../standalone/drakfloppy_.c:222
-msgid "Output"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:234
-msgid "Build the disk"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:377
-#, c-format
-msgid "Be sure a media is present for the device %s"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:382
-#, c-format
-msgid ""
-"There is no medium or it is write-protected for device %s.\n"
-"Please insert one."
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:384
-#, c-format
-msgid "Unable to fork: %s"
-msgstr ""
-
-#: ../../standalone/drakfloppy_.c:388
-#, c-format
-msgid ""
-"Unable to close properly mkbootdisk: \n"
-" %s \n"
-" %s"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:231
-msgid "Search installed fonts"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:233
-msgid "Unselect fonts installed"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:257
-msgid "parse all fonts"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:260
-#, fuzzy
-msgid "no fonts found"
-msgstr "%s ket kavet"
-
-#: ../../standalone/drakfont_.c:269 ../../standalone/drakfont_.c:323
-#: ../../standalone/drakfont_.c:379 ../../standalone/drakfont_.c:468
-#: ../../standalone/drakfont_.c:479 ../../standalone/drakfont_.c:506
-#: ../../standalone/drakfont_.c:520 ../../standalone/drakfont_.c:537
-#, fuzzy
-msgid "done"
-msgstr "Graet"
-
-#: ../../standalone/drakfont_.c:275
-msgid "could not find any font in your mounted partitions"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:321
-msgid "Reselect correct fonts"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:325
-msgid "could not find any font.\n"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:349
-msgid "Search fonts in installed list"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:377
-#, fuzzy
-msgid "Fonts copy"
-msgstr "Furmadiñ ar bladennig"
-
-#: ../../standalone/drakfont_.c:381
-#, fuzzy
-msgid "True Type fonts installation"
-msgstr "O prientiñ ar staliadur"
-
-#: ../../standalone/drakfont_.c:389
-msgid "please wait during ttmkfdir..."
-msgstr ""
-
-#: ../../standalone/drakfont_.c:394
-msgid "True Type install done"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:403 ../../standalone/drakfont_.c:429
-msgid "Fonts conversion"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:409 ../../standalone/drakfont_.c:433
-#: ../../standalone/drakfont_.c:464
-msgid "type1inst building"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:419 ../../standalone/drakfont_.c:442
-msgid "Ghostscript referencing"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:452
-msgid "ttf fonts conversion"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:459
-msgid "pfm fonts conversion"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:470
-msgid "Suppress temporary Files"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:473
-msgid "Restart XFS"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:518 ../../standalone/drakfont_.c:532
-msgid "Suppress Fonts Files"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:534
-#, fuzzy
-msgid "xfs restart"
-msgstr "strishaat"
-
-#: ../../standalone/drakfont_.c:542 ../../standalone/drakfont_.c:951
-msgid ""
-"Before installing any fonts, be sure that you have the right to use and "
-"install them on your system.\n"
-"\n"
-"-You can install the fonts using the normal way. In rare cases, bogus fonts "
-"may hang up your X Server."
-msgstr ""
-
-#: ../../standalone/drakfont_.c:630
-#, fuzzy
-msgid "Fonts Importation"
-msgstr "Furmadiñ parzhadurioù"
-
-#: ../../standalone/drakfont_.c:660
-msgid "Get Windows Fonts"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:668
-#, fuzzy
-msgid "Uninstall Fonts"
-msgstr "O tistaliañ ar RPMoù"
-
-#: ../../standalone/drakfont_.c:679
-#, fuzzy
-msgid "Advanced Options"
-msgstr "Kefluniadur"
-
-#: ../../standalone/drakfont_.c:687
-#, fuzzy
-msgid "Font List"
-msgstr "Poent marc'hañ"
-
-#: ../../standalone/drakfont_.c:909
-#, fuzzy
-msgid "Choose the applications that will support the fonts:"
-msgstr "Dibabit ar parzhadur a vennit furmadiñ"
-
-#: ../../standalone/drakfont_.c:918
-msgid "Ghostscript"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:925
-#, fuzzy
-msgid "StarOffice"
-msgstr "Burev"
-
-#: ../../standalone/drakfont_.c:932
-msgid "Abiword"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:939
-#, fuzzy
-msgid "Generic Printers"
-msgstr "Moullerez"
-
-#: ../../standalone/drakfont_.c:1016
-msgid "Select the font file or directory and click on 'Add'"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:1063
-#, fuzzy
-msgid "Install List"
-msgstr "Staliañ ar reizhiad"
-
-#: ../../standalone/drakfont_.c:1106
-msgid "click here if you are sure."
-msgstr ""
-
-#: ../../standalone/drakfont_.c:1113
-msgid "here if no."
-msgstr ""
-
-#: ../../standalone/drakfont_.c:1174
-msgid "Unselected All"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:1178
-#, fuzzy
-msgid "Selected All"
-msgstr "Diuzit ar restr"
-
-#: ../../standalone/drakfont_.c:1182
-#, fuzzy
-msgid "Remove List"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../standalone/drakfont_.c:1204 ../../standalone/drakfont_.c:1237
-msgid "Initials tests"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:1207
-msgid "Copy fonts on your system"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:1211
-msgid "Install & convert Fonts"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:1215
-#, fuzzy
-msgid "Post Install"
-msgstr "Staliañ"
-
-#: ../../standalone/drakfont_.c:1240
-msgid "Remove fonts on your system"
-msgstr ""
-
-#: ../../standalone/drakfont_.c:1244
-#, fuzzy
-msgid "Post Uninstall"
-msgstr "Dilezel ar staliadur"
-
-#: ../../standalone/drakgw_.c:43 ../../standalone/drakgw_.c:184
-#, fuzzy
-msgid "Internet Connection Sharing"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakgw_.c:115
-msgid "Sorry, we support only 2.4 kernels."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:126
-msgid "Internet Connection Sharing currently enabled"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:127
-msgid ""
-"The setup of Internet connection sharing has already been done.\n"
-"It's currently enabled.\n"
-"\n"
-"What would you like to do?"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:131
-#, fuzzy
-msgid "disable"
-msgstr "Taolenn"
-
-#: ../../standalone/drakgw_.c:131 ../../standalone/drakgw_.c:156
-msgid "dismiss"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:131 ../../standalone/drakgw_.c:156
-#, fuzzy
-msgid "reconfigure"
-msgstr "Kefluniañ X"
-
-#: ../../standalone/drakgw_.c:134
-#, fuzzy
-msgid "Disabling servers..."
-msgstr "O tinoiñ trobarzhelloù..."
-
-#: ../../standalone/drakgw_.c:142
-#, fuzzy
-msgid "Internet connection sharing is now disabled."
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakgw_.c:151
-msgid "Internet Connection Sharing currently disabled"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:152
-msgid ""
-"The setup of Internet connection sharing has already been done.\n"
-"It's currently disabled.\n"
-"\n"
-"What would you like to do?"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:156
-#, fuzzy
-msgid "enable"
-msgstr "Taolenn"
-
-#: ../../standalone/drakgw_.c:163
-msgid "Enabling servers..."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:168
-#, fuzzy
-msgid "Internet connection sharing is now enabled."
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakgw_.c:185
-msgid ""
-"You are about to configure your computer to share its Internet connection.\n"
-"With that feature, other computers on your local network will be able to use "
-"this computer's Internet connection.\n"
-"\n"
-"Note: you need a dedicated Network Adapter to set up a Local Area Network "
-"(LAN)."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:211
-#, c-format
-msgid "Interface %s (using module %s)"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:212
-#, fuzzy, c-format
-msgid "Interface %s"
-msgstr "dedennus"
-
-#: ../../standalone/drakgw_.c:220
-msgid "No network adapter on your system!"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:221
-msgid ""
-"No ethernet network adapter has been detected on your system. Please run the "
-"hardware configuration tool."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:227
-msgid "Network interface"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:228
-#, c-format
-msgid ""
-"There is only one configured network adapter on your system:\n"
-"\n"
-"%s\n"
-"\n"
-"I am about to setup your Local Area Network with that adapter."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:237
-msgid ""
-"Please choose what network adapter will be connected to your Local Area "
-"Network."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:255
-#, fuzzy
-msgid "Network interface already configured"
-msgstr "Skramm ket kefluniet"
-
-#: ../../standalone/drakgw_.c:256
-#, c-format
-msgid ""
-"Warning, the network adapter (%s) is already configured.\n"
-"\n"
-"Do you want an automatic re-configuration?\n"
-"\n"
-"You can do it manually but you need to know what you're doing."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:261
-#, fuzzy
-msgid "Automatic reconfiguration"
-msgstr "Kefluniadur goude staliañ"
-
-#: ../../standalone/drakgw_.c:262
-#, fuzzy
-msgid "Show current interface configuration"
-msgstr "Kefluniañ ar modem"
-
-#: ../../standalone/drakgw_.c:264
-#, c-format
-msgid ""
-"Current configuration of `%s':\n"
-"\n"
-"Network: %s\n"
-"IP address: %s\n"
-"IP attribution: %s\n"
-"Driver: %s"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:276
-msgid ""
-"I can keep your current configuration and assume you already set up a DHCP "
-"server; in that case please verify I correctly read the C-Class Network that "
-"you use for your local network; I will not reconfigure it and I will not "
-"touch your DHCP server configuration.\n"
-"\n"
-"Else, I can reconfigure your interface and (re)configure a DHCP server for "
-"you.\n"
-"\n"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:281
-msgid "C-Class Local Network"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:282
-#, fuzzy
-msgid "(This) DHCP Server IP"
-msgstr "IP ar servijer SMB"
-
-#: ../../standalone/drakgw_.c:283
-msgid "Re-configure interface and DHCP server"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:290
-msgid "The Local Network did not finish with `.0', bailing out."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:301
-#, c-format
-msgid "Potential LAN address conflict found in current config of %s!\n"
-msgstr ""
-
-#: ../../standalone/drakgw_.c:311
-#, fuzzy
-msgid "Configuring..."
-msgstr "Kefluniañ IDE"
-
-#: ../../standalone/drakgw_.c:312
-msgid "Configuring scripts, installing software, starting servers..."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:348
-#, fuzzy, c-format
-msgid "Problems installing package %s"
-msgstr "O staliañ ar pakad %s"
-
-#: ../../standalone/drakgw_.c:481
-msgid ""
-"Everything has been configured.\n"
-"You may now share Internet connection with other computers on your Local "
-"Area Network, using automatic network configuration (DHCP)."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:500
-msgid "The setup has already been done, but it's currently disabled."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:501
-msgid "The setup has already been done, and it's currently enabled."
-msgstr ""
-
-#: ../../standalone/drakgw_.c:502
-#, fuzzy
-msgid "No Internet Connection Sharing has ever been configured."
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakgw_.c:507
-#, fuzzy
-msgid "Internet connection sharing configuration"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakgw_.c:514
-#, fuzzy, c-format
-msgid ""
-"Welcome to the Internet Connection Sharing utility!\n"
-"\n"
-"%s\n"
-"\n"
-"Click on Configure to launch the setup wizard."
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/drakperm_.c:42
-#, fuzzy
-msgid "group"
-msgstr "Strollad labour"
-
-#: ../../standalone/drakperm_.c:42
-msgid "path"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:42
-#, fuzzy
-msgid "permissions"
-msgstr "parzhadur %s"
-
-#: ../../standalone/drakperm_.c:42
-#, fuzzy
-msgid "user"
-msgstr "Anv arveriad"
-
-#: ../../standalone/drakperm_.c:49
-msgid "Up"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:50
-#, fuzzy
-msgid "delete"
-msgstr "Dilemel"
-
-#: ../../standalone/drakperm_.c:51
-#, fuzzy
-msgid "edit"
-msgstr "Etre"
-
-#: ../../standalone/drakperm_.c:52
-#, fuzzy
-msgid "Down"
-msgstr "Graet"
-
-#: ../../standalone/drakperm_.c:53
-#, fuzzy
-msgid "add a rule"
-msgstr "Ouzhpennañ un arveriad"
-
-#: ../../standalone/drakperm_.c:54
-msgid "select perm file to see/edit"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:57
-msgid ""
-"Drakperm is used to see files to use in order to fix permissions, owners, "
-"and groups via msec.\n"
-"You can also edit your own rules which will owerwrite the default rules."
-msgstr ""
-
-#: ../../standalone/drakperm_.c:62
-#, fuzzy
-msgid "Add a new rule at the end"
-msgstr "Moullerez lec'hel"
-
-#: ../../standalone/drakperm_.c:63
-msgid "Edit curent rule"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:64
-msgid "Up selected rule one level"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:65
-msgid "Down selected rule one level"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:66
-#, fuzzy
-msgid "Delete selected rule"
-msgstr "Lemel ar steudad"
-
-#: ../../standalone/drakperm_.c:237
-msgid "browse"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:244
-#, fuzzy
-msgid "Current user"
-msgstr "Aotren an arveriad"
-
-#: ../../standalone/drakperm_.c:249
-#, fuzzy
-msgid "Permissions"
-msgstr "Stumm : %s\n"
-
-#: ../../standalone/drakperm_.c:250
-msgid "Path"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:251
-#, fuzzy
-msgid "Property"
-msgstr "Paour"
-
-#: ../../standalone/drakperm_.c:253
-msgid "sticky-bit"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:254
-msgid "Set-UID"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:255
-msgid "Set-GID"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:310
-msgid ""
-"Used for directory:\n"
-" only owner of directory or file in this directory can delete it"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:311
-msgid "Use owner id for execution"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:312
-msgid "Use group id for execution"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:313
-msgid "when checked, owner and group won't be changed"
-msgstr ""
-
-#: ../../standalone/drakperm_.c:318
-#, fuzzy
-msgid "Path selection"
-msgstr "Diuz pakadoù unan hag unan"
-
-#: ../../standalone/drakperm_.c:364
-#, fuzzy
-msgid "user :"
-msgstr "Anv arveriad"
-
-#: ../../standalone/drakperm_.c:366
-#, fuzzy
-msgid "group :"
-msgstr "Strollad labour"
-
-#: ../../standalone/draksound_.c:47
-#, fuzzy
-msgid "No Sound Card detected!"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/draksound_.c:48
-msgid ""
-"No Sound Card has been detected on your machine. Please verify that a Linux-"
-"supported Sound Card is correctly plugged in.\n"
-"\n"
-"\n"
-"You can visit our hardware database at:\n"
-"\n"
-"\n"
-"http://www.linux-mandrake.com/en/hardware.php3"
-msgstr ""
-
-#: ../../standalone/draksound_.c:55
-msgid ""
-"\n"
-"\n"
-"\n"
-"Note: if you've an ISA PnP sound card, you'll have to use the sndconfig "
-"program. Just type \"sndconfig\" in a console."
-msgstr ""
-
-#: ../../standalone/draksplash_.c:34
-msgid ""
-"package 'ImageMagick' is required for correct working.\n"
-"Click \"Ok\" to install 'ImageMagick' or \"Cancel\" to quit"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:78
-#, fuzzy
-msgid "first step creation"
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../standalone/draksplash_.c:79
-#, fuzzy
-msgid "final resolution"
-msgstr "Spister"
-
-#: ../../standalone/draksplash_.c:80 ../../standalone/draksplash_.c:172
-#, fuzzy
-msgid "choose image file"
-msgstr "Dibabit ur restr"
-
-#: ../../standalone/draksplash_.c:81
-#, fuzzy
-msgid "Theme name"
-msgstr "Anv rannet"
-
-#: ../../standalone/draksplash_.c:85
-msgid "Browse"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:99 ../../standalone/draksplash_.c:162
-#, fuzzy
-msgid "Configure bootsplash picture"
-msgstr "Kefluniañ servijoù"
-
-#: ../../standalone/draksplash_.c:100
-msgid ""
-"x coordinate of text box\n"
-"in number of character"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:101
-msgid ""
-"y coordinate of text box\n"
-"in number of character"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:102
-msgid "text width"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:103
-msgid "text box height"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:104
-msgid ""
-"the progress bar x coordinate\n"
-"of its upper left corner"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:105
-msgid ""
-"the progress bar y coordinate\n"
-"of its upper left corner"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:106
-msgid "the width of the progress bar"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:107
-msgid "the heigth of the progress bar"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:108
-msgid "the color of the progress bar"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:121
-#, fuzzy
-msgid "Preview"
-msgstr "trobarzhell"
-
-#: ../../standalone/draksplash_.c:123
-#, fuzzy
-msgid "Save theme"
-msgstr "Staliañ ar reizhiad"
-
-#: ../../standalone/draksplash_.c:124
-#, fuzzy
-msgid "Choose color"
-msgstr "Dibabit ur skramm"
-
-#: ../../standalone/draksplash_.c:127
-msgid "Display logo on Console"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:128
-msgid "Make kernel message quiet by default"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:165 ../../standalone/draksplash_.c:329
-#, c-format
-msgid "This theme haven't yet any bootsplash in %s !"
-msgstr ""
-
-#: ../../standalone/draksplash_.c:212
-msgid "saving Bootsplash theme..."
-msgstr ""
-
-#: ../../standalone/draksplash_.c:435
-#, fuzzy
-msgid "ProgressBar color selection"
-msgstr "Lugerezh ar voullerez"
-
-#: ../../standalone/draksplash_.c:456
-#, fuzzy
-msgid "You must choose an image file first!"
-msgstr "Trobarzhell ar voullerez"
-
-#: ../../standalone/draksplash_.c:465
-#, fuzzy
-msgid "Generating preview ..."
-msgstr "O tinoiñ trobarzhelloù..."
-
-#. -PO First %s is theme name, second %s (in parenthesis) is resolution
-#: ../../standalone/draksplash_.c:511
-#, c-format
-msgid "%s BootSplash (%s) preview"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:49
-msgid ""
-"XawTV isn't installed!\n"
-"\n"
-"\n"
-"If you do have a TV card but DrakX has neither detected it (no bttv nor "
-"saa7134\n"
-"module in \"/etc/modules\") nor installed xawtv, please send the\n"
-"results of \"lspcidrake -v -f\" to \"install\\@mandrakesoft.com\"\n"
-"with subject \"undetected TV card\".\n"
-"\n"
-"\n"
-"You can install it by typing \"urpmi xawtv\" as root, in a console."
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:66
-#, fuzzy
-msgid "Canada (cable)"
-msgstr "Kanadian (Kebek)"
-
-#: ../../standalone/drakxtv_.c:66
-msgid "USA (broadcast)"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:66
-msgid "USA (cable)"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:66
-msgid "USA (cable-hrc)"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:67
-msgid "China (broadcast)"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:67
-msgid "Japan (broadcast)"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:67
-msgid "Japan (cable)"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:68
-msgid "East Europe"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:68
-#, fuzzy
-msgid "France [SECAM]"
-msgstr "Gall"
-
-#: ../../standalone/drakxtv_.c:68
-#, fuzzy
-msgid "Ireland"
-msgstr "Islandek"
-
-#: ../../standalone/drakxtv_.c:68
-msgid "West Europe"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:69
-#, fuzzy
-msgid "Australia"
-msgstr "a-steud"
-
-#: ../../standalone/drakxtv_.c:69
-msgid "Newzealand"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:70
-msgid "South Africa"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:71
-msgid "Argentina"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:72
-msgid "Australian Optus cable TV"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:107
-msgid ""
-"Please,\n"
-"type in your tv norm and country"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:109
-msgid "TV norm:"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:110
-msgid "Area:"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:114
-msgid "Scanning for TV channels in progress ..."
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:122
-msgid "Scanning for TV channels"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:125
-#, fuzzy
-msgid "There was an error while scanning for TV channels"
-msgstr "Ur fazi a zo bet en ur staliañ ar pakadoù :"
-
-#: ../../standalone/drakxtv_.c:126
-msgid "XawTV isn't installed!"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:129
-msgid "Have a nice day!"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:130
-msgid "Now, you can run xawtv (under X Window!) !\n"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:153
-msgid "No TV Card detected!"
-msgstr ""
-
-#: ../../standalone/drakxtv_.c:154
-msgid ""
-"No TV Card has been detected on your machine. Please verify that a Linux-"
-"supported Video/TV Card is correctly plugged in.\n"
-"\n"
-"\n"
-"You can visit our hardware database at:\n"
-"\n"
-"\n"
-"http://www.linux-mandrake.com/en/hardware.php3"
-msgstr ""
-
-#: ../../standalone/harddrake2_.c:8
-msgid ""
-"\n"
-"Usage: harddrake [-h|--help] [--test]\n"
-msgstr ""
-
-#: ../../standalone/keyboarddrake_.c:16
-msgid "usage: keyboarddrake [--expert] [keyboard]\n"
-msgstr ""
-
-#: ../../standalone/keyboarddrake_.c:32
-msgid "Please, choose your keyboard layout."
-msgstr "Dibabit reizhadur ho stokellaoueg, mar plij."
-
-#: ../../standalone/keyboarddrake_.c:41
-msgid "Do you want the BackSpace to return Delete in console?"
-msgstr ""
-
-#: ../../standalone/livedrake_.c:24
-#, fuzzy
-msgid "Change Cd-Rom"
-msgstr "Kemmañ ar spister"
-
-#: ../../standalone/livedrake_.c:25
-#, fuzzy
-msgid ""
-"Please insert the Installation Cd-Rom in your drive and press Ok when done.\n"
-"If you don't have it, press Cancel to avoid live upgrade."
-msgstr ""
-"Kemmit ho Cd-Rom!\n"
-"\n"
-"Lakait el lenner ar Cd-Rom warnañ an diketenn \"%s\" mar plij ha gwaskit Mat "
-"eo da c'houde.\n"
-"Ma n'emañ ket ganeoc'h gwaskit Nullañ evit chom hep staliañ ar Cd-Rom-se."
-
-#: ../../standalone/livedrake_.c:35
-msgid "Unable to start live upgrade !!!\n"
-msgstr ""
-
-#: ../../standalone/localedrake_.c:33
-msgid "The change is done, but to be effective you must logout"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:86 ../../ugtk.pm_.c:285
-msgid "logdrake"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:96
-msgid "Show only for the selected day"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:103
-#, fuzzy
-msgid "/File/_New"
-msgstr "Restroù :\n"
-
-#: ../../standalone/logdrake_.c:103
-msgid "<control>N"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:104
-msgid "/File/_Open"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:104
-msgid "<control>O"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:105
-msgid "/File/_Save"
-msgstr "/Restr/_Enrollañ"
-
-#: ../../standalone/logdrake_.c:105
-msgid "<control>S"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:106
-msgid "/File/Save _As"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:107
-msgid "/File/-"
-msgstr "/Restr/-"
-
-#: ../../standalone/logdrake_.c:109
-#, fuzzy
-msgid "/_Options"
-msgstr "Parzhadur"
-
-#: ../../standalone/logdrake_.c:110
-#, fuzzy
-msgid "/Options/Test"
-msgstr "Parzhadur"
-
-#: ../../standalone/logdrake_.c:112
-msgid "/Help/_About..."
-msgstr ""
-
-#: ../../standalone/logdrake_.c:119
-msgid "-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*,*"
-msgstr "-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*,*"
-
-#: ../../standalone/logdrake_.c:120
-msgid "-misc-fixed-bold-r-*-*-*-100-*-*-*-*-*-*,*"
-msgstr "-misc-fixed-bold-r-*-*-*-100-*-*-*-*-*-*,*"
-
-#: ../../standalone/logdrake_.c:174
-#, fuzzy
-msgid "User"
-msgstr "Anv arveriad"
-
-#: ../../standalone/logdrake_.c:175
-#, fuzzy
-msgid "Messages"
-msgstr "Amprouiñ ar porzhioù"
-
-#: ../../standalone/logdrake_.c:176
-msgid "Syslog"
-msgstr "Syslog"
-
-#: ../../standalone/logdrake_.c:177
-msgid "Mandrake Tools Explanations"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:180
-#, fuzzy
-msgid "search"
-msgstr "Klask"
-
-#: ../../standalone/logdrake_.c:186
-msgid "A tool to monitor your logs"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:187
-msgid "Settings"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:192
-#, fuzzy
-msgid "matching"
-msgstr "O vrasjediñ"
-
-#: ../../standalone/logdrake_.c:193
-msgid "but not matching"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:197
-#, fuzzy
-msgid "Choose file"
-msgstr "Dibabit un obererezh"
-
-#: ../../standalone/logdrake_.c:202
-msgid "Calendar"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:212
-#, fuzzy
-msgid "Content of the file"
-msgstr "Anv ar gevreadenn"
-
-#: ../../standalone/logdrake_.c:216 ../../standalone/logdrake_.c:392
-msgid "Mail alert"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:268
-#, fuzzy, c-format
-msgid "please wait, parsing file: %s"
-msgstr "O prientiñ ar staliadur"
-
-#: ../../standalone/logdrake_.c:409
-#, fuzzy
-msgid "Mail alert configuration"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../standalone/logdrake_.c:410
-msgid ""
-"Welcome to the mail configuration utility.\n"
-"\n"
-"Here, you'll be able to set up the alert system.\n"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:417
-msgid "Apache World Wide Web Server"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:418
-#, fuzzy
-msgid "Domain Name Resolver"
-msgstr "Anv ar domani"
-
-#: ../../standalone/logdrake_.c:419
-#, fuzzy
-msgid "Ftp Server"
-msgstr "Servijer NIS"
-
-#: ../../standalone/logdrake_.c:420
-#, fuzzy
-msgid "Postfix Mail Server"
-msgstr "Stlennvonioù"
-
-#: ../../standalone/logdrake_.c:421
-#, fuzzy
-msgid "Samba Server"
-msgstr "Servijer NIS"
-
-#: ../../standalone/logdrake_.c:422
-#, fuzzy
-msgid "SSH Server"
-msgstr "Servijer NIS"
-
-#: ../../standalone/logdrake_.c:423
-#, fuzzy
-msgid "Webmin Service"
-msgstr "trobarzhell"
-
-#: ../../standalone/logdrake_.c:424
-#, fuzzy
-msgid "Xinetd Service"
-msgstr "Servijer moullañ"
-
-#: ../../standalone/logdrake_.c:431
-#, fuzzy
-msgid "service setting"
-msgstr "dedennus"
-
-#: ../../standalone/logdrake_.c:432
-msgid ""
-"You will receive an alert if one of the selected services is no more running"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:444
-#, fuzzy
-msgid "load setting"
-msgstr "O furmadiñ"
-
-#: ../../standalone/logdrake_.c:445
-msgid "You will receive an alert if the load is higher than this value"
-msgstr ""
-
-#: ../../standalone/logdrake_.c:458
-#, fuzzy
-msgid "alert configuration"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../standalone/logdrake_.c:459
-#, fuzzy
-msgid "Please enter your email address below "
-msgstr "Klaskit adarre mar plij"
-
-#: ../../standalone/logdrake_.c:498
-#, fuzzy
-msgid "Save as.."
-msgstr "Meuziad Lañsañ"
-
-#: ../../standalone/mousedrake_.c:45
-msgid "Please, choose the type of your mouse."
-msgstr "Dibabit seurt ho logodenn, mar plij."
-
-#: ../../standalone/mousedrake_.c:58
-msgid "Emulate third button?"
-msgstr "Kendarvan an trede nozelenn ?"
-
-#: ../../standalone/printerdrake_.c:57
-#, fuzzy
-msgid "Reading printer data ..."
-msgstr "Dibarzhoù ar voullerez lpd a-bell"
-
-#: ../../standalone/scannerdrake_.c:41
-#, fuzzy
-msgid "Detecting devices ..."
-msgstr "O tinoiñ trobarzhelloù..."
-
-#: ../../standalone/scannerdrake_.c:41
-msgid "Test ports"
-msgstr "Amprouiñ ar porzhioù"
-
-#: ../../standalone/scannerdrake_.c:53 ../../standalone/scannerdrake_.c:68
-#: ../../standalone/scannerdrake_.c:81
-#, c-format
-msgid "The %s is not supported by this version of Mandrake Linux."
-msgstr ""
-
-#: ../../standalone/scannerdrake_.c:56
-#, fuzzy, c-format
-msgid "%s found on %s, configure it?"
-msgstr "Mennout a rit kefluniañ ur voullerez ?"
-
-#: ../../standalone/scannerdrake_.c:59
-#, c-format
-msgid "%s is not in the scanner database, configure it manually?"
-msgstr ""
-
-#: ../../standalone/scannerdrake_.c:65
-#, fuzzy
-msgid "Select a scanner"
-msgstr "Diuzit ur gartenn c'hrafek"
-
-#: ../../standalone/scannerdrake_.c:93
-#, c-format
-msgid "This %s scanner is unsupported"
-msgstr ""
-
-#: ../../standalone/scannerdrake_.c:107
-#, c-format
-msgid ""
-"Scannerdrake was not able to detect your %s scanner.\n"
-"Please select the device where your scanner is plugged"
-msgstr ""
-
-#: ../../standalone/scannerdrake_.c:109
-#, fuzzy
-msgid "choose device"
-msgstr "Trobarzhell loc'hañ"
-
-#: ../../standalone/scannerdrake_.c:115
-#, c-format
-msgid ""
-"This %s scanner must be configured by printerdrake.\n"
-"You can launch printerdrake from the Mandrake Control Center in Hardware "
-"section."
-msgstr ""
-
-#: ../../standalone/scannerdrake_.c:120
-#, c-format
-msgid ""
-"Your %s scanner has been configured.\n"
-"You may now scan documents using ``XSane'' from Multimedia/Graphics in the "
-"applications menu."
-msgstr ""
-
-#: ../../standalone/service_harddrake_.c:44
-#, c-format
-msgid "Some devices in the \"%s\" hardware class were removed:\n"
-msgstr ""
-
-#: ../../standalone/service_harddrake_.c:48
-msgid "Some devices were added:\n"
-msgstr ""
-
-#: ../../steps.pm_.c:14
-msgid "Choose your language"
-msgstr "Dibabit ho yezh"
-
-#: ../../steps.pm_.c:15
-msgid "Select installation class"
-msgstr "Diuzit renkad ar staliadur"
-
-#: ../../steps.pm_.c:16
-msgid "Hard drive detection"
-msgstr "Dinoiñ ar bladenn galet"
-
-#: ../../steps.pm_.c:17
-msgid "Configure mouse"
-msgstr "Kefluniañ al logodenn"
-
-#: ../../steps.pm_.c:18
-msgid "Choose your keyboard"
-msgstr "Dibabit ho stokellaoueg"
-
-#: ../../steps.pm_.c:19
-#, fuzzy
-msgid "Security"
-msgstr "rodellek"
-
-#: ../../steps.pm_.c:20
-msgid "Setup filesystems"
-msgstr "Kefluniañ reizhiadoù restroù"
-
-#: ../../steps.pm_.c:21
-msgid "Format partitions"
-msgstr "Furmadiñ parzhadurioù"
-
-#: ../../steps.pm_.c:22
-msgid "Choose packages to install"
-msgstr "Dibabit pakadoù da staliañ"
-
-#: ../../steps.pm_.c:23
-msgid "Install system"
-msgstr "Staliañ ar reizhiad"
-
-#: ../../steps.pm_.c:25
-msgid "Add a user"
-msgstr "Ouzhpennañ un arveriad"
-
-#: ../../steps.pm_.c:26
-msgid "Configure networking"
-msgstr "Kefluniañ ur rouedad"
-
-#: ../../steps.pm_.c:28
-msgid "Configure services"
-msgstr "Kefluniañ servijoù"
-
-#: ../../steps.pm_.c:29
-msgid "Install bootloader"
-msgstr "Staliañ ar c'harger loc'hañ"
-
-#: ../../steps.pm_.c:31
-msgid "Create a bootdisk"
-msgstr "Krouiñ ur bladennig loc'hañ"
-
-#: ../../steps.pm_.c:33
-msgid "Configure X"
-msgstr "Kefluniañ X"
-
-#: ../../steps.pm_.c:34
-#, fuzzy
-msgid "Install system updates"
-msgstr "Staliañ ar reizhiad"
-
-#: ../../steps.pm_.c:35
-msgid "Exit install"
-msgstr "Dilezel ar staliadur"
-
-#: ../../ugtk.pm_.c:648
-msgid "-adobe-times-bold-r-normal--17-*-100-100-p-*-iso8859-*,*-r-*"
-msgstr "-adobe-times-bold-r-normal--17-*-100-100-p-*-iso8859-*,*-r-*"
-
-#: ../../share/compssUsers:999
-msgid "Web/FTP"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Network Computer (client)"
-msgstr "Dibarzhoù ar voullerez NetWare"
-
-#: ../../share/compssUsers:999
-msgid "NFS server, SMB server, Proxy server, ssh server"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Office"
-msgstr "Burev"
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Gnome Workstation"
-msgstr "Titouroù"
-
-#: ../../share/compssUsers:999
-msgid "Tools for your Palm Pilot or your Visor"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Workstation"
-msgstr "Titouroù"
-
-#: ../../share/compssUsers:999
-msgid "Firewall/Router"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Domain Name and Network Information Server"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid ""
-"Office programs: wordprocessors (kword, abiword), spreadsheets (kspread, "
-"gnumeric), pdf viewers, etc"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Audio-related tools: mp3 or midi players, mixers, etc"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Linux Standard Base. Third party applications support"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Books and Howto's on Linux and Free Software"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "KDE Workstation"
-msgstr "Titouroù"
-
-#: ../../share/compssUsers:999
-msgid "Icewm, Window Maker, Enlightenment, Fvwm, etc"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Multimedia - Video"
-msgstr "Liesvedia"
-
-#: ../../share/compssUsers:999
-msgid "Set of tools for mail, news, web, file transfer, and chat"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Database"
-msgstr "Stlennvonioù"
-
-#: ../../share/compssUsers:999
-msgid "PostgreSQL or MySQL database server"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Tools to ease the configuration of your computer"
-msgstr "Mennout a rit amprouiñ ar c'hefluniadur ?"
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Multimedia - Sound"
-msgstr "Liesvedia"
-
-#: ../../share/compssUsers:999
-msgid "Documentation"
-msgstr "Teuliadur"
-
-#: ../../share/compssUsers:999
-msgid "Console Tools"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Postfix mail server, Inn news server"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Internet station"
-msgstr "Kefluniañ ar proksioù"
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Multimedia station"
-msgstr "Liesvedia"
-
-#: ../../share/compssUsers:999
-msgid "Configuration"
-msgstr "Kefluniadur"
-
-#: ../../share/compssUsers:999
-msgid "More Graphical Desktops (Gnome, IceWM)"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid ""
-"The K Desktop Environment, the basic graphical environment with a collection "
-"of accompanying tools"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Graphical Environment"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Development"
-msgstr "Diorren"
-
-#: ../../share/compssUsers:999
-msgid "Apache, Pro-ftpd"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Tools to create and burn CD's"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Office Workstation"
-msgstr "Titouroù"
-
-#: ../../share/compssUsers:999
-msgid "Gnome, Icewm, Window Maker, Enlightenment, Fvwm, etc"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Graphics programs such as The Gimp"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "DNS/NIS "
-msgstr "DNS/NIS"
-
-#: ../../share/compssUsers:999
-msgid "C and C++ development libraries, programs and include files"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Network Computer server"
-msgstr "Dibarzhoù ar voullerez NetWare"
-
-#: ../../share/compssUsers:999
-msgid "Mail/Groupware/News"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Game station"
-msgstr "Teuliadur"
-
-#: ../../share/compssUsers:999
-msgid "Video players and editors"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Multimedia - Graphics"
-msgstr "Liesvedia"
-
-#: ../../share/compssUsers:999
-msgid "Amusement programs: arcade, boards, strategy, etc"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid ""
-"Set of tools to read and send mail and news (pine, mutt, tin..) and to "
-"browse the Web"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Personal Finance"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid ""
-"A graphical environment with user-friendly set of applications and desktop "
-"tools"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Clients for different protocols including ssh"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "LSB"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Internet gateway"
-msgstr "dedennus"
-
-#: ../../share/compssUsers:999
-msgid "Sound and video playing/editing programs"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Other Graphical Desktops"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Editors, shells, file tools, terminals"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Programs to manage your finance, such as gnucash"
-msgstr ""
-
-#: ../../share/compssUsers:999
-msgid "Personal Information Management"
-msgstr ""
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Multimedia - CD Burning"
-msgstr "Liesvedia"
-
-#: ../../share/compssUsers:999
-#, fuzzy
-msgid "Scientific Workstation"
-msgstr "Titouroù"