Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.85k stars 524 forks source link

Possible bug using stat w/large files Digital UNIX Perl 5.005_03 #365

Closed p5pRT closed 20 years ago

p5pRT commented 24 years ago

Migrated from rt.perl.org#1199 (status was 'resolved')

Searchable as RT1199$

p5pRT commented 24 years ago

From phil@finchcomputer.com

I did as much homework as I could\, but I believe this is a bug. I deal with some *very* large files and for some reason Perl stat doesn't seem to handle large files properly on digital unix. Stat appears to return an incorrect value for what appears to be any file over 2GB in size.

Details\, including output from perlbug below unfortunately I didn't find a fix for it yet...

Phil -- Phillip E. Lobbes http​://www.finchcomputer.com/ (818)550-9060 phil@​finchcomputer.com

Details...

* The system (Digital UNIX 4\, Perl 5.005_03)​:   bambam% uname -a   OSF1 bambam V4.0 1091 alpha

* The file (at least a typical one)​:   bambam% ls -l SUBSCR_COMMENTS_DLY1.UNL_SUBR01_19990803\;1   -rw-rw-r-- 1 jyi stmslrpt 25084568025 Aug 4 15​:02   SUBSCR_COMMENTS_DLY1.UNL_SUBR01_19990803;1

* The C program (works!)​:   #include \<sys/types.h>   #include \<sys/stat.h>   main() {   struct stat stb;   stat("./SUBSCR_COMMENTS_DLY1.UNL_SUBR01_19990803;1"\, &stb);   printf("size(%lu)\n"\, stb.st_size);   }   bambam% ./a.out   size(25084568025)

* The Perl program(FAILS\, wrong file size!)​:   #!/opt/dtv/bin/perl -w   @​st=stat("SUBSCR_COMMENTS_DLY1.UNL_SUBR01_19990803;1");   print "$st[7]\n";   bambam% ./badstat.pl   -685235751

