commit:     5ce7cc60004018314bfec6ab125b3754796eb410
Author:     Cristian Othón Martínez Vera <cfuga <AT> cfuga <DOT> mx>
AuthorDate: Sun Aug 17 02:47:36 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Sep  6 15:26:30 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5ce7cc60

app-shells/smrsh: use sendmail patch to fix C23 compilation

Signed-off-by: Cristian Othón Martínez Vera <cfuga <AT> cfuga.mx>
Part-of: https://github.com/gentoo/gentoo/pull/43481
Signed-off-by: Sam James <sam <AT> gentoo.org>

 app-shells/smrsh/files/sendmail-8.18.1-c23.patch | 113 +++++++++++++++++++++++
 app-shells/smrsh/smrsh-8.18.1-r1.ebuild          |   8 +-
 2 files changed, 117 insertions(+), 4 deletions(-)

diff --git a/app-shells/smrsh/files/sendmail-8.18.1-c23.patch 
b/app-shells/smrsh/files/sendmail-8.18.1-c23.patch
new file mode 100644
index 000000000000..93301cbfba35
--- /dev/null
+++ b/app-shells/smrsh/files/sendmail-8.18.1-c23.patch
@@ -0,0 +1,113 @@
+Bug: https://bugs.gentoo.org/944460
+Bug: https://bugs.gentoo.org/945726
+
+--- a/libsm/vfscanf.c
++++ b/libsm/vfscanf.c
+@@ -37,6 +37,7 @@
+ #define SUPPRESS      0x10    /* suppress assignment */
+ #define POINTER               0x20    /* weird %p pointer (`fake hex') */
+ #define NOSKIP                0x40    /* do not skip blanks */
++#define UNSIGNED      0x80    /* unsigned conversions */
+ 
+ /*
+ **  The following are used in numeric conversions only:
+@@ -122,9 +123,6 @@
+       int nassigned;          /* number of fields assigned */
+       int nread;              /* number of characters consumed from fp */
+       int base;               /* base argument to strtoll/strtoull */
+-
+-      /* conversion function (strtoll/strtoull) */
+-      ULONGLONG_T (*ccfn) __P((const char *, char **, int));
+       char ccltab[256];       /* character class table for %[...] */
+       char buf[BUF];          /* buffer for numeric conversions */
+       SM_EVENT *evt = NULL;
+@@ -160,7 +158,6 @@
+       nassigned = 0;
+       nread = 0;
+       base = 0;               /* XXX just to keep gcc happy */
+-      ccfn = NULL;            /* XXX just to keep gcc happy */
+       for (;;)
+       {
+               c = *fmt++;
+@@ -240,13 +237,11 @@
+                       /* FALLTHROUGH */
+                 case 'd':
+                       c = CT_INT;
+-                      ccfn = (ULONGLONG_T (*)())sm_strtoll;
+                       base = 10;
+                       break;
+ 
+                 case 'i':
+                       c = CT_INT;
+-                      ccfn = (ULONGLONG_T (*)())sm_strtoll;
+                       base = 0;
+                       break;
+ 
+@@ -255,21 +250,20 @@
+                       /* FALLTHROUGH */
+                 case 'o':
+                       c = CT_INT;
+-                      ccfn = sm_strtoull;
++                      flags |= UNSIGNED;
+                       base = 8;
+                       break;
+ 
+                 case 'u':
+                       c = CT_INT;
+-                      ccfn = sm_strtoull;
++                      flags |= UNSIGNED;
+                       base = 10;
+                       break;
+ 
+                 case 'X':
+                 case 'x':
+-                      flags |= PFXOK; /* enable 0x prefixing */
++                      flags |= PFXOK | UNSIGNED;
+                       c = CT_INT;
+-                      ccfn = sm_strtoull;
+                       base = 16;
+                       break;
+ 
+@@ -297,9 +291,8 @@
+                       break;
+ 
+                 case 'p':     /* pointer format is like hex */
+-                      flags |= POINTER | PFXOK;
++                      flags |= POINTER | PFXOK | UNSIGNED;
+                       c = CT_INT;
+-                      ccfn = sm_strtoull;
+                       base = 16;
+                       break;
+ 
+@@ -324,7 +317,6 @@
+                       if (isupper(c))
+                               flags |= LONG;
+                       c = CT_INT;
+-                      ccfn = (ULONGLONG_T (*)()) sm_strtoll;
+                       base = 10;
+                       break;
+               }
+@@ -628,7 +620,12 @@
+                               ULONGLONG_T res;
+ 
+                               *p = 0;
+-                              res = (*ccfn)(buf, (char **)NULL, base);
++                              if (flags & UNSIGNED)
++                                      res = sm_strtoull(buf, (char **)NULL,
++                                                        base);
++                              else
++                                      res = sm_strtoll(buf, (char **)NULL,
++                                                       base);
+                               if (flags & POINTER)
+                                       *SM_VA_ARG(ap, void **) =
+                                           (void *)(long) res;
+--- a/mailstats/mailstats.c
++++ b/mailstats/mailstats.c
+@@ -65,7 +65,6 @@
+       char sfilebuf[MAXPATHLEN];
+       char buf[MAXLINE];
+       struct statistics stats;
+-      extern char *ctime();
+       extern char *optarg;
+       extern int optind;
+ # define MSOPTS "cC:f:opP"

diff --git a/app-shells/smrsh/smrsh-8.18.1-r1.ebuild 
b/app-shells/smrsh/smrsh-8.18.1-r1.ebuild
index e634c33f2ab7..41a1e1b4179d 100644
--- a/app-shells/smrsh/smrsh-8.18.1-r1.ebuild
+++ b/app-shells/smrsh/smrsh-8.18.1-r1.ebuild
@@ -24,12 +24,14 @@ KEYWORDS="~amd64 ~x86"
 RDEPEND="!mail-mta/sendmail"
 DEPEND="${RDEPEND}
        sys-devel/m4"
+PATCHES=(
+       "${FILESDIR}"/sendmail-8.18.1-c23.patch
+)
 
 src_prepare() {
+       default
        local confENVDEF="-DXDEBUG=0"
 
-       eapply "${FILESDIR}"/${PN}-8.18.1-c23-sm_strtoll.patch
-
        if use elibc_musl; then
                eapply "${FILESDIR}"/${PN}-musl-disable-cdefs.patch
                confENVDEF+=" -DHASSTRERROR"
@@ -37,8 +39,6 @@ src_prepare() {
 
        cd "${S}/${PN}" || die
 
-       default
-
        sed -e "s:/usr/libexec:/usr/sbin:g" \
                -e "s:/usr/adm/sm.bin:/var/lib/smrsh:g" \
                -i README -i smrsh.8 || die "sed failed"

Reply via email to