diff --exclude='*~' -ruN orig/glibc-2.5/debian/patches/any/local-enospck.diff glibc-2.5/debian/patches/any/local-enospck.diff
--- orig/glibc-2.5/debian/patches/any/local-enospck.diff	1970-01-01 01:00:00.000000000 +0100
+++ glibc-2.5/debian/patches/any/local-enospck.diff	2007-06-15 17:46:56.000000000 +0100
@@ -0,0 +1,371 @@
+--- /dev/null	2006-10-18 16:35:35.000000000 +0100
++++ ./glibc-2.5/sysdeps/unix/enospck.c	2007-06-15 17:22:31.000000000 +0100
+@@ -0,0 +1,275 @@
++
++#define __libc_open    __enospck_aside___libc_open
++#define __open         __enospck_aside___open
++#define open           __enospck_aside_open
++#define __libc_open64  __enospck_aside___libc_open64
++#define __open64       __enospck_aside___open64
++#define open64         __enospck_aside_open64
++#define __libc_write   __enospck_aside___libc_write
++#define __write        __enospck_aside___write
++#define write          __enospck_aside_write
++
++#include <stdlib.h>
++#include <unistd.h>
++#include <string.h>
++#include <limits.h>
++#include <stdio.h>
++#include <sys/uio.h>
++#include <stdarg.h>
++#include <errno.h>
++#include <fcntl.h>
++
++#undef __libc_open
++#undef __open
++#undef open
++#undef __libc_open64
++#undef __open64
++#undef open64
++#undef __libc_write
++#undef __write
++#undef write
++
++#define SOMECALL(syscallname, rtype, argprotos, argnames, xinfos)	\
++  extern rtype __enospck_real_##syscallname(argprotos);			\
++  rtype __enospck_wrap_##syscallname(argprotos) {			\
++    rtype r= __enospck_real_##syscallname(argnames);			\
++    if (r>=0) return r;							\
++    __enospck_check(#syscallname xinfos, (void(*)(void))0);		\
++    return r;								\
++  }
++
++#define COMMA ,
++#define XI(kind,val) , __enospck_format_##kind, (const void*)&(val)
++
++typedef void xifmter(char **bp, const void *val);
++void __enospck_check(const char *syscallname, ...);
++
++static void p_string(char **bp, const char *ip) {
++  int c;
++  while ((c= *ip++)) *(*bp)++= c;
++}
++static void p_integer(char **obp, unsigned long ul, int base) {
++  char buf[sizeof(ul) * 2 + 1], *bp;
++  const char hex[16]= "0123456789abcdef";
++
++  bp= buf;
++  while (ul) {
++    if (base==16) {
++      *bp++= hex[ul & 0x0fUL];
++      ul >>= 4;
++    } else {
++      *bp++= hex[ul % base];
++      ul /= base;
++    }
++  }
++  while (bp > buf) {
++    *(*obp)++= *--bp;
++  }
++}
++
++static void __enospck_format_str(char **bp, const void *val) {
++  const char *str= val;
++  int i= 400;
++  int c;
++  p_string(bp,"`");
++  while ((c= *str++)) {
++    if (!--i) { bp-=2; p_string(bp, "'.."); break; }
++    *(*bp)++= c;
++  }
++  p_string(bp,"'");
++}
++
++static void __enospck_format_fd(char **bp, const void *val) {
++  int fd= *(const int*)val;
++  struct stat stab;
++  int r;
++  char psb[100], *psb_bp;
++  char readlink_buf[PATH_MAX];
++
++  p_string(bp,"fd");
++  p_integer(bp,fd,10);
++  r= __fstat(fd, &stab);
++  if (r) {
++    p_string(bp,"!fstat=");
++    p_integer(bp,errno,10);
++    p_string(bp,"!");
++  } else {
++    p_string(bp,"=[");
++    p_integer(bp,stab.st_dev,16);
++    p_string(bp,":");
++    p_integer(bp,stab.st_ino,10);
++    p_string(bp,"]");
++  }
++  psb_bp= psb;
++  p_string(&psb_bp, "/proc/self/fd/");
++  p_integer(&psb_bp,fd,10);
++  *psb_bp++= 0;
++
++  r= __readlink(psb, readlink_buf, sizeof(readlink_buf));
++  if (r<0) {
++    p_string(bp,"!readlink=");
++    p_integer(bp,errno,10);
++    p_string(bp,"!");
++  } else {
++    p_string(bp,"=`");
++    if (r == sizeof(readlink_buf)) {
++      readlink_buf[sizeof(readlink_buf)-2]= 0;
++      p_string(bp,readlink_buf);
++      p_string(bp,"'..");
++    } else {
++      readlink_buf[r]= 0;
++      p_string(bp,readlink_buf);
++      p_string(bp,"'");
++    }
++  }
++}
++
++#define SA(t,x)					\
++ strong_alias(t, x)				\
++ strong_alias(t, __GI_##x)
++
++#define WA(t,x)					\
++ weak_alias(t, x)				\
++ weak_alias(t, __GI_##x)
++
++SOMECALL(mkdir, int,
++	 const char *path COMMA mode_t mode,
++	 path COMMA mode,
++	 XI(str,*path))
++SA(__enospck_wrap_mkdir, __mkdir)
++WA(__enospck_wrap_mkdir, mkdir)
++
++SOMECALL(link, int,
++	 const char *oldpath COMMA const char *newpath,
++	 oldpath COMMA newpath,
++	 XI(str,*newpath))
++SA(__enospck_wrap_link, __link)
++WA(__enospck_wrap_link, link)
++
++#define SOMEOPEN(callname)						\
++SOMECALL(callname, int,							\
++	 const char *path COMMA int flags COMMA mode_t mode,		\
++	 path COMMA flags COMMA mode,					\
++	 XI(str,*path))							\
++int __enospck_wrapv_##callname(const char *path, int flags, ...) {	\
++  mode_t mode;								\
++  va_list al;								\
++  if (flags & O_CREAT) {						\
++    va_start(al,flags);							\
++    mode= va_arg(al,mode_t);						\
++    va_end(al);								\
++  } else {								\
++    mode= 0;								\
++  }									\
++  return __enospck_wrap_##callname(path,flags,mode);			\
++}									\
++
++SOMEOPEN(open)
++SA(__enospck_wrapv_open, __libc_open)
++WA(__enospck_wrapv_open, __open)
++WA(__enospck_wrapv_open, open)
++
++SOMEOPEN(open64)
++WA(__enospck_wrapv_open64, __open64)
++libc_hidden_weak (__open64)
++WA(__enospck_wrapv_open64, open64)
++
++SOMECALL(symlink, int,
++	 const char *oldpath COMMA const char *newpath,
++	 oldpath COMMA newpath,
++	 XI(str,*oldpath) XI(str,*newpath))
++SA(__enospck_wrap_symlink, __symlink)
++WA(__enospck_wrap_symlink, symlink)
++
++SOMECALL(write, ssize_t,
++	 int fd COMMA const void *buf COMMA size_t count,
++	 fd COMMA buf COMMA count,
++	 XI(fd,fd))
++SA(__enospck_wrap_write, __libc_write)
++WA(__enospck_wrap_write, __write)
++WA(__enospck_wrap_write,write)
++
++SOMECALL(writev, ssize_t,
++	 int fd COMMA const struct iovec *vector COMMA int count,
++	 fd COMMA vector COMMA count,
++	 XI(fd,fd))
++SA(__enospck_wrap_writev, __writev)
++WA(__enospck_wrap_writev, writev)
++
++static void p_procselfstat(char **bp) {
++  int fd, r;
++  char selfstat[200], *p1, *p2;
++
++  fd= __enospck_real_open("/proc/self/stat", O_RDONLY, 0);
++  if (fd<0) goto err;
++  r= read(fd, selfstat, sizeof(selfstat)-1);
++  if (r<0) goto err;
++
++  close(fd);  fd= -1;
++
++  for (p1=selfstat; p1 < selfstat+r; p1++)
++    if (*p1 == '(') goto p1_found;
++  goto fmt;
++p1_found:
++
++  for (p2=selfstat+r; p2 > selfstat; )
++    if (*--p2 == ')') goto p2_found;
++  goto fmt;
++p2_found:
++
++  *++p2= 0;
++  p_string(bp,p1);
++  return;
++
++fmt:
++  p_string(bp,"!selfstatfmt");
++  goto clean;
++
++err:
++  p_string(bp,"!selfstat=");
++  p_integer(bp,errno,10);
++
++clean:
++  p_string(bp,"!");
++  if (fd>=0) close(fd);
++}
++
++void __enospck_check(const char *syscallname, ...) {
++  int fd;
++    
++  if (errno!=ENOSPC) return;
++  
++  fd= __enospck_real_open("/etc/enospck.log", O_WRONLY|O_APPEND, 0);
++  if (fd!=-1) {
++    char buf[2048], *bp;
++    pid_t pid;
++    xifmter *fmt;
++    const void *xv;
++    int l;
++    va_list al;
++  
++    va_start(al, syscallname);
++    bp= buf;
++    pid= getpid();
++    p_string(&bp,"[");
++    p_integer(&bp,pid,10);
++    p_procselfstat(&bp);
++    p_string(&bp,"] ");
++    p_string(&bp,syscallname);
++    for (;;) {
++      fmt= va_arg(al, xifmter*);
++      if (!fmt) break;
++
++      xv= va_arg(al, const void*);
++      p_string(&bp," ");
++      fmt(&bp, xv);
++    }
++    va_end(al);
++    p_string(&bp,"\n");
++    l= bp - buf;
++
++    __enospck_real_write(fd, buf, l);
++    close(fd);
++  }
++  errno= ENOSPC;
++}
+--- ./glibc-2.5/sysdeps/unix/syscalls.list~	2003-07-27 19:24:21.000000000 +0100
++++ ./glibc-2.5/sysdeps/unix/syscalls.list	2007-06-13 15:55:37.000000000 +0100
+@@ -23,10 +23,10 @@
+ getuid		-	getuid		Ei:	__getuid	getuid
+ ioctl		-	ioctl		i:iiI	__ioctl		ioctl
+ kill		-	kill		i:ii	__kill		kill
+-link		-	link		i:ss	__link		link
++link		-	link		i:ss	__enospck_real_link
+ lseek		-	lseek		i:iii	__libc_lseek	__lseek lseek
+-mkdir		-	mkdir		i:si	__mkdir		mkdir
+-open		-	open		Ci:siv	__libc_open __open open
++mkdir		-	mkdir		i:si	__enospck_real_mkdir
++open		-	open		Ci:siv	__enospck_real_open
+ profil		-	profil		i:piii	__profil	profil
+ ptrace		-	ptrace		i:iiii	ptrace
+ read		-	read		Ci:ibn	__libc_read	__read read
+@@ -52,7 +52,7 @@
+ statfs		-	statfs		i:sp	__statfs	statfs
+ swapoff		-	swapoff		i:s	swapoff
+ swapon		-	swapon		i:s	swapon
+-symlink		-	symlink		i:ss	__symlink	symlink
++symlink		-	symlink		i:ss	__enospck_real_symlink
+ sync		-	sync		i:	sync
+ sys_fstat	fxstat	fstat		i:ip	__syscall_fstat
+ sys_mknod	xmknod	mknod		i:sii	__syscall_mknod
+@@ -61,5 +61,5 @@
+ uname		-	uname		i:p	__uname		uname
+ unlink		-	unlink		i:s	__unlink	unlink
+ utimes		-	utimes		i:sp	__utimes	utimes
+-write		-	write		Ci:ibn	__libc_write	__write write
+-writev		-	writev		Ci:ipi	__writev	writev
++write		-	write		Ci:ibn	__enospck_real_write
++writev		-	writev		Ci:ipi	__enospck_real_writev
+--- ./glibc-2.5/sysdeps/unix/sysv/linux/writev.c~	2003-09-03 04:21:26.000000000 +0100
++++ ./glibc-2.5/sysdeps/unix/sysv/linux/writev.c	2007-06-13 14:36:58.000000000 +0100
+@@ -52,7 +52,7 @@
+ }
+ 
+ ssize_t
+-__libc_writev (fd, vector, count)
++__enospck_real_writev (fd, vector, count)
+      int fd;
+      const struct iovec *vector;
+      int count;
+@@ -68,8 +68,6 @@
+ 
+   return result;
+ }
+-strong_alias (__libc_writev, __writev)
+-weak_alias (__libc_writev, writev)
+ 
+ #define __libc_writev static internal_function __atomic_writev_replacement
+ #include <sysdeps/posix/writev.c>
+--- ./glibc-2.5/sysdeps/unix/Makefile~	2006-02-28 07:05:40.000000000 +0000
++++ ./glibc-2.5/sysdeps/unix/Makefile	2007-06-13 15:49:01.000000000 +0100
+@@ -264,6 +264,7 @@
+ 
+ ifeq (misc,$(subdir))
+ sysdep_routines += $(unix-extra-syscalls)
++sysdep_routines += enospck
+ 
+ ifdef unix-stub-syscalls
+ # The system call entry points in this list are supposed to be additional
+--- ./glibc-2.5/sysdeps/unix/sysv/linux/open64.c~	2002-12-15 10:22:52.000000000 +0000
++++ ./glibc-2.5/sysdeps/unix/sysv/linux/open64.c	2007-06-14 19:11:19.000000000 +0100
+@@ -25,7 +25,7 @@
+ /* Open FILE with access OFLAG.  If OFLAG includes O_CREAT,
+    a third argument is the file protection.  */
+ int
+-__libc_open64 (const char *file, int oflag, ...)
++__enospck_real_open64 (const char *file, int oflag, ...)
+ {
+   int mode = 0;
+ 
+@@ -48,6 +48,3 @@
+ 
+   return result;
+ }
+-weak_alias (__libc_open64, BP_SYM (__open64))
+-libc_hidden_weak (BP_SYM (__open64))
+-weak_alias (__libc_open64, BP_SYM (open64))
+--- ./glibc-2.5/misc/Versions~	2005-11-11 18:58:19.000000000 +0000
++++ ./glibc-2.5/misc/Versions	2007-06-14 20:24:38.000000000 +0100
+@@ -134,4 +134,8 @@
+     futimesat;
+     __syslog_chk; __vsyslog_chk;
+   }
++  GLIBC_PRIVATE {
++    # for the benefit of enospck.c
++    __libc_open; __libc_write;
++  }
+ }
+
diff --exclude='*~' -ruN orig/glibc-2.5/debian/patches/series glibc-2.5/debian/patches/series
--- orig/glibc-2.5/debian/patches/series	2007-06-27 13:38:39.000000000 +0100
+++ glibc-2.5/debian/patches/series	2007-06-13 12:58:48.000000000 +0100
@@ -164,3 +164,5 @@
 # Ubuntu-specific patches.  These are things that we don't expect to wind up
 # in Debian.
 ubuntu/local-altlocaledir.diff -p1
+
+any/local-enospck.diff -p2
