Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gensio for openSUSE:Factory checked 
in at 2026-09-09 16:22:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gensio (Old)
 and      /work/SRC/openSUSE:Factory/.gensio.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gensio"

Wed Sep  9 16:22:09 2026 rev:29 rq:1376596 version:3.0.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/gensio/gensio.changes    2026-07-23 
23:14:04.572142717 +0200
+++ /work/SRC/openSUSE:Factory/.gensio.new.1265/gensio.changes  2026-09-09 
16:23:49.985741508 +0200
@@ -1,0 +2,17 @@
+Thu Sep  3 12:02:49 UTC 2026 - Martin Hauke <[email protected]>
+
+- Update to version 3.0.4
+  * soapysdr would not compile static.
+  * Some python2 APIs were converted to Python 3 for SWIG 4.5.0
+    compatibility.
+  * An ssh compatibility mode was added to gtlssh. This deals with
+    how parameters are parsed. If you invoke it as gsh, parameters
+    are parsed as ssh does. If invoked as gtlssh, they are parsed
+    like gtlssh does (which is arguably more sane). There is also
+    a parameter to do this. This helps when using it with git and
+    rsync and such. This is described in the gtlssh man page.
+  * In the fsk (afskmdm) gensio, low sample rates were broken
+    because the gain was not set properly in the FIR filter
+    implementation.
+
+-------------------------------------------------------------------

Old:
----
  gensio-3.0.3.tar.gz

New:
----
  gensio-3.0.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gensio.spec ++++++
--- /var/tmp/diff_new_pack.DdE2h3/_old  2026-09-09 16:23:50.634768633 +0200
+++ /var/tmp/diff_new_pack.DdE2h3/_new  2026-09-09 16:23:50.636768716 +0200
@@ -27,7 +27,7 @@
 %bcond_with    openipmi
 %endif
 Name:           gensio
-Version:        3.0.3
+Version:        3.0.4
 Release:        0
 Summary:        Library to abstract stream and packet I/O
 # examples/* is licenced under Apache-2.0

