• src/sbbs3/xtrn.cpp

    From rswindell@VERT to CVS commit on Wed Apr 15 01:46:19 2020
    src/sbbs3 xtrn.cpp 1.259 1.260
    Update of /cvsroot/sbbs/src/sbbs3
    In directory cvs:/tmp/cvs-serv8024

    Modified Files:
    xtrn.cpp
    Log Message:
    Added 2 new environment variables dynamically-defined when launching DOS programs: PCBDRIVE (the drive letter of the current node directory) and PCBDIR (the path to the current node directory, without the drive letter).

    These emulate the same variables crated by PCBoard.

    The reason these are being added is that Sunrise Door Software's 16-bit doors contain special support for these environment vars when used in their .CFG files
    (e.g. %PCBDIR%DOOR.SYS) and this allows easy multi-node configuration with a single .CFG file. The SBBSNODE environment varialbe would have worked perfectly fine for this purpose, but apparently Sunrise Doors (or the DoorFrame development kit they utilized) has hard-coded these PCBoard (and Wildcat!) environment variable names, so SBBSNODE wont' work for this purpose.

    For Synchronet-Win32, you will need the DOSXTRN.EXE revision 25 or later
    or you may experience NTVDM crashes when running external DOS programs.


    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From rswindell@VERT to CVS commit on Sun Aug 2 13:23:34 2020
    src/sbbs3 xtrn.cpp 1.262 1.263
    Update of /cvsroot/sbbs/src/sbbs3
    In directory cvs:/tmp/cvs-serv16614

    Modified Files:
    xtrn.cpp
    Log Message:
    Add support for %^ command-line specifer which expands to the system architecture (e.g. "i686" for Win32 builds, "x64" for Linux-x86_64 builds).
    Currently, there underlying XPDEV macro definition does not differentiate between arm32 and arm64, but it should. Next...


    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to sbbs/master on Sun Aug 30 13:52:51 2020
    https://gitlab.synchro.net/sbbs/sbbs/-/commit/ec5cbb848bc16419cc4267a9
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Fix compile issue in previous commit. Add more semicolons.

    One can't have too many semicolons.

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to sbbs/master on Thu Nov 5 00:02:18 2020
    https://gitlab.synchro.net/sbbs/sbbs/-/commit/ccf41a4c15bfdbb1b1aa46d3
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Don't log blank lines output from external programs on *nix

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbsmaster on Tue Nov 24 19:41:45 2020
    https://gitlab.synchro.net/main/sbbs/-/commit/e2a9066d89af60010e8bf55b
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Fix Linux-DOSEMU buffer overflow warnings with sprintf() usage (!!!)

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbsmaster on Wed Nov 25 01:33:16 2020
    https://gitlab.synchro.net/main/sbbs/-/commit/8312547f3d4e276ac722b7df
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Trim left-most whitespace from stderr lines of externals before logging.

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbs/master on Wed Nov 25 13:27:08 2020
    https://gitlab.synchro.net/main/sbbs/-/commit/ca424956d4f80d5d313b7eca
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Don't do the special DOSEMU cmdline specifier magic if the cmd starts with '?'

    JavaScript modules are intuitively "native" and have not historically required the "native" option to be set to "yes" in SCFG.

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbs/master on Fri Nov 27 20:20:45 2020
    https://gitlab.synchro.net/main/sbbs/-/commit/02a967b2403024c0a572eb45
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Trim white-space from the start of stderr-logged string from xtrns

    ... like the last commit that did this, but do in the other 2 places where stderr output is logged as log messages.
    Also, include the extended program name in the stderr log messages, making it easier to find the output you're looking for.

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbs/master on Mon Nov 30 17:09:27 2020
    https://gitlab.synchro.net/main/sbbs/-/commit/5a1ab6a7e8040e06aecf3868
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    A second pass at: Better native vs. DOS cmd-line detection in cmdstr()

    cmdstr() is often called for non-executable command-lines (e.g. for @include: file name/path arguments), so don't default to native unless a mode value was specified. Hopefully addresses issue reported by bobrob without breaking anything else (again).

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbs/master on Wed Dec 2 01:15:22 2020
    https://gitlab.synchro.net/main/sbbs/-/commit/87926cdac705ac979c403a5d
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Fix new GCC warning about unused variable.

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sat Mar 1 15:05:35 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/76fa22e427a7b9978084bf94
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Remove lprintf() call from child process of fork() call on *nix

    the info-level debug message "Detaching external process"... as this appears
    to be the cause of background events hanging sometimes, on Linux (at least).

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on ChromeOS)@VERT to Git commit to main/sbbs/master on Sun Mar 23 18:11:54 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/fd2a8b605803259ceb974d49
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Add node interrupt flag checking to *nix external() execution of stdio progs

    and abort the execution of the program when the node is interrupted. This should allow more cases were the node interrupt flag can be used to gracefully disconnect a user running a DOS or native (stdio) program on *nix.

    We have this functionality already in the Windows version of external()

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Deucе@VERT to Git commit to main/sbbs/master on Mon Oct 20 20:05:53 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/35d530c3a4eccd6b2ed1964b
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Disable pause when running an external program.

    Not sure if this is from the terminal overhaul or from the unicode
    support, but passthru_thread calls rputs() which calls cp437_out()
    which calls outchar() which calls check_pause().

    Also, put an EINTR wrapper around waidpid()... that wasn't the
    problem I was seeing, but it's a theoretically possible one.

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Deucе@VERT to Git commit to main/sbbs/master on Mon Oct 20 20:24:10 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/47e263f1e72073e9488db9f8
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Remove unneeded debug logging.

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Deucе@VERT to Git commit to main/sbbs/master on Tue Oct 21 01:09:42 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/00d24f1bfc0f8e2f5453579f
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Revert "Disable pause when running an external program."

    This reverts commit 35d530c3a4eccd6b2ed1964bf21cbcf9237da721.

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Deucе@VERT to Git commit to main/sbbs/master on Sun Oct 26 14:19:30 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/3f97c2713305442a55035063
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Fix error in 35d530c3a4e

    Instead of looping while waitpid() returned an error due to a signal,
    it was looping *until* waitpid() returned an error due to a signal.

    This could cause an infinite loop on *nix systems after an external
    exited if waitpid() was returning an error for some other reason.

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Wed Dec 31 01:59:39 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/26904b5dc456d76dc1b0ec29
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Only attempt to unlock the input_thread_mutex if we previously locked it

    This *might* fix issue #1038

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sun Jan 11 19:36:10 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/5d43eed990eda19d808d8c92
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Don't use dosemu paths in command-lines when dosemu support is disabled

    This just adds to confusion when debugging weird errors, like this:

    pack_qwk.cpp line 753 (pack_qwk) executing "H:\zip -jD /sbbs/data/file/0230.qwk

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Fri Jul 10 01:39:22 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/f175c6ad7c7d35905bf19189
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Add cmdline specifiers for terminal type and charset (%< and %>) - lowercased

    e.g. for use on the command-line to (new door game) Immortal Barons https://andy5995.github.io/immortal-barons/door-setup/#character-set

    Allowing it to send UTF-8 or CP437, untranslated by sbbs, to the appropriate user/terminals, if desired.

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Tue Jul 21 01:41:46 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/de1662c069cb723cd2acd958
    Modified Files:
    src/sbbs3/xtrn.cpp
    Log Message:
    Log an error when an external program's command line is truncated

    sbbs_t::external() assembles the child's command line into
    fullcmdline[MAX_PATH + 1] -- 260 usable characters -- via SAFEPRINTF / SAFECOPY, both of which truncate SILENTLY. That string IS the child's entire command line, so an over-long one runs the program with its trailing
    arguments missing.

    The failure is very hard to diagnose because the evidence contradicts the symptom: the "Executing external" log line prints the command we MEANT to
    run, while the child received a shortened one. Observed with a SyncRetro
    door whose lobby built a 334-character line -- the ROM path fell off the end and the door reported its content missing while the log showed that
    content's full path, which sent the search in entirely the wrong direction.

    Log the truncation on both branches, with the length it was cut to, the
    length it needed, and the command as actually issued.

    The needed length is MEASURED from the inputs rather than read from snprintf()'s return, which looks backwards and is commented as such at both sites: genwrap.h redirects snprintf() to xpdev's safe_snprintf() unless USE_SNPRINTF is defined, and that wrapper clamps its return to size-1 (31 callers accumulate with `d += snprintf(...)` and would otherwise run past
    the buffer). USE_SNPRINTF is set only for darwin and freebsd, so the return value is the C99 would-be length on those and the truncated length on Linux
    and Windows -- a check written the obvious way would work on a developer's
    Mac and be silently dead in production.

    This only reports; nothing is resized. Note that cmdstr() has its own,
    earlier limit (cmdstr_output[512]) which is likewise silent, so a very long configured command line can already be shortened before external() ever
    sees it.

    Windows branch compiles clean; the *nix branch is UNCOMPILED here (no
    GCC/Clang on this host) and the log message has not yet been observed
    firing.

    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net