Browse Source

dticon, dtpad, dtterm: fix session save issues (sprintf bogosity)

Diff supplied by: Giacomo Comes <comes@naic.edu>
Jon Trulson 1 year ago
parent
commit
61b58271f9
3 changed files with 50 additions and 27 deletions
  1. 12 5
      cde/programs/dticon/utils.c
  2. 22 10
      cde/programs/dtpad/session.c
  3. 16 12
      cde/programs/dtterm/DtTermMain.c

+ 12 - 5
cde/programs/dticon/utils.c

@@ -2321,6 +2321,7 @@ SaveSession( void )
         sprintf(bufr, "*iconic: True\n");
     else
         sprintf(bufr, "*iconic: False\n");
+    write (fd, bufr, strlen(bufr));
 
     /*** Get and write out the geometry info for our Window ***/
 
@@ -2337,12 +2338,18 @@ SaveSession( void )
     x -= vendorExt->vendor.xOffset;
     y -= vendorExt->vendor.yOffset;
 
-    snprintf(bufr, sizeof(bufr), "%s*x: %d\n", bufr, x);
-    snprintf(bufr, sizeof(bufr), "%s*y: %d\n", bufr, y);
-    snprintf(bufr, sizeof(bufr), "%s*width: %d\n", bufr, width);
-    snprintf(bufr, sizeof(bufr), "%s*height: %d\n", bufr, height);
+    snprintf(bufr, sizeof(bufr), "*x: %d\n", x);
+    write (fd, bufr, strlen(bufr));
+    snprintf(bufr, sizeof(bufr), "*y: %d\n", y);
+    write (fd, bufr, strlen(bufr));
+    snprintf(bufr, sizeof(bufr), "*width: %d\n", width);
+    write (fd, bufr, strlen(bufr));
+    snprintf(bufr, sizeof(bufr), "*height: %d\n", height);
     if (last_fname[0] != '\0')