++++++ gensio-3.0.3.tar.gz -> gensio-3.0.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/RELEASE_PROCESS.rst 
new/gensio-3.0.4/RELEASE_PROCESS.rst
--- old/gensio-3.0.3/RELEASE_PROCESS.rst        2026-07-21 20:11:33.000000000 
+0200
+++ new/gensio-3.0.4/RELEASE_PROCESS.rst        2026-08-12 02:45:29.000000000 
+0200
@@ -78,8 +78,9 @@
 
 * rm $HOME/install/Gensio/lib/*.la
 
-* Then run the "Inno Setup Compiler" and select gensio.iss in the
-  main gensio directory.
+* Stop gtlsshd in the task scheduler.  Then run the "Inno Setup
+  Compiler" and select gensio.iss in the main gensio directory.  Then
+  restart gtlsshd after the install completes.
 
 * The output will be named "Gensio.exe" in the home directory.  Rename
   it "Gensio-x.x.x-windows.exe" and copy that to the Linux system
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/c++/swig/pygensio/pygensio.i 
new/gensio-3.0.4/c++/swig/pygensio/pygensio.i
--- old/gensio-3.0.3/c++/swig/pygensio/pygensio.i       2026-07-21 
20:11:33.000000000 +0200
+++ new/gensio-3.0.4/c++/swig/pygensio/pygensio.i       2026-08-12 
02:45:29.000000000 +0200
@@ -132,7 +132,7 @@
            ;
        o = PyTuple_New(len);
        for (i = 0; i < len; i++)
-           PyTuple_SetItem(o, i, PyString_FromString(val[i]));
+           PyTuple_SetItem(o, i, PyUnicode_FromString(val[i]));
        return o;
     }
 }
@@ -380,7 +380,7 @@
     $1 = &temp;
 }
 %typemap(argout) unsigned int *outval {
-    $result = PI_add_result($result, PyInt_FromLong(*$1));
+    $result = PI_add_result($result, PyLong_FromLong(*$1));
 }
 
 // Handling of nested waiters and python callback.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/configure.ac 
new/gensio-3.0.4/configure.ac
--- old/gensio-3.0.3/configure.ac       2026-07-21 20:11:33.000000000 +0200
+++ new/gensio-3.0.4/configure.ac       2026-08-12 02:45:29.000000000 +0200
@@ -1,7 +1,7 @@
-AC_INIT([gensio],[3.0.3],[[email protected]])
+AC_INIT([gensio],[3.0.4],[[email protected]])
 AC_SUBST(gensio_VERSION_MAJOR, 3)
 AC_SUBST(gensio_VERSION_MINOR, 0)
-AC_SUBST(gensio_VERSION_PATCH, 3)
+AC_SUBST(gensio_VERSION_PATCH, 4)
 AC_SUBST(gensio_VERSION_STRING, ${PACKAGE_VERSION})
 AC_CANONICAL_TARGET
 AM_INIT_AUTOMAKE([-Wall])
@@ -2066,7 +2066,7 @@
          AC_MSG_ERROR("soapy enabled but libSoapySDR not found")
       fi
       BASE_LIBS="$BASE_LIBS $LIBSOAPY_LIBS"
-      BUILTIN_GENSIOS="$BUILTIN_GENSIOS libsoapy"
+      BUILTIN_GENSIOS="$BUILTIN_GENSIOS soapy"
       BUILTIN_SOAPY=1
       ;;
    dynamic)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/gensio.iss new/gensio-3.0.4/gensio.iss
--- old/gensio-3.0.3/gensio.iss 2026-07-21 20:11:33.000000000 +0200
+++ new/gensio-3.0.4/gensio.iss 2026-08-12 02:45:29.000000000 +0200
@@ -2,7 +2,7 @@
 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
 
 #define MyAppName "Gensio"
-#define MyAppVersion "3.0.3"
+#define MyAppVersion "3.0.4"
 ; This should match "C - A" in the GENSIO_LIB_VERSION in the autoconf
 ; file.  So if GENSIO_LIB_VERSION is "12:0:2", this value will be "10".
 ; "C" is the first value in GENSIO_LIB_VERSION, "A" is the last.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/lib/filters.h 
new/gensio-3.0.4/lib/filters.h
--- old/gensio-3.0.3/lib/filters.h      2026-07-21 20:11:33.000000000 +0200
+++ new/gensio-3.0.4/lib/filters.h      2026-08-12 02:45:29.000000000 +0200
@@ -318,6 +318,8 @@
     else
        filt->do_filter = float_fir_filter;
 
+    filt->gain = gain;
+
     /* Calculate the FIR h parameters. */
     filt->coefs = calc_fir_coefs(o, framerate, cutoff, transition_freq,
                                 &filt->coefs_n);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/swig/python/gensio_langinfo.i 
