Module Name:    xsrc
Committed By:   mrg
Date:           Sat Nov 16 08:49:09 UTC 2024

Modified Files:
        xsrc/external/mit/x11perf/dist: x11perf.c
        xsrc/external/mit/xfs/dist/os: connection.c io.c
        xsrc/external/mit/xfs/include: config.h
        xsrc/external/mit/xrandr/dist: xrandr.c
        xsrc/external/mit/xtrans/dist: Xtrans.c Xtranssock.c

Log Message:
merge x11perf 1.7.0, xfs 1.2.2, xrandr 1.5.3, and xtrans 1.5.2.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/x11perf/dist/x11perf.c
cvs rdiff -u -r1.4 -r1.5 xsrc/external/mit/xfs/dist/os/connection.c
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/xfs/dist/os/io.c
cvs rdiff -u -r1.6 -r1.7 xsrc/external/mit/xfs/include/config.h
cvs rdiff -u -r1.15 -r1.16 xsrc/external/mit/xrandr/dist/xrandr.c
cvs rdiff -u -r1.2 -r1.3 xsrc/external/mit/xtrans/dist/Xtrans.c
cvs rdiff -u -r1.4 -r1.5 xsrc/external/mit/xtrans/dist/Xtranssock.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/x11perf/dist/x11perf.c
diff -u xsrc/external/mit/x11perf/dist/x11perf.c:1.3 xsrc/external/mit/x11perf/dist/x11perf.c:1.4
--- xsrc/external/mit/x11perf/dist/x11perf.c:1.3	Sun Nov 13 02:48:37 2022
+++ xsrc/external/mit/x11perf/dist/x11perf.c	Sat Nov 16 08:49:08 2024
@@ -3,13 +3,13 @@ Copyright 1988, 1989 by Digital Equipmen
 
                         All Rights Reserved
 
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
 provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
+both that copyright notice and this permission notice appear in
 supporting documentation, and that the name of Digital not be
 used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
+software without specific, written prior permission.
 
 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
@@ -161,7 +161,7 @@ static int ssTimeout, ssInterval, ssPref
 
 /* Static functions */
 static int GetWords(int argi, int argc, char **argv, char **wordsp, int *nump);
