sync from MirBSD mirbsd
authormirabilos <m@mirbsd.org>
Sun, 19 Nov 2017 12:40:46 +0000 (13:40 +0100)
committermirabilos <m@mirbsd.org>
Sun, 19 Nov 2017 12:40:46 +0000 (13:40 +0100)
19 files changed:
configure
configure.in
doc/cvs.texinfo
doc/cvsclient.texi
lib/__fpending.h
lib/getdelim.c
lib/gettext.h
lib/minmax.h
lib/xalloc.h
src/buffer.c
src/client.c
src/cvs.h
src/import.c
src/log.c
src/mkmodules.c
src/root.c
src/server.c
src/server.h
src/version.c

index b8aec7a..8d0e1bb 100644 (file)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61-MirPorts-2 for Concurrent Versions System (CVS) 1.12.13-MirOS-0AB8.3.
+# Generated by GNU Autoconf 2.61-MirPorts-2 for Concurrent Versions System (CVS) 1.12.13-MirOS-0AB8.4.
 #
 # Report bugs to <miros-discuss@mirbsd.org>.
 #
@@ -590,8 +590,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='Concurrent Versions System (CVS)'
 PACKAGE_TARNAME='cvs'
-PACKAGE_VERSION='1.12.13-MirOS-0AB8.3'
-PACKAGE_STRING='Concurrent Versions System (CVS) 1.12.13-MirOS-0AB8.3'
+PACKAGE_VERSION='1.12.13-MirOS-0AB8.4'
+PACKAGE_STRING='Concurrent Versions System (CVS) 1.12.13-MirOS-0AB8.4'
 PACKAGE_BUGREPORT='miros-discuss@mirbsd.org'
 
 ac_unique_file="src/cvs.h"