new/gensio-3.0.4/swig/python/gensio_langinfo.i
--- old/gensio-3.0.3/swig/python/gensio_langinfo.i      2026-07-21 
20:11:33.000000000 +0200
+++ new/gensio-3.0.4/swig/python/gensio_langinfo.i      2026-08-12 
02:45:29.000000000 +0200
@@ -60,7 +60,7 @@
 }
 
 %typemap(argout) (long *r_int) {
-    PyObject *r = PyInt_FromLong(*$1);
+    PyObject *r = PyLong_FromLong(*$1);
 
     $result = add_python_result($result, r);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/swig/python/gensio_python.h 
new/gensio-3.0.4/swig/python/gensio_python.h
--- old/gensio-3.0.3/swig/python/gensio_python.h        2026-07-21 
20:11:33.000000000 +0200
+++ new/gensio-3.0.4/swig/python/gensio_python.h        2026-08-12 
02:45:29.000000000 +0200
@@ -67,9 +67,9 @@
 #define OI_PI_StringCheck PyUnicode_Check
 #define OI_PI_FromStringAndSize PyUnicode_FromStringAndSize
 #else
-#define OI_PI_BytesCheck PyString_Check
+#define OI_PI_BytesCheck PyBytes_Check
 #define OI_PI_AsBytesAndSize PyString_AsStringAndSize
-#define OI_PI_StringCheck PyString_Check
+#define OI_PI_StringCheck PyBytes_Check
 #define OI_PI_FromStringAndSize PyString_FromStringAndSize
 #endif
 
@@ -365,7 +365,7 @@
     args = PyTuple_New(3);
     gensio_pyref(io);
     PyTuple_SET_ITEM(args, 0, io_ref.val);
-    o = PyInt_FromLong(err);
+    o = PyLong_FromLong(err);
     PyTuple_SET_ITEM(args, 1, o);
     o = PyBytes_FromStringAndSize(buf, len);
     PyTuple_SET_ITEM(args, 2, o);
@@ -393,7 +393,7 @@
     args = PyTuple_New(2);
     ref_gensio_data(data);
     PyTuple_SET_ITEM(args, 0, io_ref.val);
-    o = PyInt_FromLong(val);
+    o = PyLong_FromLong(val);
     PyTuple_SET_ITEM(args, 1, o);
 
     swig_finish_call(data->handler_val, func, args, true);
@@ -578,7 +578,7 @@
            len++;
        o = PyTuple_New(len);
        for (i = 0; i < len; i++)
-           PyTuple_SetItem(o, i, PyString_FromString(auxdata[i]));
+           PyTuple_SetItem(o, i, PyUnicode_FromString(auxdata[i]));
        return o;
     }
 }
@@ -706,7 +706,7 @@
        args = PyTuple_New(3);
        ref_gensio_data(data);
        PyTuple_SET_ITEM(args, 0, io_ref.val);
-       o = PyInt_FromLong(readerr);
+       o = PyLong_FromLong(readerr);
        PyTuple_SET_ITEM(args, 1, o);
        if (auxdata && auxdata[0]) {
            o = OI_PI_FromString(auxdata[0]);
@@ -753,8 +753,8 @@
                    *buflen = len;
                memcpy(buf, p, *buflen);
                rv = 0;
-           } else if (PyInt_Check(o)) {
-               rv = PyInt_AsLong(o);
+           } else if (PyLong_Check(o)) {
+               rv = PyLong_AsLong(o);
            }
            Py_DecRef(o);
        }
@@ -802,8 +802,8 @@
                        *buflen = len;
                    }
                }
-           } else if (PyInt_Check(o)) {
-               rv = PyInt_AsLong(o);
+           } else if (PyLong_Check(o)) {
+               rv = PyLong_AsLong(o);
            }
            Py_DecRef(o);
        }
@@ -842,9 +842,9 @@
        args = PyTuple_New(3);
        ref_gensio_data(data);
        PyTuple_SET_ITEM(args, 0, io_ref.val);
-       o = PyInt_FromLong(height);
+       o = PyLong_FromLong(height);
        PyTuple_SET_ITEM(args, 1, o);
-       o = PyInt_FromLong(width);
+       o = PyLong_FromLong(width);
        PyTuple_SET_ITEM(args, 2, o);
        swig_finish_call(data->handler_val, "win_size", args, true);
        break;
@@ -1041,7 +1041,7 @@
     PyTuple_SET_ITEM(args, 0, acc_ref.val);
     PyTuple_SET_ITEM(args, 1, io_ref.val);
     if (opterr >= 0) {
-       o = PyInt_FromLong(opterr);
+       o = PyLong_FromLong(opterr);
        PyTuple_SET_ITEM(args, 2, o);
        if (optstr) {
            o = OI_PI_FromString(optstr);
@@ -1177,8 +1177,8 @@
                    pwvfy->password_len = len;
                memcpy(pwvfy->password, p, pwvfy->password_len);
                rv = 0;
-           } else if (PyInt_Check(o)) {
-               rv = PyInt_AsLong(o);
+           } else if (PyLong_Check(o)) {
+               rv = PyLong_AsLong(o);
            }
            Py_DecRef(o);
        }