-        snprintf(bufr, sizeof(bufr), "%s*file: %s\n", bufr, last_fname);
+    {
+        write (fd, bufr, strlen(bufr));
+        snprintf(bufr, sizeof(bufr), "*file: %s\n", last_fname);
+    }
 
     if(-1 == write (fd, bufr, strlen(bufr))) {
 	fprintf(stderr, "write() to session failed\n");

+ 22 - 10
cde/programs/dtpad/session.c

@@ -113,7 +113,10 @@ SaveMain(
         XmWidgetExtData        extData;
 
         if(XtIsRealized(pPad->mainWindow))
+        {
 	    sprintf(bufr,"*mainWindow%d.ismapped: True\n", padNum);
+	    write (fd, bufr, strlen(bufr));
+        }
 
         /* Get and write out the geometry info for our Window */
         x = XtX(XtParent(pPad->mainWindow));
@@ -131,10 +134,14 @@ SaveMain(
 	width = XtWidth(XtParent(pPad->mainWindow));
 	height = XtHeight(XtParent(pPad->mainWindow));
 
-        snprintf(bufr, sizeof(bufr), "%s*mainWindow%d.x: %d\n", bufr, padNum, x);
-        snprintf(bufr, sizeof(bufr), "%s*mainWindow%d.y: %d\n", bufr, padNum, y);
-        snprintf(bufr, sizeof(bufr), "%s*mainWindow%d.width: %d\n", bufr, padNum, width);
-        snprintf(bufr, sizeof(bufr), "%s*mainWindow%d.height: %d\n", bufr, padNum, height);
+        snprintf(bufr, sizeof(bufr), "*mainWindow%d.x: %d\n", padNum, x);
+        write (fd, bufr, strlen(bufr));
+        snprintf(bufr, sizeof(bufr), "*mainWindow%d.y: %d\n", padNum, y);
+        write (fd, bufr, strlen(bufr));
+        snprintf(bufr, sizeof(bufr), "*mainWindow%d.width: %d\n", padNum, width);
+        write (fd, bufr, strlen(bufr));
+        snprintf(bufr, sizeof(bufr), "*mainWindow%d.height: %d\n", padNum, height);
+        write (fd, bufr, strlen(bufr));
 
         wm_state_atom = XmInternAtom (XtDisplay(pPad->app_shell), "WM_STATE", 
                                       False);
@@ -146,27 +153,32 @@ SaveMain(
                             &nitems, &leftover, (unsigned char **) &wm_state);
 
         /* Write out if iconified our not */
-        snprintf(bufr, sizeof(bufr), "%s*mainWindow%d.iconify: ", bufr, padNum);
+        snprintf(bufr, sizeof(bufr), "*mainWindow%d.iconify: ", padNum);
+        write (fd, bufr, strlen(bufr));
 
         if (wm_state->state == IconicState)
-          snprintf(bufr, sizeof(bufr), "%sTrue\n", bufr);
+          snprintf(bufr, sizeof(bufr), "True\n");
         else
-          snprintf(bufr, sizeof(bufr), "%sFalse\n", bufr);
+          snprintf(bufr, sizeof(bufr), "False\n");
+        write (fd, bufr, strlen(bufr));
 
 	if(DtWsmGetWorkspacesOccupied(XtDisplay(pPad->app_shell), 
 				  XtWindow(pPad->app_shell), &pWsPresence,
 				  &numInfo) == Success)
 	{
 	    int i;
-	    snprintf(bufr, sizeof(bufr), "%s*mainWindow%d.workspaceList: ", bufr, padNum);
+	    snprintf(bufr, sizeof(bufr), "*mainWindow%d.workspaceList: ", padNum);
+	    write (fd, bufr, strlen(bufr));
 	    for(i = 0; i < numInfo; i++)
 	    {
 	        char *name =  XGetAtomName(XtDisplay(pPad->app_shell),
 					   pWsPresence[i]);
-		snprintf(bufr, sizeof(bufr), "%s %s", bufr, name);
+		snprintf(bufr, sizeof(bufr), " %s", name);
+		write (fd, bufr, strlen(bufr));
 		XtFree(name);
 	    }
-	    snprintf(bufr, sizeof(bufr), "%s\n", bufr);
+	    snprintf(bufr, sizeof(bufr), "\n");
+	    write (fd, bufr, strlen(bufr));
 	    XtFree((char *)pWsPresence);
 	}
 

+ 16 - 12
cde/programs/dtterm/DtTermMain.c

@@ -1583,9 +1583,13 @@ SaveTerm(
     height = XtHeight(XtParent(dtvw));
 
     sprintf(bufr, "*dtterm_%d.x: %d\n", cloneNum, x);
-    sprintf(bufr, "%s*dtterm_%d.y: %d\n", bufr, cloneNum, y);
-    sprintf(bufr, "%s*dtterm_%d.width: %d\n", bufr, cloneNum, width);
-    sprintf(bufr, "%s*dtterm_%d.height: %d\n", bufr, cloneNum, height);
+    write (fd, bufr, strlen(bufr));
+    sprintf(bufr, "*dtterm_%d.y: %d\n", cloneNum, y);
+    write (fd, bufr, strlen(bufr));
+    sprintf(bufr, "*dtterm_%d.width: %d\n", cloneNum, width);
+    write (fd, bufr, strlen(bufr));
+    sprintf(bufr, "*dtterm_%d.height: %d\n", cloneNum, height);
+    write (fd, bufr, strlen(bufr));
 
     /* Write out iconic state...
      */
@@ -1607,12 +1611,11 @@ SaveTerm(
 	    &bytesAfter,
 	    (unsigned char **) &prop))) {
 	if (prop->state == IconicState) {
-	    sprintf(bufr, "%s*dtterm_%d.iconify: %s\n", bufr, cloneNum,
-		    "True");
+	    sprintf(bufr, "*dtterm_%d.iconify: %s\n", cloneNum, "True");
 	} else {
-	    sprintf(bufr, "%s*dtterm_%d.iconify: %s\n", bufr, cloneNum,
-		    "False");
+	    sprintf(bufr, "*dtterm_%d.iconify: %s\n", cloneNum, "False");
 	}
+	write (fd, bufr, strlen(bufr));
     }
 	
     if(DtWsmGetWorkspacesOccupied(XtDisplay(dtvw), 
@@ -1620,20 +1623,21 @@ SaveTerm(
 				  &numInfo) == Success)
     {
 	int i;
-	sprintf(bufr, "%s*dtterm_%d.workspaceList: ", bufr, cloneNum);
+	sprintf(bufr, "*dtterm_%d.workspaceList: ", cloneNum);
+	write (fd, bufr, strlen(bufr));
 	for(i = 0; i < numInfo; i++)
 	{
 	    char *name =  XGetAtomName(XtDisplay(dtvw),
 				       pWsPresence[i]);
-	    sprintf(bufr, "%s %s", bufr, name);
+	    sprintf(bufr, " %s", name);
+	    write (fd, bufr, strlen(bufr));
 	    XtFree(name);
 	}
-	sprintf(bufr, "%s\n", bufr);
+	sprintf(bufr, "\n");
+	write (fd, bufr, strlen(bufr));
 	XtFree((char *)pWsPresence);
     }
 
-    write (fd, bufr, strlen(bufr));
-
     sprintf(bufr, "*dtterm_%d.userFontListIndex: %d\n", cloneNum,
 	    _DtTermViewGetUserFontListIndex((Widget )dtvw));
     write (fd, bufr, strlen(bufr));