diff -uNr dietlibc-0.26/CHANGES dietlibc-0.27/CHANGES --- dietlibc-0.26/CHANGES 2004-06-03 04:37:04.000000000 -0700 +++ dietlibc-0.27/CHANGES 2004-07-29 03:23:47.000000000 -0700 @@ -1,3 +1,22 @@ +0.27: + change DNS routines to look for ip6.arpa instead of ip6.int + WANT_FREAD_OPTIMIZATION was broken on sockets (Johannes Stezenbach) + Olaf: + - added fix for getgrouplist (Nikola Vladov) + - fix the fd leak on error path (Denis Vlasenko) + - the regparm attribute in typedefinition generats error with gcc-2.95 + on non-x86 arch... (reported: Johannes Stezenbach) + PowerPC build fix (Gerrit Pape) + Olaf: added missing settimeofday + add netinet/ether.h and netinet/if_ether.h + add linux/fd.h + add pivot_root, delete_module and init_module prototypes to unistd.h + (protected by _LINUX_SOURCE) + add some BSD legacy declarations to dirent.h (Bryan Henderson) + add strtoull and strtoll as aliases to strtoull and strtoll + use _FILE_OFFSET_BITS consistently (Indan Zupancic) + add support for $DIETHOME in diet, to override the compiled-in path (George) + 0.26: iconv UTF-8 fix (Kuba Winnicki) Olaf: diff -uNr dietlibc-0.26/FAQ dietlibc-0.27/FAQ --- dietlibc-0.26/FAQ 2004-01-22 06:09:37.000000000 -0800 +++ dietlibc-0.27/FAQ 2004-07-12 05:04:43.000000000 -0700 @@ -245,7 +245,7 @@ code. Unfortunately, these options have been renamed on gcc 3. You can fix this by creating a file ~/.diet/gcc containing this line: - -Os -fomit-frame-pointer -falign-functions=0 -falign-jumps=0 -falign-loops=0 -mpreferred-stack-boundary=2 + -Os -fomit-frame-pointer -falign-jumps=1 -falign-loops=1 -mpreferred-stack-boundary=2 If you get this options not for diet -Os gcc but for diet -Os i386-linux-gcc, put this in ~/.diet/i386-linux-gcc instead. diff -uNr dietlibc-0.26/__waitpid.s dietlibc-0.27/__waitpid.s --- dietlibc-0.26/__waitpid.s 2004-06-03 04:08:31.000000000 -0700 +++ dietlibc-0.27/__waitpid.s 1969-12-31 16:00:00.000000000 -0800 @@ -1,39 +0,0 @@ - .file "__waitpid.c" - .pred.safe_across_calls p1-p5,p16-p63 - .text - .align 16 - .global waitpid# - .proc waitpid# -waitpid: - .prologue 12, 35 - .mmi - .save ar.pfs, r36 - alloc r36 = ar.pfs, 3, 3, 4, 0 - mov r37 = r1 - .save rp, r35 - mov r35 = b0 - .body - .mmi - mov r38 = r32 - mov r39 = r33 - mov r40 = r34 - .mmb - nop 0 - mov r41 = r0 - nop 0 - ;; - .bbb - nop 0 - nop 0 - br.call.sptk.many b0 = wait4# - ;; - .mmi - nop 0 - mov r1 = r37 - mov b0 = r35 - .mib - nop 0 - mov ar.pfs = r36 - br.ret.sptk.many b0 - .endp waitpid# - .ident "GCC: (GNU) 3.4.0" diff -uNr dietlibc-0.26/arm/dyn_syscalls.S dietlibc-0.27/arm/dyn_syscalls.S --- dietlibc-0.26/arm/dyn_syscalls.S 2003-10-07 16:44:25.000000000 -0700 +++ dietlibc-0.27/arm/dyn_syscalls.S 2004-06-14 09:13:24.000000000 -0700 @@ -74,6 +74,7 @@ #include "../syscalls.s/getrusage.S" #include "../syscalls.s/getsid.S" #include "../syscalls.s/gettimeofday.S" +#include "../syscalls.s/settimeofday.S" #include "../syscalls.s/getuid.S" #include "../syscalls.s/ioctl.S" #include "../syscalls.s/ioperm.S" diff -uNr dietlibc-0.26/contrib/Makefile dietlibc-0.27/contrib/Makefile --- dietlibc-0.26/contrib/Makefile 2003-09-19 17:06:32.000000000 -0700 +++ dietlibc-0.27/contrib/Makefile 1969-12-31 16:00:00.000000000 -0800 @@ -1,2 +0,0 @@ -pnpdnsd: pnpdnsd.c - diet gcc -g -o $@ $^ diff -uNr dietlibc-0.26/contrib/pnpdnsd.c dietlibc-0.27/contrib/pnpdnsd.c --- dietlibc-0.26/contrib/pnpdnsd.c 2003-09-20 11:03:27.000000000 -0700 +++ dietlibc-0.27/contrib/pnpdnsd.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,117 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int main(int argc,char* argv[]) { - int pnpfd; - struct sockaddr_in6 pnpsa; - struct pollfd pfd; - struct ipv6_mreq opt; - unsigned int interface=0; - unsigned char inpkg[4095]; - - if (argc<2) { - puts("usage: pnpdnsd eth0"); - return 111; - } - interface=if_nametoindex(argv[1]); - if (interface==0) { - puts("pnpdnsd: network interface not found!"); - return 111; - } - pnpfd=socket(PF_INET6,SOCK_DGRAM,IPPROTO_UDP); - - /* bind to port 53 */ - memset(&pnpsa,0,sizeof(struct sockaddr_in6)); - pnpsa.sin6_family=AF_INET6; - pnpsa.sin6_port=htons(53); - pnpsa.sin6_scope_id=interface; - if (bind(pnpfd,(struct sockaddr*)&pnpsa,sizeof(pnpsa))) { - perror("bind"); - return 111; - } - - /* join the multicast group */ - memmove(&opt.ipv6mr_multiaddr,"\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00dnspnp",16); - opt.ipv6mr_interface=interface; - if (setsockopt(pnpfd,IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP,&opt,sizeof opt)==-1) { - perror("setsockopt"); - return 111; - } - - { - socklen_t len=sizeof(pnpsa); - if (getsockname(pnpfd,(struct sockaddr*)&pnpsa,&len)==-1) { - perror("getsockname"); - return 111; - } - } - - for (;;) { - int len; - int fromlen; - int qdcount; - struct sockaddr_in6 peersa; - fromlen=sizeof(peersa); - len=recvfrom(pnpfd,inpkg,sizeof(inpkg),0,(struct sockaddr*)&peersa,&fromlen); - if (len==-1) { - perror("recvfrom"); - return 111; - } - - /* is it a recursive query, as libresolv would issue? */ - if (inpkg[2]!=1) continue; - - qdcount=((unsigned long)(inpkg[4])<<8) + inpkg[5]; - - { - int decofs; - char name[257]; - char myname[257]; - struct utsname u; - decofs=dn_expand(inpkg,inpkg+len,inpkg+12,name,sizeof(name)-1); - puts(name); - uname(&u); - if (strlen(u.nodename)>63) u.nodename[63]=0; - if (!strcasecmp(u.nodename,name)) { - char packet[1500]; - char* c; - packet[0]=inpkg[0]; - packet[1]=inpkg[1]; - packet[2]=inpkg[2] | 0x84; - packet[3]=0; - memset(packet+4,0,8); - packet[7]=1; - packet[12]=strlen(u.nodename); - strcpy(packet+13,u.nodename); - c=packet+14+strlen(u.nodename); - if (((long)c)&1) { *c=0; ++c; } - /* int16 type */ - c[0]=0; c[1]=28; /* AAAA */ - /* int16 class */ - c[2]=0; c[3]=1; /* IN */ - /* int32 ttl */ - c[4]=0; c[5]=0; c[6]=0; c[7]=23; /* 23 seconds TTL */ - /* int16 rdlength */ - c[8]=0; c[9]=16; - /* int16 rdata */ - memmove(c+10,&pnpsa.sin6_addr,16); - - if (sendto(pnpfd,packet,c+26-packet,0,(struct sockaddr*)&peersa,fromlen)==-1) - perror("sendto"); - } - } - } -} diff -uNr dietlibc-0.26/diet.c dietlibc-0.27/diet.c --- dietlibc-0.26/diet.c 2004-05-11 05:48:16.000000000 -0700 +++ dietlibc-0.27/diet.c 2004-07-29 03:40:21.000000000 -0700 @@ -30,7 +30,7 @@ "-malign-loops=1","-fomit-frame-pointer",0, "x86_64","-Os","-fno-omit-frame-pointer",0, "sparc","-Os","-mcpu=supersparc",0, - "sparc64","-Os","-m64",0, + "sparc64","-Os","-m64","-mhard-quad-float",0, "alpha","-Os","-fomit-frame-pointer",0, "arm","-Os","-fomit-frame-pointer",0, "mips","-Os","-fomit-frame-pointer","-mno-abicalls","-fno-pic","-G","0",0, @@ -40,7 +40,7 @@ "s390x","-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, + "x86_64","-Os","-fstrict-aliasing","-momit-leaf-frame-pointer","-mfancy-math-387",0, 0}; static void usage(void) { @@ -64,15 +64,15 @@ int preprocess=0; int verbose=0; int profile=0; - char diethome[]=DIETHOME; - char platform[1000]; + char* diethome; + char* platform; #ifdef __DYN_LIB int shared=0; #endif char* shortplatform=0; #ifdef WANT_SAFEGUARD char safeguard1[]="-include"; - char safeguard2[]=DIETHOME "/include/dietref.h"; + char* safeguard2; #endif const char *nostdlib="-nostdlib"; const char *libgcc="-lgcc"; @@ -82,13 +82,22 @@ int mangleopts=0; char manglebuf[1024]; + if (!(diethome = getenv("DIETHOME"))) + diethome=DIETHOME; +#ifdef WANT_SAFEGUARD + safeguard2=alloca(strlen(diethome)+30); + strcpy(safeguard2, diethome); + strcat(safeguard2, "/include/dietref.h"); +#endif + platform=alloca(strlen(diethome)+100); + strcpy(platform,diethome); #ifdef INSTALLVERSION - strcpy(platform,DIETHOME "/lib-"); + strcat(platform,"/lib-"); #else #ifndef __DYN_LIB - strcpy(platform,DIETHOME "/bin-"); + strcat(platform,"/bin-"); #else - strcpy(platform,DIETHOME "/pic-"); + strcat(platform,"/pic-"); #endif #endif strcpy(dashL,"-L"); diff -uNr dietlibc-0.26/i386/dyn_syscalls.S dietlibc-0.27/i386/dyn_syscalls.S --- dietlibc-0.26/i386/dyn_syscalls.S 2004-04-29 08:23:13.000000000 -0700 +++ dietlibc-0.27/i386/dyn_syscalls.S 2004-06-14 09:13:24.000000000 -0700 @@ -173,6 +173,7 @@ #include "../syscalls.s/getrusage.S" #include "../syscalls.s/getsid.S" #include "../syscalls.s/gettimeofday.S" +#include "../syscalls.s/settimeofday.S" #include "../syscalls.s/ioperm.S" #include "../syscalls.s/iopl.S" #include "../syscalls.s/ipc.S" diff -uNr dietlibc-0.26/include/arpa/tftp.h dietlibc-0.27/include/arpa/tftp.h --- dietlibc-0.26/include/arpa/tftp.h 1969-12-31 16:00:00.000000000 -0800 +++ dietlibc-0.27/include/arpa/tftp.h 2004-06-25 02:58:03.000000000 -0700 @@ -0,0 +1,37 @@ +#ifndef _ARPA_TFTP_H +#define _ARPA_TFTP_H + +#include + +#define SEGSIZE 512 /* data segment size */ +#define RRQ 01 /* read request */ +#define WRQ 02 /* write request */ +#define DATA 03 /* data packet */ +#define ACK 04 /* acknowledgement */ +#define ERROR 05 /* error code */ + +struct tftphdr { + int16_t th_opcode; /* packet type */ + union { + uint16_t tu_block; /* block # */ + int16_t tu_code; /* error code */ + char tu_stuff[1]; /* request packet stuff */ + } __attribute__ ((__packed__)) th_u; + char th_data[1]; /* data or error string */ +} __attribute__ ((__packed__)); + +#define th_block th_u.tu_block +#define th_code th_u.tu_code +#define th_stuff th_u.tu_stuff +#define th_msg th_data + +#define EUNDEF 0 /* not defined */ +#define ENOTFOUND 1 /* file not found */ +#define EACCESS 2 /* access violation */ +#define ENOSPACE 3 /* disk full or allocation exceeded */ +#define EBADOP 4 /* illegal TFTP operation */ +#define EBADID 5 /* unknown transfer ID */ +#define EEXISTS 6 /* file already exists */ +#define ENOUSER 7 /* no such user */ + +#endif diff -uNr dietlibc-0.26/include/asm/ppc-sigcontext.h dietlibc-0.27/include/asm/ppc-sigcontext.h --- dietlibc-0.26/include/asm/ppc-sigcontext.h 2002-02-18 07:04:56.000000000 -0800 +++ dietlibc-0.27/include/asm/ppc-sigcontext.h 2004-06-10 03:40:20.000000000 -0700 @@ -1,3 +1,4 @@ +#ifndef ASM_PPC_SIGCONTEXT_H struct pt_regs { unsigned long gpr[32]; @@ -74,3 +75,5 @@ unsigned long oldmask; struct pt_regs *regs; }; + +#endif diff -uNr dietlibc-0.26/include/dirent.h dietlibc-0.27/include/dirent.h --- dietlibc-0.26/include/dirent.h 2004-01-07 07:04:48.000000000 -0800 +++ dietlibc-0.27/include/dirent.h 2004-07-05 14:50:21.000000000 -0700 @@ -63,6 +63,35 @@ #define alphasort alphasort64 #endif +#ifdef _BSD_SOURCE +/* File types for `d_type'. */ +enum + { + DT_UNKNOWN = 0, +# define DT_UNKNOWN DT_UNKNOWN + DT_FIFO = 1, +# define DT_FIFO DT_FIFO + DT_CHR = 2, +# define DT_CHR DT_CHR + DT_DIR = 4, +# define DT_DIR DT_DIR + DT_BLK = 6, +# define DT_BLK DT_BLK + DT_REG = 8, +# define DT_REG DT_REG + DT_LNK = 10, +# define DT_LNK DT_LNK + DT_SOCK = 12, +# define DT_SOCK DT_SOCK + DT_WHT = 14 +# define DT_WHT DT_WHT + }; + +/* Convert between stat structure types and directory types. */ +# define IFTODT(mode) (((mode) & 0170000) >> 12) +# define DTTOIF(dirtype) ((dirtype) << 12) +#endif + __END_DECLS #endif diff -uNr dietlibc-0.26/include/inttypes.h dietlibc-0.27/include/inttypes.h --- dietlibc-0.26/include/inttypes.h 2004-01-07 07:04:48.000000000 -0800 +++ dietlibc-0.27/include/inttypes.h 2004-07-05 14:55:44.000000000 -0700 @@ -246,6 +246,9 @@ __extension__ typedef unsigned long long int uintmax_t; #endif +intmax_t strtoimax (const char *nptr, char **endptr, int base); +uintmax_t strtoumax (const char *nptr, char **endptr, int base); + __END_DECLS #endif diff -uNr dietlibc-0.26/include/linux/fd.h dietlibc-0.27/include/linux/fd.h --- dietlibc-0.26/include/linux/fd.h 1969-12-31 16:00:00.000000000 -0800 +++ dietlibc-0.27/include/linux/fd.h 2004-07-02 05:30:47.000000000 -0700 @@ -0,0 +1,370 @@ +#ifndef _LINUX_FD_H +#define _LINUX_FD_H + +#include + +/* + * Geometry + */ +struct floppy_struct { + unsigned int size, /* nr of sectors total */ + sect, /* sectors per track */ + head, /* nr of heads */ + track, /* nr of tracks */ + stretch; /* !=0 means double track steps */ +#define FD_STRETCH 1 +#define FD_SWAPSIDES 2 +#define FD_ZEROBASED 4 + + unsigned char gap, /* gap1 size */ + + rate, /* data rate. |= 0x40 for perpendicular */ +#define FD_2M 0x4 +#define FD_SIZECODEMASK 0x38 +#define FD_SIZECODE(floppy) (((((floppy)->rate&FD_SIZECODEMASK)>> 3)+ 2) %8) +#define FD_SECTSIZE(floppy) ( (floppy)->rate & FD_2M ? \ + 512 : 128 << FD_SIZECODE(floppy) ) +#define FD_PERP 0x40 + + spec1, /* stepping rate, head unload time */ + fmt_gap; /* gap2 size */ + const char * name; /* used only for predefined formats */ +}; + + +/* commands needing write access have 0x40 set */ +/* commands needing super user access have 0x80 set */ + +#define FDCLRPRM _IO(2, 0x41) +/* clear user-defined parameters */ + +#define FDSETPRM _IOW(2, 0x42, struct floppy_struct) +#define FDSETMEDIAPRM FDSETPRM +/* set user-defined parameters for current media */ + +#define FDDEFPRM _IOW(2, 0x43, struct floppy_struct) +#define FDGETPRM _IOR(2, 0x04, struct floppy_struct) +#define FDDEFMEDIAPRM FDDEFPRM +#define FDGETMEDIAPRM FDGETPRM +/* set/get disk parameters */ + + +#define FDMSGON _IO(2,0x45) +#define FDMSGOFF _IO(2,0x46) +/* issue/don't issue kernel messages on media type change */ + + +/* + * Formatting (obsolete) + */ +#define FD_FILL_BYTE 0xF6 /* format fill byte. */ + +struct format_descr { + unsigned int device,head,track; +}; + +#define FDFMTBEG _IO(2,0x47) +/* begin formatting a disk */ +#define FDFMTTRK _IOW(2,0x48, struct format_descr) +/* format the specified track */ +#define FDFMTEND _IO(2,0x49) +/* end formatting a disk */ + + +/* + * Error thresholds + */ +struct floppy_max_errors { + unsigned int + abort, /* number of errors to be reached before aborting */ + read_track, /* maximal number of errors permitted to read an + * entire track at once */ + reset, /* maximal number of errors before a reset is tried */ + recal, /* maximal number of errors before a recalibrate is + * tried */ + + /* + * Threshold for reporting FDC errors to the console. + * Setting this to zero may flood your screen when using + * ultra cheap floppies ;-) + */ + reporting; + +}; + +#define FDSETEMSGTRESH _IO(2,0x4a) +/* set fdc error reporting threshold */ + +#define FDFLUSH _IO(2,0x4b) +/* flush buffers for media; either for verifying media, or for + * handling a media change without closing the file descriptor */ + +#define FDSETMAXERRS _IOW(2, 0x4c, struct floppy_max_errors) +#define FDGETMAXERRS _IOR(2, 0x0e, struct floppy_max_errors) +/* set/get abortion and read_track threshold. See also floppy_drive_params + * structure */ + + +typedef char floppy_drive_name[16]; +#define FDGETDRVTYP _IOR(2, 0x0f, floppy_drive_name) +/* get drive type: 5 1/4 or 3 1/2 */ + + +/* + * Drive parameters (user modifiable) + */ +struct floppy_drive_params { + signed char cmos; /* CMOS type */ + + /* Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms + * etc) and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA). + */ + unsigned long max_dtr; /* Step rate, usec */ + unsigned long hlt; /* Head load/settle time, msec */ + unsigned long hut; /* Head unload time (remnant of + * 8" drives) */ + unsigned long srt; /* Step rate, usec */ + + unsigned long spinup; /* time needed for spinup (expressed + * in jiffies) */ + unsigned long spindown; /* timeout needed for spindown */ + unsigned char spindown_offset; /* decides in which position the disk + * will stop */ + unsigned char select_delay; /* delay to wait after select */ + unsigned char rps; /* rotations per second */ + unsigned char tracks; /* maximum number of tracks */ + unsigned long timeout; /* timeout for interrupt requests */ + + unsigned char interleave_sect; /* if there are more sectors, use + * interleave */ + + struct floppy_max_errors max_errors; + + char flags; /* various flags, including ftd_msg */ +/* + * Announce successful media type detection and media information loss after + * disk changes. + * Also used to enable/disable printing of overrun warnings. + */ + +#define FTD_MSG 0x10 +#define FD_BROKEN_DCL 0x20 +#define FD_DEBUG 0x02 +#define FD_SILENT_DCL_CLEAR 0x4 +#define FD_INVERTED_DCL 0x80 /* must be 0x80, because of hardware + considerations */ + + char read_track; /* use readtrack during probing? */ + +/* + * Auto-detection. Each drive type has eight formats which are + * used in succession to try to read the disk. If the FDC cannot lock onto + * the disk, the next format is tried. This uses the variable 'probing'. + */ + short autodetect[8]; /* autodetected formats */ + + int checkfreq; /* how often should the drive be checked for disk + * changes */ + int native_format; /* native format of this drive */ +}; + +enum { + FD_NEED_TWADDLE_BIT, /* more magic */ + FD_VERIFY_BIT, /* inquire for write protection */ + FD_DISK_NEWCHANGE_BIT, /* change detected, and no action undertaken yet + * to clear media change status */ + FD_UNUSED_BIT, + FD_DISK_CHANGED_BIT, /* disk has been changed since last i/o */ + FD_DISK_WRITABLE_BIT /* disk is writable */ +}; + +#define FDSETDRVPRM _IOW(2, 0x90, struct floppy_drive_params) +#define FDGETDRVPRM _IOR(2, 0x11, struct floppy_drive_params) +/* set/get drive parameters */ + + +/* + * Current drive state (not directly modifiable by user, readonly) + */ +struct floppy_drive_struct { + unsigned long flags; +/* values for these flags */ +#define FD_NEED_TWADDLE (1 << FD_NEED_TWADDLE_BIT) +#define FD_VERIFY (1 << FD_VERIFY_BIT) +#define FD_DISK_NEWCHANGE (1 << FD_DISK_NEWCHANGE_BIT) +#define FD_DISK_CHANGED (1 << FD_DISK_CHANGED_BIT) +#define FD_DISK_WRITABLE (1 << FD_DISK_WRITABLE_BIT) + + unsigned long spinup_date; + unsigned long select_date; + unsigned long first_read_date; + short probed_format; + short track; /* current track */ + short maxblock; /* id of highest block read */ + short maxtrack; /* id of highest half track read */ + int generation; /* how many diskchanges? */ + +/* + * (User-provided) media information is _not_ discarded after a media change + * if the corresponding keep_data flag is non-zero. Positive values are + * decremented after each probe. + */ + int keep_data; + + /* Prevent "aliased" accesses. */ + int fd_ref; + int fd_device; + unsigned long last_checked; /* when was the drive last checked for a disk + * change? */ + + char *dmabuf; + int bufblocks; +}; + +#define FDGETDRVSTAT _IOR(2, 0x12, struct floppy_drive_struct) +#define FDPOLLDRVSTAT _IOR(2, 0x13, struct floppy_drive_struct) +/* get drive state: GET returns the cached state, POLL polls for new state */ + + +/* + * reset FDC + */ +enum reset_mode { + FD_RESET_IF_NEEDED, /* reset only if the reset flags is set */ + FD_RESET_IF_RAWCMD, /* obsolete */ + FD_RESET_ALWAYS /* reset always */ +}; +#define FDRESET _IO(2, 0x54) + + +/* + * FDC state + */ +struct floppy_fdc_state { + int spec1; /* spec1 value last used */ + int spec2; /* spec2 value last used */ + int dtr; + unsigned char version; /* FDC version code */ + unsigned char dor; + unsigned long address; /* io address */ + unsigned int rawcmd:2; + unsigned int reset:1; + unsigned int need_configure:1; + unsigned int perp_mode:2; + unsigned int has_fifo:1; + unsigned int driver_version; /* version code for floppy driver */ +#define FD_DRIVER_VERSION 0x100 +/* user programs using the floppy API should use floppy_fdc_state to + * get the version number of the floppy driver that they are running + * on. If this version number is bigger than the one compiled into the + * user program (the FD_DRIVER_VERSION define), it should be prepared + * to bigger structures + */ + + unsigned char track[4]; + /* Position of the heads of the 4 units attached to this FDC, + * as stored on the FDC. In the future, the position as stored + * on the FDC might not agree with the actual physical + * position of these drive heads. By allowing such + * disagreement, it will be possible to reset the FDC without + * incurring the expensive cost of repositioning all heads. + * Right now, these positions are hard wired to 0. */ + +}; + +#define FDGETFDCSTAT _IOR(2, 0x15, struct floppy_fdc_state) + + +/* + * Asynchronous Write error tracking + */ +struct floppy_write_errors { + /* Write error logging. + * + * These fields can be cleared with the FDWERRORCLR ioctl. + * Only writes that were attempted but failed due to a physical media + * error are logged. write(2) calls that fail and return an error code + * to the user process are not counted. + */ + + unsigned int write_errors; /* number of physical write errors + * encountered */ + + /* position of first and last write errors */ + unsigned long first_error_sector; + int first_error_generation; + unsigned long last_error_sector; + int last_error_generation; + + unsigned int badness; /* highest retry count for a read or write + * operation */ +}; + +#define FDWERRORCLR _IO(2, 0x56) +/* clear write error and badness information */ +#define FDWERRORGET _IOR(2, 0x17, struct floppy_write_errors) +/* get write error and badness information */ + + +/* + * Raw commands + */ +/* new interface flag: now we can do them in batches */ +#define FDHAVEBATCHEDRAWCMD + +struct floppy_raw_cmd { + unsigned int flags; +#define FD_RAW_READ 1 +#define FD_RAW_WRITE 2 +#define FD_RAW_NO_MOTOR 4 +#define FD_RAW_DISK_CHANGE 4 /* out: disk change flag was set */ +#define FD_RAW_INTR 8 /* wait for an interrupt */ +#define FD_RAW_SPIN 0x10 /* spin up the disk for this command */ +#define FD_RAW_NO_MOTOR_AFTER 0x20 /* switch the motor off after command + * completion */ +#define FD_RAW_NEED_DISK 0x40 /* this command needs a disk to be present */ +#define FD_RAW_NEED_SEEK 0x80 /* this command uses an implied seek (soft) */ + +/* more "in" flags */ +#define FD_RAW_MORE 0x100 /* more records follow */ +#define FD_RAW_STOP_IF_FAILURE 0x200 /* stop if we encounter a failure */ +#define FD_RAW_STOP_IF_SUCCESS 0x400 /* stop if command successful */ +#define FD_RAW_SOFTFAILURE 0x800 /* consider the return value for failure + * detection too */ + +/* more "out" flags */ +#define FD_RAW_FAILURE 0x10000 /* command sent to fdc, fdc returned error */ +#define FD_RAW_HARDFAILURE 0x20000 /* fdc had to be reset, or timed out */ + + void *data; + char *kernel_data; /* location of data buffer in the kernel */ + struct floppy_raw_cmd *next; /* used for chaining of raw cmd's + * within the kernel */ + long length; /* in: length of dma transfer. out: remaining bytes */ + long phys_length; /* physical length, if different from dma length */ + int buffer_length; /* length of allocated buffer */ + + unsigned char rate; + unsigned char cmd_count; + unsigned char cmd[16]; + unsigned char reply_count; + unsigned char reply[16]; + int track; + int resultcode; + + int reserved1; + int reserved2; +}; + +#define FDRAWCMD _IO(2, 0x58) +/* send a raw command to the fdc. Structure size not included, because of + * batches */ + +#define FDTWADDLE _IO(2, 0x59) +/* flicker motor-on bit before reading a sector. Experimental */ + + +#define FDEJECT _IO(2, 0x5a) +/* eject the disk */ + +#endif diff -uNr dietlibc-0.26/include/linux/if_ether.h dietlibc-0.27/include/linux/if_ether.h --- dietlibc-0.26/include/linux/if_ether.h 2003-12-18 07:53:01.000000000 -0800 +++ dietlibc-0.27/include/linux/if_ether.h 2004-07-02 14:22:33.000000000 -0700 @@ -1,83 +1,6 @@ #ifndef _LINUX_IF_ETHER_H #define _LINUX_IF_ETHER_H -/* - * IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble - * and FCS/CRC (frame check sequence). - */ - -#define ETH_ALEN 6 /* Octets in one ethernet addr */ -#define ETH_HLEN 14 /* Total octets in header. */ -#define ETH_ZLEN 60 /* Min. octets in frame sans FCS */ -#define ETH_DATA_LEN 1500 /* Max. octets in payload */ -#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */ - -/* - * These are the defined Ethernet Protocol ID's. - */ - -#define ETH_P_LOOP 0x0060 /* Ethernet Loopback packet */ -#define ETH_P_PUP 0x0200 /* Xerox PUP packet */ -#define ETH_P_PUPAT 0x0201 /* Xerox PUP Addr Trans packet */ -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_P_X25 0x0805 /* CCITT X.25 */ -#define ETH_P_ARP 0x0806 /* Address Resolution packet */ -#define ETH_P_BPQ 0x08FF /* G8BPQ AX.25 Ethernet Packet [ NOT AN OFFICIALLY REGISTERED ID ] */ -#define ETH_P_IEEEPUP 0x0a00 /* Xerox IEEE802.3 PUP packet */ -#define ETH_P_IEEEPUPAT 0x0a01 /* Xerox IEEE802.3 PUP Addr Trans packet */ -#define ETH_P_DEC 0x6000 /* DEC Assigned proto */ -#define ETH_P_DNA_DL 0x6001 /* DEC DNA Dump/Load */ -#define ETH_P_DNA_RC 0x6002 /* DEC DNA Remote Console */ -#define ETH_P_DNA_RT 0x6003 /* DEC DNA Routing */ -#define ETH_P_LAT 0x6004 /* DEC LAT */ -#define ETH_P_DIAG 0x6005 /* DEC Diagnostics */ -#define ETH_P_CUST 0x6006 /* DEC Customer use */ -#define ETH_P_SCA 0x6007 /* DEC Systems Comms Arch */ -#define ETH_P_RARP 0x8035 /* Reverse Addr Res packet */ -#define ETH_P_ATALK 0x809B /* Appletalk DDP */ -#define ETH_P_AARP 0x80F3 /* Appletalk AARP */ -#define ETH_P_8021Q 0x8100 /* 802.1Q VLAN Extended Header */ -#define ETH_P_IPX 0x8137 /* IPX over DIX */ -#define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */ -#define ETH_P_PPP_DISC 0x8863 /* PPPoE discovery messages */ -#define ETH_P_PPP_SES 0x8864 /* PPPoE session messages */ -#define ETH_P_MPLS_UC 0x8847 /* MPLS Unicast traffic */ -#define ETH_P_MPLS_MC 0x8848 /* MPLS Multicast traffic */ -#define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */ -#define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport - * over Ethernet - */ -#define ETH_P_EDP2 0x88A2 /* Coraid EDP2 */ - -/* - * Non DIX types. Won't clash for 1500 types. - */ - -#define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */ -#define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */ -#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */ -#define ETH_P_802_2 0x0004 /* 802.2 frames */ -#define ETH_P_SNAP 0x0005 /* Internal only */ -#define ETH_P_DDCMP 0x0006 /* DEC DDCMP: Internal only */ -#define ETH_P_WAN_PPP 0x0007 /* Dummy type for WAN PPP frames*/ -#define ETH_P_PPP_MP 0x0008 /* Dummy type for PPP MP frames */ -#define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */ -#define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/ -#define ETH_P_TR_802_2 0x0011 /* 802.2 frames */ -#define ETH_P_MOBITEX 0x0015 /* Mobitex (kaz@cafe.net) */ -#define ETH_P_CONTROL 0x0016 /* Card specific control frames */ -#define ETH_P_IRDA 0x0017 /* Linux-IrDA */ -#define ETH_P_ECONET 0x0018 /* Acorn Econet */ -#define ETH_P_HDLC 0x0019 /* HDLC frames */ - -/* - * This is an Ethernet frame header. - */ - -struct ethhdr { - unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ - unsigned char h_source[ETH_ALEN]; /* source ether addr */ - unsigned short h_proto; /* packet type ID field */ -} __attribute__((packed)); +#include #endif diff -uNr dietlibc-0.26/include/netinet/ether.h dietlibc-0.27/include/netinet/ether.h --- dietlibc-0.26/include/netinet/ether.h 1969-12-31 16:00:00.000000000 -0800 +++ dietlibc-0.27/include/netinet/ether.h 2004-06-15 09:25:51.000000000 -0700 @@ -0,0 +1,6 @@ +#ifndef _NETINET_ETHER_H +#define _NETINET_ETHER_H + +#include + +#endif diff -uNr dietlibc-0.26/include/netinet/if_ether.h dietlibc-0.27/include/netinet/if_ether.h --- dietlibc-0.26/include/netinet/if_ether.h 1969-12-31 16:00:00.000000000 -0800 +++ dietlibc-0.27/include/netinet/if_ether.h 2004-06-15 09:25:51.000000000 -0700 @@ -0,0 +1,6 @@ +#ifndef _NETINET_IF_ETHER_H +#define _NETINET_IF_ETHER_H + +#include + +#endif diff -uNr dietlibc-0.26/include/stdio.h dietlibc-0.27/include/stdio.h --- dietlibc-0.26/include/stdio.h 2004-05-10 09:34:54.000000000 -0700 +++ dietlibc-0.27/include/stdio.h 2004-07-12 05:04:43.000000000 -0700 @@ -83,7 +83,7 @@ loff_t ftello64(FILE *stream) __THROW; loff_t ftello64_unlocked(FILE *stream) __THROW; -#if _FILE_OFFSET_BITS == 64 +#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) diff -uNr dietlibc-0.26/include/sys/ptrace.h dietlibc-0.27/include/sys/ptrace.h --- dietlibc-0.26/include/sys/ptrace.h 2003-10-10 06:17:46.000000000 -0700 +++ dietlibc-0.27/include/sys/ptrace.h 2004-06-10 03:40:20.000000000 -0700 @@ -639,72 +639,7 @@ #elif defined(powerpc) || defined (__powerpc64__) -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) +#include #elif defined(__hppa__) diff -uNr dietlibc-0.26/include/time.h dietlibc-0.27/include/time.h --- dietlibc-0.26/include/time.h 2004-05-10 09:34:54.000000000 -0700 +++ dietlibc-0.27/include/time.h 2004-06-25 03:02:09.000000000 -0700 @@ -4,6 +4,7 @@ #include #include #include +#include __BEGIN_DECLS @@ -66,6 +67,8 @@ time_t timelocal(struct tm *timeptr) __THROW __attribute_dontuse__ __pure; #endif +#define CLK_TCK ((clock_t)sysconf(_SC_CLK_TCK)) + __END_DECLS #endif diff -uNr dietlibc-0.26/include/unistd.h dietlibc-0.27/include/unistd.h --- dietlibc-0.26/include/unistd.h 2004-05-17 10:46:36.000000000 -0700 +++ dietlibc-0.27/include/unistd.h 2004-07-02 07:47:06.000000000 -0700 @@ -251,6 +251,16 @@ #define getdents getdents64 #endif +#ifdef _LINUX_SOURCE +int pivot_root(const char *new_root, const char *put_old) __THROW; +/* Linux 2.6 module loading infrastructure: + * init_module takes a buffer where you read the module file into */ +long init_module(void *module, unsigned long len, const char *options) __THROW; +/* flags can be O_EXCL | O_NONBLOCK | O_TRUNC (forced unloading) + * O_EXCL is there so the kernel can spot old rmmod versions */ +long delete_module(const char* name,unsigned int flags) __THROW; +#endif + __END_DECLS #endif diff -uNr dietlibc-0.26/lib/.#__stat64_cvt.c.1.3 dietlibc-0.27/lib/.#__stat64_cvt.c.1.3 --- dietlibc-0.26/lib/.#__stat64_cvt.c.1.3 2004-03-10 06:23:20.000000000 -0800 +++ dietlibc-0.27/lib/.#__stat64_cvt.c.1.3 1969-12-31 16:00:00.000000000 -0800 @@ -1,21 +0,0 @@ -#include -#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; - dest->st_mode=src->st_mode; - dest->st_nlink=src->st_nlink; - dest->st_uid=src->st_uid; - dest->st_gid=src->st_gid; - dest->st_rdev=src->st_rdev; - dest->st_size=src->st_size; - dest->st_blksize=src->st_blksize; - dest->st_blocks=src->st_blocks; - dest->st_atime=src->st_atime; - dest->st_mtime=src->st_mtime; - dest->st_ctime=src->st_ctime; -} -#endif diff -uNr dietlibc-0.26/lib/alloc.c dietlibc-0.27/lib/alloc.c --- dietlibc-0.26/lib/alloc.c 2004-04-21 05:04:20.000000000 -0700 +++ dietlibc-0.27/lib/alloc.c 2004-07-12 05:04:43.000000000 -0700 @@ -43,8 +43,13 @@ #define PAGE_ALIGN(s) (((s)+MEM_BLOCK_SIZE-1)&(unsigned long)(~(MEM_BLOCK_SIZE-1))) /* a simple mmap :) */ +#if defined(__i386__) +#define REGPARM(x) __attribute__((regparm(x))) +#else +#define REGPARM(x) +#endif -static void __attribute__((regparm(1))) *do_mmap(size_t size) { +static void REGPARM(1) *do_mmap(size_t size) { return mmap(0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, (size_t)0); } @@ -63,19 +68,19 @@ static inline int __ind_shift() { return (MEM_BLOCK_SIZE==4096)?4:5; } -static size_t __attribute__((regparm(1))) get_index(size_t _size) { +static size_t REGPARM(1) get_index(size_t _size) { register size_t idx=0; - if (_size) { +// if (_size) { /* we already check this in the callers */ register size_t size=((_size-1)&(MEM_BLOCK_SIZE-1))>>__ind_shift(); while(size) { size>>=1; ++idx; } - } +// } return idx; } /* small mem */ -static void __small_free(void*_ptr,size_t _size) __attribute__((regparm(2))); +static void __small_free(void*_ptr,size_t _size) REGPARM(2); -static void __attribute__((regparm(2))) __small_free(void*_ptr,size_t _size) { +static void REGPARM(2) __small_free(void*_ptr,size_t _size) { __alloc_t* ptr=BLOCK_START(_ptr); size_t size=_size; size_t idx=get_index(size); @@ -86,7 +91,7 @@ __small_mem[idx]=ptr; } -static void* __attribute__((regparm(1))) __small_malloc(size_t _size) { +static void* REGPARM(1) __small_malloc(size_t _size) { __alloc_t *ptr; size_t size=_size; size_t idx; diff -uNr dietlibc-0.26/lib/strtoll.c dietlibc-0.27/lib/strtoll.c --- dietlibc-0.26/lib/strtoll.c 2003-10-18 08:48:06.000000000 -0700 +++ dietlibc-0.27/lib/strtoll.c 2004-07-05 14:55:44.000000000 -0700 @@ -2,6 +2,7 @@ #include #include #include +#include long long int strtoll(const char *nptr, char **endptr, int base) { @@ -24,3 +25,6 @@ } return (neg?-v:v); } + +intmax_t strtoimax(const char *nptr, char **endptr, int base) + __attribute__((alias("strtoll"))); diff -uNr dietlibc-0.26/lib/strtoull.c dietlibc-0.27/lib/strtoull.c --- dietlibc-0.26/lib/strtoull.c 2004-01-27 06:10:29.000000000 -0800 +++ dietlibc-0.27/lib/strtoull.c 2004-07-05 14:55:44.000000000 -0700 @@ -2,6 +2,7 @@ #include #include #include +#include unsigned long long int strtoull(const char *ptr, char **endptr, int base) { @@ -57,4 +58,7 @@ /* die, BSD, die!!! */ unsigned long long int strtouq(const char *nptr, char **endptr, int base) - __attribute__((weak,alias("strtoull"))); + __attribute__((alias("strtoull"))); + +uintmax_t strtoumax(const char *nptr, char **endptr, int base) + __attribute__((alias("strtoull"))); diff -uNr dietlibc-0.26/lib/write12.c dietlibc-0.27/lib/write12.c --- dietlibc-0.26/lib/write12.c 2004-05-06 07:46:43.000000000 -0700 +++ dietlibc-0.27/lib/write12.c 2004-06-07 10:05:03.000000000 -0700 @@ -2,10 +2,16 @@ #include #include -int __attribute__ (( regparm(1) )) __write1 (const char* s) { +#if defined(__i386__) +#define REGPARM(x) __attribute__((regparm(x))) +#else +#define REGPARM(x) +#endif + +int REGPARM(1) __write1 (const char* s) { return write(1, s, strlen(s)); } -int __attribute__ (( regparm(1) )) __write2 (const char* s) { +int REGPARM(1) __write2 (const char* s) { return write(2, s, strlen(s)); } diff -uNr dietlibc-0.26/libcruft/gethostbyaddr_r.c dietlibc-0.27/libcruft/gethostbyaddr_r.c --- dietlibc-0.26/libcruft/gethostbyaddr_r.c 2002-09-18 09:51:23.000000000 -0700 +++ dietlibc-0.27/libcruft/gethostbyaddr_r.c 2004-06-03 09:05:54.000000000 -0700 @@ -63,7 +63,7 @@ tmp[3]='.'; tmp+=4; } - strcpy(tmp,".ip6.int"); + strcpy(tmp,".ip6.arpa"); } else return 1; if (buflengr_mem; + char **duh; + if (g->gr_gid==group) continue; + duh=g->gr_mem; while (*duh) { if (!strcmp(*duh,user)) { - if (__unlikely(++n>=NGROUPS_MAX)) { + if (n>=size) { ret=~ret; goto err_out; } - if (__likely(ngr_gid; + groups[n++]=g->gr_gid; + break; } duh++; } diff -uNr dietlibc-0.26/libpthread/pthread_internal.c dietlibc-0.27/libpthread/pthread_internal.c --- dietlibc-0.26/libpthread/pthread_internal.c 2004-04-21 05:11:46.000000000 -0700 +++ dietlibc-0.27/libpthread/pthread_internal.c 2004-06-07 10:05:03.000000000 -0700 @@ -49,7 +49,12 @@ static inline unsigned long hash_tid(int tid) { return (tid&(NR_BUCKETS-1)); } /* O(1) */ -static void __attribute__((regparm(2))) __thread_add_tid_(_pthread_descr*root,_pthread_descr thread) { +#if defined(__i386__) +static void __attribute__((regparm(2))) __thread_add_tid_(_pthread_descr*root,_pthread_descr thread) +#else +static void __thread_add_tid_(_pthread_descr*root,_pthread_descr thread) +#endif +{ _pthread_descr tmp=*root; thread->prev=root; thread->next=tmp; diff -uNr dietlibc-0.26/libstdio/fread.c dietlibc-0.27/libstdio/fread.c --- dietlibc-0.26/libstdio/fread.c 2003-11-14 05:48:50.000000000 -0800 +++ dietlibc-0.27/libstdio/fread.c 2004-06-04 10:37:47.000000000 -0700 @@ -17,13 +17,18 @@ stream->ungotten=0; *(char*)ptr=stream->ungetbuf; ++i; + if (j==1) return 1; } - if (!j) return 1; #ifdef WANT_FREAD_OPTIMIZATION if ( !(stream->flags&FDPIPE) && (j>stream->buflen)) { size_t tmp=j-i; int res; + size_t inbuf=stream->bs-stream->bm; + memcpy(ptr+i,stream->buf+stream->bm,inbuf); + stream->bm=stream->bs=0; + tmp-=inbuf; + i+=inbuf; if (fflush_unlocked(stream)) return 0; while ((res=__libc_read(stream->fd,ptr+i,tmp))<(int)tmp) { if (res==-1) { diff -uNr dietlibc-0.26/libugly/tzfile.c dietlibc-0.27/libugly/tzfile.c --- dietlibc-0.26/libugly/tzfile.c 2004-05-27 09:30:09.000000000 -0700 +++ dietlibc-0.27/libugly/tzfile.c 2004-06-07 09:19:57.000000000 -0700 @@ -25,7 +25,10 @@ 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_PRIVATE,fd,0))==MAP_FAILED) return; + if ((tzfile=mmap(0,len,PROT_READ,MAP_PRIVATE,fd,0))==MAP_FAILED) { + close(fd); + return; + } close(fd); if (len<44 || ntohl(*(int*)tzfile) != 0x545a6966) { munmap(tzfile,len); diff -uNr dietlibc-0.26/t1.c dietlibc-0.27/t1.c --- dietlibc-0.26/t1.c 2003-12-05 10:47:15.000000000 -0800 +++ dietlibc-0.27/t1.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,5 +0,0 @@ -#include - -main() { - printf("%2.5g\n",-0.0); -} diff -uNr dietlibc-0.26/t2.c dietlibc-0.27/t2.c --- dietlibc-0.26/t2.c 2004-05-10 09:38:50.000000000 -0700 +++ dietlibc-0.27/t2.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,7 +0,0 @@ -#include -#include - -main() { - char* c=alloca(1234); - strcpy(c,"fnord"); -} diff -uNr dietlibc-0.26/test/execlp.c dietlibc-0.27/test/execlp.c --- dietlibc-0.26/test/execlp.c 2004-03-06 14:30:51.000000000 -0800 +++ dietlibc-0.27/test/execlp.c 1969-12-31 16:00:00.000000000 -0800 @@ -1,5 +0,0 @@ -#include - -main() { - execlp("gcc","-v",0); -}