@@ -1234,8 +1234,8 @@
                        pwvfy->password_len = len;
                    }
                }
-           } else if (PyInt_Check(o)) {
-               rv = PyInt_AsLong(o);
+           } else if (PyLong_Check(o)) {
+               rv = PyLong_AsLong(o);
            }
            Py_DecRef(o);
        }
@@ -1374,8 +1374,8 @@
 
     args = PyTuple_New(9);
     PyTuple_SET_ITEM(args, 0, PyBool_FromLong(state == 
GENSIO_MDNS_WATCH_NEW_DATA));
-    PyTuple_SET_ITEM(args, 1, PyInt_FromLong(ipinterface));
-    PyTuple_SET_ITEM(args, 2, PyInt_FromLong(ipdomain));
+    PyTuple_SET_ITEM(args, 1, PyLong_FromLong(ipinterface));
+    PyTuple_SET_ITEM(args, 2, PyLong_FromLong(ipdomain));
     PyTuple_SET_ITEM(args, 3, OI_PI_FromStringN(name));
     PyTuple_SET_ITEM(args, 4, OI_PI_FromStringN(type));
     PyTuple_SET_ITEM(args, 5, OI_PI_FromStringN(domain));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/swig/python/python_swig_internals.h 
new/gensio-3.0.4/swig/python/python_swig_internals.h
--- old/gensio-3.0.3/swig/python/python_swig_internals.h        2026-07-21 
20:11:33.000000000 +0200
+++ new/gensio-3.0.4/swig/python/python_swig_internals.h        2026-08-12 
02:45:29.000000000 +0200
@@ -52,8 +52,8 @@
 #define OI_PI_FromString PyUnicode_FromString
 #define OI_PI_AsString PyUnicode_AsUTF8
 #else
-#define OI_PI_FromString PyString_FromString
-#define OI_PI_AsString PyString_AsString
+#define OI_PI_FromString PyUnicode_FromString
+#define OI_PI_AsString PyBytes_AsString
 #endif
 
 GENSIO_DLL_PUBLIC
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/tools/gtlssh.1 
new/gensio-3.0.4/tools/gtlssh.1
--- old/gensio-3.0.3/tools/gtlssh.1     2026-07-21 20:11:33.000000000 +0200
+++ new/gensio-3.0.4/tools/gtlssh.1     2026-08-12 02:45:29.000000000 +0200
@@ -17,7 +17,7 @@
 .BR gsh
 is a synonym for
 .BR gtlssh
-and at some point may replace it.
+that runs in ssh compatibility by default.
 
 .BR gtlsshd
 will attempt an SCTP connection first, and fall back to TCP if that
@@ -50,6 +50,25 @@
 See ESCAPES below for more details on the escape character.  Only handled
 on io1.
 .TP
+.I \-\-ssh-compat
+Enable ssh-compatible command handling.  Default for gsh, off by
+default for gtlssh.
+
+gtlssh normally handles commands by passing individual arguments over
+as separate arguments then passing them to the remote command as such.
+In ssh compatible mode, it will work like ssh, combining all remaining
+arguments with a space between them and passing them as a single
+command.
+
+gtlssh command handling is a little more sane, if you run "gsh server
+ls '/a b'" it will do what you expect.  ssh will not.  But some
+programs expect it to work as ssh does.
+
+Added in gensio-3.0.4.
+.TP
+.I \-\-nossh-compat
+Disable ssh-compatible command handling.
+.TP
 .I \-r|\-\-telnet
 Do telnet processing with RFC2217 handling.
 .TP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/tools/gtlssh.c 