* The Perl program through the debugger​:   bambam% /opt/dtv/bin/perl -d ~/badstat.pl  
  Loading DB routines from perl5db.pl version 1.0402   Emacs support available.  
  Enter h or `h h' for help.  
  main​::(/home/lobbesp/badstat.pl​:2)​:   2​: @​st=stat("SUBSCR_COMMENTS_DLY1.UNL_SUBR01_19990803;1");   DB\<1> n   main​::(/home/lobbesp/badstat.pl​:3)​:   3​: print "$st[7]\n";   DB\<1> x @​st   0 '-363102389'   1 2057   2 33204   3 1   4 1004   5 303   6 0   7 '-685235751'   8 933879644   9 933804124   10 933807395   11 8192   12 48993312   DB\<2> printf("%li"\, $st[7])   -685235751   DB\<3> l   3==> print "$st[7]\n";   DB\<3> c   -685235751   Debugged program terminated. Use q to quit or R to restart\,   use O inhibit_exit to avoid stopping after program termination\,   h q\, h R or h O to get additional info.   DB\<3>

* bambam% /opt/dtv/perl/5.005_03/bin/perlbug -d -v Site configuration information for perl 5.00503​:

Configured by lobbesp at Mon Jul 19 10​:56​:06 PDT 1999.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration​:   Platform​:   osname=dec_osf\, osvers=4.0\, archname=alpha-dec_osf   uname='osf1 bambam v4.0 1091 alpha '   hint=recommended\, useposix=true\, d_sigaction=define   usethreads=undef useperlio=undef d_sfio=undef   Compiler​:   cc='cc'\, optimize='-O4'\, gccversion=   cppflags='-std -ieee -D_INTRINSICS -I/usr/local/include -I/opt/local/include -DLANGUAGE_C'   ccflags ='-std -fprm d -ieee -D_INTRINSICS -I/usr/local/include -I/opt/local/include -DLANGUAGE_C'   stdchar='unsigned char'\, d_stdstdio=define\, usevfork=false   intsize=4\, longsize=8\, ptrsize=8\, doublesize=8   d_longlong=define\, longlongsize=8\, d_longdbl=define\, longdblsize=8   alignbytes=8\, usemymalloc=y\, prototype=define   Linker and Libraries​:   ld='ld'\, ldflags =' -L/usr/local/lib -L/opt/local/lib'   libpth=/usr/local/lib /opt/local/lib /usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib   libs=-ldbm -ldb -lm   libc=/usr/shlib/libc.so\, so=so\, useshrplib=true\, libperl=libperl.so   Dynamic Linking​:   dlsrc=dl_dlopen.xs\, dlext=so\, d_dlsymun=undef\, ccdlflags=' -Wl\,-rpath\,/opt/dtv/perl/5.005_03/lib/5.00503/alpha-dec_osf/CORE'   cccdlflags=' '\, lddlflags='-shared -expect_unresolved "*" -O4 -msym -s -L/usr/local/lib -L/opt/local/lib'

Locally applied patches​:  


@​INC for perl 5.00503​:   /opt/dtv/perl/5.005_03/lib/5.00503/alpha-dec_osf   /opt/dtv/perl/5.005_03/lib/5.00503   /opt/dtv/perl/5.005_03/lib/site_perl/5.005/alpha-dec_osf   /opt/dtv/perl/5.005_03/lib/site_perl/5.005   .


Environment for perl 5.00503​:   HOME=/home/lobbesp   LANG (unset)   LANGUAGE (unset)   LD_LIBRARY_PATH=/oracle/app/oracle/product/8.0.5/lib   LOGDIR (unset)   PATH=/home/lobbesp/bin​:/home/lobbesp/X/bin​:/home/lobbesp/scripts​:/usr/bin​:.​:/oracle/app/oracle/product/8.0.5/bin​:/oracle/app/oracle/product/8.0.5/obackup/bin​:/sbin​:/usr/sbin​:/usr/bin/X11​:/usr/ccs/bin​:/home/lobbesp/site/bin​:/home/lobbesp/scripts​:/usr/local/bin​:/opt/dtv/bin​:/usr/dt​:.   PERL_BADLANG (unset)   SHELL=/usr/local/bin/tcsh

Complete configuration data for perl 5.00503​:

Author='' CONFIG='true' Date='$Date' Header='' Id='$Id' Locker='' Log='$Log' Mcc='Mcc' PATCHLEVEL='5' RCSfile='$RCSfile' Revision='$Revision' SUBVERSION='3' Source='' State='' _a='.a' _exe='' _o='.o' afs='false' alignbytes='8' ansi2knr='' aphostname='' apiversion='5.005' ar='ar' archlib='/opt/dtv/perl/5.005_03/lib/5.00503/alpha-dec_osf' archlibexp='/opt/dtv/perl/5.005_03/lib/5.00503/alpha-dec_osf' archname='alpha-dec_osf' archobjs='' awk='awk' baserev='5.0' bash='' bin='/opt/dtv/perl/5.005_03/bin' binexp='/opt/dtv/perl/5.005_03/bin' bison='' byacc='byacc' byteorder='12345678' c='\c' castflags='0' cat='cat' cc='cc' cccdlflags=' ' ccdlflags=' -Wl\,-rpath\,/opt/dtv/perl/5.005_03/lib/5.00503/alpha-dec_osf/CORE' ccflags='-std -fprm d -ieee -D_INTRINSICS -I/usr/local/include -I/opt/local/include -DLANGUAGE_C' ccsymbols='LANGUAGE_C=1 SYSTYPE_BSD=1 _LONGLONG=1 __ALPHA=1 __Alpha_AXP=1 __DATE__="Jul __DECC=1 __DECC_MODE_COMMON=1 __DECC_VER=50890011 __IEEE_FLOAT=1 __INITIAL_POINTER_SIZE=0 __LANGUAGE_C__=1 __PRAGMA_ENVIRONMENT=1 __TIME__="10​:57​:09" __X_FLOAT=0' cf_by='lobbesp' cf_email='lobbesp@​bambam.directv.com' cf_time='Mon Jul 19 10​:56​:06 PDT 1999' chgrp='' chmod='' chown='' clocktype='clock_t' comm='comm' compress='' config_arg0='Configure' config_arg1='-ds' config_arg2='-e' config_arg3='-Dprefix=/opt/dtv/perl/5.005_03' config_argc='3' config_args='-ds -e -Dprefix=/opt/dtv/perl/5.005_03' contains='grep' cp='cp' cpio='' cpp='cpp' cpp_stuff='42' cppccsymbols='_SYSTYPE_BSD=1 __alpha=1 __osf__=1 __unix__=1 unix=1' cppflags='-std -ieee -D_INTRINSICS -I/usr/local/include -I/opt/local/include -DLANGUAGE_C' cpplast='' cppminus='' cpprun='/usr/bin/cpp' cppstdin='cppstdin' cppsymbols='' cryptlib='' csh='csh' d_Gconvert='gcvt((x)\,(n)\,(b))' d_access='define' d_alarm='define' d_archlib='define' d_attribut='' d_bcmp='define' d_bcopy='define' d_bsd='' d_bsdgetpgrp='' d_bsdsetpgrp='define' d_bzero='define' d_casti32='' d_castneg='define' d_charvspr='' d_chown='define' d_chroot='define' d_chsize='' d_closedir='define' d_const='define' d_crypt='define' d_csh='define' d_cuserid='define' d_dbl_dig='define' d_difftime='define' d_dirnamlen='define' d_dlerror='define' d_dlopen='define' d_dlsymun='' d_dosuid='' d_dup2='define' d_endgrent='define' d_endhent='define' d_endnent='define' d_endpent='define' d_endpwent='define' d_endsent='define' d_eofnblk='define' d_eunice='' d_fchmod='define' d_fchown='define' d_fcntl='define' d_fd_macros='define' d_fd_set='define' d_fds_bits='define' d_fgetpos='define' d_flexfnam='define' d_flock='define' d_fork='define' d_fpathconf='define' d_fsetpos='define' d_fstatfs='define' d_fstatvfs='define' d_ftime='' d_getgrent='define' d_getgrps='define' d_gethbyaddr='define' d_gethbyname='define' d_gethent='define' d_gethname='' d_gethostprotos='define' d_getlogin='define' d_getmntent='' d_getnbyaddr='define' d_getnbyname='define' d_getnent='define' d_getnetprotos='define' d_getpbyname='define' d_getpbynumber='define' d_getpent='define' d_getpgid='define' d_getpgrp='define' d_getpgrp2='' d_getppid='define' d_getprior='define' d_getprotoprotos='define' d_getpwent='define' d_getsbyname='define' d_getsbyport='define' d_getsent='define' d_getservprotos='define' d_gettimeod='define' d_gnulibc='' d_grpasswd='define' d_hasmntopt='' d_htonl='define' d_index='' d_inetaton='define' d_isascii='define' d_killpg='define' d_lchown='define' d_link='define' d_locconv='define' d_lockf='define' d_longdbl='define' d_longlong='define' d_lstat='define' d_mblen='define' d_mbstowcs='define' d_mbtowc='define' d_memcmp='define' d_memcpy='define' d_memmove='define' d_memset='define' d_mkdir='define' d_mkfifo='define' d_mktime='define' d_msg='define' d_msgctl='define' d_msgget='define' d_msgrcv='define' d_msgsnd='define' d_mymalloc='define' d_nice='define' d_oldpthreads='' d_oldsock='' d_open3='define' d_pathconf='define' d_pause='define' d_phostname='' d_pipe='define' d_poll='define' d_portable='define' d_pthread_yield='' d_pthreads_created_joinable='' d_pwage='' d_pwchange='' d_pwclass='' d_pwcomment='define' d_pwexpire='' d_pwgecos='define' d_pwpasswd='define' d_pwquota='define' d_readdir='define' d_readlink='define' d_rename='define' d_rewinddir='define' d_rmdir='define' d_safebcpy='define' d_safemcpy='define' d_sanemcmp='define' d_sched_yield='define' d_seekdir='define' d_select='define' d_sem='define' d_semctl='define' d_semctl_semid_ds='define' d_semctl_semun='define' d_semget='define' d_semop='define' d_setegid='define' d_seteuid='define' d_setgrent='define' d_setgrps='define' d_sethent='define' d_setlinebuf='define' d_setlocale='define' d_setnent='define' d_setpent='define' d_setpgid='define' d_setpgrp='define' d_setpgrp2='' d_setprior='define' d_setpwent='define' d_setregid='define' d_setresgid='' d_setresuid='' d_setreuid='define' d_setrgid='define' d_setruid='define' d_setsent='define' d_setsid='define' d_setvbuf='define' d_sfio='' d_shm='define' d_shmat='define' d_shmatprototype='define' d_shmctl='define' d_shmdt='define' d_shmget='define' d_sigaction='define' d_sigsetjmp='define' d_socket='define' d_sockpair='define' d_statblks='define' d_statfsflags='define' d_stdio_cnt_lval='define' d_stdio_ptr_lval='define' d_stdiobase='define' d_stdstdio='define' d_strchr='define' d_strcoll='define' d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' d_strtod='define' d_strtol='define' d_strtoul='define' d_strxfrm='define' d_suidsafe='' d_symlink='define' d_syscall='define' d_sysconf='define' d_sysernlst='' d_syserrlst='define' d_system='define' d_tcgetpgrp='define' d_tcsetpgrp='define' d_telldir='define' d_time='define' d_times='define' d_truncate='define' d_tzname='define' d_umask='define' d_uname='define' d_union_semun='' d_vfork='' d_void_closedir='' d_voidsig='define' d_voidtty='' d_volatile='define' d_vprintf='define' d_wait4='define' d_waitpid='define' d_wcstombs='define' d_wctomb='define' d_xenix='' date='date' db_hashtype='u_int32_t' db_prefixtype='size_t' defvoidused='15' direntrytype='struct dirent' dlext='so' dlsrc='dl_dlopen.xs' doublesize='8' dynamic_ext='B DB_File Data/Dumper Fcntl IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket attrs re' eagain='EAGAIN' ebcdic='' echo='echo' egrep='egrep' emacs='' eunicefix='​:' exe_ext='' expr='expr' extensions='B DB_File Data/Dumper Fcntl IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket attrs re Errno' find='find' firstmakefile='makefile' flex='' fpostype='fpos_t' freetype='void' full_ar='/usr/bin/ar' full_csh='/usr/bin/csh' full_sed='/usr/bin/sed' gccversion='' gidtype='gid_t' glibpth='/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib' grep='grep' groupcat='cat /etc/group' groupstype='gid_t' gzip='gzip' h_fcntl='false' h_sysfile='true' hint='recommended' hostcat='ypcat hosts' huge='' i_arpainet='define' i_bsdioctl='' i_db='define' i_dbm='define' i_dirent='define' i_dld='' i_dlfcn='define' i_fcntl='' i_float='define' i_gdbm='' i_grp='define' i_limits='define' i_locale='define' i_machcthreads='' i_malloc='define' i_math='define' i_memory='' i_mntent='' i_ndbm='define' i_netdb='define' i_neterrno='' i_niin='define' i_pthread='define' i_pwd='define' i_rpcsvcdbm='' i_sfio='' i_sgtty='' i_stdarg='define' i_stddef='define' i_stdlib='define' i_string='define' i_sysdir='define' i_sysfile='define' i_sysfilio='' i_sysin='' i_sysioctl='define' i_sysmount='define' i_sysndir='' i_sysparam='define' i_sysresrc='define' i_sysselct='define' i_syssockio='' i_sysstat='define' i_sysstatvfs='define' i_systime='define' i_systimek='' i_systimes='define' i_systypes='define' i_sysun='define' i_syswait='define' i_termio='' i_termios='define' i_time='' i_unistd='define' i_utime='define' i_values='define' i_varargs='' i_varhdr='stdarg.h' i_vfork='' ignore_versioned_solibs='' incpath='' inews='' installarchlib='/opt/dtv/perl/5.005_03/lib/5.00503/alpha-dec_osf' installbin='/opt/dtv/perl/5.005_03/bin' installman1dir='/opt/dtv/perl/5.005_03/man/man1' installman3dir='/opt/dtv/perl/5.005_03/man/man3' installprivlib='/opt/dtv/perl/5.005_03/lib/5.00503' installscript='/opt/dtv/perl/5.005_03/bin' installsitearch='/opt/dtv/perl/5.005_03/lib/site_perl/5.005/alpha-dec_osf' installsitelib='/opt/dtv/perl/5.005_03/lib/site_perl/5.005' installusrbinperl='define' intsize='4' known_extensions='B DB_File Data/Dumper Fcntl GDBM_File IO IPC/SysV NDBM_File ODBM_File Opcode POSIX SDBM_File Socket Thread attrs re' ksh='' large='' ld='ld' lddlflags='-shared -expect_unresolved "*" -O4 -msym -s -L/usr/local/lib -L/opt/local/lib' ldflags=' -L/usr/local/lib -L/opt/local/lib' less='less' lib_ext='.a' libc='/usr/shlib/libc.so' libperl='libperl.so' libpth='/usr/local/lib /opt/local/lib /usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib' libs='-ldbm -ldb -lm' libswanted='sfio socket inet nsl nm gdbm dbm db malloc dld ld sun m cposix posix ndir dir crypt ucb BSD x' line='line' lint='' lkflags='' ln='ln' lns='/usr/bin/ln -s' locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' longdblsize='8' longlongsize='8' longsize='8' lp='' lpr='' ls='ls' lseektype='off_t' mail='' mailx='' make='make' make_set_make='#' mallocobj='malloc.o' mallocsrc='malloc.c' malloctype='void *' man1dir='/opt/dtv/perl/5.005_03/man/man1' man1direxp='/opt/dtv/perl/5.005_03/man/man1' man1ext='1' man3dir='/opt/dtv/perl/5.005_03/man/man3' man3direxp='/opt/dtv/perl/5.005_03/man/man3' man3ext='3' medium='' mips='' mips_type='' mkdir='mkdir' models='none' modetype='mode_t' more='more' mv='' myarchname='alpha-dec_osf' mydomain='.directv.com' myhostname='bambam' myuname='osf1 bambam v4.0 1091 alpha ' n='' netdb_hlen_type='int' netdb_host_type='const char *' netdb_name_type='const char *' netdb_net_type='int' nm='nm' nm_opt='-p' nm_so_opt='' nonxs_ext='Errno' nroff='nroff' o_nonblock='O_NONBLOCK' obj_ext='.o' optimize='-O4' orderlib='false' osname='dec_osf' osvers='4.0' package='perl5' pager='/usr/bin/more' passcat='cat /etc/passwd' patchlevel='5' path_sep='​:' perl='perl' perladmin='lobbesp@​bambam.directv.com' perlpath='/opt/dtv/perl/5.005_03/bin/perl' pg='pg' phostname='hostname' pidtype='pid_t' plibpth='' pmake='' pr='' prefix='/opt/dtv/perl/5.005_03' prefixexp='/opt/dtv/perl/5.005_03' privlib='/opt/dtv/perl/5.005_03/lib/5.00503' privlibexp='/opt/dtv/perl/5.005_03/lib/5.00503' prototype='define' ptrsize='8' randbits='15' ranlib='​:' rd_nodata='-1' rm='rm' rmail='' runnm='true' scriptdir='/opt/dtv/perl/5.005_03/bin' scriptdirexp='/opt/dtv/perl/5.005_03/bin' sed='sed' selectminbits='32' selecttype='fd_set *' sendmail='sendmail' sh='/bin/sh' shar='' sharpbang='#!' shmattype='void *' shortsize='2' shrpenv='' shsharp='true' sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM IOINT STOP TSTP CONT CHLD TTIN TTOU AIO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2 RESV RTMIN NUM34 NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 MAX IOT LOST URG CLD IO POLL PTY PWR RTMAX ' sig_name_init='"ZERO"\, "HUP"\, "INT"\, "QUIT"\, "ILL"\, "TRAP"\, "ABRT"\, "EMT"\, "FPE"\, "KILL"\, "BUS"\, "SEGV"\, "SYS"\, "PIPE"\, "ALRM"\, "TERM"\, "IOINT"\, "STOP"\, "TSTP"\, "CONT"\, "CHLD"\, "TTIN"\, "TTOU"\, "AIO"\, "XCPU"\, "XFSZ"\, "VTALRM"\, "PROF"\, "WINCH"\, "INFO"\, "USR1"\, "USR2"\, "RESV"\, "RTMIN"\, "NUM34"\, "NUM35"\, "NUM36"\, "NUM37"\, "NUM38"\, "NUM39"\, "NUM40"\, "NUM41"\, "NUM42"\, "NUM43"\, "NUM44"\, "NUM45"\, "NUM46"\, "NUM47"\, "MAX"\, "IOT"\, "LOST"\, "URG"\, "CLD"\, "IO"\, "POLL"\, "PTY"\, "PWR"\, "RTMAX"\, 0' sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 6 6 16 20 23 23 23 29 48 ' sig_num_init='0\, 1\, 2\, 3\, 4\, 5\, 6\, 7\, 8\, 9\, 10\, 11\, 12\, 13\, 14\, 15\, 16\, 17\, 18\, 19\, 20\, 21\, 22\, 23\, 24\, 25\, 26\, 27\, 28\, 29\, 30\, 31\, 32\, 33\, 34\, 35\, 36\, 37\, 38\, 39\, 40\, 41\, 42\, 43\, 44\, 45\, 46\, 47\, 48\, 6\, 6\, 16\, 20\, 23\, 23\, 23\, 29\, 48\, 0' signal_t='void' sitearch='/opt/dtv/perl/5.005_03/lib/site_perl/5.005/alpha-dec_osf' sitearchexp='/opt/dtv/perl/5.005_03/lib/site_perl/5.005/alpha-dec_osf' sitelib='/opt/dtv/perl/5.005_03/lib/site_perl/5.005' sitelibexp='/opt/dtv/perl/5.005_03/lib/site_perl/5.005' sizetype='size_t' sleep='' smail='' small='' so='so' sockethdr='' socketlib='' sort='sort' spackage='Perl5' spitshell='cat' split='' src='.' ssizetype='ssize_t' startperl='#!/opt/dtv/perl/5.005_03/bin/perl' startsh='#!/bin/sh' static_ext=' ' stdchar='unsigned char' stdio_base='((fp)->_base)' stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)' stdio_cnt='((fp)->_cnt)' stdio_filbuf='' stdio_ptr='((fp)->_ptr)' strings='/usr/include/string.h' submit='' subversion='3' sysman='/usr/man/man1' tail='' tar='' tbl='' tee='tee' test='test' timeincl='/usr/include/sys/time.h ' timetype='time_t' touch='touch' tr='tr' trnl='\n' troff='' uidtype='uid_t' uname='uname' uniq='uniq' usedl='define' usemymalloc='y' usenm='true' useopcode='true' useperlio='' useposix='true' usesfio='false' useshrplib='true' usethreads='' usevfork='false' usrinc='/usr/include' uuname='' version='5.00503' vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' zcat='' zip='zip'

p5pRT commented 24 years ago

From @jhi

Thanks for your report. Yes\, unfortunately there are still many bugs in Perl related to handling files larger than 2 gigabytes. This is one of them. We will try to enhance these matters for the upcoming Perl 5.6 release (no schedule commitments\, but hopefully this year).

-- $jhi++; # http​://www.iki.fi/jhi/   # There is this special biologist word we use for 'stable'.   # It is 'dead'. -- Jack Cohen