Merge branch 'master' into autotools-conversion
authorJon Trulson <jon@radscan.com>
Sun, 26 Jan 2020 19:17:44 +0000 (12:17 -0700)
committerJon Trulson <jon@radscan.com>
Sun, 26 Jan 2020 19:17:44 +0000 (12:17 -0700)
cde/contrib/desktopentry-setlang/README-cde-alt [new file with mode: 0644]
cde/contrib/desktopentry-setlang/cde-alt.desktop [new file with mode: 0644]
cde/contrib/desktopentry-setlang/startxsession.sh [new file with mode: 0644]
cde/lib/DtHelp/Imakefile
cde/lib/DtSvc/DtUtil1/SmUtil.c
cde/lib/DtSvc/DtUtil2/SmCreateDirs.c
cde/lib/DtSvc/DtUtil2/UErrNoBMS.c
cde/programs/dtsession/SrvPalette.c

diff --git a/cde/contrib/desktopentry-setlang/README-cde-alt b/cde/contrib/desktopentry-setlang/README-cde-alt
new file mode 100644 (file)
index 0000000..9d61334
--- /dev/null
@@ -0,0 +1,18 @@
+This is another method to setup an xsession which allows you to execute
+commads before the CDE Xsession gets executed. 
+This alternate method is useful when for example you need to 
+set a different language.
+
+In this example we 
+1. have the login manager execute /usr/dt/bin/startxsession.sh script
+2. The /usr/dt/bin/startxsession.sh first sets properly the LANG variable
+       (or you can add whatever you want to execute before CDE Xsession starts)
+       and then executes /usr/dt/bin/Xsession which will start CDE.
+
+To install, after you edit the startxsession.sh to your liking, do as root:
+
+cp /path/to/cdesktopenv-code/cde/contrib/desktopentry/cde-alt.desktop /usr/share/xsessions/
+cp /path/to/cdesktopenv-code/cde/contrib/desktopentry/startxsession.sh /usr/dt/bin/
+chmod ugo+rx /usr/dt/bin/startxsession.sh
+
+
diff --git a/cde/contrib/desktopentry-setlang/cde-alt.desktop b/cde/contrib/desktopentry-setlang/cde-alt.desktop
new file mode 100644 (file)
index 0000000..41c71b5
--- /dev/null
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=CDE
+Comment=Use this session to boot into the Common Desktop Environment
+Keywords=Common Desktop Environment
+Exec=/usr/dt/bin/startxsession.sh
+Icon=Dtlogo.pm
+Type=Application
diff --git a/cde/contrib/desktopentry-setlang/startxsession.sh b/cde/contrib/desktopentry-setlang/startxsession.sh
new file mode 100644 (file)
index 0000000..34608c4
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+export PATH=$PATH:/usr/dt/bin
+export LANG=el_GR.UTF-8
+/usr/dt/bin/Xsession
+
index 16c3178a03ac0046d29130444edcc13274726920..a091a3d3c92835de9be03312ef5753eeabb826b4 100644 (file)
@@ -38,8 +38,14 @@ DEFINES = -DDTLIB $(LOCAL_DEFINES) \
          -DOSMINORVERSION=OSMinorVersion \
          $(ICONV_INBUF_DEFINE) $(BIT_ORDER_DEFINES)
 
+#if defined(FreeBSDArchitecture)
+JPEGLIB = -ljpeg
+#endif
+
 #ifdef SharedDtHelpReqs
-REQUIREDLIBS = SharedDtHelpReqs
+REQUIREDLIBS = SharedDtHelpReqs $(JPEGLIB)
+#else
+REQUIREDLIBS = $(JPEGLIB)
 #endif
 
 HEADERS = \