new/gensio-3.0.4/tools/gtlssh.c
--- old/gensio-3.0.3/tools/gtlssh.c     2026-07-21 20:11:33.000000000 +0200
+++ new/gensio-3.0.4/tools/gtlssh.c     2026-08-12 02:45:29.000000000 +0200
@@ -382,6 +382,10 @@
     printf("  -e, --escchar - Set the local terminal escape character.\n"
           "    Set to -1 to disable the escape character\n"
           "    Default is ^\\ for tty stdin and disabled for non-tty stdin\n");
+    printf("  --ssh-compat - Enable ssh compatible string handling.\n"
+          "    (default for gsh)\n");
+    printf("  --nossh-compat - Disable ssh compatible string handling.\n"
+          "    (default for no gsh)\n");
     printf("  --nosctp - Disable SCTP support (default).\n");
     printf("  --sctp - Disable SCTP support.\n");
     printf("  --notcp - Disable TCP support.\n");
@@ -1795,7 +1799,7 @@
     gensiods service_len, len;
     const char *transport = "sctp(readbuf=20000)";
     bool user_transport = false, mdns_transport = false;
-    bool notcp = false, nosctp = true;
+    bool notcp = false, nosctp = true, ssh_compat = false;
     /*
      * The buffer sizes are carefully chosen here to mesh with ssl and
      * mux.  ssl can encrypt up to 16384 bytes at a time, and the
@@ -1812,6 +1816,15 @@
     const char *mdns_type = "_iostream._tcp";
     const char *val_2fa = "", *pfx_2fa = "";
 
+    s = strrchr(argv[0], '/');
+    if (s)
+       s++;
+    else
+       s = argv[0];
+    if (strcmp(s, "gsh") == 0)
+       ssh_compat = true;
+    s = NULL;
+
     memset(&userdata1, 0, sizeof(userdata1));
     memset(&userdata2, 0, sizeof(userdata2));
     userdata1.interactive = true;
@@ -1910,6 +1923,12 @@
        } else if ((err = cmparg_int(argc, argv, &arg, "-e", "--escchar",
                                     &escape_char))) {
            ;
+       } else if ((err = cmparg(argc, argv, &arg, NULL, "--ssh-compat",
+                                NULL))) {
+           ssh_compat = true;
+       } else if ((err = cmparg(argc, argv, &arg, NULL, "--nossh-compat",
+                                NULL))) {
+           ssh_compat = false;
        } else if ((err = cmparg(argc, argv, &arg, NULL, "--nomux", NULL))) {
            muxstr = "";
            use_mux = false;
@@ -2025,36 +2044,60 @@
        unsigned int svclen = 0;
 
        /* User gave us a remote program. */