-static int GetNumbers(int argi, int argc, char **argv, unsigned long *intsp, 
+static int GetNumbers(int argi, int argc, char **argv, unsigned long *intsp,
 		      int *nump);
 static int GetRops(int argi, int argc, char **argv, int *ropsp, int *nump);
 static int GetPops(int argi, int argc, char **argv, int *popsp, int *nump);
@@ -221,7 +221,7 @@ int gettimeofday(tp)
 
 static struct  timeval start;
 
-static void 
+static void
 PrintTime(void)
 {
     Time_t t;
@@ -230,13 +230,13 @@ PrintTime(void)
     printf("%s\n", ctime(&t));
 }
 
-static void 
+static void
 InitTimes(void)
 {
     X_GETTIMEOFDAY(&start);
 }
 
-static double 
+static double
 ElapsedTime(double correction)
 {
     struct timeval stop;
@@ -250,7 +250,7 @@ ElapsedTime(double correction)
             (1000000.0 * (double)(stop.tv_sec - start.tv_sec)) - correction;
 }
 
-static double 
+static double
 RoundTo3Digits(double d)
 {
     /* It's kind of silly to print out things like ``193658.4/sec'' so just
@@ -286,7 +286,7 @@ RoundTo3Digits(double d)
 }
 
 
-static void 
+static void
 ReportTimes(double usecs, int64_t n, char *str, int average)
 {
     if(usecs != 0.0)
@@ -299,10 +299,10 @@ ReportTimes(double usecs, int64_t n, cha
         objspersec =  RoundTo3Digits(objspersec);
 
         if (average) {
-	    printf("%11lld trep @ %8.4f msec (%8.1f/sec): %s\n", 
+	    printf("%11lld trep @ %8.4f msec (%8.1f/sec): %s\n",
                    (long long) n, msecsperobj, objspersec, str);
 	} else {
-	    printf("%11lld reps @ %8.4f msec (%8.1f/sec): %s\n", 
+	    printf("%11lld reps @ %8.4f msec (%8.1f/sec): %s\n",
                    (long long) n, msecsperobj, objspersec, str);
 	}
     } else {
@@ -319,7 +319,26 @@ ReportTimes(double usecs, int64_t n, cha
 ************************************************/
 
 static char *program_name;
-static void usage(void) _X_NORETURN;
+typedef enum {
+    USAGE_OPTIONS,
+    USAGE_TESTS,
+    USAGE_ALL
+} usage_contents;
+_X_NORETURN _X_COLD static void usage(usage_contents, int);
+
+_X_NORETURN _X_COLD static void
+missing_arg(const char *option)
+{
+    fprintf(stderr, "Error: missing argument to %s\n", option);
+    usage(USAGE_OPTIONS, EXIT_FAILURE);
+}
+
+_X_NORETURN _X_COLD static void
+invalid_arg( const char *arg, const char *option)
+{
+    fprintf(stderr, "Error: invalid argument '%s' to %s\n", arg, option);
+    usage(USAGE_OPTIONS, EXIT_FAILURE);
+}
 
 /*
  * Get_Display_Name (argc, argv) Look for -display, -d, or host:dpy (obsolete)
@@ -337,7 +356,8 @@ Get_Display_Name(int *pargc, /* MODIFIED
 	char *arg = argv[i];
 
 	if (!strcmp (arg, "-display") || !strcmp (arg, "-d")) {
-	    if (++i >= argc) usage ();
+	    if (++i >= argc)
+		missing_arg(arg);
 
 	    displayname = argv[i];
 	    *pargc -= 2;
@@ -356,59 +376,64 @@ Get_Display_Name(int *pargc, /* MODIFIED
 
 
 /*
- * GetVersion (argc, argv) Look for -v1.2, -v1.3, or -v1.4.
+ * GetVersion (argc, argv) Look for -v followed by a version number.
  * If found remove it from command line.  Don't go past a lone -.
+ * Leave -v followed by non-numbers as it could be -vclass or -version.
  */
 
-static Version 
+static Version
 GetVersion(int *pargc, /* MODIFIED */
 	   char **argv)  /* MODIFIED */
 {
     int     argc = *pargc;
     char    **pargv = argv+1;
-    Version version = VERSION1_6;
+    Version version = VERSION1_7;
     Bool    found = False;
 
     for (int i = 1; i != argc; i++) {
 	char *arg = argv[i];
 
-	if (!strcmp (arg, "-v1.2")) {
-	    version = VERSION1_2;
-	    *pargc -= 1;
-	    if (found) {
-		fprintf(stderr, "Warning: multiple version specifications\n");
-	    }
-	    found = True;
-	    continue;
-	}
-	if (!strcmp (arg, "-v1.3")) {
-	    version = VERSION1_3;
-	    *pargc -= 1;
-	    if (found) {
-		fprintf(stderr, "Warning: multiple version specifications\n");
-	    }
-	    found = True;
-	    continue;
-	}
-	if (!strcmp (arg, "-v1.4")) {
-	    version = VERSION1_4;
-	    *pargc -= 1;
-	    if (found) {
-		fprintf(stderr, "Warning: multiple version specifications\n");
-	    }
-	    found = True;
-	    continue;
-	}
-	if (!strcmp (arg, "-v1.5")) {
-	    version = VERSION1_5;
-	    *pargc -= 1;
-	    if (found) {
-		fprintf(stderr, "Warning: multiple version specifications\n");
+	if (arg[0] == '-' && arg[1] == 'v') {
+	    if (arg[2] == '1' && arg[3] == '.' && arg[5] == '\0') {
+		switch (arg[4]) {
+		case '2':
+		    version = VERSION1_2;
+		    break;
+		case '3':
+		    version = VERSION1_3;
+		    break;
+		case '4':
+		    version = VERSION1_4;
+		    break;
+		case '5':
+		    version = VERSION1_5;
+		    break;
+		case '6':
+		    version = VERSION1_6;
+		    break;
+		case '7':
+		    version = VERSION1_7;
+		    break;
+		default:
+		    goto unknown_version;
+		}
+
+		if (found) {
+		    fprintf(stderr, "Warning: multiple version specifications\n");
+		}
+		found = True;
+
+		/* reduce arg count and skip copying this arg to pargv */
+		*pargc -= 1;
+		continue;
+	    } else if (isdigit(arg[2])) {
+	      unknown_version:
+		fprintf(stderr, "Error: unknown version specification: %s\n",
+			arg);
+		exit(1);
 	    }
-	    found = True;
-	    continue;
 	}
-	if (!strcmp(arg,"-")) {
+	else if (!strcmp(arg,"-")) {
 	    while (i<argc)  *pargv++ = argv[i++];
 	    break;
 	}
@@ -449,7 +474,7 @@ void
 AbortTest(void)
 {
     fflush(stdout);
-    
+
     XSetScreenSaver(xparms.d, ssTimeout, ssInterval, ssPreferBlanking,
 	ssAllowExposures);
     XFlush(xparms.d);
@@ -461,8 +486,8 @@ AbortTest(void)
 ************************************************/
 
 
-static void 
-usage(void)
+static void
+usage(usage_contents show, int exit_status)
 {
     int     i = 0;
     static const char *help_message =
@@ -479,10 +504,10 @@ usage(void)
 "    -all                      do all tests\n"
 "    -range <test1>[,<test2>]  like all, but do <test1> to <test2>\n"
 "    -labels                   generate test labels for use by fillblnk\n"
-"    -fg                       the foreground color to use\n"
-"    -bg                       the background color to use\n"
+"    -fg <color-or-pixel>      the foreground color to use\n"
+"    -bg <color-or-pixel>      the background color to use\n"
 "    -clips <default>          default number of clip windows per test\n"
-"    -ddbg                     the background color to use for DoubleDash\n"
+"    -ddbg <color-or-pixel>    the background color to use for DoubleDash\n"
 "    -rop <rop0 rop1 ...>      use the given rops to draw (default = GXcopy)\n"
 "    -pm <pm0 pm1 ...>         use the given planemasks to draw (default = ~0)\n"
 "    -depth <depth>            use a visual with <depth> planes per pixel\n"
@@ -491,42 +516,48 @@ usage(void)
 "    -subs <s0 s1 ...>         a list of the number of sub-windows to use\n"
 "    -v1.2                     perform only v1.2 tests using old semantics\n"
 "    -v1.3                     perform only v1.3 tests using old semantics\n"
+"    -v1.4                     perform only v1.4 tests using old semantics\n"
+"    -v1.5                     perform only v1.5 tests using old semantics\n"
+"    -v1.6                     perform only v1.6 tests using old semantics\n"
+"    -v1.7                     perform only v1.7 tests using old semantics\n"
+"    -version                  print version and exit\n"
 "    -su                       request save unders on windows\n"
 "    -bs <backing_store_hint>  WhenMapped or Always (default = NotUseful)\n"
+"    -help [options|tests|all] list general options, test options, or both\n"
 ;
 
     fflush(stdout);
-    fprintf(stderr, "usage: %s [-options ...]\n%s", program_name, help_message);
-    while (test[i].option != NULL) {
-	if (test[i].versions & xparms.version ) {
-	    fprintf(stderr, "    %-24s   %s\n",
-		test[i].option,
-		test[i].label14 ? test[i].label14 : test[i].label);
-	}
-        i++;
+    if (show == USAGE_OPTIONS || show == USAGE_ALL) {
+        fprintf(stderr, "usage: %s [-options ...]\n%s",
+                program_name, help_message);
+    }
+    if (show == USAGE_TESTS || show == USAGE_ALL) {
+        while (test[i].option != NULL) {
+            if (test[i].versions & xparms.version ) {
+                fprintf(stderr, "    %-24s   %s\n",
+                        test[i].option,
+                        test[i].label14 ? test[i].label14 : test[i].label);
+            }
+            i++;
+        }
     }
     fprintf(stderr, "\n");
-    
-    /* Print out original command line as the above usage message is so long */
-    for (i = 0; i != saveargc; i++) {
-	fprintf(stderr, "%s ", saveargv[i]);
-    }
-    fprintf(stderr, "\n\n");
-    exit (1);
+
+    exit (exit_status);
 }
 
-void 
+void
 NullProc(XParms xp, Parms p)
 {
 }
 
-int 
+int
 NullInitProc(XParms xp, Parms p, int64_t reps)
 {
     return reps;
 }
 
-static void 
+static void
 HardwareSync(XParms xp)
 {
     /*
@@ -537,13 +568,13 @@ HardwareSync(XParms xp)
      */
     XImage *image;
 
-    image = XGetImage(xp->d, xp->p ? xp->p : xp->w, HSx, HSy, 
+    image = XGetImage(xp->d, xp->p ? xp->p : xp->w, HSx, HSy,
 		      1, 1, ~0, ZPixmap);
     if (image) XDestroyImage(image);
 }
 
-static void 
-DoHardwareSync(XParms xp, Parms p, int64_t reps)    
+static void
+DoHardwareSync(XParms xp, Parms p, int64_t reps)
 {
     for (int i = 0; i != reps; i++) {
 	HardwareSync(xp);
@@ -553,13 +584,13 @@ DoHardwareSync(XParms xp, Parms p, int64
 
 static Test syncTest = {
     "syncTime", "Internal test for finding how long HardwareSync takes", NULL,
-    NullInitProc, DoHardwareSync, NullProc, NullProc, 
+    NullInitProc, DoHardwareSync, NullProc, NullProc,
     V1_2FEATURE, NONROP, 0,
     {1}
 };
 
 
-static Window 
+static Window
 CreatePerfWindow(XParms xp, int x, int y, int width, int height)
 {
     XSetWindowAttributes xswa;
@@ -584,14 +615,14 @@ CreatePerfWindow(XParms xp, int x, int y
     xswa.save_under = xp->save_under;
     w = XCreateWindow(xp->d, DefaultRootWindow(xp->d), x, y, width, height, 1,
         xp->vinfo.depth, CopyFromParent, xp->vinfo.visual,
-	CWBackPixel | CWBorderPixel | CWColormap | CWOverrideRedirect 
+	CWBackPixel | CWBorderPixel | CWColormap | CWOverrideRedirect
 	| CWBackingStore | CWSaveUnder, &xswa);
     XMapWindow (xp->d, w);
     return w;
 }
 
 
-static void 
+static void
 CreateClipWindows(XParms xp, int clips)
 {
     XWindowAttributes    xwa;
@@ -605,7 +636,7 @@ CreateClipWindows(XParms xp, int clips)
 } /* CreateClipWindows */
 
 
-static void 
+static void
 DestroyClipWindows(XParms xp, int clips)
 {
     if (clips > MAXCLIP) clips = MAXCLIP;
@@ -615,7 +646,7 @@ DestroyClipWindows(XParms xp, int clips)
 } /* DestroyClipWindows */
 
 
-static double 
+static double
 DoTest(XParms xp, Test *test, int64_t reps)
 {
     double  time;
@@ -624,7 +655,7 @@ DoTest(XParms xp, Test *test, int64_t re
     /* Tell screen-saver to restart counting again.  See comments below for the
        XSetScreenSaver call. */
     XForceScreenSaver(xp->d, ScreenSaverReset);
-    HardwareSync (xp); 
+    HardwareSync (xp);
     InitTimes ();
     (*test->proc) (xp, &test->parms, reps);
     HardwareSync(xp);
@@ -685,9 +716,9 @@ CalibrateTest(XParms xp, Test *test, int
 	CheckAbort ();
 
 	if (didreps != reps) {
-	    /* The test can't do the number of reps as we asked for.  
+	    /* The test can't do the number of reps as we asked for.
 	       Give up */
-	    *usecperobj = 
+	    *usecperobj =
 		usecs / (double)(didreps * test->parms.objects);
 	    return didreps;
 	}
@@ -717,7 +748,7 @@ CalibrateTest(XParms xp, Test *test, int
     return reps;
 } /* CalibrateTest */
 
-static void 
+static void
 CreatePerfGCs(XParms xp, int func, unsigned long pm)
 {
     XGCValues gcvfg, gcvbg, gcvddbg,gcvddfg;
@@ -738,40 +769,31 @@ CreatePerfGCs(XParms xp, int func, unsig
     gcvbg.function = func;
     gcvddfg.function = func;
     gcvddbg.function = func;
-    
-    if (func == GXxor) {
-	/* Make test look good visually if possible */
-	gcvbg.foreground = gcvfg.foreground = bg ^ fg;
-	gcvbg.background = gcvfg.background = bg;
-	/* Double Dash GCs (This doesn't make a huge amount of sense) */
-	gcvddbg.foreground = gcvddfg.foreground = bg ^ fg;
-	gcvddbg.background = gcvddfg.foreground = bg ^ ddbg;
-    } else {
-	gcvfg.foreground = fg;
-	gcvfg.background = bg;
-	gcvbg.foreground = bg;
-	gcvbg.background = fg;
-	gcvddfg.foreground = fg;
-	gcvddfg.background = ddbg;
-	gcvddbg.foreground = ddbg;
-	gcvddbg.background = fg;
-    }
+
+    gcvfg.foreground = fg;
+    gcvfg.background = bg;
+    gcvbg.foreground = bg;
+    gcvbg.background = fg;
+    gcvddfg.foreground = fg;
+    gcvddfg.background = ddbg;
+    gcvddbg.foreground = ddbg;
+    gcvddbg.background = fg;
     xp->fggc = XCreateGC(xp->d, xp->w,
 	GCForeground | GCBackground | GCGraphicsExposures
       | GCFunction | GCPlaneMask, &gcvfg);
-    xp->bggc = XCreateGC(xp->d, xp->w, 
+    xp->bggc = XCreateGC(xp->d, xp->w,
 	GCForeground | GCBackground | GCGraphicsExposures
       | GCFunction | GCPlaneMask, &gcvbg);
     xp->ddfggc = XCreateGC(xp->d, xp->w,
 	GCForeground | GCBackground | GCGraphicsExposures
       | GCFunction | GCPlaneMask, &gcvddfg);
-    xp->ddbggc = XCreateGC(xp->d, xp->w, 
+    xp->ddbggc = XCreateGC(xp->d, xp->w,
 	GCForeground | GCBackground | GCGraphicsExposures
       | GCFunction | GCPlaneMask, &gcvddbg);
 }
 
 
-static void 
+static void
 DestroyPerfGCs(XParms xp)
 {
     XFreeGC(xp->d, xp->fggc);
@@ -780,7 +802,7 @@ DestroyPerfGCs(XParms xp)
     XFreeGC(xp->d, xp->ddbggc);
 }
 
-static unsigned long 
+static unsigned long
 AllocateColor(Display *display, const char *name, unsigned long pixel)
 {
     XColor      color;
@@ -805,7 +827,7 @@ AllocateColor(Display *display, const ch
 } /* AllocateColor */
 
 
-static void 
+static void
 DisplayStatus(Display *d, const char *message, const char *test, int try)
 {
     char    s[500];
@@ -818,7 +840,7 @@ DisplayStatus(Display *d, const char *me
 }
 
 
-static void 
+static void
 ProcessTest(XParms xp, Test *test, int func, unsigned long pm, char *label)
 {
     double  time, totalTime;
@@ -928,9 +950,9 @@ main(int argc, char *argv[])
 	} else if (strcmp(argv[i], "-range") == 0) {
 	    char *cp1;
 	    char *cp2;
-	    
+
 	    if (argc <= ++i)
-		usage();
+		missing_arg(argv[i-1]);
 	    cp1 = argv[i];
 	    if (*cp1 == '-')
 		cp1++;
@@ -951,13 +973,19 @@ main(int argc, char *argv[])
 		    } while (!(strcmp(cp2, (test[k].option + 1)) == 0 &&
 			       (test[k].versions & xparms.version)) &&
 			     test[++k].option != NULL);
-		    if (*cp2 != '-' && test[k].option == NULL)
-			usage();
+		    if (*cp2 != '-' && test[k].option == NULL) {
+			fprintf(stderr, "Error: unknown test %s listed for %s\n",
+				cp2, argv[i-1]);
+			usage(USAGE_OPTIONS, EXIT_FAILURE);
+		    }
 		    break;
 		}
 	    }
-	    if (test[j].option == NULL)
-		usage();
+	    if (test[j].option == NULL) {
+		fprintf(stderr, "Error: unknown test %s listed for %s\n",
+			argv[i], argv[i-1]);
+		usage(USAGE_OPTIONS, EXIT_FAILURE);
+	    }
 	    foundOne = True;
 	} else if (strcmp (argv[i], "-sync") == 0) {
 	    synchronous = True;
@@ -970,44 +998,44 @@ main(int argc, char *argv[])
 	} else if (strcmp (argv[i], "-repeat") == 0) {
 	    i++;
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    repeat = atoi (argv[i]);
 	    if (repeat <= 0)
-	       usage ();
+		invalid_arg(argv[i], argv[i-1]);
 	} else if (strcmp (argv[i], "-time") == 0) {
 	    i++;
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    seconds = atoi (argv[i]);
 	    if (seconds <= 0)
-	       usage ();
+		invalid_arg(argv[i], argv[i-1]);
         } else if (strcmp (argv[i], "-pause") == 0) {
             ++i;
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    delay = atoi (argv[i]);
 	    if (delay < 0)
-	       usage ();
+                invalid_arg(argv[i], argv[i-1]);
 	} else if (strcmp(argv[i], "-fg") == 0) {
 	    i++;
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    foreground = argv[i];
         } else if (strcmp(argv[i], "-bg") == 0) {
 	    i++;
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    background = argv[i];
 	    if(ddbackground == NULL)
 		ddbackground = argv[i];
 	} else if (strcmp(argv[i], "-clips") == 0 ) {
 	    i++;
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    clips = atoi( argv[i] );
 	} else if (strcmp(argv[i], "-ddbg") == 0) {
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    i++;
 	    ddbackground = argv[i];
 	} else if (strcmp(argv[i], "-rop") == 0) {
@@ -1032,21 +1060,21 @@ main(int argc, char *argv[])
 	} else if (strcmp(argv[i], "-reps") == 0) {
 	    i++;
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    fixedReps = atoi (argv[i]);
 	    if (fixedReps <= 0)
-		usage ();
+		invalid_arg(argv[i], argv[i-1]);
         } else if (strcmp(argv[i], "-depth") == 0) {
 	    i++;
 	    if (argc <= i)
-                usage ();
+                missing_arg(argv[i-1]);
             depth = atoi(argv[i]);
             if (depth <= 0)
-		usage ();
+		invalid_arg(argv[i], argv[i-1]);
         } else if (strcmp(argv[i], "-vclass") == 0) {
 	    i++;
 	    if (argc <= i)
-                usage ();
+                missing_arg(argv[i-1]);
 	    for (j = StaticGray; j <= DirectColor; j++) {
 		if (strcmp(argv[i], visualClassNames[j]) == 0) {
 		    vclass = j;
@@ -1054,25 +1082,42 @@ main(int argc, char *argv[])
 		}
 	    }
             if (vclass < 0)
-		usage ();
+                invalid_arg(argv[i], argv[i-1]);
 	} else if (strcmp(argv[i], "-subs") == 0) {
 	    skip = GetNumbers (i+1, argc, argv, subWindows, &numSubWindows);
 	    i += skip;
-	} else if (strcmp(argv[i], "-v1.2") == 0) {
-	    xparms.version = VERSION1_2;
-	} else if (strcmp(argv[i], "-v1.3") == 0) {
-	    xparms.version = VERSION1_3;
 	} else if (strcmp(argv[i], "-su") == 0) {
 	    xparms.save_under = True;
 	} else if (strcmp(argv[i], "-bs") == 0) {
 	    i++;
 	    if (argc <= i)
-		usage ();
+		missing_arg(argv[i-1]);
 	    if (strcmp(argv[i], "WhenMapped") == 0) {
 	      xparms.backing_store = WhenMapped;
 	    } else if (strcmp(argv[i], "Always") == 0) {
 	      xparms.backing_store = Always;
-	    } else usage ();
+	    } else
+                invalid_arg(argv[i], argv[i-1]);
+	} else if ((strcmp(argv[i], "-version") == 0) ||
+		   (strcmp(argv[i], "--version") == 0)) {
+	    puts(PACKAGE_STRING);
+	    exit(EXIT_SUCCESS);
+	} else if ((strcmp(argv[i], "-help") == 0) ||
+		   (strcmp(argv[i], "--help") == 0)) {
+	    i++;
+	    /* default is to just show general options */
+	    if (argc <= i || (strcmp(argv[i], "options") == 0)) {
+		usage (USAGE_OPTIONS, EXIT_SUCCESS);
+	    }
+	    else if (strcmp(argv[i], "tests") == 0) {
+		usage (USAGE_TESTS, EXIT_SUCCESS);
+	    }
+	    else if (strcmp(argv[i], "all") == 0) {
+		usage (USAGE_ALL, EXIT_SUCCESS);
+	    }
+	    else {
+		invalid_arg(argv[i], argv[i-1]);
+	    }
 	} else {
 	    int len,found;
 	    ForEachTest (j) {
@@ -1098,9 +1143,12 @@ main(int argc, char *argv[])
 		    doit[j] = found = True;
 		}
 	    }
-	    if(!found)
-		usage ();
-	LegalOption: 
+	    if (!found) {
+		fprintf(stderr,
+			"Error: unrecognized option %s\n", argv[i]);
+		usage (USAGE_OPTIONS, EXIT_FAILURE);
+	    }
+	LegalOption:
 		foundOne = True;
 	}
     }
@@ -1114,7 +1162,7 @@ main(int argc, char *argv[])
 		    case NONROP:
 			printf ("%s\n", LABELP(i));
 			break;
-    
+
 		    case ROP:
 			/* Run it through all specified rops and planemasks */
 			for (rop = 0; rop < numRops; rop++) {
@@ -1136,7 +1184,7 @@ main(int argc, char *argv[])
 			    } /* for pm */
 			} /* for rop */
 			break;
-		    
+
 		    case PLANEMASK:
 			/* Run it through all specified planemasks */
 			for (pm = 0; pm < numPlanemasks; pm++) {
@@ -1149,7 +1197,7 @@ main(int argc, char *argv[])
 			    }
 			} /* for pm */
 			break;
-		    
+
 		    case WINDOW:
 			for (int child = 0; child != numSubWindows; child++) {
 			    printf ("%s (%ld kids)\n",
@@ -1174,8 +1222,10 @@ main(int argc, char *argv[])
 	exit(0);
     }
 
-    if (!foundOne)
-	usage ();
+    if (!foundOne) {
+	fprintf(stderr, "Error: no argument found for which test(s) to run\n");
+	usage (USAGE_OPTIONS, EXIT_FAILURE);
+    }
     xparms.d = Open_Display (displayName);
     screen = DefaultScreen(xparms.d);
 
@@ -1233,7 +1283,7 @@ main(int argc, char *argv[])
 	}
     }
     xparms.cmap = cmap;
-    
+
     printf("x11perf - X11 performance program, version %s\n",
 	   xparms.version & VERSION1_5 ? "1.5" :
 	   xparms.version & VERSION1_4 ? "1.4" :
@@ -1251,7 +1301,7 @@ main(int argc, char *argv[])
        saver off, but this causes problems on some servers.  We also reset
        the screen-saver timer each test, as 8 hours is about the maximum time
        we can use, and that isn't long enough for some X terminals using a
-       serial protocol to finish all the tests.  As long as the tests run to 
+       serial protocol to finish all the tests.  As long as the tests run to
        completion, the old screen-saver values are restored. */
     XForceScreenSaver(xparms.d, ScreenSaverReset);
     XGetScreenSaver(xparms.d, &ssTimeout, &ssInterval, &ssPreferBlanking,
@@ -1264,7 +1314,7 @@ main(int argc, char *argv[])
 #ifdef SIGHUP
     (void) signal(SIGHUP, Cleanup);
 #endif
-    XSetScreenSaver(xparms.d, 8 * 3600, ssInterval, ssPreferBlanking, 
+    XSetScreenSaver(xparms.d, 8 * 3600, ssInterval, ssPreferBlanking,
 	ssAllowExposures);
 
     if (drawToFakeServer) {
@@ -1292,13 +1342,13 @@ main(int argc, char *argv[])
     HSy = HEIGHT-1;
     if (window_y + 1 + HEIGHT > DisplayHeight(xparms.d, screen))
 	HSy = DisplayHeight(xparms.d, screen) - (1 + window_y + 1);
-    status = CreatePerfWindow(&xparms, window_x, HEIGHT+5, WIDTH, 20);
-    tgcv.foreground = 
+    status = CreatePerfWindow(&xparms, window_x, window_y + HEIGHT+3, WIDTH, 20);
+    tgcv.foreground =
 	AllocateColor(xparms.d, "black", BlackPixel(xparms.d, screen));
-    tgcv.background = 
+    tgcv.background =
 	AllocateColor(xparms.d, "white", WhitePixel(xparms.d, screen));
     tgc = XCreateGC(xparms.d, status, GCForeground | GCBackground, &tgcv);
-   
+
     xparms.p = (Pixmap)0;
 
     if (synchronous)
@@ -1306,7 +1356,7 @@ main(int argc, char *argv[])
 
     /* Get mouse pointer out of the way of the performance window.  On
        software cursor machines it will slow graphics performance.  On
-       all current MIT-derived servers it will slow window 
+       all current MIT-derived servers it will slow window
        creation/configuration performance. */
     XWarpPointer(xparms.d, None, status, 0, 0, 0, 0, WIDTH+32, 20+32);
 
@@ -1349,7 +1399,7 @@ main(int argc, char *argv[])
 			} /* for pm */
 		    } /* for rop */
 		    break;
-		
+
 		case PLANEMASK:
 		    /* Run it through all specified planemasks */
 		    for (pm = 0; pm < numPlanemasks; pm++) {
@@ -1364,7 +1414,7 @@ main(int argc, char *argv[])
 				    planemasks[pm], label);
 		    } /* for pm */
 		    break;
-		
+
 		case WINDOW:
 		    /* Loop through number of children array */
 		    for (int child = 0; child != numSubWindows; child++) {
@@ -1421,7 +1471,7 @@ GetWords (int argi, int argc, char **arg
     int	    count;
 
     if (argc <= argi)
-	usage();
+	missing_arg(argv[argi-1]);
     count = 0;
     while (argv[argi] && *(argv[argi]) != '-') {
 	*wordsp++ = argv[argi];
@@ -1496,7 +1546,7 @@ GetRops (int argi, int argc, char **argv
 	    }
 	}
 	if (rop == NUM_ROPS) {
-	    usage ();
+	    usage (USAGE_OPTIONS, EXIT_FAILURE);
 	    fprintf (stderr, "unknown rop name %s\n", words[i]);
 	}
     }
@@ -1528,7 +1578,7 @@ GetPops (int argi, int argc, char **argv
 	    }
 	}
 	if (pop == NUM_POPS) {
-	    usage ();
+	    usage (USAGE_OPTIONS, EXIT_FAILURE);
 	    fprintf (stderr, "unknown picture op name %s\n", words[i]);
 	}
     }
@@ -1573,7 +1623,7 @@ GetFormats (int argi, int argc, char **a
 	}
 	format = FormatFromName (words[i]);
 	if (format < 0) {
-	    usage ();
+	    usage (USAGE_OPTIONS, EXIT_FAILURE);
 	    fprintf (stderr, "unknown format name %s\n", words[i]);
 	}
 	formatsp[i] = format;

Index: xsrc/external/mit/xfs/dist/os/connection.c
diff -u xsrc/external/mit/xfs/dist/os/connection.c:1.4 xsrc/external/mit/xfs/dist/os/connection.c:1.5
--- xsrc/external/mit/xfs/dist/os/connection.c:1.4	Mon Jul 11 08:42:42 2022
+++ xsrc/external/mit/xfs/dist/os/connection.c	Sat Nov 16 08:49:08 2024
@@ -325,9 +325,9 @@ MakeNewConnections(void)
 
 	_FontTransSetOption(new_trans_conn, TRANS_NONBLOCKING, 1);
 
-	oc = (OsCommPtr) fsalloc(sizeof(OsCommRec));
+	oc = (OsCommPtr) FSalloc(sizeof(OsCommRec));
 	if (!oc) {
-	    fsfree(oc);
+	    FSfree(oc);
 	    error_conn_max(new_trans_conn);
 	    _FontTransClose(new_trans_conn);
 	    continue;
@@ -431,7 +431,7 @@ close_fd(OsCommPtr oc)
     if (!XFD_ANYSET(&ClientsWriteBlocked))
 	AnyClientsWriteBlocked = FALSE;
     FD_CLR(fd, &OutputPending);
-    fsfree(oc);
+    FSfree(oc);
 }
 
 void

Index: xsrc/external/mit/xfs/dist/os/io.c
diff -u xsrc/external/mit/xfs/dist/os/io.c:1.3 xsrc/external/mit/xfs/dist/os/io.c:1.4
--- xsrc/external/mit/xfs/dist/os/io.c:1.3	Sun Mar 11 10:08:03 2018
+++ xsrc/external/mit/xfs/dist/os/io.c	Sat Nov 16 08:49:09 2024
@@ -135,8 +135,8 @@ ReadRequest(ClientPtr client)
 	    ConnectionInputPtr aci = AvailableInput->input;
 
 	    if (aci->size > BUFWATERMARK) {
-		fsfree(aci->buffer);
-		fsfree(aci);
+		FSfree(aci->buffer);
+		FSfree(aci);
 	    } else {
 		aci->next = FreeInputs;
 		FreeInputs = aci;
@@ -179,7 +179,7 @@ ReadRequest(ClientPtr client)
 	    if (needed > oci->size) {
 		char       *ibuf;
 
-		ibuf = (char *) fsrealloc(oci->buffer, needed);
+		ibuf = (char *) FSrealloc(oci->buffer, needed);
 		if (!ibuf) {
 		    yield_control_death();
 		    return -1;
@@ -218,7 +218,7 @@ ReadRequest(ClientPtr client)
 		(oci->bufcnt < BUFSIZE) && (needed < BUFSIZE)) {
 	    char       *ibuf;
 
-	    ibuf = (char *) fsrealloc(oci->buffer, BUFSIZE);
+	    ibuf = (char *) FSrealloc(oci->buffer, BUFSIZE);
 	    if (ibuf) {
 		oci->size = BUFSIZE;
 		oci->buffer = ibuf;
@@ -275,8 +275,8 @@ InsertFakeRequest(ClientPtr client, char
 	    register ConnectionInputPtr aci = AvailableInput->input;
 
 	    if (aci->size > BUFWATERMARK) {
-		fsfree(aci->buffer);
-		fsfree(aci);
+		FSfree(aci->buffer);
+		FSfree(aci);
 	    } else {
 		aci->next = FreeInputs;
 		FreeInputs = aci;
@@ -299,7 +299,7 @@ InsertFakeRequest(ClientPtr client, char
     if ((gotnow + count) > oci->size) {
 	char       *ibuf;
 
-	ibuf = (char *) fsrealloc(oci->buffer, gotnow + count);
+	ibuf = (char *) FSrealloc(oci->buffer, gotnow + count);
 	if (!ibuf)
 	    return FALSE;
 	oci->size = gotnow + count;
@@ -414,9 +414,6 @@ FlushClient(
 	    notWritten -= len;
 	    todo = notWritten;
 	} else if (ETEST(errno)
-#ifdef SUNSYSV /* check for another brain-damaged OS bug */
-		 || (errno == 0)
-#endif
 #ifdef EMSGSIZE /* check for another brain-damaged OS bug */
 		 || ((errno == EMSGSIZE) && (todo == 1))
 #endif
@@ -441,7 +438,7 @@ FlushClient(
 	    if (notWritten > oco->size) {
 		unsigned char *obuf;
 
-		obuf = (unsigned char *) fsrealloc(oco->buf,
+		obuf = (unsigned char *) FSrealloc(oco->buf,
 					      notWritten + OutputBufferSize);
 		if (!obuf) {
 		    if (oc->trans_conn)
@@ -488,8 +485,8 @@ FlushClient(
 	    AnyClientsWriteBlocked = FALSE;
     }
     if (oco->size > BUFWATERMARK) {
-	fsfree(oco->buf);
-	fsfree(oco);
+	FSfree(oco->buf);
+	FSfree(oco);
     } else {
 	oco->next = FreeOutputs;
 	FreeOutputs = oco;
@@ -584,11 +581,13 @@ WriteToClient(ClientPtr client, int coun
     int flag = 0;
     if (NULL == buf) {
 	flag = -1;
-	buf = (char *)fsalloc(count); memset(buf, 0, count);
+	buf = (char *) FScalloc(1, count);
+	if (buf == NULL)
+	    FatalError("WriteToClient couldn't create client buffer\n");
     }
-     write_to_client_internal(client, count, buf, padlength[count & 3]);
+    write_to_client_internal(client, count, buf, padlength[count & 3]);
     if (flag)
-	fsfree(buf);
+	FSfree(buf);
 }
 
 static ConnectionInputPtr
@@ -596,12 +595,12 @@ AllocateInputBuffer(void)
 {
     register ConnectionInputPtr oci;
 
-    oci = (ConnectionInputPtr) fsalloc(sizeof(ConnectionInput));
+    oci = (ConnectionInputPtr) FSalloc(sizeof(ConnectionInput));
     if (!oci)
 	return (ConnectionInputPtr) NULL;
-    oci->buffer = (char *) fsalloc(BUFSIZE);
+    oci->buffer = (char *) FSalloc(BUFSIZE);
     if (!oci->buffer) {
-	fsfree(oci);
+	FSfree(oci);
 	return (ConnectionInputPtr) NULL;
     }
     oci->next = NULL;
@@ -617,12 +616,12 @@ AllocateOutputBuffer(void)
 {
     register ConnectionOutputPtr oco;
 
-    oco = (ConnectionOutputPtr) fsalloc(sizeof(ConnectionOutput));
+    oco = (ConnectionOutputPtr) FSalloc(sizeof(ConnectionOutput));
     if (!oco)
 	return (ConnectionOutputPtr) NULL;
-    oco->buf = (unsigned char *) fsalloc(BUFSIZE);
+    oco->buf = (unsigned char *) FSalloc(BUFSIZE);
     if (!oco->buf) {
-	fsfree(oco);
+	FSfree(oco);
 	return (ConnectionOutputPtr) NULL;
     }
     oco->size = BUFSIZE;
@@ -641,8 +640,8 @@ FreeOsBuffers(OsCommPtr oc)
 	AvailableInput = (OsCommPtr) NULL;
     if ((oci = oc->input) != (ConnectionInputPtr) 0) {
 	if (FreeInputs) {
-	    fsfree(oci->buffer);
-	    fsfree(oci);
+	    FSfree(oci->buffer);
+	    FSfree(oci);
 	} else {
 	    FreeInputs = oci;
 	    oci->next = (ConnectionInputPtr) NULL;
@@ -653,8 +652,8 @@ FreeOsBuffers(OsCommPtr oc)
     }
     if ((oco = oc->output) != (ConnectionOutputPtr) 0) {
 	if (FreeOutputs) {
-	    fsfree(oco->buf);
-	    fsfree(oco);
+	    FSfree(oco->buf);
+	    FSfree(oco);
 	} else {
 	    FreeOutputs = oco;
 	    oco->next = (ConnectionOutputPtr) NULL;
@@ -671,12 +670,12 @@ ResetOsBuffers(void)
 
     while ((oci = FreeInputs) != (ConnectionInputPtr) 0) {
 	FreeInputs = oci->next;
-	fsfree(oci->buffer);
-	fsfree(oci);
+	FSfree(oci->buffer);
+	FSfree(oci);
     }
     while ((oco = FreeOutputs) != (ConnectionOutputPtr) 0) {
 	FreeOutputs = oco->next;
-	fsfree(oco->buf);
-	fsfree(oco);
+	FSfree(oco->buf);
+	FSfree(oco);
     }
 }

Index: xsrc/external/mit/xfs/include/config.h
diff -u xsrc/external/mit/xfs/include/config.h:1.6 xsrc/external/mit/xfs/include/config.h:1.7
--- xsrc/external/mit/xfs/include/config.h:1.6	Tue Jul 12 01:26:29 2022
+++ xsrc/external/mit/xfs/include/config.h	Sat Nov 16 08:49:09 2024
@@ -73,7 +73,7 @@
 #define PACKAGE_NAME "xfs"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "xfs 1.2.1"
+#define PACKAGE_STRING "xfs 1.2.2"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "xfs"
@@ -82,7 +82,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.2.1"
+#define PACKAGE_VERSION "1.2.2"
 
 /* Major version of this package */
 #define PACKAGE_VERSION_MAJOR 1
@@ -91,7 +91,7 @@
 #define PACKAGE_VERSION_MINOR 2
 
 /* Patch version of this package */
-#define PACKAGE_VERSION_PATCHLEVEL 1
+#define PACKAGE_VERSION_PATCHLEVEL 2
 
 /* Define to 1 if all of the C90 standard headers exist (not just the ones
    required in a freestanding environment). This macro is provided for
@@ -196,7 +196,7 @@
 
 
 /* Version number of package */
-#define VERSION "1.2.1"
+#define VERSION "1.2.2"
 
 /* Build support for starting from inetd */
 #define XFS_INETD 1

Index: xsrc/external/mit/xrandr/dist/xrandr.c
diff -u xsrc/external/mit/xrandr/dist/xrandr.c:1.15 xsrc/external/mit/xrandr/dist/xrandr.c:1.16
--- xsrc/external/mit/xrandr/dist/xrandr.c:1.15	Sun Jan  8 09:59:51 2023
+++ xsrc/external/mit/xrandr/dist/xrandr.c	Sat Nov 16 08:49:09 2024
@@ -1063,17 +1063,12 @@ set_gamma_info(output_t *output)
     if (!output->crtc_info)
 	return;
 
-    size = XRRGetCrtcGammaSize(dpy, output->crtc_info->crtc.xid);
-    if (!size) {
-	warning("Failed to get size of gamma for output %s\n", output->output.string);
-	return;
-    }
-
     crtc_gamma = XRRGetCrtcGamma(dpy, output->crtc_info->crtc.xid);
     if (!crtc_gamma) {
 	warning("Failed to get gamma for output %s\n", output->output.string);
 	return;
     }
+    size = crtc_gamma->size;
 
     /*
      * Here is a bit tricky because gamma is a whole curve for each
@@ -1691,8 +1686,8 @@ apply (void)
 	XGrabServer (dpy);
     
     /*
-     * Turn off any crtcs which are to be disabled or which are
-     * larger than the target size
+     * Turn off any crtcs which are to be disabled or which
+     * need to be updated
      */
     for (int c = 0; c < res->ncrtc; c++)
     {
@@ -1705,30 +1700,32 @@ apply (void)
 	
 	/* 
 	 * If this crtc is to be left enabled, make
-	 * sure the old size fits then new screen
+	 * sure the new geometry is unchanged and fits
 	 */
 	if (crtc->mode_info) 
 	{
 	    XRRModeInfo	*old_mode = find_mode_by_xid (crtc_info->mode);
-	    int x, y, w, h;
-	    box_t bounds;
+	    box_t cur, pending;
 
 	    if (!old_mode) 
 		panic (RRSetConfigFailed, crtc);
-	    
-	    /* old position and size information */
-	    mode_geometry (old_mode, crtc_info->rotation,
-			   &crtc->current_transform.transform,
-			   &bounds);
 
-	    x = crtc_info->x + bounds.x1;
-	    y = crtc_info->y + bounds.y1;
-	    w = bounds.x2 - bounds.x1;
-	    h = bounds.y2 - bounds.y1;
+	    mode_geometry (old_mode, crtc_info->rotation,
+			   &crtc->current_transform.transform, &cur);
+	    mode_geometry (crtc->mode_info, crtc_info->rotation,
+			   &crtc->pending_transform.transform, &pending);
+
+	    if (cur.x1 == pending.x1 && cur.x2 == pending.x2 &&
+	        cur.y1 == pending.y1 && cur.y2 == pending.y2) {
+		int x = crtc_info->x + cur.x1;
+		int y = crtc_info->y + cur.y1;
+		int w = cur.x2 - cur.x1;
+		int h = cur.y2 - cur.y1;
 
-	    /* if it fits, skip it */
-	    if (x + w <= fb_width && y + h <= fb_height) 
-		continue;
+		/* if it fits, skip it */
+		if (x + w <= fb_width && y + h <= fb_height)
+		    continue;
+	    }
 	    crtc->changing = True;
 	}
 	s = crtc_disable (crtc);
@@ -2274,6 +2271,38 @@ check_strtod(char *s)
     return result;
 }
 
+static void *
+ctm_from_string(const char *str, int *returned_nitems)
+{
+    double ctm[9];
+    long *prop;
+    int i;
+
+    if (sscanf (str, "%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf",
+		&ctm[0],&ctm[1],&ctm[2],
+		&ctm[3],&ctm[4],&ctm[5],
+		&ctm[6],&ctm[7],&ctm[8]) != 9)
+	return NULL;
+
+    prop = malloc (2*9*sizeof(prop[0]));
+    if (!prop)
+	return NULL;
+
+    for (i = 0; i < 9; i++) {
+	unsigned long long tmp;
+
+	tmp = fabs (ctm[i]) * (1ULL << 32);
+	if (ctm[i] < 0.0)
+	    tmp |= 1ULL << 63;
+
+	prop[i*2+0] = tmp & 0xffffffff;
+	prop[i*2+1] = tmp >> 32;
+    }
+
+    *returned_nitems = 2*9;
+
+    return prop;
+}
 
 static void *
 property_values_from_string(const char *str, const Atom type, const int format,
@@ -2462,6 +2491,32 @@ print_guid(const unsigned char *prop)
 }
 
 static void
+print_ctm(const unsigned long *prop)
+{
+    printf("\t");
+    for (int i = 0; i < 9; i++)
+    {
+	unsigned long long tmp;
+	double c;
+
+	tmp = prop[2*i+1];
+	tmp <<= 32;
+	tmp |= prop[2*i+0];
+
+	c = (double)(tmp & ~(1ULL << 63)) / (1ULL << 32);
+	if (tmp & (1ULL << 63))
+	    c = -c;
+
+	printf("%f", c);
+	if (i == 2 || i == 5)
+	    printf("\n\t\t");
+	else if (i != 8)
+	    printf(" ");
+    }
+    printf("\n");
+}
+
+static void
 print_output_property(const char *atom_name,
                       int value_format,
                       Atom value_type,
@@ -2498,6 +2553,12 @@ print_output_property(const char *atom_n
 	print_guid (prop);
 	return;
     }
+    else if (strcmp (atom_name, "CTM") == 0 && value_format == 32 &&
+	     value_type == XA_INTEGER && nitems == 9*2)
+    {
+	print_ctm ((unsigned long *)prop);
+	return;
+    }
 
     for (int k = 0; k < nitems; k++)
     {
@@ -3364,6 +3425,7 @@ main (int argc, char **argv)
 	    for (output_prop_t *prop = output->props; prop; prop = prop->next)
 	    {
 		Atom		name = XInternAtom (dpy, prop->name, False);
+		char            *atom_name = XGetAtomName (dpy, name);
 		Atom		type;
 		int		format = 0;
 		unsigned char	*data, *malloced_data = NULL;
@@ -3391,8 +3453,12 @@ main (int argc, char **argv)
 		    format = actual_format;
 		}
 
-		malloced_data = property_values_from_string
-		    (prop->value, type, actual_format, &nelements);
+		if (strcmp (atom_name, "CTM") == 0 && type == XA_INTEGER && actual_format == 32)
+		    malloced_data = ctm_from_string (prop->value, &nelements);
+
+		if (!malloced_data)
+		    malloced_data = property_values_from_string (prop->value, type,
+								 actual_format, &nelements);
 
 		if (malloced_data)
 		{

Index: xsrc/external/mit/xtrans/dist/Xtrans.c
diff -u xsrc/external/mit/xtrans/dist/Xtrans.c:1.2 xsrc/external/mit/xtrans/dist/Xtrans.c:1.3
--- xsrc/external/mit/xtrans/dist/Xtrans.c:1.2	Mon Jun 19 07:23:39 2023
+++ xsrc/external/mit/xtrans/dist/Xtrans.c	Sat Nov 16 08:49:09 2024
@@ -150,7 +150,6 @@ TRANS(SelectTransport) (const char *prot
 #ifndef HAVE_STRCASECMP
     char 	protobuf[PROTOBUFSIZE];
 #endif
-    int		i;
 
     prmsg (3,"SelectTransport(%s)\n", protocol);
 
@@ -163,14 +162,14 @@ TRANS(SelectTransport) (const char *prot
     strncpy (protobuf, protocol, PROTOBUFSIZE - 1);
     protobuf[PROTOBUFSIZE-1] = '\0';
 
-    for (i = 0; i < PROTOBUFSIZE && protobuf[i] != '\0'; i++)
+    for (unsigned int i = 0; i < PROTOBUFSIZE && protobuf[i] != '\0'; i++)
 	if (isupper ((unsigned char)protobuf[i]))
 	    protobuf[i] = tolower ((unsigned char)protobuf[i]);
 #endif
 
     /* Look at all of the configured protocols */
 
-    for (i = 0; i < NUMTRANS; i++)
+    for (unsigned int i = 0; i < NUMTRANS; i++)
     {
 #ifndef HAVE_STRCASECMP
 	if (!strcmp (protobuf, Xtransports[i].transport->TransName))
@@ -204,9 +203,9 @@ TRANS(ParseAddress) (const char *address
 
     char	*mybuf, *tmpptr = NULL;
     const char	*_protocol = NULL;
-    char	*_host;
-    const char	*_port;
+    const char	*_host, *_port;
     char	hostnamebuf[256];
+    char	*_host_buf;
     int		_host_len;
 
     prmsg (3,"ParseAddress(%s)\n", address);
@@ -244,9 +243,10 @@ TRANS(ParseAddress) (const char *address
     _protocol = mybuf;
 
 
-   if ( ((mybuf = strchr (mybuf,'/')) == NULL) &&
-      ((mybuf = strrchr (tmpptr,':')) == NULL) )
-   {
+    if ((mybuf == NULL) ||
+        ( ((mybuf = strchr (mybuf, '/')) == NULL) &&
+          ((mybuf = strrchr (tmpptr, ':')) == NULL) ) )
+    {
 	/* address is in a bad format */
 	*protocol = NULL;
 	*host = NULL;
@@ -294,7 +294,7 @@ TRANS(ParseAddress) (const char *address
 
     /* Get the host part */
 
-    _host = mybuf;
+    _host = _host_buf = mybuf;
 
     if ((mybuf = strrchr (mybuf,':')) == NULL)
     {
@@ -317,10 +317,10 @@ TRANS(ParseAddress) (const char *address
     /* hostname in IPv6 [numeric_addr]:0 form? */
     else if ( (_host_len > 3) &&
       ((strcmp(_protocol, "tcp") == 0) || (strcmp(_protocol, "inet6") == 0))
-      && (*_host == '[') && (*(_host + _host_len - 1) == ']') ) {
+      && (_host_buf[0] == '[') && (_host_buf[_host_len - 1] == ']') ) {
 	struct sockaddr_in6 sin6;
 
-	*(_host + _host_len - 1) = '\0';
+	_host_buf[_host_len - 1] = '\0';
 
 	/* Verify address is valid IPv6 numeric form */
 	if (inet_pton(AF_INET6, _host + 1, &sin6) == 1) {
@@ -329,7 +329,7 @@ TRANS(ParseAddress) (const char *address
 	    _protocol = "inet6";
 	} else {
 	    /* It's not, restore it just in case some other code can use it. */
-	    *(_host + _host_len - 1) = ']';
+	    _host_buf[_host_len - 1] = ']';
 	}
     }
 #endif
@@ -500,18 +500,19 @@ TRANS(Reopen) (int type, int trans_id, i
     XtransConnInfo	ciptr = NULL;
     Xtransport		*thistrans = NULL;
     char		*save_port;
-    int			i;
 
     prmsg (2,"Reopen(%d,%d,%s)\n", trans_id, fd, port);
 
     /* Determine the transport type */
 
-    for (i = 0; i < NUMTRANS; i++)
+    for (unsigned int i = 0; i < NUMTRANS; i++)
+    {
 	if (Xtransports[i].transport_id == trans_id)
 	{
 	    thistrans = Xtransports[i].transport;
 	    break;
 	}
+    }
 
     if (thistrans == NULL)
     {
@@ -603,9 +604,8 @@ TRANS(GetReopenInfo) (XtransConnInfo cip
 		      int *trans_id, int *fd, char **port)
 
 {
-    int i;
-
-    for (i = 0; i < NUMTRANS; i++)
+    for (unsigned int i = 0; i < NUMTRANS; i++)
+    {
 	if (Xtransports[i].transport == ciptr->transptr)
 	{
 	    *trans_id = Xtransports[i].transport_id;
@@ -616,6 +616,7 @@ TRANS(GetReopenInfo) (XtransConnInfo cip
 	    else
 		return 1;
 	}
+    }
 
     return 0;
 }
@@ -1021,13 +1022,12 @@ complete_network_count (void)
 {
     int count = 0;
     int found_local = 0;
-    int i;
 
     /*
      * For a complete network, we only need one LOCALCONN transport to work
      */
 
-    for (i = 0; i < NUMTRANS; i++)
+    for (unsigned int i = 0; i < NUMTRANS; i++)
     {
 	if (Xtransports[i].transport->flags & TRANS_ALIAS
    	 || Xtransports[i].transport->flags & TRANS_NOLISTEN)
@@ -1060,7 +1060,7 @@ receive_listening_fds(const char* port, 
         return -1;
     }
 
-    for (i = 0; i < systemd_listen_fds && *count_ret < NUMTRANS; i++)
+    for (i = 0; i < systemd_listen_fds && *count_ret < (int)NUMTRANS; i++)
     {
         struct sockaddr_storage a;
         int ti;
@@ -1127,8 +1127,8 @@ TRANS(MakeAllCOTSServerListeners) (const
 
 {
     char		buffer[256]; /* ??? What size ?? */
-    XtransConnInfo	ciptr, temp_ciptrs[NUMTRANS];
-    int			status, i, j;
+    XtransConnInfo	ciptr, temp_ciptrs[NUMTRANS] = { NULL };
+    int			status, j;
 
 #if defined(IPv6) && defined(AF_INET6)
     int		ipv6_succ = 0;
@@ -1152,7 +1152,7 @@ TRANS(MakeAllCOTSServerListeners) (const
     if (receive_listening_fds(port, temp_ciptrs, count_ret) < 0)
 	return -1;
 
-    for (i = 0; i < NUMTRANS; i++)
+    for (unsigned int i = 0; i < NUMTRANS; i++)
     {
 	Xtransport *trans = Xtransports[i].transport;
 	unsigned int flags = 0;
@@ -1200,7 +1200,8 @@ TRANS(MakeAllCOTSServerListeners) (const
 		"MakeAllCOTSServerListeners: server already running\n");
 
 		for (j = 0; j < *count_ret; j++)
-		    TRANS(Close) (temp_ciptrs[j]);
+		    if (temp_ciptrs[j] != NULL)
+			TRANS(Close) (temp_ciptrs[j]);
 
 		*count_ret = 0;
 		*ciptrs_ret = NULL;
@@ -1244,7 +1245,7 @@ TRANS(MakeAllCOTSServerListeners) (const
 	    return -1;
 	}
 
-	for (i = 0; i < *count_ret; i++)
+	for (int i = 0; i < *count_ret; i++)
 	{
 	    (*ciptrs_ret)[i] = temp_ciptrs[i];
 	}
@@ -1349,7 +1350,7 @@ int TRANS(GetHostname) (char *buf, int m
     uname (&name);
     len = strlen (name.nodename);
     if (len >= maxlen) len = maxlen - 1;
-    strncpy (buf, name.nodename, len);
+    memcpy (buf, name.nodename, len);
     buf[len] = '\0';
 #else
     buf[0] = '\0';

Index: xsrc/external/mit/xtrans/dist/Xtranssock.c
diff -u xsrc/external/mit/xtrans/dist/Xtranssock.c:1.4 xsrc/external/mit/xtrans/dist/Xtranssock.c:1.5
--- xsrc/external/mit/xtrans/dist/Xtranssock.c:1.4	Mon Jun 19 06:44:24 2023
+++ xsrc/external/mit/xtrans/dist/Xtranssock.c	Sat Nov 16 08:49:09 2024
@@ -196,7 +196,8 @@ static Sockettrans2dev Sockettrans2devta
 static int TRANS(SocketINETClose) (XtransConnInfo ciptr);
 #endif
 
-#if defined(TCPCONN) || defined(TRANS_REOPEN)
+#if (defined(TCPCONN) && defined(TRANS_SERVER)) || defined(TRANS_REOPEN) || \
+    !defined(IPv6)
 static int
 is_numeric (const char *str)
 {
@@ -259,7 +260,7 @@ TRANS(SocketSelectFamily) (int first, co
 
     prmsg (3,"SocketSelectFamily(%s)\n", family);
 
-    for (i = first + 1; i < NUMSOCKETFAMILIES;i++)
+    for (i = first + 1; i < (int)NUMSOCKETFAMILIES; i++)
     {
         if (!strcmp (family, Sockettrans2devtab[i].transname))
 	    return i;
@@ -408,14 +409,22 @@ TRANS(SocketOpen) (int i, int type)
 	return NULL;
     }
 
-    if ((ciptr->fd = socket(Sockettrans2devtab[i].family, type,
-	Sockettrans2devtab[i].protocol)) < 0
+    ciptr->fd = socket(Sockettrans2devtab[i].family, type,
+                       Sockettrans2devtab[i].protocol);
+
 #ifndef WIN32
 #if (defined(X11_t) && !defined(USE_POLL)) || defined(FS_t) || defined(FONT_t)
-       || ciptr->fd >= sysconf(_SC_OPEN_MAX)
+    if (ciptr->fd >= sysconf(_SC_OPEN_MAX))
+    {
+	prmsg (2, "SocketOpen: socket() returned out of range fd %d\n",
+	       ciptr->fd);
+	close (ciptr->fd);
+	ciptr->fd = -1;
+    }
 #endif
 #endif
-      ) {
+
+    if (ciptr->fd < 0) {
 #ifdef WIN32
 	errno = WSAGetLastError();
 #endif
@@ -732,7 +741,7 @@ static int
 set_sun_path(const char *port, const char *upath, char *path, int abstract)
 {
     struct sockaddr_un s;
-    int maxlen = sizeof(s.sun_path) - 1;
+    ssize_t maxlen = sizeof(s.sun_path) - 1;
     const char *at = "";
 
     if (!port || !*port || !path)
@@ -748,7 +757,7 @@ set_sun_path(const char *port, const cha
     if (*port == '/') /* a full pathname */
 	upath = "";
 
-    if (strlen(port) + strlen(upath) > maxlen)
+    if ((ssize_t)(strlen(at) + strlen(upath) + strlen(port)) > maxlen)
 	return -1;
     snprintf(path, sizeof(s.sun_path), "%s%s%s", at, upath, port);
     return 0;
@@ -778,7 +787,7 @@ TRANS(SocketCreateListener) (XtransConnI
     else
 	retry = 0;
 
-    while (bind (fd, (struct sockaddr *) sockname, namelen) < 0)
+    while (bind (fd, sockname, namelen) < 0)
     {
 	if (errno == EADDRINUSE) {
 	    if (flags & ADDR_IN_USE_ALLOWED)
@@ -1382,6 +1391,11 @@ TRANS(SocketINETConnect) (XtransConnInfo
 	    }
 	} else {
 	    addrlist = malloc(sizeof(struct addrlist));
+	    if (addrlist == NULL) {
+		prmsg (1, "SocketINETConnect() can't allocate memory "
+			"for addrlist: %s\n", strerror(errno));
+		return TRANS_CONNECT_FAILED;
+	    }
 	    addrlist->firstaddr = NULL;
 	}
 

Reply via email to