index 3fa75b7c6819601f14181d09c2c942012217d2c1..af4a83b22cc5004959eecb4d8afbe2a14aab40d8 100644 (file)
@@ -176,10 +176,23 @@ getSessionPath(
 
    /*
     * NOTE: it is assumed that _DtCreateDtDirs() returns a buffer of 
-    *       size MAXPATHLEN+1. This allows us to avoid a extra alloc
+    *       size MAXPATHLEN. This allows us to avoid a extra alloc
     *       and copy -- at the expense of code maintainability.
+    *
+    * JET - 2020.  This is stupid.  At least account for the strings
+    * you are adding further on down...  This "solution" isn't great
+    * either.  Real fix would be to have all callers pass in bufptr
+    * and len all the way down the chain instead of tmpPath.
     */
-    if ((strlen(tmpPath) + 1 + strlen(property)) > MAXPATHLEN) goto abort;
+    if ((strlen(tmpPath)
+         + 1 /* "/" */
+         + strlen(property)
+         + 1 /* "/" */
+         + ((*saveFile == NULL) ? strlen("dtXXXXXX") + 1 : strlen(*saveFile))
+        ) >= MAXPATHLEN)
+    {
+        goto abort;
+    }
 
    /* 
     * parse the property string and create directory if needed 
index 81308c42a0ffc6a06d42ae0d269d8012a7570951..4e8c0b11446e96640febf7bbe6b05c9950a4a45d 100644 (file)
@@ -83,33 +83,32 @@ char *
 _DtCreateDtDirs(
         Display *display )
 {
-    char               *tmpPath;
+    char               *tmpPath = NULL;
     Boolean            needSessionsDir = False;
     Boolean            useOldSession = False;
     struct stat        buf;
     int                status;
-    char               *home;
-    char               *sessionDir;
-    char               *displayName;
+    char               *home = NULL;
+    char               *sessionDir = NULL;
+    char               *displayName = NULL;
 
     /*
      * Sanity check - make sure there's an existing display
      */
     if(!display)
        return(NULL);
-    
-    if ((home =getenv("HOME")) == NULL)
+
+    if ((home = getenv("HOME")) == NULL)
         home = "";
-    
-    tmpPath = XtCalloc(1, MAXPATHLEN + 1);
+
+    tmpPath = XtCalloc(1, MAXPATHLEN);
     if(tmpPath == NULL)
        return(NULL);
 
     /*
      * If the $HOME/.dt directory does not exist, create it
      */
-    strncpy(tmpPath, home, MAXPATHLEN);
-    strncat(tmpPath, "/" DtPERSONAL_CONFIG_DIRECTORY, MAXPATHLEN);
+    snprintf(tmpPath, MAXPATHLEN, "%s/%s", home, DtPERSONAL_CONFIG_DIRECTORY);
 
     status = stat(tmpPath, &buf);
     if (status == -1) {
@@ -122,11 +121,10 @@ _DtCreateDtDirs(
     }
 
     /*
-     * Create the personal DB directory if it does not exist.  
+     * Create the personal DB directory if it does not exist.
      */
-    strncpy(tmpPath, home, MAXPATHLEN);
-    strncat(tmpPath, "/" DtPERSONAL_DB_DIRECTORY, MAXPATHLEN);
-    
+    snprintf(tmpPath, MAXPATHLEN, "%s/%s", home, DtPERSONAL_DB_DIRECTORY);
+
     if ((status = stat (tmpPath, &buf)) == -1) {
         if ((status = mkdir (tmpPath, 0000)) != -1)
            (void) chmod (tmpPath, 0755);
@@ -135,8 +133,7 @@ _DtCreateDtDirs(
     /*
      * Create the personal tmp dir if it does not exist.
      */
-    strncpy(tmpPath, home, MAXPATHLEN);
-    strncat(tmpPath, "/" DtPERSONAL_TMP_DIRECTORY, MAXPATHLEN);
+    snprintf(tmpPath, MAXPATHLEN, "%s/%s", home, DtPERSONAL_TMP_DIRECTORY);
 
     if ((status = stat (tmpPath, &buf)) == -1) {
        if ((status = mkdir (tmpPath, 0000)) != -1)
@@ -173,12 +170,13 @@ _DtCreateDtDirs(
             */
            if ((displayName = GetDisplayName (display)) != NULL) {
 
-               strncpy (tmpPath, home, MAXPATHLEN);
-               strncat (tmpPath, "/" DtPERSONAL_CONFIG_DIRECTORY, MAXPATHLEN);
-                strncat (tmpPath, "/", MAXPATHLEN);
-                strncat (tmpPath, displayName, MAXPATHLEN);
+                snprintf(tmpPath, MAXPATHLEN, "%s/%s/%s",
+                         home,
+                         DtPERSONAL_CONFIG_DIRECTORY,
+                         displayName);
 
                free(displayName);  /* CDExc22771 */
+                displayName = NULL;
 
                 if ((status = stat (tmpPath, &buf)) == -1) {
                    if ((status = mkdir (tmpPath, 0000)) != -1)
@@ -215,12 +213,13 @@ _DtCreateDtDirs(
         */
        if ((displayName = GetDisplayName (display)) != NULL) {
 
-           strncpy (tmpPath, home, MAXPATHLEN);
-           strncat (tmpPath, "/" DtPERSONAL_CONFIG_DIRECTORY, MAXPATHLEN);
-           strncat (tmpPath, "/", MAXPATHLEN);
-           strncat (tmpPath, displayName, MAXPATHLEN);
+            snprintf(tmpPath, MAXPATHLEN, "%s/%s/%s",
+                     home,
+                     DtPERSONAL_CONFIG_DIRECTORY,
+                     displayName);
 
            free(displayName);  /* CDExc22771 */
+            displayName = NULL;
 
            if ((status = stat(tmpPath, &buf)) != 0)
                /*
@@ -238,9 +237,10 @@ _DtCreateDtDirs(
         *  If we don't have an old style directory - we check for a sessions
         *  directory, and create it if it doesn't exist
         */
-       strncpy (tmpPath, home, MAXPATHLEN);
-       strncat (tmpPath, "/" DtPERSONAL_CONFIG_DIRECTORY, MAXPATHLEN);
-       strncat (tmpPath, "/" DtSM_SESSION_DIRECTORY, MAXPATHLEN);
+        snprintf(tmpPath, MAXPATHLEN, "%s/%s/%s",
+                 home,
+                 DtPERSONAL_CONFIG_DIRECTORY,
+                 DtSM_SESSION_DIRECTORY);
 
        if ((status = stat(tmpPath, &buf)) == -1) {
            if ((status = mkdir(tmpPath, 0000)) == -1) {
index 33ddb4876daccf02ecedc716a0c0b51468c94f48..b81e3e5328c3f4999e71014aeb92011e2b044753 100644 (file)
@@ -210,11 +210,7 @@ _DtSimpleError(
    if (NULL == message) return;
 
    Va_start(args, format);
-#if defined(USE_SNPRINTF)
    (void) vsnprintf(message, MESSAGE_BUFFER, format, args);
-#else
-   (void) vsprintf(message, format, args);
-#endif
    va_end(args);
 
    log_message(progName, help, message, severity, FALSE);
@@ -235,11 +231,7 @@ _DtSimpleErrnoError(
    if (NULL == message) return;
 
    Va_start(args, format);
-#if defined(USE_SNPRINTF)
    (void) vsnprintf(message, MESSAGE_BUFFER, format, args);
-#else
-   (void) vsprintf(message, format, args);
-#endif
    va_end(args);
 
    log_message(progName, help, message, severity, TRUE);
index 75a64b3bffae4f8b1d082bfedebbc0434d1e16c9..f75b69296955091a68b4146ee1b0b438bf59fcfc 100644 (file)
@@ -501,10 +501,10 @@ CheckMonitor(
     int n, screen_number, result;
     Arg args[4];
     char screenStr[5], cust_msg[24];
-    char *tmpStr;
-    char            tmpPalette[SRVBUFSIZE];
-    char            *token1;
-    char           *xrdb_string;
+    char *tmpStr = NULL;
+    char tmpPalette[SRVBUFSIZE];
+    char *token1 = NULL;
+    char *xrdb_string = NULL;
 
     Widget mainShell;
     XtAppContext app_context;
@@ -541,7 +541,7 @@ CheckMonitor(
    /* cycle through each screen */
     for(screen_number=0;screen_number != colorSrv.NumOfScreens;screen_number++)
     {
-       sprintf(screenStr,"%d",screen_number);
+       snprintf(screenStr, sizeof(screenStr), "%d", screen_number);
        n = 0;
        XtSetArg(args[n], XmNbackground,
            BlackPixelOfScreen(DefaultScreenOfDisplay(dpy))); n++;
@@ -558,9 +558,9 @@ CheckMonitor(
        */
 
        XtRealizeWidget(shell[screen_number]);
-
-       sprintf(cust_msg,"%s%d", XmSCUSTOMIZE_DATA, screen_number);
-       colorSrv.XA_CUSTOMIZE[screen_number] =
+       snprintf(cust_msg, sizeof(cust_msg), "%s%d",
+                XmSCUSTOMIZE_DATA, screen_number);
+       colorSrv.XA_CUSTOMIZE[screen_number] = 
           XInternAtom(dpy, cust_msg, FALSE);
 
        /* go set ownership of the pixel set atoms */
@@ -574,11 +574,16 @@ CheckMonitor(
           /*
            * Don't forget to add length for the extra characters.
            */
-          tmpStr = (char *)SRV_MALLOC(strlen(MSG1) + 25 + 5 + 1 + 1);
-          sprintf(tmpStr,"%s colorSrv.XA_CUSTOMIZE[%d].\n",
-                  MSG1, screen_number);
-          _DtSimpleError(XmSCOLOR_SRV_NAME, DtWarning, NULL, tmpStr, NULL);
-          SRV_FREE(tmpStr);
+           int len = strlen(MSG1) + 25 + 5 + 1 + 1;
+          tmpStr = (char *)SRV_MALLOC(len);
+           if (tmpStr)
+           {
+               snprintf(tmpStr, len, "%s colorSrv.XA_CUSTOMIZE[%d].\n",
+                        MSG1, screen_number);
+               _DtSimpleError(XmSCOLOR_SRV_NAME, DtWarning, NULL, tmpStr, NULL);
+               SRV_FREE(tmpStr);
+               tmpStr = NULL;
+           }
           return(-1);
        }
 
@@ -608,15 +613,27 @@ CheckMonitor(
                (struct _palette *) SRV_MALLOC( sizeof(struct _palette) + 1 );
 
            /*  allocate enough space for the name */
+<<<<<<< HEAD
            strcpy(tmpPalette, pColorSrvRsrc.MonochromePalette);
            for (token1=tmpPalette; *token1; token1++);
            while (token1!=tmpPalette && *token1!='.') token1--;
           if (!strcmp(token1,PALETTE_SUFFIX)) *token1 = '\0';
            colorSrv.pCurrentPalette[screen_number]->name =
+=======
+           snprintf(tmpPalette, SRVBUFSIZE, "%s",
+                    pColorSrvRsrc.MonochromePalette);
+           for (token1=tmpPalette; *token1; token1++)
+               ;
+           while (token1 != tmpPalette && *token1 != '.')
+               token1--;
+          if (!strcmp(token1, PALETTE_SUFFIX))
+               *token1 = '\0';
+           colorSrv.pCurrentPalette[screen_number]->name = 
+>>>>>>> master
                (char *)SRV_MALLOC(strlen(tmpPalette) + 1);
            strcpy(colorSrv.pCurrentPalette[screen_number]->name,
                   (char *) tmpPalette);
-           colorSrv.pCurrentPalette[screen_number]->converted=NULL;
+           colorSrv.pCurrentPalette[screen_number]->converted = NULL;
        }
 
        if (colorSrv.pCurrentPalette[screen_number] == (struct _palette *) NULL)
@@ -627,19 +644,21 @@ CheckMonitor(
       /* write out the color or monochrome palette resource for the screen */
 
        xrdb_string = XtMalloc(BUFSIZ);
+       if (!xrdb_string)
+           return -1;
 
        if (colorSrv.TypeOfMonitor[0] == XmCO_HIGH_COLOR ||
            colorSrv.TypeOfMonitor[0] == XmCO_MEDIUM_COLOR ||
            colorSrv.TypeOfMonitor[0] == XmCO_LOW_COLOR)
        {
-           sprintf(xrdb_string, "*%d*ColorPalette: %s%s\n",
+           snprintf(xrdb_string, BUFSIZ, "*%d*ColorPalette: %s%s\n",
                    screen_number,
                   colorSrv.pCurrentPalette[screen_number]->name,
                   PALETTE_SUFFIX);
        }
        else /* XmCO_BLACK_WHITE */
        {
-           sprintf(xrdb_string, "*%d*MonochromePalette: %s%s\n",
+           snprintf(xrdb_string, BUFSIZ, "*%d*MonochromePalette: %s%s\n",
                    screen_number,
                   colorSrv.pCurrentPalette[screen_number]->name,
                   PALETTE_SUFFIX);