From 383b5e4b59e05c574982fc3b84538efb84730ff9 Mon Sep 17 00:00:00 2001 From: Jon Trulson Date: Sat, 26 Feb 2022 15:09:43 -0700 Subject: [PATCH] dtstyle: fix bugs preventing SM save from working properly All of the dtstyle session save routines used sprintf/snprintf whereby the destination buffer was also a source buffer, like so: snprintf(bufr, sizeof(style.tmpBigStr), "%s*Fonts.x: %d\n", bufr, x); ^^^^ ^^ ^^^^ That results in undefined behavior, which mainly meant missing or currupted XRM resources being saved in the session file for dtstyle. --- cde/programs/dtstyle/Audio.c | 15 +++++++++------ cde/programs/dtstyle/Backdrop.c | 29 +++++++++++++++++------------ cde/programs/dtstyle/ColorEdit.c | 12 ++++++------ cde/programs/dtstyle/ColorMain.c | 23 +++++++++++++---------- cde/programs/dtstyle/Dtwm.c | 19 +++++++++++-------- cde/programs/dtstyle/Font.c | 16 ++++++++-------- cde/programs/dtstyle/I18nMain.c | 19 +++++++++++-------- cde/programs/dtstyle/Keyboard.c | 14 +++++++------- cde/programs/dtstyle/Main.h | 8 +++++++- cde/programs/dtstyle/MainWin.c | 17 +++++++++-------- cde/programs/dtstyle/Mouse.c | 18 +++++++++--------- cde/programs/dtstyle/SaveRestore.c | 14 +++----------- cde/programs/dtstyle/Screen.c | 14 +++++++------- cde/programs/dtstyle/Startup.c | 14 +++++++------- 14 files changed, 124 insertions(+), 108 deletions(-) diff --git a/cde/programs/dtstyle/Audio.c b/cde/programs/dtstyle/Audio.c index cf120a778..6ddffa331 100644 --- a/cde/programs/dtstyle/Audio.c +++ b/cde/programs/dtstyle/Audio.c @@ -691,7 +691,7 @@ saveAudio( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -702,6 +702,8 @@ saveAudio( else sprintf(bufr, "*audioDlg.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.audioDialog)); y = XtY(XtParent(style.audioDialog)); @@ -714,11 +716,12 @@ saveAudio( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, sizeof(style.tmpBigStr), "%s*audioDlg.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*audioDlg.y: %d\n", bufr, y); - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*audioDlg.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + + snprintf(bufr, sizeof(bufr), "*audioDlg.y: %d\n", y); + WRITE_STR2FD(fd, bufr); + } } diff --git a/cde/programs/dtstyle/Backdrop.c b/cde/programs/dtstyle/Backdrop.c index 42ab5bddb..987aade51 100644 --- a/cde/programs/dtstyle/Backdrop.c +++ b/cde/programs/dtstyle/Backdrop.c @@ -1210,7 +1210,7 @@ saveBackdrop( { Position x,y; Dimension width, height; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -1221,6 +1221,8 @@ saveBackdrop( else sprintf(bufr, "*backdropsDialog.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX (XtParent(style.backdropDialog)); y = XtY (XtParent(style.backdropDialog)); @@ -1235,17 +1237,20 @@ saveBackdrop( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, 1024, "%s*backdropsDialog.x: %d\n", bufr, x); - snprintf(bufr, 1024, "%s*backdropsDialog.y: %d\n", bufr, y); - snprintf(bufr, 1024, "%s*backdropsDialog.width: %d\n", bufr, width); - snprintf(bufr, 1024, "%s*backdropsDialog.height: %d\n", bufr, height); - snprintf(bufr, 1024, "%s*backdropsDialog.selectedItemNum: %d\n", bufr, - backdrops.selected); - snprintf(bufr, 1024, "%s*backdropsDialog.selectedItem: %s\n", bufr, - backdrops.bitmapNames[backdrops.selected]); - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*backdropsDialog.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*backdropsDialog.y: %d\n", y); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*backdropsDialog.width: %d\n", width); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*backdropsDialog.height: %d\n", height); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*backdropsDialog.selectedItemNum: %d\n", + backdrops.selected); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*backdropsDialog.selectedItem: %s\n", + backdrops.bitmapNames[backdrops.selected]); + WRITE_STR2FD(fd, bufr); } } diff --git a/cde/programs/dtstyle/ColorEdit.c b/cde/programs/dtstyle/ColorEdit.c index 45ec662df..0f5b3bca9 100644 --- a/cde/programs/dtstyle/ColorEdit.c +++ b/cde/programs/dtstyle/ColorEdit.c @@ -1707,7 +1707,7 @@ saveColorEdit( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -1717,6 +1717,7 @@ saveColorEdit( sprintf(bufr, "*colorEditDlg.ismapped: True\n"); else sprintf(bufr, "*colorEditDlg.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); /* Get and write out the geometry info for our Window */ x = XtX(XtParent(edit.DialogShell)); @@ -1730,12 +1731,11 @@ saveColorEdit( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, sizeof(style.tmpBigStr), "%s*colorEditDlg.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*colorEditDlg.y: %d\n", bufr, y); + snprintf(bufr, sizeof(bufr), "*colorEditDlg.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*colorEditDlg.y: %d\n", y); + WRITE_STR2FD(fd, bufr); /*any other parameter you want to save goes here*/ - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } } } diff --git a/cde/programs/dtstyle/ColorMain.c b/cde/programs/dtstyle/ColorMain.c index cb1e00b58..f60cf91ea 100644 --- a/cde/programs/dtstyle/ColorMain.c +++ b/cde/programs/dtstyle/ColorMain.c @@ -2432,7 +2432,7 @@ saveColor( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -2443,6 +2443,8 @@ saveColor( else sprintf(bufr, "*paletteDlg.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.colorDialog)); y = XtY(XtParent(style.colorDialog)); @@ -2455,15 +2457,16 @@ saveColor( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, sizeof(style.tmpBigStr), "%s*paletteDlg.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*paletteDlg.y: %d\n", bufr, y); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*paletteDlg.selected_palette: %s\n", bufr, - pCurrentPalette->name); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*paletteDlg.selected_button: %d\n", bufr, - selected_button); - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*paletteDlg.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*paletteDlg.y: %d\n", y); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*paletteDlg.selected_palette: %s\n", + pCurrentPalette->name); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*paletteDlg.selected_button: %d\n", + selected_button); + WRITE_STR2FD(fd, bufr); } } diff --git a/cde/programs/dtstyle/Dtwm.c b/cde/programs/dtstyle/Dtwm.c index eac57cb3c..11cda863c 100644 --- a/cde/programs/dtstyle/Dtwm.c +++ b/cde/programs/dtstyle/Dtwm.c @@ -956,7 +956,7 @@ saveDtwm( { Position x,y; Dimension width, height; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -967,6 +967,8 @@ saveDtwm( else sprintf(bufr, "*dtwmDlg.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.dtwmDialog)); y = XtY(XtParent(style.dtwmDialog)); @@ -982,13 +984,14 @@ saveDtwm( width = XtWidth(style.dtwmDialog); height = XtHeight(style.dtwmDialog); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*dtwmDlg.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*dtwmDlg.y: %d\n", bufr, y); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*dtwmDlg.width: %d\n", bufr, width); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*dtwmDlg.height: %d\n", bufr, height); - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*dtwmDlg.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*dtwmDlg.y: %d\n", y); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*dtwmDlg.width: %d\n", width); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*dtwmDlg.height: %d\n", height); + WRITE_STR2FD(fd, bufr); } } diff --git a/cde/programs/dtstyle/Font.c b/cde/programs/dtstyle/Font.c index 66678a9ca..13875d688 100644 --- a/cde/programs/dtstyle/Font.c +++ b/cde/programs/dtstyle/Font.c @@ -726,12 +726,12 @@ restoreFonts( * restoreFonts. The suggested minimum is whether you are mapped, and your * location. ************************************************************************/ -void +void saveFonts( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -741,6 +741,8 @@ saveFonts( else sprintf(bufr, "*Fonts.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.fontDialog)); @@ -754,12 +756,10 @@ saveFonts( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, sizeof(style.tmpBigStr), "%s*Fonts.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*Fonts.y: %d\n", bufr, y); - - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(style.tmpBigStr), "*Fonts.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(style.tmpBigStr), "*Fonts.y: %d\n", y); + WRITE_STR2FD(fd, bufr); } } diff --git a/cde/programs/dtstyle/I18nMain.c b/cde/programs/dtstyle/I18nMain.c index 03cd14713..651da79cd 100644 --- a/cde/programs/dtstyle/I18nMain.c +++ b/cde/programs/dtstyle/I18nMain.c @@ -1178,7 +1178,7 @@ saveI18n( { Position x,y; Dimension width, height; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -1189,6 +1189,8 @@ saveI18n( else sprintf(bufr, "*i18nDlg.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.i18nDialog)); y = XtY(XtParent(style.i18nDialog)); @@ -1204,13 +1206,14 @@ saveI18n( width = XtWidth(style.i18nDialog); height = XtHeight(style.i18nDialog); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*i18nDlg.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*i18nDlg.y: %d\n", bufr, y); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*i18nDlg.width: %d\n", bufr, width); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*i18nDlg.height: %d\n", bufr, height); - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*i18nDlg.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*i18nDlg.y: %d\n", y); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*i18nDlg.width: %d\n", width); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*i18nDlg.height: %d\n", height); + WRITE_STR2FD(fd, bufr); } } diff --git a/cde/programs/dtstyle/Keyboard.c b/cde/programs/dtstyle/Keyboard.c index adf444a04..6594173d0 100644 --- a/cde/programs/dtstyle/Keyboard.c +++ b/cde/programs/dtstyle/Keyboard.c @@ -610,7 +610,7 @@ saveKeybd( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -621,6 +621,8 @@ saveKeybd( else sprintf(bufr, "*keyboardDlg.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.kbdDialog)); y = XtY(XtParent(style.kbdDialog)); @@ -633,12 +635,10 @@ saveKeybd( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, sizeof(style.tmpBigStr), "%s*keyboardDlg.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*keyboardDlg.y: %d\n", bufr, y); - - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*keyboardDlg.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*keyboardDlg.y: %d\n", y); + WRITE_STR2FD(fd, bufr); } } diff --git a/cde/programs/dtstyle/Main.h b/cde/programs/dtstyle/Main.h index 924ef8177..3c5aa5741 100644 --- a/cde/programs/dtstyle/Main.h +++ b/cde/programs/dtstyle/Main.h @@ -272,6 +272,12 @@ extern void LoadDatabase(void); string #endif +// JET - helper for writing strings to an FD +#define WRITE_STR2FD(fd, str) { \ + if (write ((fd), (str), strlen((str))) == -1) \ + perror(strerror(errno)); \ + } + #endif /* _main_h */ /* DON'T ADD ANYTHING AFTER THIS #endif */ - + diff --git a/cde/programs/dtstyle/MainWin.c b/cde/programs/dtstyle/MainWin.c index eee333720..10b6ab64e 100644 --- a/cde/programs/dtstyle/MainWin.c +++ b/cde/programs/dtstyle/MainWin.c @@ -775,21 +775,22 @@ saveMain( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ if (style.mainWindow != NULL) { if (XtIsRealized(style.mainWindow)) + { sprintf(bufr, "*mainWindow.ismapped: True\n"); - + WRITE_STR2FD(fd, bufr); + } + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.mainWindow)); y = XtY(XtParent(style.mainWindow)); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*mainWindow.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*mainWindow.y: %d\n", bufr, y); - - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*mainWindow.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*mainWindow.y: %d\n", y); + WRITE_STR2FD(fd, bufr); } } diff --git a/cde/programs/dtstyle/Mouse.c b/cde/programs/dtstyle/Mouse.c index 6e459a23f..98f099116 100644 --- a/cde/programs/dtstyle/Mouse.c +++ b/cde/programs/dtstyle/Mouse.c @@ -1750,17 +1750,19 @@ saveMouse( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; - if (style.mouseDialog != NULL) + if (style.mouseDialog != NULL) { if (XtIsManaged(style.mouseDialog)) sprintf(bufr, "*Mouse.ismapped: True\n"); else sprintf(bufr, "*Mouse.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.mouseDialog)); y = XtY(XtParent(style.mouseDialog)); @@ -1773,12 +1775,10 @@ saveMouse( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, sizeof(style.tmpBigStr), "%s*Mouse.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*Mouse.y: %d\n", bufr, y); - - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*Mouse.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*Mouse.y: %d\n", y); + WRITE_STR2FD(fd, bufr); } } - + diff --git a/cde/programs/dtstyle/SaveRestore.c b/cde/programs/dtstyle/SaveRestore.c index 0eb590c7f..17076d98f 100644 --- a/cde/programs/dtstyle/SaveRestore.c +++ b/cde/programs/dtstyle/SaveRestore.c @@ -102,21 +102,13 @@ saveSessionCB( unsigned char *data = NULL; char *tmpStr; -#ifdef _SUN_OS - char *noCommands = NULL; -#endif /* _SUN_OS */ - /* get the root window property of SaveMode */ - GetSessionSaveMode(&data ); - + GetSessionSaveMode(&data); + /* if the property is "home" don't save dtstyle */ if(strcmp((char *)data, "home") == 0) { -#ifdef _SUN_OS /* Sun doesn't like "NULL" when expecting "char **" */ - XSetCommand(style.display, XtWindow(w), &noCommands, 0); -#else XSetCommand(style.display, XtWindow(w), NULL, 0); -#endif /* _SUN_OS */ return; } @@ -151,7 +143,7 @@ saveSessionCB( saveDtwm(fd); saveStartup(fd); saveI18n(fd); - + close (fd); /*If this is a session manager requested saveYrSlf, need to put dialogs in*/ diff --git a/cde/programs/dtstyle/Screen.c b/cde/programs/dtstyle/Screen.c index ce25e379a..6d8ec1e15 100644 --- a/cde/programs/dtstyle/Screen.c +++ b/cde/programs/dtstyle/Screen.c @@ -2899,7 +2899,7 @@ saveScreen( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -2910,6 +2910,8 @@ saveScreen( else sprintf(bufr, "*Screen.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.screenDialog)); y = XtY(XtParent(style.screenDialog)); @@ -2921,12 +2923,10 @@ saveScreen( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, sizeof(style.tmpBigStr), "%s*Screen.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*Screen.y: %d\n", bufr, y); - - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*Screen.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*Screen.y: %d\n", y); + WRITE_STR2FD(fd, bufr); } } diff --git a/cde/programs/dtstyle/Startup.c b/cde/programs/dtstyle/Startup.c index a31bbf246..438a87655 100644 --- a/cde/programs/dtstyle/Startup.c +++ b/cde/programs/dtstyle/Startup.c @@ -703,7 +703,7 @@ saveStartup( int fd ) { Position x,y; - char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */ + char bufr[1024]; /* size=[1024], make bigger if needed */ XmVendorShellExtObject vendorExt; XmWidgetExtData extData; @@ -713,6 +713,8 @@ saveStartup( else sprintf(bufr, "*startupDlg.ismapped: False\n"); + WRITE_STR2FD(fd, bufr); + /* Get and write out the geometry info for our Window */ x = XtX(XtParent(style.startupDialog)); y = XtY(XtParent(style.startupDialog)); @@ -725,12 +727,10 @@ saveStartup( x -= vendorExt->vendor.xOffset; y -= vendorExt->vendor.yOffset; - snprintf(bufr, sizeof(style.tmpBigStr), "%s*startupDlg.x: %d\n", bufr, x); - snprintf(bufr, sizeof(style.tmpBigStr), "%s*startupDlg.y: %d\n", bufr, y); - - if(-1 == write (fd, bufr, strlen(bufr))) { - perror(strerror(errno)); - } + snprintf(bufr, sizeof(bufr), "*startupDlg.x: %d\n", x); + WRITE_STR2FD(fd, bufr); + snprintf(bufr, sizeof(bufr), "*startupDlg.y: %d\n", y); + WRITE_STR2FD(fd, bufr); } }