-       for (i = arg; i < argc; i++) {
-           svclen += strlen(argv[i]) + 1; /* Extra space for nil at end */
-           if (argv[i][0] == '\0' || argv[i][0] == '\xff')
-               /* See note below on why we do this. */
-               svclen += 1;
+       if (ssh_compat) {
+           for (i = arg; i < argc; i++) {
+               if (i != arg)
+                   svclen++; /* Leading space. */
+               svclen += strlen(argv[i]);
+           }
+           svclen += 10; /* Space for "program2:" and final nil. */
+       } else {
+           for (i = arg; i < argc; i++) {
+               svclen += strlen(argv[i]) + 1; /* Extra space for nil at end */
+               if (argv[i][0] == '\0' || argv[i][0] == '\xff')
+                   /* See note below on why we do this. */
+                   svclen += 1;
+           }
+           svclen += 9; /* Space for "program:" and final nil. */
+           /* Note that ending '\0' is handled by final space. */
        }
-       svclen += 9; /* Space for "program:" and final nil. */
-       /* Note that ending '\0' is handled by final space. */
 
        service = malloc(svclen);
        if (!service) {
            fprintf(stderr, "Unable to allocate remote program request\n");
            return 1;
        }
-       strcpy(service, "program:");
-       svclen = 8;
-       for (i = arg; i < argc; i++) {
-           if (argv[i][0] == '\0' || argv[i][0] == '\xff')
-               /*
-                * Send a "\xff" as the first character for an empty
-                * string.  Otherwize and empty string will look like
-                * the \0\0 used to mark the end.  Also add a '\xff"
-                * for a parameter starting with 0xff.  We will drop
-                * it on the other side.
-                */
-               service[svclen++] = '\xff';
-           svclen += sprintf(service + svclen, "%s", argv[i]);
+
+       if (ssh_compat) {
+           strcpy(service, "program2:");
+           svclen = 9;
+           for (i = arg; i < argc; i++) {
+               unsigned int len = strlen(argv[i]);
+
+               if (i != arg)
+                   service[svclen++] = ' '; /* Leading space. */
+               memcpy(service + svclen, argv[i], len);
+               svclen += len;
+           }
+           service[svclen++] = '\0';
+       } else {
+           strcpy(service, "program:");
+           svclen = 8;
+           for (i = arg; i < argc; i++) {
+               if (argv[i][0] == '\0' || argv[i][0] == '\xff')
+                   /*
+                    * Send a "\xff" as the first character for an empty
+                    * string.  Otherwize and empty string will look like
+                    * the \0\0 used to mark the end.  Also add a '\xff"
+                    * for a parameter starting with 0xff.  We will drop
+                    * it on the other side.
+                    */
+                   service[svclen++] = '\xff';
+               svclen += sprintf(service + svclen, "%s", argv[i]);
+               service[svclen++] = '\0';
+           }
            service[svclen++] = '\0';
        }
-       service[svclen++] = '\0';
 
        userdata1.ios = io1_default_notty;
        userdata1.interactive = false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gensio-3.0.3/tools/gtlsshd.c 
new/gensio-3.0.4/tools/gtlsshd.c
--- old/gensio-3.0.3/tools/gtlsshd.c    2026-07-21 20:11:33.000000000 +0200
+++ new/gensio-3.0.4/tools/gtlsshd.c    2026-08-12 02:45:29.000000000 +0200
@@ -2258,9 +2258,7 @@
     unsigned int env_len = 0;
     const char **penv2 = NULL;
     bool rv = false;
-#ifndef _WIN32
     char *cmdbuf = NULL;
-#endif
 
     len = 0;
     err = gensio_control(io, 0, GENSIO_CONTROL_GET, GENSIO_CONTROL_SERVICE,
@@ -2285,7 +2283,32 @@
                  gensio_err_to_str(err));
        goto out_free;
     }
-    if (strstartswith(service, "program:")) {
+    if (strstartswith(service, "program2:")) {
+       char *str = strchr(service, ':');
+
+       str++;
+       progv = o->zalloc(o, 4 * sizeof(*progv));
+       if (!progv) {
+           log_event(LOG_ERR, "Could not allocate progv memory");
+           goto out_free;
+       }
+
+       cmdbuf = gensio_strdup(o, str);
+       if (!cmdbuf) {
+           log_event(LOG_ERR, "Could not allocate command memory");
+           goto out_free;
+       }
+
+       progv[0] = auth->ushell;
+       progv[1] = "-c";
+       progv[2] = cmdbuf;
+       progv[3] = NULL;
+
+       /* Dummy out the program, we will set it later with a control. */
+       s = gensio_alloc_sprintf(o,
+                                "stdio(stderr-to-stdout,readbuf=16384),dummy");
+       do_chdir = true;
+    } else if (strstartswith(service, "program:")) {
        char *str = strchr(service, ':'), **svals;
 #ifdef _WIN32
        unsigned int nsvals;

Reply via email to