moving back from NonFree to Factory OBS-URL: https://build.opensuse.org/request/show/183574 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/mgdiff?expand=0&rev=1
806 lines
25 KiB
Plaintext
806 lines
25 KiB
Plaintext
--- Imakefile
|
|
+++ Imakefile 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -8,13 +8,14 @@
|
|
XCOMM
|
|
XCOMM for Dell SVR4
|
|
XCOMM
|
|
-#EXTRA_LIBRARIES = -lc -lucb
|
|
+EXTRA_LIBRARIES = -lXpm
|
|
EXTRA_DEFINES = -Wall -Wstrict-prototypes -Wmissing-prototypes
|
|
|
|
SRCS = mgdiff.c rundiff.c misc.c files.c spawn.c manual.c modal.c legend.c
|
|
OBJS = mgdiff.o rundiff.o misc.o files.o spawn.o manual.o modal.o legend.o
|
|
|
|
-LOCAL_LIBRARIES = $(XMLIB) $(XTOOLLIB) $(XMULIBONLY) $(XLIB)
|
|
+LOCAL_LIBRARIES = $(XMLIB) $(XTOOLLIB) $(XMULIBONLY) $(XLIB) $(XPLIB)
|
|
+EXTRA_LOAD_FLAGS = -Wl,-rpath-link,$(SHLIBDIR)
|
|
|
|
ComplexProgramTarget(mgdiff)
|
|
InstallAppDefaults(Mgdiff)
|
|
--- Mgdiff.ad
|
|
+++ Mgdiff.ad 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -2,6 +2,8 @@
|
|
! Mgdiff.ad,v 2.0 1994/05/19 02:01:03 dan Exp
|
|
!
|
|
|
|
+*XmScrollBar*width: 15
|
|
+
|
|
!
|
|
! widget hierarchy:
|
|
!
|
|
@@ -169,9 +171,11 @@
|
|
!
|
|
! the overview area
|
|
!
|
|
-*sbl.width: 16
|
|
-*sbr.width: 16
|
|
-*dam.width: 16
|
|
+*sbl.width: 15
|
|
+*sbl.Background: lightgreen
|
|
+*sbr.width: 15
|
|
+*sbr.Background: lightgreen
|
|
+*dam.width: 30
|
|
*dam.Foreground: black
|
|
*dam.Background: cyan
|
|
|
|
--- externs.h
|
|
+++ externs.h 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -29,7 +29,7 @@
|
|
*/
|
|
|
|
#if 0
|
|
-static char rcsid_externs_h[] = "externs.h,v 2.0 1994/05/19 02:01:05 dan Exp";
|
|
+static char rcsid_externs_h[] __attribute__((unused)) = "externs.h,v 2.0 1994/05/19 02:01:05 dan Exp";
|
|
#endif
|
|
|
|
extern int main (int argc, char *argv[]);
|
|
--- files.c
|
|
+++ files.c 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -1,5 +1,5 @@
|
|
#if 0
|
|
-static char rcsid[] = "files.c,v 2.0 1994/05/19 02:01:06 dan Exp";
|
|
+static char rcsid[] __attribute__((unused)) = "files.c,v 2.0 1994/05/19 02:01:06 dan Exp";
|
|
#endif
|
|
|
|
/*
|
|
@@ -151,7 +151,8 @@
|
|
XtSetArg (args[0], XmNmessageString, xms);
|
|
XtSetArg (args[1], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL);
|
|
dialog = XmCreateErrorDialog (parent, "werror", args, 2);
|
|
- XmStringFree (xms);
|
|
+ if (xms)
|
|
+ XmStringFree (xms);
|
|
XtVaSetValues (XtParent (dialog), XtNtitle, title, NULL);
|
|
|
|
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON));
|
|
@@ -177,8 +178,10 @@
|
|
xms1 = xms4;
|
|
else {
|
|
xms2 = XmStringConcat (xms1, xms4);
|
|
- XmStringFree (xms4);
|
|
- XmStringFree (xms1);
|
|
+ if (xms4)
|
|
+ XmStringFree (xms4);
|
|
+ if (xms1)
|
|
+ XmStringFree (xms1);
|
|
xms1 = xms2;
|
|
}
|
|
|
|
@@ -186,16 +189,19 @@
|
|
XmString xms3;
|
|
|
|
xms3 = XmStringConcat (xms1, sep);
|
|
- XmStringFree (xms1);
|
|
+ if (xms1)
|
|
+ XmStringFree (xms1);
|
|
xms1 = xms3;
|
|
}
|
|
}
|
|
- XmStringFree (sep);
|
|
+ if (sep)
|
|
+ XmStringFree (sep);
|
|
|
|
XtSetArg (args[0], XmNmessageString, xms1);
|
|
XtSetArg (args[1], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL);
|
|
dialog = XmCreateErrorDialog (parent, "werror", args, 2);
|
|
- XmStringFree (xms1);
|
|
+ if (xms1)
|
|
+ XmStringFree (xms1);
|
|
XtVaSetValues (XtParent (dialog), XtNtitle, title, NULL);
|
|
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON));
|
|
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
|
@@ -321,7 +327,7 @@
|
|
Arg args[2];
|
|
int i;
|
|
char *dir;
|
|
- XmString xms = NULL ;
|
|
+ XmString xms = (XmString)0;
|
|
|
|
shell = XtVaCreatePopupShell ("openfiles", xmDialogShellWidgetClass, parent,
|
|
XmNallowShellResize, True,
|
|
@@ -352,7 +358,8 @@
|
|
fsb1 = XmCreateFileSelectionBox (frame1a, "files1", args, i);
|
|
if (dir) {
|
|
XtFree (dir);
|
|
- XmStringFree (xms);
|
|
+ if (xms)
|
|
+ XmStringFree (xms);
|
|
}
|
|
|
|
i = 0;
|
|
@@ -363,7 +370,8 @@
|
|
fsb2 = XmCreateFileSelectionBox (frame2a, "files2", args, i);
|
|
if (dir) {
|
|
XtFree (dir);
|
|
- XmStringFree (xms);
|
|
+ if (xms)
|
|
+ XmStringFree (xms);
|
|
}
|
|
|
|
XtAddCallback (fsb1, XmNokCallback, filel_both_cb, shell);
|
|
@@ -427,7 +435,7 @@
|
|
Arg args[2];
|
|
int i;
|
|
char *dir;
|
|
- XmString xms = NULL ;
|
|
+ XmString xms = (XmString)0;
|
|
|
|
i = 0;
|
|
XtSetArg (args[i], XmNdeleteResponse, XmDO_NOTHING); i++;
|
|
@@ -438,7 +446,8 @@
|
|
dialog = XmCreateFileSelectionDialog (parent, "openfile", args, i);
|
|
if (dir) {
|
|
XtFree (dir);
|
|
- XmStringFree (xms);
|
|
+ if (xms)
|
|
+ XmStringFree (xms);
|
|
}
|
|
XtAddCallback (XtParent (dialog), XmNpopupCallback, popup_cb, parent);
|
|
XtAddCallback (dialog, XmNokCallback, file_left_cb, dialog);
|
|
@@ -480,7 +489,7 @@
|
|
Arg args[2];
|
|
int i;
|
|
char *dir;
|
|
- XmString xms = NULL ;
|
|
+ XmString xms = (XmString)0;
|
|
|
|
i = 0;
|
|
XtSetArg (args[i], XmNdeleteResponse, XmDO_NOTHING); i++;
|
|
@@ -491,7 +500,8 @@
|
|
dialog = XmCreateFileSelectionDialog (parent, "openfile", args, XtNumber (args));
|
|
if (dir) {
|
|
XtFree (dir);
|
|
- XmStringFree (xms);
|
|
+ if (xms)
|
|
+ XmStringFree (xms);
|
|
}
|
|
|
|
XtAddCallback (XtParent (dialog), XmNpopupCallback, popup_cb, parent);
|
|
@@ -572,7 +582,7 @@
|
|
Arg args[3];
|
|
int i;
|
|
char *dir;
|
|
- XmString xms = NULL ;
|
|
+ XmString xms = (XmString)0;
|
|
|
|
i = 0;
|
|
XtSetArg (args[i], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); i++;
|
|
@@ -585,7 +595,8 @@
|
|
dialog = XmCreateFileSelectionDialog (parent, "savefile", args, i);
|
|
if (dir) {
|
|
XtFree (dir);
|
|
- XmStringFree (xms);
|
|
+ if (xms)
|
|
+ XmStringFree (xms);
|
|
}
|
|
|
|
XtAddCallback (XtParent (dialog), XmNpopupCallback, popup_cb, parent);
|
|
--- legend.c
|
|
+++ legend.c 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -1,5 +1,5 @@
|
|
#if 0
|
|
-static char rcsid[] = "legend.c,v 2.0 1994/05/19 02:01:08 dan Exp";
|
|
+static char rcsid[] __attribute__((unused)) = "legend.c,v 2.0 1994/05/19 02:01:08 dan Exp";
|
|
#endif
|
|
|
|
/*
|
|
--- manual.c
|
|
+++ manual.c 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -1,5 +1,5 @@
|
|
#if 0
|
|
-static char rcsid[] = "manual.c,v 2.0 1994/05/19 02:01:09 dan Exp";
|
|
+static char rcsid[] __attribute__((unused)) = "manual.c,v 2.0 1994/05/19 02:01:09 dan Exp";
|
|
#endif
|
|
|
|
/*
|
|
--- mgdiff.c
|
|
+++ mgdiff.c 2006-03-07 11:26:05.000000000 +0100
|
|
@@ -1,9 +1,9 @@
|
|
#if 0
|
|
-static char rcsid[] = "mgdiff.c,v 2.1 1994/09/29 01:56:53 dan Exp";
|
|
+static char rcsid[] __attribute__((unused)) = "mgdiff.c,v 2.1 1994/09/29 01:56:53 dan Exp";
|
|
#endif
|
|
|
|
#if 0
|
|
-static char copyright[] = "Copyright (c) 1994, Daniel Williams";
|
|
+static char copyright[] __attribute__((unused)) = "Copyright (c) 1994, Daniel Williams";
|
|
#endif
|
|
|
|
/*
|
|
@@ -34,6 +34,8 @@
|
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
+#define _GNU_SOURCE
|
|
+
|
|
#include <X11/Xos.h>
|
|
|
|
#include <stdio.h>
|
|
@@ -81,7 +83,7 @@
|
|
static void do_nothing (Widget widget, XEvent *event, String *params, Cardinal *num_params);
|
|
static void add_actions (XtAppContext app);
|
|
static int x_error_handler (Display *dpy, XErrorEvent *event);
|
|
-static void xt_error_handler (String message);
|
|
+static void xt_error_handler (String message) __attribute__ ((noreturn));
|
|
static void xt_warning_handler (String message);
|
|
static void redraw_partial_vert (Widget w);
|
|
static void redraw_partial_horz (Widget w);
|
|
@@ -111,7 +113,9 @@
|
|
static void unselect_all (void);
|
|
static Boolean all_selected (void);
|
|
static Dimension get_preferred_width (Widget w);
|
|
+#if !(defined __GLIBC__ && __GLIBC__ >= 2)
|
|
static char *mgdiff_basename (char *name);
|
|
+#endif
|
|
|
|
enum {
|
|
WIDGET_LEFT = 0x10000000,
|
|
@@ -551,7 +555,7 @@
|
|
/* ARGSUSED */
|
|
static void file_cb (Widget w, XtPointer closure, XtPointer call_data)
|
|
{
|
|
- switch ((int) closure) {
|
|
+ switch ((intptr_t) closure) {
|
|
case 0: /* open */
|
|
toggle_open_sensitive (False);
|
|
set_cursor (toplevel);
|
|
@@ -608,7 +612,7 @@
|
|
/* ARGSUSED */
|
|
static void view_cb (Widget w, XtPointer closure, XtPointer call_data)
|
|
{
|
|
- switch ((int) closure) {
|
|
+ switch ((intptr_t) closure) {
|
|
case 0: /* previous */
|
|
prev_diff (NULL, NULL, NULL);
|
|
break;
|
|
@@ -630,7 +634,7 @@
|
|
/* ARGSUSED */
|
|
static void select_cb (Widget w, XtPointer closure, XtPointer call_data)
|
|
{
|
|
- switch ((int) closure) {
|
|
+ switch ((intptr_t) closure) {
|
|
case 0: /* left */
|
|
select_all (LEFT);
|
|
break;
|
|
@@ -652,7 +656,7 @@
|
|
/* ARGSUSED */
|
|
static void options_cb (Widget w, XtPointer closure, XtPointer call_data)
|
|
{
|
|
- switch ((int) closure) {
|
|
+ switch ((intptr_t) closure) {
|
|
case 0: /* toggle overview area */
|
|
overview_flag = !overview_flag;
|
|
if (overview_flag) {
|
|
@@ -708,7 +712,7 @@
|
|
/* ARGSUSED */
|
|
static void helpmenu_cb (Widget w, XtPointer closure, XtPointer call_data)
|
|
{
|
|
- switch ((int) closure) {
|
|
+ switch ((intptr_t) closure) {
|
|
case 0: /* version */
|
|
show_version (toplevel);
|
|
break;
|
|
@@ -1066,12 +1070,12 @@
|
|
{"quitIfSame", "QuitIfSame", XtRBoolean, sizeof (Boolean), 0, XtRString, "false"},
|
|
{"debug", "Debug", XtRBoolean, sizeof (Boolean), 0, XtRString, "false"},
|
|
{"filename", "Filename", XtRString, sizeof (String), 0, XtRString, ""}};
|
|
-
|
|
+#if !(defined __GLIBC__ && __GLIBC__ >= 2)
|
|
progname = mgdiff_basename (argv[0]);
|
|
+#else
|
|
+ progname = basename (argv[0]);
|
|
+#endif
|
|
|
|
- XtSetLanguageProc (NULL, NULL, NULL);
|
|
- setlocale (LC_ALL, "");
|
|
- setlocale (LC_CTYPE, "en");
|
|
toplevel = XtVaAppInitialize (&app, "Mgdiff", option_table, XtNumber (option_table),
|
|
#if X11R5
|
|
&argc,
|
|
@@ -1079,6 +1083,10 @@
|
|
(unsigned int *) &argc,
|
|
#endif
|
|
argv, fallbacks, NULL);
|
|
+ setlocale (LC_ALL, "");
|
|
+ setlocale (LC_CTYPE, "POSIX");
|
|
+ XtSetLanguageProc (app, NULL, NULL);
|
|
+
|
|
|
|
XtVaGetValues (toplevel, XmNdepth, &depth, NULL);
|
|
if (depth == 1)
|
|
@@ -1921,19 +1929,20 @@
|
|
|
|
value = (b->sline >= lines_of_context) ? (b->sline - lines_of_context) : b->sline;
|
|
XtVaGetValues (sb, XmNmaximum, &maximum, XmNsliderSize, &slidersize, NULL);
|
|
- if (value > (maximum - slidersize))
|
|
- value = maximum - slidersize;
|
|
|
|
if ((w == sbl) || (w == sbr)) {
|
|
int side = (w == sbl) ? LEFT : RIGHT;
|
|
|
|
- if (newcbs.value > (maximum - slidersize)) {
|
|
- newcbs.value = maximum - slidersize;
|
|
- XtVaSetValues (w, XmNvalue, newcbs.value - b->sline + b->arr[side].fline, NULL);
|
|
+ if (value > (maximum - slidersize)) {
|
|
+ value = maximum - slidersize;
|
|
+ XtVaSetValues (w, XmNvalue, value - b->sline + b->arr[side].fline, NULL);
|
|
return;
|
|
}
|
|
}
|
|
|
|
+ if (value > (maximum - slidersize))
|
|
+ value = maximum - slidersize;
|
|
+
|
|
newcbs.reason = XmCR_VALUE_CHANGED;
|
|
newcbs.event = NULL;
|
|
newcbs.value = value;
|
|
@@ -2640,6 +2649,7 @@
|
|
/*
|
|
* delete any prefix ending in '/' and return a copy
|
|
*/
|
|
+#if !(defined __GLIBC__ && __GLIBC__ >= 2)
|
|
static char *mgdiff_basename (char *path)
|
|
{
|
|
if (path) {
|
|
@@ -2665,3 +2675,4 @@
|
|
else
|
|
return (NULL);
|
|
}
|
|
+#endif
|
|
--- mgdiff.h
|
|
+++ mgdiff.h 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -2,7 +2,7 @@
|
|
#define MXDIFF_H
|
|
|
|
#if 0
|
|
-static char rcsid_mgdiff_h[] = "mgdiff.h,v 2.0 1994/05/19 02:01:15 dan Exp";
|
|
+static char rcsid_mgdiff_h[] __attribute__((unused)) = "mgdiff.h,v 2.0 1994/05/19 02:01:15 dan Exp";
|
|
#endif
|
|
|
|
/*
|
|
@@ -90,11 +90,27 @@
|
|
*/
|
|
#define X11R5 (defined(XtSpecificationRelease) && (XtSpecificationRelease >= 5))
|
|
|
|
+#include <string.h>
|
|
+#include <stdlib.h>
|
|
+static inline char* xstrdup(const char *s)
|
|
+{
|
|
+ char *ret = strdup(s);
|
|
+ if (!ret) {
|
|
+ perror("strdup");
|
|
+ exit (1);
|
|
+ }
|
|
+ return ret;
|
|
+}
|
|
+
|
|
/*
|
|
* According to IETF RFC 2279, byte values of 0xfe and 0xff are
|
|
* not legal utf-8, but all others bytes are legal.
|
|
*/
|
|
+#if 1
|
|
#define islatin(c) (isprint((c)) || ((((unsigned char)(c)) <= 0xfd)))
|
|
-
|
|
#define isallowed(c) (isascii((c)) || islatin((c)))
|
|
+#else
|
|
+#define islatin(c) ((isprint((c)) || ((((unsigned int)(c)) >= 160) && (((unsigned int)(c)) <= 255))))
|
|
+#define isallowed(c) (isascii((c)) || islatin((c)))
|
|
+#endif
|
|
#endif
|
|
--- misc.c
|
|
+++ misc.c 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -1,5 +1,5 @@
|
|
#if 0
|
|
-static char rcsid[] = "misc.c,v 2.0 1994/05/19 02:01:19 dan Exp";
|
|
+static char rcsid[] __attribute__((unused)) = "misc.c,v 2.0 1994/05/19 02:01:19 dan Exp";
|
|
#endif
|
|
|
|
/*
|
|
@@ -64,7 +64,7 @@
|
|
{
|
|
FILE *fout ;
|
|
int fd ;
|
|
-
|
|
+#if !(defined __GLIBC__ && __GLIBC__ >= 2)
|
|
/*
|
|
** Seed the random() generator. This does not need to be super
|
|
** randomised as the while loop below will be run until a file
|
|
@@ -87,7 +87,18 @@
|
|
|
|
break ;
|
|
}
|
|
-
|
|
+#else
|
|
+ snprintf (name, name_len, "/tmp/mgdif-XXXXXX");
|
|
+ if ((fd = mkstemp(name)) < 0) {
|
|
+ perror("mkstemp");
|
|
+ exit(1);
|
|
+ }
|
|
+ if ((fout = fdopen (fd, "r+")) == NULL) {
|
|
+ close (fd);
|
|
+ perror("fdopen");
|
|
+ exit(1);
|
|
+ }
|
|
+#endif
|
|
while (!feof (fin)) {
|
|
char buffer[BUFSIZ];
|
|
int nitems;
|
|
--- modal.c
|
|
+++ modal.c 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -1,5 +1,5 @@
|
|
#if 0
|
|
-static char rcsid[] = "modal.c,v 2.0 1994/05/19 02:01:20 dan Exp";
|
|
+static char rcsid[] __attribute__((unused)) = "modal.c,v 2.0 1994/05/19 02:01:20 dan Exp";
|
|
#endif
|
|
|
|
/*
|
|
--- patchlevel.h
|
|
+++ patchlevel.h 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -29,7 +29,7 @@
|
|
*/
|
|
|
|
#if 0
|
|
-static char rcsid_patchlevel_h[] = "patchlevel.h,v 2.0 1994/05/19 02:01:21 dan Exp";
|
|
+static char rcsid_patchlevel_h[] __attribute__((unused)) = "patchlevel.h,v 2.0 1994/05/19 02:01:21 dan Exp";
|
|
#endif
|
|
|
|
#define VERSION "1.0"
|
|
--- rundiff.c
|
|
+++ rundiff.c 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -1,5 +1,5 @@
|
|
#if 0
|
|
-static char rcsid[] = "rundiff.c,v 2.0 1994/05/19 02:01:22 dan Exp";
|
|
+static char rcsid[] __attribute__((unused)) = "rundiff.c,v 2.0 1994/05/19 02:01:22 dan Exp";
|
|
#endif
|
|
|
|
/*
|
|
@@ -44,6 +44,16 @@
|
|
#include "mgdiff.h"
|
|
#include "externs.h"
|
|
|
|
+static inline void* xcalloc(size_t nmemb, size_t size)
|
|
+{
|
|
+ void *ret = calloc(nmemb, size);
|
|
+ if (!ret) {
|
|
+ perror("calloc");
|
|
+ exit (1);
|
|
+ }
|
|
+ return ret;
|
|
+}
|
|
+
|
|
/*
|
|
* this is the maximum number of lines shown to the user if diff
|
|
* returns an error
|
|
@@ -170,22 +180,22 @@
|
|
Block *b;
|
|
DiffInfo *di;
|
|
|
|
- di = (DiffInfo *) calloc (1, sizeof (DiffInfo));
|
|
+ di = (DiffInfo *) xcalloc (1, sizeof (DiffInfo));
|
|
di->longline = " ";
|
|
di->maxcols = strlen (di->longline);
|
|
di->status = 2;
|
|
|
|
- b = (Block *) calloc (1, sizeof (Block));
|
|
+ b = (Block *) xcalloc (1, sizeof (Block));
|
|
b->selected = NEITHER;
|
|
b->arr[LEFT].type = b->arr[RIGHT].type = SAME;
|
|
b->sline = 0;
|
|
b->ssize = 1;
|
|
b->arr[LEFT].fline = b->arr[RIGHT].fline = 0;
|
|
b->arr[LEFT].fsize = b->arr[RIGHT].fsize = 1;
|
|
- b->arr[LEFT].text = (char **) calloc (1, sizeof (char *));
|
|
- b->arr[LEFT].wtext = (char **) calloc (1, sizeof (char *));
|
|
- b->arr[LEFT].tlen = (short *) calloc (1, sizeof (short));
|
|
- b->arr[LEFT].text[0] = strdup (" ");
|
|
+ b->arr[LEFT].text = (char **) xcalloc (1, sizeof (char *));
|
|
+ b->arr[LEFT].wtext = (char **) xcalloc (1, sizeof (char *));
|
|
+ b->arr[LEFT].tlen = (short *) xcalloc (1, sizeof (short));
|
|
+ b->arr[LEFT].text[0] = xstrdup (" ");
|
|
b->arr[LEFT].tlen[0] = strlen (b->arr[LEFT].text[0]);
|
|
|
|
b->arr[RIGHT].text = NULL;
|
|
@@ -220,7 +230,7 @@
|
|
file2 = fopen (path2, "r");
|
|
diff = spawn_diff (prog, args, path1, path2);
|
|
|
|
- di = (DiffInfo *) calloc (1, sizeof (DiffInfo));
|
|
+ di = (DiffInfo *) xcalloc (1, sizeof (DiffInfo));
|
|
di->longline = "";
|
|
|
|
XmUpdateDisplay (toplevel);
|
|
@@ -244,21 +254,21 @@
|
|
if (di->errors == 0) {
|
|
char cmdline[4096];
|
|
|
|
- di->etext = (char **) calloc (MAX_ERROR_LINES + 1, sizeof (char *));
|
|
+ di->etext = (char **) xcalloc (MAX_ERROR_LINES + 1, sizeof (char *));
|
|
(void) snprintf (cmdline, sizeof (cmdline), " \"%s %s %s %s\"", prog, args, path1, path2);
|
|
- di->etext[di->errors++] = strdup ("diff command line:");
|
|
- di->etext[di->errors++] = strdup ("");
|
|
- di->etext[di->errors++] = strdup (cmdline);
|
|
- di->etext[di->errors++] = strdup ("");
|
|
- di->etext[di->errors++] = strdup ("produced this output:");
|
|
- di->etext[di->errors++] = strdup ("");
|
|
+ di->etext[di->errors++] = xstrdup ("diff command line:");
|
|
+ di->etext[di->errors++] = xstrdup ("");
|
|
+ di->etext[di->errors++] = xstrdup (cmdline);
|
|
+ di->etext[di->errors++] = xstrdup ("");
|
|
+ di->etext[di->errors++] = xstrdup ("produced this output:");
|
|
+ di->etext[di->errors++] = xstrdup ("");
|
|
}
|
|
if (di->errors < MAX_ERROR_LINES)
|
|
- di->etext[di->errors++] = strdup (buffer);
|
|
+ di->etext[di->errors++] = xstrdup (buffer);
|
|
break;
|
|
case ADD:
|
|
if (f2n1 != fline2) {
|
|
- b = (Block *) calloc (1, sizeof (Block));
|
|
+ b = (Block *) xcalloc (1, sizeof (Block));
|
|
b->selected = NEITHER;
|
|
b->arr[LEFT].type = b->arr[RIGHT].type = SAME;
|
|
b->sline = sline;
|
|
@@ -267,9 +277,9 @@
|
|
b->arr[LEFT].fsize = b->arr[RIGHT].fsize = f2n1 - fline2;
|
|
b->ssize = f2n1 - fline2;
|
|
|
|
- b->arr[LEFT].text = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].wtext = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].tlen = (short *) calloc (b->arr[LEFT].fsize, sizeof (short));
|
|
+ b->arr[LEFT].text = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].wtext = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].tlen = (short *) xcalloc (b->arr[LEFT].fsize, sizeof (short));
|
|
for (i = 0; i < b->arr[LEFT].fsize; i++) {
|
|
getline (file1, &b->arr[LEFT].text[i], &b->arr[LEFT].wtext[i]);
|
|
b->arr[LEFT].tlen[i] = strlen (b->arr[LEFT].text[i]);
|
|
@@ -285,7 +295,7 @@
|
|
add_blist (b);
|
|
}
|
|
|
|
- b = (Block *) calloc (1, sizeof (Block));
|
|
+ b = (Block *) xcalloc (1, sizeof (Block));
|
|
b->selected = NEITHER;
|
|
b->arr[LEFT].type = BLANK;
|
|
b->arr[RIGHT].type = INSERT;
|
|
@@ -296,9 +306,9 @@
|
|
b->arr[RIGHT].fsize = f2n2 - f2n1 + 1;
|
|
b->ssize = max (b->arr[LEFT].fsize, b->arr[RIGHT].fsize);
|
|
|
|
- b->arr[RIGHT].text = (char **) calloc (b->arr[RIGHT].fsize, sizeof (char *));
|
|
- b->arr[RIGHT].wtext = (char **) calloc (b->arr[RIGHT].fsize, sizeof (char *));
|
|
- b->arr[RIGHT].tlen = (short *) calloc (b->arr[RIGHT].fsize, sizeof (short));
|
|
+ b->arr[RIGHT].text = (char **) xcalloc (b->arr[RIGHT].fsize, sizeof (char *));
|
|
+ b->arr[RIGHT].wtext = (char **) xcalloc (b->arr[RIGHT].fsize, sizeof (char *));
|
|
+ b->arr[RIGHT].tlen = (short *) xcalloc (b->arr[RIGHT].fsize, sizeof (short));
|
|
for (i = 0; i < b->arr[RIGHT].fsize; i++) {
|
|
getline (file2, &b->arr[RIGHT].text[i], &b->arr[RIGHT].wtext[i]);
|
|
b->arr[RIGHT].tlen[i] = strlen (b->arr[RIGHT].text[i]);
|
|
@@ -318,7 +328,7 @@
|
|
break;
|
|
case CHANGE:
|
|
if (f1n1 != fline1) {
|
|
- b = (Block *) calloc (1, sizeof (Block));
|
|
+ b = (Block *) xcalloc (1, sizeof (Block));
|
|
b->selected = NEITHER;
|
|
b->arr[LEFT].type = b->arr[RIGHT].type = SAME;
|
|
b->sline = sline;
|
|
@@ -327,9 +337,9 @@
|
|
b->arr[LEFT].fsize = b->arr[RIGHT].fsize = f1n1 - fline1;
|
|
b->ssize = f1n1 - fline1;
|
|
|
|
- b->arr[LEFT].text = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].wtext = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].tlen = (short *) calloc (b->arr[LEFT].fsize, sizeof (short));
|
|
+ b->arr[LEFT].text = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].wtext = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].tlen = (short *) xcalloc (b->arr[LEFT].fsize, sizeof (short));
|
|
for (i = 0; i < b->arr[LEFT].fsize; i++) {
|
|
getline (file1, &b->arr[LEFT].text[i], &b->arr[LEFT].wtext[i]);
|
|
b->arr[LEFT].tlen[i] = strlen (b->arr[LEFT].text[i]);
|
|
@@ -344,7 +354,7 @@
|
|
sline += b->ssize;
|
|
add_blist (b);
|
|
}
|
|
- b = (Block *) calloc (1, sizeof (Block));
|
|
+ b = (Block *) xcalloc (1, sizeof (Block));
|
|
b->selected = NEITHER;
|
|
b->arr[LEFT].type = b->arr[RIGHT].type = DIFF;
|
|
b->sline = sline;
|
|
@@ -354,9 +364,9 @@
|
|
b->arr[RIGHT].fsize = f2n2 - f2n1 + 1;
|
|
b->ssize = max (b->arr[LEFT].fsize, b->arr[RIGHT].fsize);
|
|
|
|
- b->arr[LEFT].text = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].wtext = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].tlen = (short *) calloc (b->arr[LEFT].fsize, sizeof (short));
|
|
+ b->arr[LEFT].text = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].wtext = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].tlen = (short *) xcalloc (b->arr[LEFT].fsize, sizeof (short));
|
|
for (i = 0; i < b->arr[LEFT].fsize; i++) {
|
|
getline (file1, &b->arr[LEFT].text[i], &b->arr[LEFT].wtext[i]);
|
|
b->arr[LEFT].tlen[i] = strlen (b->arr[LEFT].text[i]);
|
|
@@ -367,9 +377,9 @@
|
|
}
|
|
fline1 += b->arr[LEFT].fsize;
|
|
|
|
- b->arr[RIGHT].text = (char **) calloc (b->arr[RIGHT].fsize, sizeof (char *));
|
|
- b->arr[RIGHT].wtext = (char **) calloc (b->arr[RIGHT].fsize, sizeof (char *));
|
|
- b->arr[RIGHT].tlen = (short *) calloc (b->arr[RIGHT].fsize, sizeof (short));
|
|
+ b->arr[RIGHT].text = (char **) xcalloc (b->arr[RIGHT].fsize, sizeof (char *));
|
|
+ b->arr[RIGHT].wtext = (char **) xcalloc (b->arr[RIGHT].fsize, sizeof (char *));
|
|
+ b->arr[RIGHT].tlen = (short *) xcalloc (b->arr[RIGHT].fsize, sizeof (short));
|
|
for (i = 0; i < b->arr[RIGHT].fsize; i++) {
|
|
getline (file2, &b->arr[RIGHT].text[i], &b->arr[RIGHT].wtext[i]);
|
|
b->arr[RIGHT].tlen[i] = strlen (b->arr[RIGHT].text[i]);
|
|
@@ -386,7 +396,7 @@
|
|
break;
|
|
case DELETE:
|
|
if (f1n1 != fline1) {
|
|
- b = (Block *) calloc (1, sizeof (Block));
|
|
+ b = (Block *) xcalloc (1, sizeof (Block));
|
|
b->selected = NEITHER;
|
|
b->arr[LEFT].type = b->arr[RIGHT].type = SAME;
|
|
b->sline = sline;
|
|
@@ -395,9 +405,9 @@
|
|
b->arr[LEFT].fsize = b->arr[RIGHT].fsize = f1n1 - fline1;
|
|
b->ssize = f1n1 - fline1;
|
|
|
|
- b->arr[LEFT].text = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].wtext = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].tlen = (short *) calloc (b->arr[LEFT].fsize, sizeof (short));
|
|
+ b->arr[LEFT].text = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].wtext = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].tlen = (short *) xcalloc (b->arr[LEFT].fsize, sizeof (short));
|
|
for (i = 0; i < b->arr[LEFT].fsize; i++) {
|
|
getline (file1, &b->arr[LEFT].text[i], &b->arr[LEFT].wtext[i]);
|
|
b->arr[LEFT].tlen[i] = strlen (b->arr[LEFT].text[i]);
|
|
@@ -413,7 +423,7 @@
|
|
add_blist (b);
|
|
}
|
|
|
|
- b = (Block *) calloc (1, sizeof (Block));
|
|
+ b = (Block *) xcalloc (1, sizeof (Block));
|
|
b->selected = NEITHER;
|
|
b->arr[LEFT].type = INSERT;
|
|
b->arr[RIGHT].type = BLANK;
|
|
@@ -424,9 +434,9 @@
|
|
b->arr[RIGHT].fsize = 0;
|
|
b->ssize = max (b->arr[LEFT].fsize, b->arr[RIGHT].fsize);
|
|
|
|
- b->arr[LEFT].text = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].wtext = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].tlen = (short *) calloc (b->arr[LEFT].fsize, sizeof (short));
|
|
+ b->arr[LEFT].text = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].wtext = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].tlen = (short *) xcalloc (b->arr[LEFT].fsize, sizeof (short));
|
|
for (i = 0; i < b->arr[LEFT].fsize; i++) {
|
|
getline (file1, &b->arr[LEFT].text[i], &b->arr[LEFT].wtext[i]);
|
|
b->arr[LEFT].tlen[i] = strlen (b->arr[LEFT].text[i]);
|
|
@@ -478,7 +488,7 @@
|
|
;
|
|
|
|
if (lines > 0) {
|
|
- b = (Block *) calloc (1, sizeof (Block));
|
|
+ b = (Block *) xcalloc (1, sizeof (Block));
|
|
b->selected = NEITHER;
|
|
b->arr[LEFT].type = b->arr[RIGHT].type = SAME;
|
|
b->sline = sline;
|
|
@@ -487,9 +497,9 @@
|
|
b->arr[LEFT].fsize = b->arr[RIGHT].fsize = lines;
|
|
b->ssize = lines;
|
|
|
|
- b->arr[LEFT].text = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].wtext = (char **) calloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
- b->arr[LEFT].tlen = (short *) calloc (b->arr[LEFT].fsize, sizeof (short));
|
|
+ b->arr[LEFT].text = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].wtext = (char **) xcalloc (b->arr[LEFT].fsize, sizeof (char *));
|
|
+ b->arr[LEFT].tlen = (short *) xcalloc (b->arr[LEFT].fsize, sizeof (short));
|
|
for (i = 0; i < b->arr[LEFT].fsize; i++) {
|
|
getline (file2, &b->arr[LEFT].text[i], &b->arr[LEFT].wtext[i]);
|
|
b->arr[LEFT].tlen[i] = strlen (b->arr[LEFT].text[i]);
|
|
@@ -552,7 +562,7 @@
|
|
}
|
|
|
|
if (tabs || ctrls) {
|
|
- char *ret = (char *) calloc (1, len + 1);
|
|
+ char *ret = (char *) xcalloc (1, len + 1);
|
|
int j, ch;
|
|
|
|
for (i = 0, j = 0; s[i] != '\0'; i++) {
|
|
@@ -589,7 +599,7 @@
|
|
}
|
|
else {
|
|
*flag = False;
|
|
- return (strdup (s));
|
|
+ return (xstrdup (s));
|
|
}
|
|
}
|
|
|
|
@@ -689,7 +699,7 @@
|
|
while (getc (f) != '\n')
|
|
;
|
|
*cooked = s;
|
|
- *raw = (flag) ? strdup (buffer) : NULL;
|
|
+ *raw = (flag) ? xstrdup (buffer) : NULL;
|
|
}
|
|
|
|
/*
|
|
--- spawn.c
|
|
+++ spawn.c 2006-03-07 11:15:24.000000000 +0100
|
|
@@ -1,5 +1,5 @@
|
|
#if 0
|
|
-static char rcsid[] = "spawn.c,v 2.0 1994/05/19 02:01:23 dan Exp";
|
|
+static char rcsid[] __attribute__((unused)) = "spawn.c,v 2.0 1994/05/19 02:01:23 dan Exp";
|
|
#endif
|
|
|
|
/*
|
|
@@ -42,6 +42,25 @@
|
|
|
|
#define BLOCKSIZE 10
|
|
|
|
+static inline void* xmalloc(size_t size)
|
|
+{
|
|
+ void *ret = malloc(size);
|
|
+ if (!ret) {
|
|
+ perror("malloc");
|
|
+ exit(1);
|
|
+ }
|
|
+ return ret;
|
|
+}
|
|
+static inline void* xrealloc(void *ptr, size_t size)
|
|
+{
|
|
+ void *ret = realloc(ptr, size);
|
|
+ if (!ret) {
|
|
+ perror("realloc");
|
|
+ exit(1);
|
|
+ }
|
|
+ return ret;
|
|
+}
|
|
+
|
|
/*
|
|
* run a program with command line arguments and two pathname
|
|
* arguments via fork/exec and return a pipe file descriptor into
|
|
@@ -91,19 +110,19 @@
|
|
|
|
argc = 0;
|
|
count = BLOCKSIZE;
|
|
- argv = (char **) malloc (sizeof (char *) * BLOCKSIZE);
|
|
+ argv = (char **) xmalloc (sizeof (char *) * BLOCKSIZE);
|
|
argv[argc++] = prog;
|
|
|
|
for (ptr = strtok (args, " \t"); ptr; ptr = strtok (NULL, " \t")) {
|
|
if (argc >= count) {
|
|
- argv = (char **) realloc (argv, sizeof (char *) * BLOCKSIZE);
|
|
+ argv = (char **) xrealloc (argv, sizeof (char *) * BLOCKSIZE);
|
|
count += BLOCKSIZE;
|
|
}
|
|
argv[argc++] = strdup (ptr);
|
|
}
|
|
|
|
if ((argc + 3) >= count)
|
|
- argv = (char **) realloc (argv, sizeof (char *) * 3);
|
|
+ argv = (char **) xrealloc (argv, sizeof (char *) * 3);
|
|
|
|
argv[argc++] = path1;
|
|
argv[argc++] = path2;
|