@@ -1259,7 +1259,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Concurrent Versions System (CVS) 1.12.13-MirOS-0AB8.3 to adapt to many kinds of systems.
+\`configure' configures Concurrent Versions System (CVS) 1.12.13-MirOS-0AB8.4 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1325,7 +1325,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Concurrent Versions System (CVS) 1.12.13-MirOS-0AB8.3:";;
+     short | recursive ) echo "Configuration of Concurrent Versions System (CVS) 1.12.13-MirOS-0AB8.4:";;
    esac
   cat <<\_ACEOF
 
@@ -1532,7 +1532,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Concurrent Versions System (CVS) configure 1.12.13-MirOS-0AB8.3
+Concurrent Versions System (CVS) configure 1.12.13-MirOS-0AB8.4
 generated by GNU Autoconf 2.61-MirPorts-2
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1562,7 +1562,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Concurrent Versions System (CVS) $as_me 1.12.13-MirOS-0AB8.3, which was
+It was created by Concurrent Versions System (CVS) $as_me 1.12.13-MirOS-0AB8.4, which was
 generated by GNU Autoconf 2.61-MirPorts-2.  Invocation command line was
 
   $ $0 $@
@@ -2257,7 +2257,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='cvs'
- VERSION='1.12.13-MirOS-0AB8.3'
+ VERSION='1.12.13-MirOS-0AB8.4'
 
 
 # Some tools Automake needs.
@@ -33600,7 +33600,7 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Concurrent Versions System (CVS) $as_me 1.12.13-MirOS-0AB8.3, which was
+This file was extended by Concurrent Versions System (CVS) $as_me 1.12.13-MirOS-0AB8.4, which was
 generated by GNU Autoconf 2.61-MirPorts-2.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -33653,7 +33653,7 @@ Report bugs to <bug-autoconf@gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-Concurrent Versions System (CVS) config.status 1.12.13-MirOS-0AB8.3
+Concurrent Versions System (CVS) config.status 1.12.13-MirOS-0AB8.4
 configured by $0, generated by GNU Autoconf 2.61-MirPorts-2,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
index 1d3c630..e0d887e 100644 (file)
@@ -1,4 +1,4 @@
-dnl $MirOS: src/gnu/usr.bin/cvs/configure.in,v 1.32 2017/08/12 19:17:28 tg Exp $
+dnl $MirOS: src/gnu/usr.bin/cvs/configure.in,v 1.33 2017/11/19 12:34:56 tg Exp $
 dnl
 dnl configure.in for cvs
 
@@ -19,7 +19,7 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.])
 
-AC_INIT([Concurrent Versions System (CVS)],[1.12.13-MirOS-0AB8.3],
+AC_INIT([Concurrent Versions System (CVS)],[1.12.13-MirOS-0AB8.4],
        [miros-discuss@mirbsd.org],[cvs])
 AC_CONFIG_SRCDIR(src/cvs.h)
 AM_INIT_AUTOMAKE([gnu 1.9.2 dist-bzip2 no-define])
index c7cbbc6..202c05c 100644 (file)
@@ -1,6 +1,7 @@
 \input texinfo  @c -*-texinfo-*-
 @comment Documentation for CVS.
 @setfilename cvs.info
+@set MBSDPATCHLEVEL -MirOS-0AB8.1
 @tex
  % set PA4 paper size (can print on both DIN ISO A4 and US Letter)
  \globaldefs = 1%
@@ -11,7 +12,7 @@
   {28truecm}{21truecm}%
  \globaldefs = 0%
 @end tex
-@comment $MirOS: src/gnu/usr.bin/cvs/doc/cvs.texinfo,v 1.36 2017/08/12 17:37:55 tg Exp $
+@comment $MirOS: src/gnu/usr.bin/cvs/doc/cvs.texinfo,v 1.37 2017/11/18 22:37:49 tg Exp $
 @macro copyleftnotice
 @noindent
 Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
@@ -140,7 +141,7 @@ approved by the Free Software Foundation.
 @sp 1
 @center @titlefont{CVS}
 @sp 2
-@center for @sc{cvs} @value{VERSION}
+@center for @sc{cvs} @value{VERSION}@value{MBSDPATCHLEVEL}
 @comment -release-
 @sp 3
 @center Per Cederqvist et al
@@ -169,7 +170,7 @@ approved by the Free Software Foundation.
 @anchor{Cederqvist}
 @end ifnotinfo
 This info manual describes how to use and administer
-@sc{cvs} version @value{VERSION}.
+@sc{cvs} version @value{VERSION}@value{MBSDPATCHLEVEL} and up.
 @end ifnottex
 
 @ifinfo
@@ -7249,7 +7250,7 @@ The date (UTC) the revision was checked in, in a format suitable
 for the Berkeley mdoc macro processing.
 
 @example
-$Mdocdate: August 12 2017 $
+$Mdocdate: November 18 2017 $
 @end example
 
 @cindex Header keyword
index 55225ce..e2352a1 100644 (file)
@@ -1,6 +1,7 @@
 \input texinfo @c -*- texinfo -*-
 
 @setfilename cvsclient.info
+@set MBSDPATCHLEVEL -MirOS-0AB8.4
 @tex
  % set PA4 paper size (can print on both DIN ISO A4 and US Letter)
  \globaldefs = 1%
@@ -11,7 +12,7 @@
   {28truecm}{21truecm}%
  \globaldefs = 0%
 @end tex
-@comment $MirOS: src/gnu/usr.bin/cvs/doc/cvsclient.texi,v 1.9 2017/08/12 17:37:58 tg Exp $
+@comment $MirOS: src/gnu/usr.bin/cvs/doc/cvsclient.texi,v 1.11 2017/11/18 22:37:52 tg Exp $
 @include version-client.texi
 
 @dircategory Programming
@@ -25,9 +26,8 @@
 This document describes the client/server protocol used by CVS.  It does
 not describe how to use or administer client/server CVS; for that,
 @pxref{Top, the regular CVS manual,, cvs, the regular CVS manual}.
-This is version @value{VERSION} of the protocol
-specification---@xref{Introduction}, for more on what this version number
-means.
+This specification applies to
+@sc{cvs} version @value{VERSION}@value{MBSDPATCHLEVEL} and up.
 
 @menu
 * Introduction::      What is CVS and what is the client/server protocol for?
@@ -483,12 +483,13 @@ a dollar sign (@samp{$}).
 In various contexts, for example the @code{Argument} request and the
 @code{M} response, one transmits what is essentially an arbitrary
 string.  Often this will have been supplied by the user (for example,
-the @samp{-m} option to the @code{ci} request).  The protocol has no
-mechanism to specify the character set of such strings; it would be
-fairly safe to stick to the invariant ISO 646 character set but the
-existing practice is probably to just transmit whatever the user
-specifies, and hope that everyone involved agrees which character set is
-in use, or sticks to a common subset.
+the @samp{-m} option to the @code{ci} request will show up in the
+@code{LOGM} response).  The protocol has no mechanism to specify the
+character set of such strings; it would have been, initially, fairly
+safe to stick to the invariant ISO 646 character set but the existing
+practice is probably to just transmit whatever the user specifies,
+and hope that everyone involved agrees which character set is in use,
+or sticks to a common subset. In modern times, UTF-8 should be used.
 
 @node Dates
 @section Dates
@@ -1779,12 +1780,19 @@ example output.  Servers are encouraged to use the @samp{MT} response,
 and future versions of this document will hopefully standardise more of
 the @samp{MT} tags; see @ref{Text tags}.
 
+@item LOGM @var{text} \n
+Exactly the same as @code{M} but only sent if the client indicates
+supporting it via @code{Valid-responses}, used exclusively for log
+message payload (that is, in @code{cvs log} and @code{cvs rlog},
+the text body the user originally has entered with the @samp{-m}
+option to the @code{ci} request).
+
 @item Mbinary \n
 Additional data: file transmission (note: compressed file transmissions
-are not supported).  This is like @samp{M}, except the contents of the
+are not supported).  This is like @code{M}, except the contents of the
 file transmission are binary and should be copied to standard output
 without translation to local text file conventions.  To transmit a text
-file to standard output, servers should use a series of @samp{M} requests.
+file to standard output, servers should use a series of @code{M} requests.
 
 @item E @var{text} \n
 Same as @code{M} but send to stderr not stdout.
@@ -1811,7 +1819,7 @@ to @samp{z} or @samp{A} to @samp{Z}, then it represents tagged text.
 If the implementation recognises @var{tagname}, then it may interpret
 @var{data} in some particular fashion.  If the implementation does not
 recognise @var{tagname}, then it should simply treat @var{data} as
-text to be sent to the user (similar to an @samp{M} response).  There
+text to be sent to the user (similar to an @code{M} response).  There
 are two tags which are general purpose.  The @samp{text} tag is
 similar to an unrecognised tag in that it provides text which will
 ordinarily be sent to the user.  The @samp{newline} tag is used
index 36a842e..b32753d 100644 (file)
@@ -1,7 +1,7 @@
 #include <stddef.h>
 #include <stdio.h>
 
-#if HAVE_STDIO_EXT_H
+#if defined(HAVE_STDIO_EXT_H) && (HAVE_STDIO_EXT_H)
 # include <stdio_ext.h>
 #endif
 
index 86c5a7a..ae66fc4 100644 (file)
@@ -28,7 +28,7 @@
 
 #include "getdelim.h"
 
-__RCSID("$MirOS: src/gnu/usr.bin/cvs/lib/getdelim.c,v 1.4 2010/09/19 19:42:59 tg Exp $");
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/lib/getdelim.c,v 1.5 2017/11/18 23:04:54 tg Exp $");
 
 #if !HAVE_FLOCKFILE
 # undef flockfile
@@ -82,12 +82,12 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
       }
 
       /* Make enough space for len+1 (for final NUL) bytes.  */
-      if (cur_len + 1 >= *n)
+      if ((size_t)cur_len + 1U >= *n)
        {
          size_t needed = 2 * (cur_len + 1) + 1;   /* Be generous. */
          char *new_lineptr;
 
-         if (needed < cur_len)
+         if (needed < (size_t)cur_len)
            {
              result = -1;
              goto unlock_return;
index 285cb31..4e2d57b 100644 (file)
@@ -19,7 +19,7 @@
 #define _LIBGETTEXT_H 1
 
 /* NLS can be disabled through the configure --disable-nls option.  */
-#if ENABLE_NLS
+#if defined(ENABLE_NLS) && (ENABLE_NLS)
 
 /* Get declarations of GNU message catalog functions.  */
 # include <libintl.h>
index 975ea76..baaad05 100644 (file)
@@ -28,7 +28,7 @@
    included after this file.  Likewise for <sys/param.h>.
    If more than one of these system headers define MIN and MAX, pick just
    one of the headers (because the definitions most likely are the same).  */
-#if HAVE_MINMAX_IN_LIMITS_H
+#if defined(HAVE_MINMAX_IN_LIMITS_H) && (HAVE_MINMAX_IN_LIMITS_H)
 # include <limits.h>
 #elif HAVE_MINMAX_IN_SYS_PARAM_H
 # include <sys/param.h>
index f80977e..e747600 100644 (file)
@@ -29,7 +29,7 @@ extern "C" {
 
 
 # ifndef __attribute__
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
+#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || (defined(__STRICT_ANSI__) && (__STRICT_ANSI__))
 #   define __attribute__(x)
 #  endif
 # endif
index f8fd82a..366afb5 100644 (file)
@@ -1,6 +1,9 @@
 /*
+ * Copyright © 2017 mirabilos <m@mirbsd.org>
  * Copyright (C) 1996-2005 The Free Software Foundation, Inc.
  *
+ * Portions Copyright (c) 2017 Patrick Keshishian
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2, or (at your option)
@@ -18,7 +21,7 @@
 #include "buffer.h"
 #include "pagealign_alloc.h"
 
-__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/buffer.c,v 1.2 2016/10/22 14:33:29 tg Exp $");
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/buffer.c,v 1.3 2017/11/18 22:05:10 tg Exp $");
 
 #if defined (SERVER_SUPPORT) || defined (CLIENT_SUPPORT)
 
@@ -1052,7 +1055,14 @@ buf_copy_lines (struct buffer *outbuf, struct buffer *inbuf, int command)
        }
 
        /* Put in the command.  */
-       buf_append_char (outbuf, command);
+       switch (command) {
+       case CVS_OUTPUT_EX_LOGM:
+               buf_output0 (outbuf, "LOGM");
+               break;
+       default:
+               buf_append_char (outbuf, command);
+               break;
+       }
        buf_append_char (outbuf, ' ');
 
        if (inbuf->data != nldata)
index a863c4e..2dc1761 100644 (file)
@@ -20,7 +20,7 @@
 #include "buffer.h"
 #include "save-cwd.h"
 
-__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/client.c,v 1.8 2017/08/12 01:51:22 tg Exp $");
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/client.c,v 1.10 2017/11/18 22:15:52 tg Exp $");
 
 #ifdef CLIENT_SUPPORT
 
@@ -3079,6 +3079,7 @@ struct response responses[] =
        rs_optional),
     RSP_LINE("M", handle_m, response_type_normal, rs_essential),
     RSP_LINE("Mbinary", handle_mbinary, response_type_normal, rs_optional),
+    RSP_LINE("LOGM", handle_m, response_type_normal, rs_optional),
     RSP_LINE("E", handle_e, response_type_normal, rs_essential),
     RSP_LINE("F", handle_f, response_type_normal, rs_optional),
     RSP_LINE("MT", handle_mt, response_type_normal, rs_optional),
@@ -3806,9 +3807,10 @@ connect_to_forked_server (cvsroot_t *root, struct buffer **to_server_p,
     /* This is pretty simple.  All we need to do is choose the correct
        cvs binary and call piped_child. */
 
-     char *command[3];
+    char *command[4];
+    int ncommand = 0;
 
-    command[0] = (root->cvs_server
+    command[ncommand++] = (root->cvs_server
                  ? root->cvs_server : getenv ("CVS_SERVER"));
     if (!command[0] || !command[0][0])
 # ifdef SERVER_SUPPORT
@@ -3820,7 +3822,7 @@ connect_to_forked_server (cvsroot_t *root, struct buffer **to_server_p,
          * such that this casting isn't needed, but I don't know how.  If I
          * declare it as (const char *command[]), the compiler complains about
          * an incompatible arg 1 being passed to piped_child and if I declare
-         * it as (char *const command[3]), then the compiler complains when I
+         * it as (char *const command[4]), then the compiler complains when I
          * assign values to command[i].
          */
        command[0] = (char *)program_path;
@@ -3832,11 +3834,15 @@ connect_to_forked_server (cvsroot_t *root, struct buffer **to_server_p,
     }
 # endif /* SERVER_SUPPORT */
     
-    command[1] = "server";
-    command[2] = NULL;
-
-    TRACE (TRACE_FUNCTION, "Forking server: %s %s",
-          command[0] ? command[0] : "(null)", command[1]);
+    if (readonlyfs)
+        command[ncommand++] = "-R";
+    command[ncommand++] = "server";
+    command[ncommand++] = NULL;
+
+    TRACE (TRACE_FUNCTION, "Forking server: %s %s %s",
+          command[0] ? command[0] : "(null)",
+          command[1] ? command[1] : "(null)",
+          command[2] ? command[2] : "");
 
     child_pid = piped_child (command, &tofd, &fromfd, false);
     if (child_pid < 0)
index 6b45aa9..7c9f8fb 100644 (file)
--- a/src/cvs.h
+++ b/src/cvs.h
@@ -1,6 +1,7 @@
-/* $MirOS: src/gnu/usr.bin/cvs/src/cvs.h,v 1.7 2016/10/21 16:41:16 tg Exp $ */
+/* $MirOS: src/gnu/usr.bin/cvs/src/cvs.h,v 1.9 2017/11/18 23:04:55 tg Exp $ */
 
 /*
+ * Copyright © 2017 mirabilos <m@mirbsd.org>
  * Copyright (C) 1986-2005 The Free Software Foundation, Inc.
  *
  * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
@@ -26,7 +27,7 @@
 /* Add GNU attribute suppport.  */
 #ifndef __attribute__
 /* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || (defined(__STRICT_ANSI__) && (__STRICT_ANSI__))
 #  define __attribute__(Spec) /* empty */
 # else
 #   if __GNUC__ == 2 && __GNUC_MINOR__ < 96
@@ -590,7 +591,8 @@ void cat_module (int status);
 void check_entries (char *dir);
 void close_module (DBM * db);
 void copy_file (const char *from, const char *to);
-void fperrmsg (FILE * fp, int status, int errnum, char *message,...);
+void fperrmsg (FILE * fp, int status, int errnum, char *message, ...)
+       __attribute__ ((__format__(__printf__, 4, 5)));
 
 int ign_name (char *name);
 void ign_add (char *ign, int hold);
@@ -623,7 +625,8 @@ void signals_register (RETSIGTYPE (*handler)(int));
 void cleanup_register (void (*handler) (void));
 
 void update_delproc (Node * p);
-void usage (const char *const *cpp);
+void usage (const char *const *cpp)
+       __attribute__((__noreturn__));
 void xchmod (const char *fname, int writable);
 List *Find_Names (char *repository, int which, int aflag,
                  List ** optentries);
@@ -920,11 +923,15 @@ void tag_check_valid (const char *, int, char **, int, int, char *, bool);
 
 /* From server.c and documented there.  */
 void cvs_output (const char *, size_t);
+void cvs_output_ex (const char *, size_t, int);
 void cvs_output_binary (char *, size_t);
 void cvs_outerr (const char *, size_t);
 void cvs_flusherr (void);
 void cvs_flushout (void);
 void cvs_output_tagged (const char *, const char *);
+int supported_response (const char *);
+
+#define CVS_OUTPUT_EX_LOGM     0x80000001
 
 extern const char *global_session_id;
 
index 54baac4..aa19271 100644 (file)
@@ -25,9 +25,9 @@
 #include "lstat.h"
 #include "save-cwd.h"
 
-__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/import.c,v 1.11 2016/11/08 23:04:36 tg Exp $");
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/import.c,v 1.12 2017/11/18 23:04:55 tg Exp $");
 
-static char *get_comment (const char *user);
+static const char *get_comment (const char *user);
 static int add_rev (char *message, RCSNode *rcs, char *vfile,
                          char *vers);
 static int add_tags (RCSNode *rcs, char *vfile, char *vtag, int targc,
@@ -887,7 +887,8 @@ add_tags (RCSNode *rcs, char *vfile, char *vtag, int targc, char **targv)
  */
 struct compair
 {
-    char *suffix, *comlead;
+    const char *suffix;
+    const char *comlead;
 };
 
 static const struct compair comtable[] =
@@ -994,13 +995,13 @@ static const struct compair comtable[] =
 
 
 
-static char *
+static const char *
 get_comment (const char *user)
 {
     char *cp, *suffix;
     char *suffix_path;
     int i;
-    char *retval;
+    const char *retval;
 
     suffix_path = xmalloc (strlen (user) + 5);
     cp = strrchr (user, '.');
index ed138df..a042874 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -1,4 +1,5 @@
 /*
+ * Copyright © 2017 mirabilos <m@mirbsd.org>
  * Copyright (C) 1986-2005 The Free Software Foundation, Inc.
  *
  * Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
@@ -20,6 +21,8 @@
 #include "cvs.h"
 #include <assert.h>
 
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/log.c,v 1.2 2017/11/18 22:05:12 tg Exp $");
+
 /* This structure holds information parsed from the -r option.  */
 
 struct option_revlist
@@ -145,6 +148,7 @@ static void log_version (struct log_data *, struct revlist *,
                                RCSNode *, RCSVers *, int);
 static int log_branch (Node *, void *);
 static int version_compare (const char *, const char *, int);
+static void logm_output (const char *);
 
 static struct log_data log_data;
 static int is_rlog;
@@ -1681,11 +1685,10 @@ log_version (struct log_data *log_data, struct revlist *revlist, RCSNode *rcs,
        cvs_output ("*** empty log message ***\n", 0);
     else
     {
+       /* assert: last thing cvs_output’ed was a newline */
        /* FIXME: Technically, the log message could contain a null
            byte.  */
-       cvs_output (p->data, 0);
-       if (((char *)p->data)[strlen (p->data) - 1] != '\n')
-           cvs_output ("\n", 1);
+       logm_output(p->data);
     }
 }
 
@@ -1780,3 +1783,23 @@ version_compare (const char *v1, const char *v2, int len)
            ++v2;
     }
 }
+
+static void
+logm_output(const char *str)
+{
+       /* assert: str is not empty */
+       size_t len = strlen(str);
+       int buftag = 'M';
+       static char has_logm = 0;
+
+       if (server_active) {
+               if (!has_logm)
+                       has_logm = supported_response("LOGM") ? 1 : 2;
+               if (has_logm == 1)
+                       buftag = CVS_OUTPUT_EX_LOGM;
+       }
+
+       cvs_output_ex(str, len, buftag);
+       if (/*len > 0 &&*/ str[len - 1] != '\n')
+               cvs_output_ex("\n", 1, buftag);
+}
index ee6cf15..0b3c803 100644 (file)
 #include "history.h"
 #include "save-cwd.h"
 
-__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/mkmodules.c,v 1.16 2017/03/27 16:55:27 tg Exp $");
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/mkmodules.c,v 1.18 2017/11/18 23:18:35 tg Exp $");
 
 #ifndef DBLKSIZ
 #define        DBLKSIZ 4096                    /* since GNU ndbm doesn't define it */
 #endif
 
-static int checkout_file (char *file, char *temp);
+static int checkout_file (const char *file, char *temp);
 static char *make_tempfile (void);
-static void rename_rcsfile (char *temp, char *real);
+static void rename_rcsfile (const char *temp, const char *real);
 
 #ifndef MY_NDBM
 static void rename_dbmfile (char *temp);
@@ -33,13 +33,13 @@ static void write_dbmfile (char *temp);
 /* Structure which describes an administrative file.  */
 struct admin_file {
    /* Name of the file, within the CVSROOT directory.  */
-   char *filename;
+   const char *filename;
 
    /* This is a one line description of what the file is for.  It is not
       currently used, although one wonders whether it should be, somehow.
       If NULL, then don't process this file in mkmodules (FIXME?: a bit of
       a kludge; probably should replace this with a flags field).  */
-   char *errormsg;
+   const char *errormsg;
 
    /* Contents which the file should have in a new repository.  To avoid
       problems with brain-dead compilers which choke on long string constants,
@@ -869,7 +869,7 @@ make_tempfile (void)
    there is an error, print a message and return 1 (FIXME: probably
    not a very clean convention).  On success, return 0.  */
 static int
-checkout_file (char *file, char *temp)
+checkout_file (const char *file, char *temp)
 {
     char *rcs;
     RCSNode *rcsnode;
@@ -1111,7 +1111,7 @@ rename_dbmfile( char *temp )
 #endif                         /* !MY_NDBM */
 
 static void
-rename_rcsfile (char *temp, char *real)
+rename_rcsfile (const char *temp, const char *real)
 {
     char *bak;
     struct stat statbuf;
index c2d32f4..88a219b 100644 (file)
@@ -21,7 +21,7 @@
 #include <assert.h>
 #include "getline.h"
 
-__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/root.c,v 1.19 2017/08/11 23:49:29 tg Exp $");
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/root.c,v 1.20 2017/11/18 22:15:53 tg Exp $");
 
 /* Printable names for things in the current_parsed_root->method enum variable.
    Watch out if the enum is changed in cvs.h! */
@@ -720,7 +720,7 @@ parse_cvsroot (const char *root_in)
 
 #if defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT)
     if (readonlyfs && newroot->isremote && (newroot->method != ext_method)
-       && (newroot->method != extssh_method))
+      && (newroot->method != extssh_method) && (newroot->method != fork_method))
        error (1, 0,
 "Read-only repository feature unavailable with remote roots (cvsroot = %s)",
               cvsroot_copy);
index 98e743a..8d5442f 100644 (file)
@@ -1,12 +1,17 @@
-/* This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.  */
+/*
+ * Copyright © 2017 mirabilos <m@mirbsd.org>
+ * Copyright (C) 1986-2005 The Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
 
 #include "cvs.h"
 
@@ -20,7 +25,7 @@
 #include "getline.h"
 #include "getnline.h"
 
-__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/server.c,v 1.14 2017/08/12 01:08:25 tg Exp $");
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/server.c,v 1.16 2017/11/18 23:04:56 tg Exp $");
 
 int server_active = 0;
 
@@ -548,8 +553,8 @@ alloc_pending_warning (size_t size)
 
 
 
-static int
-supported_response (char *name)
+int
+supported_response (const char *name)
 {
     struct response *rs;
 
@@ -686,6 +691,9 @@ serve_valid_responses (char *arg)
  */
 static pid_t command_pid;
 
+static void outbuf_memory_error (struct buffer *)
+       __attribute__((__noreturn__));
+
 static void
 outbuf_memory_error (struct buffer *buf)
 {
@@ -709,6 +717,8 @@ error ENOMEM Virtual memory exhausted.\n";
 }
 
 
+static void input_memory_error (struct buffer *)
+       __attribute__((__noreturn__));
 
 static void
 input_memory_error (struct buffer *buf)
@@ -5888,7 +5898,7 @@ static void serve_valid_requests (char *arg);
 /*
  * Parts of this table are shared with the client code,
  * but the client doesn't need to know about the handler
- * functions.
+ * functions. It likes to write to the flags field, though.
  */
 
 struct request requests[] =
@@ -7703,6 +7713,12 @@ krb_encrypt_buffer_initialize( struct buffer *buf, int input,
 void
 cvs_output (const char *str, size_t len)
 {
+    cvs_output_ex (str, len, 'M');
+}
+
+void
+cvs_output_ex (const char *str, size_t len, int buftag)
+{
     if (len == 0)
        len = strlen (str);
 #ifdef SERVER_SUPPORT
@@ -7711,7 +7727,7 @@ cvs_output (const char *str, size_t len)
        if (buf_to_net)
        {
            buf_output (saved_output, str, len);
-           buf_copy_lines (buf_to_net, saved_output, 'M');
+           buf_copy_lines (buf_to_net, saved_output, buftag);
        }
 # if HAVE_SYSLOG_H
        else
@@ -7726,7 +7742,7 @@ cvs_output (const char *str, size_t len)
        if (protocol)
        {
            buf_output (saved_output, str, len);
-           buf_copy_lines (protocol, saved_output, 'M');
+           buf_copy_lines (protocol, saved_output, buftag);
            buf_send_counted (protocol);
        }
 # if HAVE_SYSLOG_H
index 8819dea..00ed849 100644 (file)
@@ -1,3 +1,5 @@
+/* $MirOS: src/gnu/usr.bin/cvs/src/server.h,v 1.2 2017/11/18 23:04:57 tg Exp $ */
+
 /*
  * Copyright (C) 1986-2005 The Free Software Foundation, Inc.
  *
@@ -161,7 +163,7 @@ extern char *CVS_Username;
 struct request
 {
   /* Name of the request.  */
-  char *name;
+  const char *name;
 
 #ifdef SERVER_SUPPORT
   /*
index ebce4b2..3836f9f 100644 (file)
@@ -16,6 +16,9 @@
 
 #include "cvs.h"
 
+__RCSID("$MirOS: src/gnu/usr.bin/cvs/src/version.c,v 1.4 2017/11/18 23:04:57 tg Exp $");
+
+static const
 #ifdef CLIENT_SUPPORT
 #ifdef SERVER_SUPPORT
 char *config_string = " (client/server)\n";
@@ -81,4 +84,3 @@ version (int argc, char **argv)
 #endif
     return err;
 }
-