Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37401157
en ru br
Репозитории ALT
S:0.2-alt10
5.1: 0.2-alt9
4.1: 0.2-alt7
4.0: 0.2-alt7
+updates:0.2-alt7
3.0: 0.2-alt4
www.altlinux.org/Changes

Группа :: Работа с текстами
Пакет: ed

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: ed-0.2-alt-error.patch
Скачать


diff -urNk.orig ed-0.2.orig/configure.in ed-0.2/configure.in
--- ed-0.2.orig/configure.in	1994-11-19 15:38:00 +0300
+++ ed-0.2/configure.in	2002-09-01 16:19:42 +0400
@@ -11,12 +11,17 @@
 AC_PROG_CC
 AC_C_CONST
 AC_HEADER_STDC
-AC_CHECK_HEADERS(limits.h memory.h string.h unistd.h locale.h)
-AC_CHECK_FUNCS(setbuffer sigsetjmp sigaction strerror)
+AC_CHECK_HEADERS(limits.h memory.h string.h unistd.h locale.h libintl.h)
+AC_CHECK_FUNCS(setbuffer sigsetjmp sigaction strerror strerror_r error)
 AC_FUNC_VPRINTF
 AC_FUNC_ALLOCA
+if test "$ac_cv_func_error" = yes; then
+  AC_CHECK_HEADERS(error.h)
+else
+  AC_LIBOBJ(error)
+fi
 if test "$ALLOCA" = alloca.o; then
-  AC_SUBST(LIBOBJS)LIBOBJS="$LIBOBJS xmalloc.o error.o"
+  AC_LIBOBJ(xmalloc)
 fi
 
 AC_OUTPUT(Makefile)
diff -urNk.orig ed-0.2.orig/ed.h ed-0.2/ed.h
--- ed-0.2.orig/ed.h	1994-11-19 15:38:00 +0300
+++ ed-0.2/ed.h	2002-09-01 16:00:25 +0400
@@ -36,6 +36,12 @@
 extern int errno;
 #endif
 
+#ifdef HAVE_ERROR_H
+#include <error.h>
+#else
+#include "myerror.h"
+#endif
+	
 #ifdef HAVE_LIMITS_H
 #include <limits.h>
 #endif
diff -urNk.orig ed-0.2.orig/error.c ed-0.2/error.c
--- ed-0.2.orig/error.c	1994-11-19 15:38:01 +0300
+++ ed-0.2/error.c	2002-09-01 16:16:11 +0400
@@ -1,21 +1,24 @@
-/* error.c -- error handler for noninteractive utilities
-   Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+/* Error handler for noninteractive utilities
+   Copyright (C) 1990-1998, 2000, 2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.  Its master source is NOT part of
+   the C library, however.  The master source lives in /gd/gnu/lib.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
+   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 General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
 
-/* Written by David MacKenzie.  */
+/* Written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
 
 #ifdef HAVE_CONFIG_H
 #if defined (CONFIG_BROKETS)
@@ -29,52 +32,105 @@
 #endif
 
 #include <stdio.h>
+#if HAVE_LIBINTL_H
+# include <libintl.h>
+#endif
 
-#ifdef HAVE_VPRINTF
+#if HAVE_VPRINTF || HAVE_DOPRNT
+# if __STDC__
+#  include <stdarg.h>
+#  define VA_START(args, lastarg) va_start(args, lastarg)
+# else
+#  include <varargs.h>
+#  define VA_START(args, lastarg) va_start(args)
+# endif
+#else
+# define va_alist a1, a2, a3, a4, a5, a6, a7, a8
+# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
+#endif
 
-#if __STDC__
-#include <stdarg.h>
-#define VA_START(args, lastarg) va_start(args, lastarg)
-#else /* !__STDC__ */
-#include <varargs.h>
-#define VA_START(args, lastarg) va_start(args)
-#endif /* !__STDC__ */
-
-#else /* !HAVE_VPRINTF */
-
-#ifdef HAVE_DOPRNT
-#define va_alist args
-#define va_dcl int args;
-#else /* !HAVE_DOPRNT */
-#define va_alist a1, a2, a3, a4, a5, a6, a7, a8
-#define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
-#endif /* !HAVE_DOPRNT */
-
-#endif /* !HAVE_VPRINTF */
-
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#include <string.h>
-#else /* !STDC_HEADERS */
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else
 void exit ();
-#endif /* !STDC_HEADERS */
+#endif
+
+#include "myerror.h"
+
+#ifndef _
+# define _(String) String
+#endif
+
+/* If NULL, error will flush stdout, then print on stderr the program
+   name, a colon and a space.  Otherwise, error will call this
+   function without parameters instead.  */
+void (*error_print_progname) (
+#if __STDC__ - 0
+			      void
+#endif
+			      );
+
+/* This variable is incremented each time `error' is called.  */
+unsigned int error_message_count;
 
+/* The calling program should define program_name and set it to the
+   name of the executing program.  */
 extern char *program_name;
 
-#ifndef HAVE_STRERROR
-static const char *
+# ifdef HAVE_STRERROR_R
+#  define __strerror_r strerror_r
+# else
+#  if HAVE_STRERROR
+#   ifndef strerror		/* On some systems, strerror is a macro */
+char *strerror ();
+#   endif
+#  else
+static char *
 private_strerror (errnum)
      int errnum;
 {
-  extern const char *sys_errlist[];
+  extern char *sys_errlist[];
   extern int sys_nerr;
 
   if (errnum > 0 && errnum <= sys_nerr)
-    return sys_errlist[errnum];
-  return "Unknown system error";
+    return _(sys_errlist[errnum]);
+  return _("Unknown system error");
 }
-#define strerror private_strerror
-#endif /* !HAVE_STRERROR */
+#   define strerror private_strerror
+#  endif /* HAVE_STRERROR */
+# endif	/* HAVE_STRERROR_R */
+
+
+#ifdef VA_START
+static void
+error_tail (int status, int errnum, const char *message, va_list args)
+{
+# if HAVE_VPRINTF
+    vfprintf (stderr, message, args);
+# else
+  _doprnt (message, args, stderr);
+# endif
+  va_end (args);
+
+  ++error_message_count;
+  if (errnum)
+    {
+#if defined HAVE_STRERROR_R
+      char errbuf[1024];
+      char *s = __strerror_r (errnum, errbuf, sizeof errbuf);
+	fprintf (stderr, ": %s", s);
+#else
+      fprintf (stderr, ": %s", strerror (errnum));
+#endif
+    }
+    putc ('\n', stderr);
+  fflush (stderr);
+  if (status)
+    exit (status);
+}
+#endif
+
 
 /* Print the program name and error message MESSAGE, which is a printf-style
    format string with optional args.
@@ -82,37 +138,107 @@
    Exit with status STATUS if it is nonzero.  */
 /* VARARGS */
 void
-#if defined (HAVE_VPRINTF) && __STDC__
-error (int status, int errnum, char *message, ...)
-#else /* !HAVE_VPRINTF or !__STDC__ */
+#if defined VA_START && __STDC__
+error (int status, int errnum, const char *message, ...)
+#else
 error (status, errnum, message, va_alist)
      int status;
      int errnum;
      char *message;
      va_dcl
-#endif /* !HAVE_VPRINTF or !__STDC__ */
+#endif
 {
-#ifdef HAVE_VPRINTF
+#ifdef VA_START
   va_list args;
-#endif /* HAVE_VPRINTF */
+#endif
 
   fflush (stdout);
-  fprintf (stderr, "%s: ", program_name);
-#ifdef HAVE_VPRINTF
+  if (error_print_progname)
+    (*error_print_progname) ();
+  else
+    {
+	fprintf (stderr, "%s: ", program_name);
+    }
+
+#ifdef VA_START
   VA_START (args, message);
-  vfprintf (stderr, message, args);
-  va_end (args);
-#else /* !HAVE_VPRINTF */
-#ifdef HAVE_DOPRNT
-  _doprnt (message, &args, stderr);
-#else /* !HAVE_DOPRNT */
+  error_tail (status, errnum, message, args);
+#else
   fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
-#endif /* !HAVE_DOPRNT */
-#endif /* !HAVE_VPRINTF */
+
+  ++error_message_count;
   if (errnum)
     fprintf (stderr, ": %s", strerror (errnum));
   putc ('\n', stderr);
   fflush (stderr);
   if (status)
     exit (status);
+#endif
+
+}
+
+/* Sometimes we want to have at most one error per line.  This
+   variable controls whether this mode is selected or not.  */
+int error_one_per_line;
+
+void
+#if defined VA_START && __STDC__
+error_at_line (int status, int errnum, const char *file_name,
+	       unsigned int line_number, const char *message, ...)
+#else
+error_at_line (status, errnum, file_name, line_number, message, va_alist)
+     int status;
+     int errnum;
+     const char *file_name;
+     unsigned int line_number;
+     char *message;
+     va_dcl
+#endif
+{
+#ifdef VA_START
+  va_list args;
+#endif
+
+  if (error_one_per_line)
+    {
+      static const char *old_file_name;
+      static unsigned int old_line_number;
+
+      if (old_line_number == line_number
+	  && (file_name == old_file_name
+	      || strcmp (old_file_name, file_name) == 0))
+	/* Simply return and print nothing.  */
+	return;
+
+      old_file_name = file_name;
+      old_line_number = line_number;
+    }
+
+  fflush (stdout);
+  if (error_print_progname)
+    (*error_print_progname) ();
+  else
+    {
+	fprintf (stderr, "%s:", program_name);
+    }
+
+  if (file_name != NULL)
+    {
+	fprintf (stderr, "%s:%d: ", file_name, line_number);
+    }
+
+#ifdef VA_START
+  VA_START (args, message);
+  error_tail (status, errnum, message, args);
+#else
+  fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
+
+  ++error_message_count;
+  if (errnum)
+    fprintf (stderr, ": %s", strerror (errnum));
+  putc ('\n', stderr);
+  fflush (stderr);
+  if (status)
+    exit (status);
+#endif
 }
diff -urNk.orig ed-0.2.orig/myerror.h ed-0.2/myerror.h
--- ed-0.2.orig/myerror.h	1970-01-01 03:00:00 +0300
+++ ed-0.2/myerror.h	2001-07-06 08:55:35 +0400
@@ -0,0 +1,76 @@
+/* Declaration for error-reporting function
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.  Its master source is NOT part of
+   the C library, however.  The master source lives in /gd/gnu/lib.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _ERROR_H
+#define _ERROR_H 1
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+#  define __attribute__(Spec) /* empty */
+# endif
+/* The __-protected variants of `format' and `printf' attributes
+   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __format__ format
+#  define __printf__ printf
+# endif
+#endif
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#if defined (__STDC__) && __STDC__
+
+/* Print a message with `fprintf (stderr, FORMAT, ...)';
+   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+   If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
+
+extern void error (int status, int errnum, const char *format, ...)
+     __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern void error_at_line (int status, int errnum, const char *fname,
+			   unsigned int lineno, const char *format, ...)
+     __attribute__ ((__format__ (__printf__, 5, 6)));
+
+/* If NULL, error will flush stdout, then print on stderr the program
+   name, a colon and a space.  Otherwise, error will call this
+   function without parameters instead.  */
+extern void (*error_print_progname) (void);
+
+#else
+void error ();
+void error_at_line ();
+extern void (*error_print_progname) ();
+#endif
+
+/* This variable is incremented each time `error' is called.  */
+extern unsigned int error_message_count;
+
+/* Sometimes we want to have at most one error per line.  This
+   variable controls whether this mode is selected or not.  */
+extern int error_one_per_line;
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* error.h */
diff -urNk.orig ed-0.2.orig/xmalloc.c ed-0.2/xmalloc.c
--- ed-0.2.orig/xmalloc.c	1994-11-19 15:38:05 +0300
+++ ed-0.2/xmalloc.c	2002-09-01 16:00:13 +0400
@@ -15,16 +15,7 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
-#ifdef HAVE_CONFIG_H
-#if defined (CONFIG_BROKETS)
-/* We use <config.h> instead of "config.h" so that a compilation
-   using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
-   (which it would do because it found this file in $srcdir).  */
-#include <config.h>
-#else
-#include "config.h"
-#endif
-#endif
+#include "ed.h"
 
 #if __STDC__
 #define VOID void
@@ -32,22 +23,6 @@
 #define VOID char
 #endif
 
-#include <sys/types.h>
-
-#if STDC_HEADERS
-#include <stdlib.h>
-#else
-VOID *malloc ();
-VOID *realloc ();
-void free ();
-#endif
-
-#if __STDC__ && defined (HAVE_VPRINTF)
-void error (int, int, char const *, ...);
-#else
-void error ();
-#endif
-
 /* Allocate N bytes of memory dynamically, with error checking.  */
 
 VOID *
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin