Index: cscm-0.1.4/.svnignore
===================================================================
--- cscm-0.1.4/.svnignore (revision 10)
+++ cscm-0.1.4/.svnignore (nonexistent)
@@ -1,35 +0,0 @@
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/configure.ac
===================================================================
--- cscm-0.1.4/configure.ac (revision 10)
+++ cscm-0.1.4/configure.ac (nonexistent)
@@ -1,262 +0,0 @@
-
-dnl ============================================================
-dnl Process this file with autoconf to produce
-dnl a configure script.
-dnl ============================================================
-
-AC_PREREQ(2.71)dnl dnl Minimum Autoconf version required.
-
-
-AC_INIT([cscm], [0.1.4],
- [support@radix.pro], [cscm], [https://radix.pro])
-
-dnl ============================================================
-dnl m4's diversions:
-dnl ---------------
-dnl
-dnl see: /use/share/autoconf/autoconf/general.m4
-dnl ============================================================
-m4_divert_push([M4SH-INIT])
-CSVN_NAME=svn
-CSVN_CONFIG_FILE=csvn-ui.rc
-CSVN_PROGRAM=csvn
-CSVN_PROGRAM_NAME=cSvn
-CGIT_NAME=git
-CGIT_CONFIG_FILE=cgit-ui.rc
-CGIT_PROGRAM=cgit
-CGIT_PROGRAM_NAME=cGit
-PACKAGE_DAEMON=cscmd
-PACKAGE_LICENSE=Radix-1.0
-CSCM_CONTROL_DIR=/etc/rc.d
-CSCM_LOGROTATE_DIR=/etc/logrotate.d
-CSCM_HOME_PATH=/var/lib
-CSCM_LOG_DIR=/var/log
-CSCM_PID_DIR=/var/run
-m4_divert_pop([M4SH-INIT])
-
-AC_CSCM_HEADLINE([cscm], [cScm], [Copyright (c) 2019-2022 Andrey V.Kosteltsev])
-
-
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl $$ $$
-dnl $$ PART: Init Automake environment $$
-dnl $$ $$
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-AC_MSG_CFG_PART(Init Automake environment)
-
-AC_CANONICAL_TARGET
-
-AM_INIT_AUTOMAKE([subdir-objects foreign no-dist-gzip dist-xz])
-
-AC_CONFIG_HEADERS([config.h])
-
-AC_PREFIX_DEFAULT(/usr/local)
-
-
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl $$ $$
-dnl $$ PART: Test for Build Tools $$
-dnl $$ $$
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-AC_MSG_CFG_PART(Test for build tools)
-AC_CHECK_TOOL([GCC], [gcc], [:])
-AC_PATH_PROG([BISON], [bison], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-test "$BISON" = "no" && AC_MSG_ERROR([Unable to find required program 'bison'])
-
-
-AC_MSG_CFG_PART(Test for Header files)
-dnl
-dnl Check for system header files.
-dnl =============================
-dnl /* GetText частично проверил. Но мы делаем для себя. */
-AC_CHECK_HEADERS( locale.h )
-AC_CHECK_HEADERS( sys/types.h sys/stat.h stdlib.h stddef.h )
-AC_CHECK_HEADERS( memory.h string.h strings.h )
-AC_CHECK_HEADERS( inntypes.h stdint.h unistd.h )
-AC_CHECK_HEADERS( fcntl.h errno.h )
-AC_CHECK_HEADERS( sys/file.h )
-AC_CHECK_HEADERS( sys/uio.h )
-AC_CHECK_HEADERS( stdarg.h )
-AC_CHECK_HEADERS( sys/time.h )
-AC_CHECK_HEADERS( limits.h )
-AC_CHECK_HEADERS( endian.h )
-AC_CHECK_HEADERS( pcre2.h )
-AC_CHECK_HEADERS( wchar.h )
-AC_CHECK_HEADERS( wctype.h )
-
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl $$ $$
-dnl $$ PART: Test for Libraries $$
-dnl $$ $$
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-AC_MSG_CFG_PART(Test for libraries)
-AC_CHECK_LIB([rt],[aio_suspend],[],[AC_MSG_ERROR([Unable to find required librt])])
-AC_CHECK_LIB([pcre2-32],[pcre2_compile_32],[],[AC_MSG_ERROR([Unable to find required libpcre2-32])])
-AC_CHECK_LIB([m],[round],[],[AC_MSG_ERROR([Unable to find required libm])])
-
-
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl $$ $$
-dnl $$ PART: cScm Features $$
-dnl $$ $$
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-AC_ARG_WITH([controldir],
- [AS_HELP_STRING([--with-controldir=DIR], [cScm Daemon CONTROL directory @<:@default=/etc/rc.d@:>@],[26],[84])],
- [controldir=$withval],
- [controldir="/etc/rc.d"])
-AC_SUBST([controldir], [$controldir])
-AC_SUBST([CSCM_CONTROL_DIR], [$controldir])
-AC_DEFINE_UNQUOTED([CSCM_CONTROL_DIR], ["$CSCM_CONTROL_DIR"], [Define the cScm Daemon CONTROL directory])
-
-AC_ARG_WITH([logrotatedir],
- [AS_HELP_STRING([--with-logrotatedir=DIR], [cScm Daemon LOGROTATE directory @<:@default=/etc/logrotate.d@:>@],[26],[87])],
- [logrotatedir=$withval],
- [logrotatedir="/etc/logrotate.d"])
-AC_SUBST([logrotatedir], [$logrotatedir])
-AC_SUBST([CSCM_LOGROTATE_DIR], [$logrotatedir])
-AC_DEFINE_UNQUOTED([CSCM_LOGROTATE_DIR], ["$CSCM_LOGROTATE_DIR"], [Define the cScm Daemon LOGROTATE directory])
-
-AC_ARG_WITH([homepath],
- [AS_HELP_STRING([--with-homepath=DIR], [cSvn Daemon path to HOME directories @<:@default=/var/lib@:>@],[26],[84])],
- [homepath=$withval],
- [homepath="/var/lib"])
-AC_SUBST([homepath], [$homepath])
-AC_SUBST([CSCM_HOME_PATH], [$homepath])
-AC_DEFINE_UNQUOTED([CSCM_HOME_PATH], ["$CSCM_HOME_PATH"], [Define the cScm Daemon path to HOME directories])
-AC_SUBST([csvndhomedir], [$homepath/$CSVN_PROGRAM])
-AC_SUBST([CSVN_HOME_DIR], [$csvndhomedir])
-AC_DEFINE_UNQUOTED([CSVN_HOME_DIR], ["$CSVN_HOME_DIR"], [Define the cSvn Daemon HOME directory])
-AC_SUBST([cgitdhomedir], [$homepath/$CGIT_PROGRAM])
-AC_SUBST([CGIT_HOME_DIR], [$cgitdhomedir])
-AC_DEFINE_UNQUOTED([CGIT_HOME_DIR], ["$CGIT_HOME_DIR"], [Define the cGit Daemon HOME directory])
-
-AC_ARG_WITH([logdir],
- [AS_HELP_STRING([--with-logdir=DIR], [cSvn Daemon LOG directory @<:@default=/var/log@:>@],[26],[84])],
- [logdir=$withval],
- [logdir="/var/log"])
-AC_SUBST([logdir], [$logdir])
-AC_SUBST([CSCM_LOG_DIR], [$logdir])
-AC_DEFINE_UNQUOTED([CSCM_LOG_DIR], ["$CSCM_LOG_DIR"], [Define the cScm Daemon LOG directory])
-
-AC_ARG_WITH([piddir],
- [AS_HELP_STRING([--with-piddir=DIR], [cScm Daemon PID directory @<:@default=/var/run@:>@],[26],[84])],
- [piddir=$withval],
- [piddir="/var/run"])
-AC_SUBST([piddir], [$piddir])
-AC_SUBST([CSCM_PID_DIR], [$piddir])
-AC_DEFINE_UNQUOTED([CSCM_PID_DIR], ["$CSCM_PID_DIR"], [Define the cScm Daemon PID directory])
-
-AC_SUBST([CSVN_NAME], [$CSVN_NAME])
-AC_SUBST([CSVN_CONFIG], [$sysconfdir/$CSVN_CONFIG_FILE])
-AC_DEFINE_UNQUOTED([CSVN_CONFIG], ["$CSVN_CONFIG"], [Define the cSvn Default Configuration File])
-AC_SUBST([CSVN_PROGRAM], [$CSVN_PROGRAM])
-AC_DEFINE_UNQUOTED([CSVN_PROGRAM], ["$CSVN_PROGRAM"], [Define the cSvn Default Program Name])
-AC_SUBST([CSVN_PROGRAM_NAME], [$CSVN_PROGRAM_NAME])
-AC_SUBST([CGIT_NAME], [$CGIT_NAME])
-AC_SUBST([CGIT_CONFIG], [$sysconfdir/$CGIT_CONFIG_FILE])
-AC_DEFINE_UNQUOTED([CGIT_CONFIG], ["$CGIT_CONFIG"], [Define the cGit Default Configuration File])
-AC_SUBST([CGIT_PROGRAM], [$CGIT_PROGRAM])
-AC_DEFINE_UNQUOTED([CGIT_PROGRAM], ["$CGIT_PROGRAM"], [Define the cGit Default Program Name])
-AC_SUBST([CGIT_PROGRAM_NAME], [$CGIT_PROGRAM_NAME])
-
-
-AC_SUBST(PROGRAM_NAME,[${PACKAGE_NAME}])
-AC_SUBST(PROGRAM_DAEMON,[${PACKAGE_DAEMON}])
-AC_SUBST(PROGRAM_VERSION,[${PACKAGE_VERSION}])
-AC_SUBST(PROGRAM_LICENSE,[${PACKAGE_LICENSE}])
-
-AC_DEFINE_UNQUOTED([PROGRAM_NAME], ["$PROGRAM_NAME"], [Define the program name])
-AC_DEFINE_UNQUOTED([PROGRAM_DAEMON], ["$PROGRAM_DAEMON"], [Define the daemon name])
-AC_DEFINE_UNQUOTED([PROGRAM_VERSION], ["$PROGRAM_VERSION"], [Define the version of all programs in this package])
-AC_DEFINE_UNQUOTED([PROGRAM_LICENSE], ["$PROGRAM_LICENSE"], [Define the License of all programs in this package])
-
-
-dnl ============================================================
-dnl Environment Variables:
-dnl ---------------------
-dnl For 'Some influential environment variables:' help section
-dnl ============================================================
-AC_ARG_VAR([STRIP], [strip command])
-
-
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl $$ $$
-dnl $$ PART: Test for Auxiliary (my be version sensitive) $$
-dnl $$ programs $$
-dnl $$ $$
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-AC_MSG_CFG_PART(Test for aux programs)
-AC_PATH_PROG_LN_S
-AC_PATH_PROG([CAT], [cat], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([CHMOD], [chmod], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([CP], [cp], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([FIND], [find], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([GZIP], [gzip], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([MV], [mv], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([RM], [rm], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([SED], [sed], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([TAR], [tar], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-AC_PATH_PROG([XZ], [xz], [no], [/usr/local/bin:/usr/bin:/bin:$PATH])
-
-
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl $$ $$
-dnl $$ PART: OUTPUT Substitution $$
-dnl $$ $$
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-dnl ============================================================
-AC_MSG_CFG_PART(OUTPUT)
-
-AC_CONFIG_FILES([
-cscmd/Makefile
-cscmd/cscmd.8
-Makefile
-])
-AC_OUTPUT
Index: cscm-0.1.4/LICENSE
===================================================================
--- cscm-0.1.4/LICENSE (revision 10)
+++ cscm-0.1.4/LICENSE (nonexistent)
@@ -1,268 +0,0 @@
-
-
- Radix.pro License
- Version 1.0, March 2016
- https://radix.pro/licenses/LICENSE-1.0-en_US.txt
-
-
-1. Definitions
-
- 1.1. "License"
-
- means the terms and conditions for use, reproduction, and distribution
- as defined by this document.
-
-
- 1.2. "Licensor"
-
- means the copyright owner or entity authorized by the copyright owner that is
- granting the License.
-
-
- 1.3. "Legal Entity"
-
- means the union of the acting entity and all other entities that control, are
- controlled by, or are under common control with that entity. For the purposes
- of this definition, "control" means:
- a. the power, direct or indirect, to cause the direction or management of such
- entity, whether by contract or otherwise, or
- b. ownership of fifty percent (50%) or more of the outstanding shares, or
- c. beneficial ownership of such entity.
-
-
- 1.4. "You" (or "Your")
-
- means an individual or Legal Entity exercising permissions granted by this License.
-
-
- 1.5. “Licensable”
-
- means having the right to grant, to the maximum extent possible, whether at the
- time of the initial grant or subsequently, any and all of the rights conveyed
- by this License.
-
-
- 1.6. "Source Form"
-
- means the form of the Work preferred for making Modifications, including but not limited
- to software source code, documentation source, and configuration files.
-
-
- 1.7. "Object Form"
-
- means any form resulting from mechanical transformation or translation of a Source form,
- including but not limited to compiled object code, generated documentation, and conversions
- to other media types.
-
-
- 1.8. "Work"
-
- means the work of authorship, whether in Source or Object Form, made available under
- the License, as indicated by a copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
-
- 1.9. "Derivative Works"
-
- means any work, whether in Source or Object Form, that is based on (or derived from) the Work
- and for which the editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes of this License,
- Derivative Works shall not include works that remain separable from, or merely link
- (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
-
-
- 1.10. "Contribution"
-
- means any work of authorship, including the original version of the Work and any modifications
- or additions to that Work or Derivative Works thereof, that is intentionally submitted to
- Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity
- authorized to submit on behalf of the copyright owner. For the purposes of this definition,
- "submitted" means any form of electronic, verbal, or written communication sent to the Licensor
- or its representatives, including but not limited to communication on electronic mailing lists,
- source code control systems, and issue tracking systems that are managed by, or on behalf of,
- the Licensor for the purpose of discussing and improving the Work, but excluding communication
- that is conspicuously marked or otherwise designated in writing by the copyright owner
- as "Not a Contribution."
-
-
- 1.11. "Contributor"
-
- means Licensor and any individual or Legal Entity on behalf of whom a Contribution has been
- received by Licensor and subsequently incorporated within the Work.
-
-
- 1.12. “Patent Claims” of a Contributor
-
- means any patent claim(s), including without limitation, method, process, and apparatus claims,
- in any patent Licensable by such Contributor that would be infringed, but for the grant of the
- License, by the making, using, selling, offering for sale, having made, import, or transfer
- of either its Contributions or its Contributor Version.
-
-
-
-2. Grant of Copyright License
-
- Subject to the terms and conditions of this License, each Contributor hereby grants to You
- a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license
- to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense,
- and distribute the Work and such Derivative Works in Source or Object Form.
-
-
-3. Grant of Patent License
-
- Subject to the terms and conditions of this License, each Contributor hereby grants
- to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made, use, offer to
- sell, sell, import, and otherwise transfer the Work, where such license applies only
- to those patent claims Licensable by such Contributor that are necessarily infringed
- by their Contribution(s) alone or by combination of their Contribution(s) with the
- Work to which such Contribution(s) was submitted. If You institute patent litigation
- against any entity (including a cross-claim or counterclaim in a lawsuit) alleging
- that the Work or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses granted to You under
- this License for that Work shall terminate as of the date such litigation is filed.
-
-
-4. Redistribution
-
- You may reproduce and distribute copies of the Work or Derivative Works thereof
- in any medium, with or without modifications, and in Source or Object Form, provided
- that You meet the following conditions:
-
- a. You must give any other recipients of the Work or Derivative Works
- a copy of this License; and
- b. You must cause any modified files to carry prominent notices stating that
- You changed the files; and
- c. You must retain, in the Source form of any Derivative Works that You distribute,
- all copyright, patent, trademark, and attribution notices from the Source form
- of the Work, excluding those notices that do not pertain to any part of the
- Derivative Works; and
- d. If the Work includes a "PRINCIPLE" text file as part of its distribution, then
- any Derivative Works that You distribute must include a readable copy of the
- fundamental ideas, truths or propositions contained within such PRINCIPLE file.
- You may add Your own fundamental ideas, truths or propositions that serves as
- the foundation for understanding the internal structure and principles of
- Derivative works or Contributions.
-
- You may add Your own copyright statement to Your modifications and may provide additional
- or different license terms and conditions for use, reproduction, or distribution of Your
- modifications, or for any such Derivative Works as a whole, provided Your use, reproduction,
- and distribution of the Work otherwise complies with the conditions stated in this License.
-
-
-5. Submission of Contributions
-
- Unless You explicitly state otherwise, any Contribution intentionally submitted for
- inclusion in the Work by You to the Licensor shall be under the terms and conditions
- of this License, without any additional terms or conditions. Notwithstanding the above,
- nothing herein shall supersede or modify the terms of any separate license agreement
- you may have executed with Licensor regarding such Contributions.
-
-
-6. Trademarks
-
- This License does not grant permission to use the trade names, trademarks, service marks,
- or product names of the Licensor, except as required for reasonable and customary use in
- describing the origin of the Work and reproducing the content of the PRINCIPLE file.
-
-
-7. Disclaimer of Warranty
-
- Unless required by applicable law or agreed to in writing, Licensor provides the Work
- (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES
- OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any
- warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of
- using or redistributing the Work and assume any risks associated with Your exercise of
- permissions under this License.
-
-
-8. Limitation of Liability
-
- In no event and under no legal theory, whether in tort (including negligence), contract,
- or otherwise, unless required by applicable law (such as deliberate and grossly negligent
- acts) or agreed to in writing, shall any Contributor be liable to You for damages, including
- any direct, indirect, special, incidental, or consequential damages of any character arising
- as a result of this License or out of the use or inability to use the Work (including but not
- limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or
- any and all other commercial damages or losses), even if such Contributor has been advised
- of the possibility of such damages.
-
-
-9. Accepting Warranty or Additional Liability
-
- While redistributing the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity, or other liability
- obligations and/or rights consistent with this License. However, in accepting such
- obligations, You may act only on Your own behalf and on Your sole responsibility, not
- on behalf of any other Contributor, and only if You agree to indemnify, defend, and
- hold each Contributor harmless for any liability incurred by, or claims asserted
- against, such Contributor by reason of your accepting any such warranty or additional
- liability.
-
-
-APPENDICES
-
-APPENDIX 1: How to apply the Radix.pro License to your work
-
- To apply the Radix.pro License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Radix.pro License, Version 1.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- https://radix.pro/licenses/LICENSE-1.0-en_US.txt
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied.
-
-
-APPENDIX 2: Examples of comments
-
-/**********************************************************************
-
- Copyright 2016 Andrey V.Kosteltsev
-
- Licensed under the Radix.pro License, Version 1.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- https://radix.pro/licenses/LICENSE-1.0-en_US.txt
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied.
-
- **********************************************************************/
-
-
-#!/bin/sh
-#######################################################################
-#
-# Copyright 2016 Andrey V.Kosteltsev
-#
-# Licensed under the Radix.pro License, Version 1.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://radix.pro/licenses/LICENSE-1.0-en_US.txt
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied.
-#
-#######################################################################
-
Index: cscm-0.1.4/README
===================================================================
--- cscm-0.1.4/README (revision 10)
+++ cscm-0.1.4/README (nonexistent)
@@ -1,2 +0,0 @@
-
-see README.md instead
Index: cscm-0.1.4/cscm/bcf.h
===================================================================
--- cscm-0.1.4/cscm/bcf.h (revision 10)
+++ cscm-0.1.4/cscm/bcf.h (nonexistent)
@@ -1,123 +0,0 @@
-
-#ifndef __BCF_H
-#define __BCF_H
-
-/******************************************
- Binary config file format (32-bit only):
- */
-
-#define BCF_MAG0 0x3f /* b_ident[BI_MAG0] */
-#define BCF_MAG1 'B' /* b_ident[BI_MAG1] */
-#define BCF_MAG2 'C' /* b_ident[BI_MAG2] */
-#define BCF_MAG3 'F' /* b_ident[BI_MAG3] */
-
-#define BCFMAG "\77BCF"
-#define SZBCFMAG 4
-
-/* b_ident[BI_CLASS]: */
-#define BCF_CLASS_NONE 0 /* invalid class */
-#define BCF_CLASS_32 1 /* 32-bit objects */
-#define BCF_CLASS_64 2 /* 64-bit objects (reserved) */
-
-/* b_ident[BI_DATA]: */
-#define BCF_DATA_NONE 0 /* invalid data encoding */
-#define BCF_DATA_LSB 1 /* Least Significant Byte */
-#define BCF_DATA_MSB 2 /* Most Significant Byte */
-
-#define BV_NONE 0 /* invalid version */
-#define BV_CURRENT 1 /* current file version b_ident[BI_VERSION] */
-
-#define BCF_PAD 8 /* start of padding bytes in b_ident b_ident[BI_PAD] */
-
-#define BI_MAG0 0 /* file identification */
-#define BI_MAG1 1 /* file identification */
-#define BI_MAG2 2 /* file identification */
-#define BI_MAG3 3 /* file identification */
-#define BI_CLASS 4 /* file class */
-#define BI_DATA 5 /* data encoding */
-#define BI_VERSION 6 /* file version */
-#define BI_PAD 7 /* start of padding bytes */
-
-#define BI_NIDENT (16) /* size of b_ident[] */
-
-#define SI_NIDENT (8) /* size of b_ident[] */
-
-/* Type for a 16-bit quantity: */
-typedef uint16_t Bcf32_Half;
-
-/* Type for a 32-bit quantity: */
-typedef uint32_t Bcf32_Word;
-typedef int32_t Bcf32_Sword;
-
-/* Type for a 64-bit quantity: */
-typedef uint64_t Bcf32_Xword;
-typedef int64_t Bcf32_Sxword;
-
-/* Types of address: */
-typedef uint32_t Bcf32_Addr;
-
-/* Types of file offsets: */
-typedef uint32_t Bcf32_Off;
-
-typedef struct {
- unsigned char b_ident[BI_NIDENT];
- Bcf32_Half b_hsize; /* BCF header's size in bytes */
- Bcf32_Word b_fsize; /* Whole BCF file size in bytes */
-
- Bcf32_Off b_shoff; /* section header table’s file offset in bytes */
- Bcf32_Half b_shentsize; /* section header's size in bytes */
- Bcf32_Half b_shnum; /* number of entries in section headers table */
-
- Bcf32_Off b_rhoff; /* repository header table’s file offset in bytes */
- Bcf32_Half b_rhentsize; /* repository header's size in bytes */
- Bcf32_Half b_rhnum; /* number of entries in repository headers table */
-
- Bcf32_Off b_dtoff; /* data entries table’s file offset in bytes */
- Bcf32_Half b_dtentsize; /* data entry's size in bytes */
- Bcf32_Half b_dtnum; /* number of entries in data entries table */
-
- Bcf32_Off b_stoff; /* string table’s file offset in bytes */
-} __attribute__ ((packed)) Bcf32_fhdr;
-
-/* Type of setcions: */
-#define ST_GLOBAL 1 /* this section contains variable entries only */
-#define ST_REPOS 2 /* this section contains repository entries only */
-
-#define SMAG_GLOBAL ".global"
-#define SMAG_REPOS ".repos"
-
-typedef struct {
- unsigned char s_name[SI_NIDENT];
- Bcf32_Half s_type; /* .global or .repos */
- Bcf32_Off s_shdr; /* section header's offset in the string table */
- Bcf32_Off s_sdata; /* section data/repos's file offset */
- Bcf32_Half s_dnum; /* number of data/repos entries in section */
-} __attribute__ ((packed)) Bcf32_shdr;
-
-typedef struct {
- Bcf32_Off r_rhdr; /* repo header's offset in the string table */
- Bcf32_Off r_rdata; /* repo data's file offset */
- Bcf32_Half r_dnum; /* number of data entries in repo */
-} __attribute__ ((packed)) Bcf32_rhdr;
-
-#define DT_NUMERICAL 0x01
-#define DT_PATH 0x02
-#define DT_STRING 0x04
-
-typedef struct {
- Bcf32_Off d_name; /* variable name's offset in the string table */
- union
- {
- Bcf32_Word d_value; /* numerical variable's value */
- Bcf32_Off d_valptr; /* variable value's offset in string table */
- } _v;
- Bcf32_Half d_type; /* 0x01 - numerical, 0x02 - path, 0x04 - string */
-} __attribute__ ((packed)) Bcf32_dntr;
-
-/************************
- Shared memory (POSIX API):
- */
-#define CSVN_SHM_BCF "/csvn.bcf"
-#define CGIT_SHM_BCF "/cgit.bcf"
-
-#endif /* __BCF_H */
Index: cscm-0.1.4/cscm
===================================================================
--- cscm-0.1.4/cscm (revision 10)
+++ cscm-0.1.4/cscm (nonexistent)
Property changes on: cscm-0.1.4/cscm
___________________________________________________________________
Deleted: svn:ignore
## -1,35 +0,0 ##
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/bootstrap
===================================================================
--- cscm-0.1.4/bootstrap (revision 10)
+++ cscm-0.1.4/bootstrap (nonexistent)
@@ -1,99 +0,0 @@
-#!/bin/sh
-
-CWD=`pwd`
-
-program=`basename $0`
-
-usage() {
- cat << EOF
-
-Usage: $program [options]
-
-Options:
- -h,--help Display this message.
- -d,--target-dest-dir=DIR The target ROOTFS directory
- [default: DIR=/].
-
-EOF
-}
-
-TARGET_DEST_DIR=/
-ACDIR=usr/share/aclocal
-INCDIR=usr/include
-SYSTEM_ACDIR=
-SYSTEM_INCDIR=
-
-while [ 0 ] ; do
- if [ "$1" = "-h" -o "$1" = "--help" ] ; then
- usage
- exit 0
- elif [ "$1" = "-d" -o "$1" = "--target-dest-dir" ] ; then
- if [ "$2" = "" ] ; then
- echo -e "\n${program}: ERROR: --target-dest-dir is not specified.\n"
- usage
- exit 1
- fi
- TARGET_DEST_DIR="$2"
- shift 2
- elif [[ $1 == --target-dest-dir=* ]] ; then
- TARGET_DEST_DIR="`echo $1 | cut -f2 -d'='`"
- shift 1
- else
- if [ "$1" != "" ] ; then
- echo -e "\n${program}: ERROR: Unknown argument: $1.\n"
- usage
- exit 1
- fi
- break
- fi
-done
-
-if [ ! -d "${TARGET_DEST_DIR}" ] ; then
- echo -e "\n${program}: ERROR: --target-dest-dir is not a directory.\n"
- usage
- exit 1
-fi
-
-#
-# Absolute path:
-#
-if [ "${TARGET_DEST_DIR:0:1}" != "/" ] ; then
- TARGET_DEST_DIR=${CWD}/${TARGET_DEST_DIR}
-fi
-
-#
-# Remove last '/' char:
-#
-if [ "${TARGET_DEST_DIR: -1}" = "/" ] ; then
- len=${#TARGET_DEST_DIR}
- let "len = len - 1"
- tmp="${TARGET_DEST_DIR:0:$len}"
- TARGET_DEST_DIR=${tmp}
-fi
-
-SYSTEM_ACDIR="${TARGET_DEST_DIR}/${ACDIR}"
-SYSTEM_INCDIR="${TARGET_DEST_DIR}/${INCDIR}"
-
-
-aclocal --install -I m4 --force --system-acdir=${SYSTEM_ACDIR}
-autoheader --include=${SYSTEM_INCDIR}
-automake --foreign --add-missing --copy --force-missing
-autoconf --force
-
-#
-# Add 'cCgit Features' header to split help output:
-#
-cat >cscm-features <<_CGIT
-_ACEOF
-
- cat <<\\_ACEOF
-
-cScm Features:
-_CGIT
-
-sed -i '/^[ ]*\-\-with\-controldir=DIR/ {
-r cscm-features
-N
-}' configure
-
-rm -f cscm-features
Property changes on: cscm-0.1.4/bootstrap
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: cscm-0.1.4/doc/cscmd.8.md
===================================================================
--- cscm-0.1.4/doc/cscmd.8.md (revision 10)
+++ cscm-0.1.4/doc/cscmd.8.md (nonexistent)
@@ -1,112 +0,0 @@
-
-# [cScm Daemon](https://csvn.radix.pro/cscm/trunk/doc/cscmd.8.md)
-
-**cscmd** – a daemon for monitoring changes in SCM configuration files.
-
-
-## Table of Contents
-
-* [Options](#options)
-* [Grammar](#grammar)
-* [See Also](#see-also)
-
-<br/>
-
-In order to not load the **cSvn-ui** and **cGit-ui** CGI scripts with unnecessary functionality and speed up
-its work, information about the list of repositories is transmitted to it in binary form through
-shared memory (see: */dev/shm/csvn.bcf*, */dev/shm/cgit.bcf*).
-
-Binary Config File (**BCF**) format is similar to the simplified implementation of the **COFF**
-and is described in the header file [*/usr/include/cscm/bcf.h*](https://csvn.radix.pro/cscm/trunk/cscm/bcf.h).
-
-On startup, the daemon parses the */etc/csvn-ui.rc* or */etc/csvn-ui.rc* configuration files
-(depends on **--scm=[svn|git]** option) and stores its binary forms in shared memory. In addition, the binary
-form is saved in the daemon's home directory, by default it is the file */var/lib/csvn/csvn.bcf* or
-*/var/lib/cgit/cgit.bcf*.
-
-**cscmd(8)** daemon rereads SCM configuration files upon arrival of the **-HUP** signal and, in addition,
-can be configured to monitor changes in the configuration files using the `--inotify` option. If the `--inotify`
-option is specified, then after editing the file */ets/csvn-ui.rc* or */ets/cgit-ui.rc* and saving it to disk,
-the **cscmd** daemon will reread file */etc/csvn-ui.rc* or */etc/cgit-ui.rc* as if it received the **-HUP** signal.
-
-The work of the **cscmd(8)** daemon's can be monitored by the log, which it leaves in the file
-*/var/log/csvnd.log* or the file */var/log/cgitd.log* (depends on **--scm=[svn|git]** option). There you can also
-observe messages about errors that are detected in */ets/csvn-ui.rc* or */ets/cgit-ui.rc* files, if any.
-
-To start the **cScm** daemon during system boot, can be used the start/stop script */etc/rc.d/rc.csvnd* or
-*/etc/rc.d/rc.cgitd*.
-
-
-## Options
-
-
-### -h, --help
-
-Display help information.
-
-
-### -v, --version
-
-Display the version of **cScm** daemon.
-
-
-### -d, --daemonize
-
-Run in background as a daemon.
-
-
-### -i, --inotify
-
-Notify about configuration changes. If this option is set then **cscmd(8)** daemon selects changes
-made in */etc/csvn-ui.rc* or */etc/cgit-ui.rc* configuration file and reread configuration when changes
-is done. Without this option rereading configuration file can be done by sending **-HUP** to the **cscmd(8)**
-process.
-
-
-### -b, --bcf=<BCF_FILE>
-
-Binary config file (depends on **--scm=[svn|git]** option). Default: */var/lib/csvn/csvn.bcf*.
-
-
-### -c, --config=<CONFIG_FILE>
-
-Config file (depends on **--scm=[svn|git]** option). Default: */etc/csvn-ui.rc*.
-
-
-### -l, --log=<LOG_FILE>
-
-Log file (depends on **--scm=[svn|git]** option). Default: */var/log/csvnd.log*.
-
-
-### -p, --pid=<PID_FILE>
-
-Log file (depends on **--scm=[svn|git]** option). Default: */var/run/csvnd.pid*.
-
-
-### -s, --scm=[svn|git]
-
-SCM engine name: **svn** or **git**. Default: **svn**.
-
-
-### -t, --test
-Test the config file and exit.
-
-
-## Grammar
-
-The grammar of the language describing the **cScm** congfiguration is simple
-([**parse.y**](https://csvn.radix.pro/cscm/trunk/cscmd/parse.y)). File */etc/csvn-ui.rc*
-allows you to set variable values and create repository lists as named structures.
-
-Any variables can be defined in the */etc/csvn-ui.rc* file, but only variables with
-reserved names will be used by the **cSvn** or **cGit** CGI script.
-
-In addition, if a variable already defined at the global level is specified in the
-description of a repository, then within this repository this variable will have a local
-value. In other words, within the repository, global variables can be overridden.
-
-
-## See Also
-
-> [**README**](https://csvn.radix.pro/cscm/trunk/README.md)
-
Index: cscm-0.1.4/doc/build-packages/slackware/README
===================================================================
--- cscm-0.1.4/doc/build-packages/slackware/README (revision 10)
+++ cscm-0.1.4/doc/build-packages/slackware/README (nonexistent)
@@ -1,6 +0,0 @@
-
-cscm (a SCM Configuration Daemon)
-
-cScm is a SCM Configuration daemon for cSvn-ui and cGit-ui packages.
-
-Homepage: https://csvn.radix.pro
Index: cscm-0.1.4/doc/build-packages/slackware/cscm.SlackBuild
===================================================================
--- cscm-0.1.4/doc/build-packages/slackware/cscm.SlackBuild (revision 10)
+++ cscm-0.1.4/doc/build-packages/slackware/cscm.SlackBuild (nonexistent)
@@ -1,92 +0,0 @@
-#!/bin/bash
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=cscm
-VERSION=${VERSION:-$(echo cscm-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-2}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) export ARCH=i586 ;;
- arm*) export ARCH=arm ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) export ARCH=$( uname -m ) ;;
- esac
-fi
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-${PKGNAM}
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-
-cd $TMP
-rm -rf ${PKGNAM}-${VERSION}
-tar xvf $CWD/${PKGNAM}-${VERSION}.tar.?z* || exit 1
-cd ${PKGNAM}-$VERSION || exit 1
-
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \+ -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \+
-
-CFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --sysconfdir=/etc \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --with-controldir=/etc/rc.d \
- --with-logrotatedir=/etc/logrotate.d \
- --with-homepath=/var/lib \
- --with-logdir=/var/log \
- --with-piddir=/var/run \
- --build=$ARCH-slackware-linux || exit 1
-
-
-make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-mv $PKG/etc/rc.d/rc.csvnd $PKG/etc/rc.d/rc.csvnd.new
-mv $PKG/etc/rc.d/rc.cgitd $PKG/etc/rc.d/rc.cgitd.new
-
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-mv $PKG/usr/share/man $PKG/usr/
-gzip -9 $PKG/usr/man/man?/*
-rmdir $PKG/usr/share/man
-
-find $PKG/usr/man -type f -exec gzip -9 {} \;
-
-mkdir -p $PKG/usr/doc/${PKGNAM}-${VERSION}
-cp -a \
- LICENSE README README.md doc \
- $PKG/usr/doc/${PKGNAM}-${VERSION}
-
-cp -a $CWD/${PKGNAM}.info $PKG/usr/doc/${PKGNAM}-${VERSION}
-cp -a $CWD/${PKGNAM}.SlackBuild $PKG/usr/doc/${PKGNAM}-${VERSION}
-
-mkdir -p $PKG/install
-cat $CWD/doinst.sh > $PKG/install/doinst.sh
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/${PKGNAM}-${VERSION}-${ARCH}-${BUILD}.txz
Index: cscm-0.1.4/doc/build-packages/slackware/slack-desc
===================================================================
--- cscm-0.1.4/doc/build-packages/slackware/slack-desc (revision 10)
+++ cscm-0.1.4/doc/build-packages/slackware/slack-desc (nonexistent)
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|' on
-# the right side marks the last column you can put a character in. You must make
-# exactly 11 lines for the formatting to be correct. It's also customary to
-# leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-cscm: cscm (a SCM Configuration Daemon)
-cscm:
-cscm: cSvn is a SCM Configuration daemon for cSvn-ui and cGit-ui packages.
-cscm:
-cscm:
-cscm:
-cscm: Homepage: https://csvn.radix.pro
-cscm:
-cscm:
-cscm:
-cscm:
Index: cscm-0.1.4/doc/build-packages/slackware/cscm.info
===================================================================
--- cscm-0.1.4/doc/build-packages/slackware/cscm.info (revision 10)
+++ cscm-0.1.4/doc/build-packages/slackware/cscm.info (nonexistent)
@@ -1,10 +0,0 @@
-PRGNAM="cscm"
-VERSION="0.1.4"
-HOMEPAGE="http://csvn.radix.pro"
-DOWNLOAD="https://ftp.radix.pro/pub/cscm/cscm-0.1.4.tar.xz"
-MD5SUM="..Check MD5 sum before Building Package.."
-DOWNLOAD_x86_64=""
-MD5SUM_x86_64=""
-REQUIRES="libpcre2-32"
-MAINTAINER="Andrey V.Kosteltsev"
-EMAIL="kx@radix.pro"
Index: cscm-0.1.4/doc/build-packages/slackware/doinst.sh
===================================================================
--- cscm-0.1.4/doc/build-packages/slackware/doinst.sh (revision 10)
+++ cscm-0.1.4/doc/build-packages/slackware/doinst.sh (nonexistent)
@@ -1,15 +0,0 @@
-
-config() {
- NEW="$1"
- OLD="`dirname $NEW`/`basename $NEW .new`"
- # If there's no config file by that name, mv it over:
- if [ ! -r $OLD ]; then
- mv $NEW $OLD
- elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy
- rm $NEW
- fi
- # Otherwise, we leave the .new copy for the admin to consider...
-}
-
-config etc/rc.d/rc.csvnd.new
-config etc/rc.d/rc.cgitd.new
Index: cscm-0.1.4/doc/build-packages/slackware
===================================================================
--- cscm-0.1.4/doc/build-packages/slackware (revision 10)
+++ cscm-0.1.4/doc/build-packages/slackware (nonexistent)
Property changes on: cscm-0.1.4/doc/build-packages/slackware
___________________________________________________________________
Deleted: svn:ignore
## -1,35 +0,0 ##
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/doc/build-packages/rpms/README
===================================================================
--- cscm-0.1.4/doc/build-packages/rpms/README (revision 10)
+++ cscm-0.1.4/doc/build-packages/rpms/README (nonexistent)
@@ -1,26 +0,0 @@
-
-To build RPM packages we have to copy source package downloaded
-from https://ftp.radix.pro/pub/cscm directory to /usr/src/packages/SOURSES/
-directory. And also copy the cscm.spec file into /usr/src/packages/SPECS/
-directory. Then edit the package version in the cscm.spec file according
-to source package version.
-
-Dependencies: pcre2-devel.
-
-RPMs can be built by following command:
-
- $ rpmbuild --define "_topdir /usr/src/packages" -ba /usr/src/packages/SPECS/cscm.spec
-
-Resulting RPMs will be saved in /usr/src/packages/SRPMS/ and
-/usr/src/packages/RPMS/`uname -m`/ directories.
-
-After install binary RPM we have to create /etc/csvn-ui.rc [or|and] /etc/cgit-ui.rc
-configuration files and then enable and run csvnd.service [or|and] cgitd.service:
-
- $ systemctl enable csvnd.service
- $ systemctl start csvnd.service
-
- $ systemctl enable cgitd.service
- $ systemctl start cgitd.service
-
-Then we can to enable csvn-ui [or|and] cgit-ui web-servers.
Index: cscm-0.1.4/doc/build-packages/rpms/csvnd.service
===================================================================
--- cscm-0.1.4/doc/build-packages/rpms/csvnd.service (revision 10)
+++ cscm-0.1.4/doc/build-packages/rpms/csvnd.service (nonexistent)
@@ -1,13 +0,0 @@
-
-[Unit]
-Description=The cSvn daemon
-After=network.target
-
-[Service]
-PIDFile=/var/run/csvnd.pid
-ExecStart=/usr/sbin/cscmd --daemonize --inotify --scm=svn --pid=/var/run/csvnd.pid --log=/var/log/csvnd.log --config=/etc/csvn-ui.rc
-ExecReload=/bin/kill -s HUP $MAINPID
-ExecStop=/bin/kill -s TERM $MAINPID
-
-[Install]
-WantedBy=multi-user.target
Index: cscm-0.1.4/doc/build-packages/rpms/cscm.spec
===================================================================
--- cscm-0.1.4/doc/build-packages/rpms/cscm.spec (revision 10)
+++ cscm-0.1.4/doc/build-packages/rpms/cscm.spec (nonexistent)
@@ -1,57 +0,0 @@
-
-Name: cscm
-Version: 0.1.4
-Release: 2
-Summary: cScm Configuration Daemon
-License: RADIX-1.0
-Group: System/base
-Source: https://ftp.radix.pro/pub/cscm/cscm-0.1.4.tar.xz
-Url: https://csvn.radix/pro/cscm/
-
-
-%define _sysconfdir /etc
-%define _libdir /usr/lib64
-%define _homepath /var/lib
-%define _logdir /var/log
-%define _piddir /var/run
-%define _systemddir /usr/lib/systemd/system
-
-
-%description
-cScm - is a Configuration Daemon for cSvn-ui and cGit-ui packages
-
-%prep
-%setup -q
-
-%build
-./configure \
- --prefix=/usr \
- --sysconfdir=%{_sysconfdir} \
- --libdir=%{_libdir} \
- --with-controldir=%{_sysconfdir}/rc.d \
- --with-logrotatedir=%{_sysconfdir}/logrotate.d \
- --with-homepath=%{_homepath} \
- --with-logdir=%{_logdir} \
- --with-piddir=%{_piddir}
-
-%install
-make install DESTDIR=%{buildroot}
-install -d %{buildroot}%{_systemddir}
-install -m 644 doc/build-packages/rpms/csvnd.service %{buildroot}%{_systemddir}
-install -m 644 doc/build-packages/rpms/cgitd.service %{buildroot}%{_systemddir}
-rm -rf %{buildroot}%{_sysconfdir}/rc.d
-
-%clean
-%{?buildroot:%__rm -rf "%{buildroot}"}
-
-%files
-%defattr(-,root,root)
-%{_sysconfdir}/*
-%attr(755,root,root) %{_sbindir}/cscmd
-%{_homepath}/*
-%{_includedir}/*
-%{_datadir}/*
-%doc LICENSE README README.md doc/
-%{_systemddir}/csvnd.service
-%{_systemddir}/cgitd.service
-
Index: cscm-0.1.4/doc/build-packages/rpms/cgitd.service
===================================================================
--- cscm-0.1.4/doc/build-packages/rpms/cgitd.service (revision 10)
+++ cscm-0.1.4/doc/build-packages/rpms/cgitd.service (nonexistent)
@@ -1,13 +0,0 @@
-
-[Unit]
-Description=The cGit daemon
-After=network.target
-
-[Service]
-PIDFile=/var/run/cgitd.pid
-ExecStart=/usr/sbin/cscmd --daemonize --inotify --scm=git --pid=/var/run/cgitd.pid --log=/var/log/cgitd.log --config=/etc/cgit-ui.rc
-ExecReload=/bin/kill -s HUP $MAINPID
-ExecStop=/bin/kill -s TERM $MAINPID
-
-[Install]
-WantedBy=multi-user.target
Index: cscm-0.1.4/doc/build-packages/rpms
===================================================================
--- cscm-0.1.4/doc/build-packages/rpms (revision 10)
+++ cscm-0.1.4/doc/build-packages/rpms (nonexistent)
Property changes on: cscm-0.1.4/doc/build-packages/rpms
___________________________________________________________________
Deleted: svn:ignore
## -1,35 +0,0 ##
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/doc/build-packages/archlinux/README
===================================================================
--- cscm-0.1.4/doc/build-packages/archlinux/README (revision 10)
+++ cscm-0.1.4/doc/build-packages/archlinux/README (nonexistent)
@@ -1,32 +0,0 @@
-
-Sytem requires:
- fakeroot, logrotate
-
-Build time requires:
- make, binutils, gcc, bison, autoconf, automake, pkgconfig,
- pcre2
-
-Runtime requires:
- pcre2
-
-As non-privileged user:
-
- $ mkdir build
- $ cp PKGBUILD build/
- $ cd build/
- $ makepkg
-
-As root:
-
- # pacman -U ./cscm-0.1.4-2-x86_64.pkg.tar.zst
-
-After install binary package we have to create /etc/csvn-ui.rc [or|and] /etc/cgit-ui.rc
-configuration files and then enable and run csvnd.service [or|and] cgitd.service:
-
- $ systemctl enable csvnd.service
- $ systemctl start csvnd.service
-
- $ systemctl enable cgitd.service
- $ systemctl start cgitd.service
-
-Then we can to enable csvn-ui [or|and] cgit-ui web-servers.
Index: cscm-0.1.4/doc/build-packages/archlinux/PKGBUILD
===================================================================
--- cscm-0.1.4/doc/build-packages/archlinux/PKGBUILD (revision 10)
+++ cscm-0.1.4/doc/build-packages/archlinux/PKGBUILD (nonexistent)
@@ -1,49 +0,0 @@
-#
-# Maintainer: Andrey V.Kosteltsev <kx@radix.pro>
-#
-pkgname=cscm
-pkgver=0.1.4
-pkgrel=2
-pkgdesc='cScm Configuration Daemon for cSvn-ui and cGit-ui packages'
-arch=('x86_64')
-url='https://csvn.radix.pro'
-license=('custom')
-depends=('pcre2')
-source=("https://ftp.radix.pro/pub/cscm/${pkgname}-${pkgver}.tar.xz")
-md5sums=('..Check MD5 sum before Building Package..')
-
-build() {
- cd ${pkgname}-${pkgver}
-
- CFLAGS="-O2 -fPIC -Wno-unused-result" \
- ./configure \
- --prefix=/usr \
- --sysconfdir=/etc \
- --libdir=/usr/lib \
- --sbindir=/usr/bin \
- --with-controldir=/etc/rc.d \
- --with-logrotatedir=/etc/logrotate.d \
- --with-homepath=/var/lib \
- --with-logdir=/var/log \
- --with-piddir=/var/run
- make
-}
-
-package() {
- cd ${pkgname}-${pkgver}
-
- make install DESTDIR="${pkgdir}"
-
- # Install systemd unit:
- install -d ${pkgdir}/usr/lib/systemd/system
- install -m 644 doc/build-packages/rpms/csvnd.service ${pkgdir}/usr/lib/systemd/system
- install -m 644 doc/build-packages/rpms/cgitd.service ${pkgdir}/usr/lib/systemd/system
- rm -rf ${pkgdir}/etc/rc.d
-
- # Gsip man pages:
- gzip -9 ${pkgdir}/usr/share/man/man8/cscmd.8
-
- # Install documentation:
- install -d ${pkgdir}/usr/share/doc/${pkgname}-${pkgver}
- cp -a LICENSE README README.md doc/ ${pkgdir}/usr/share/doc/${pkgname}-${pkgver}
-}
Index: cscm-0.1.4/doc/build-packages/archlinux
===================================================================
--- cscm-0.1.4/doc/build-packages/archlinux (revision 10)
+++ cscm-0.1.4/doc/build-packages/archlinux (nonexistent)
Property changes on: cscm-0.1.4/doc/build-packages/archlinux
___________________________________________________________________
Deleted: svn:ignore
## -1,35 +0,0 ##
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/doc/build-packages
===================================================================
--- cscm-0.1.4/doc/build-packages (revision 10)
+++ cscm-0.1.4/doc/build-packages (nonexistent)
Property changes on: cscm-0.1.4/doc/build-packages
___________________________________________________________________
Deleted: svn:ignore
## -1,35 +0,0 ##
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/doc
===================================================================
--- cscm-0.1.4/doc (revision 10)
+++ cscm-0.1.4/doc (nonexistent)
Property changes on: cscm-0.1.4/doc
___________________________________________________________________
Deleted: svn:ignore
## -1,35 +0,0 ##
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/cscmd/symtab.h
===================================================================
--- cscm-0.1.4/cscmd/symtab.h (revision 10)
+++ cscm-0.1.4/cscmd/symtab.h (nonexistent)
@@ -1,67 +0,0 @@
-
-#ifndef __SYMTAB_H
-#define __SYMTAB_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/******************************
- SYMBOL is a node of symlist:
- */
-typedef struct symbol SYMBOL;
-struct symbol
-{
- char *name; /* Variable name */
- int type; /* VARIABLE, SECTION, REPO, NUMERICAL, STRING, PATH */
- union
- {
- int value; /* for NUMERICAL */
- char *string; /* for STRING */
- char *path; /* for PATH */
- } u;
-
- struct symbol *list; /* The list of variables. Used for SECTION and REPO */
-
- struct symbol *next; /* Next Symbol */
-};
-
-/**********************************************
- SYMTAB is an entry of the stack of symlists:
- */
-typedef struct symtab SYMTAB;
-struct symtab
-{
- SYMBOL **symlist;
- struct symtab *next; /* Next Entry */
-};
-
-
-extern SYMBOL *symlist;
-
-extern void init_symtab( void );
-extern void push_symlist( SYMBOL **head );
-extern void pop_symlist( void );
-extern void fini_symtab( void );
-
-extern void reverse_symlist( SYMBOL **head );
-extern void remove_consts( SYMBOL **head );
-
-//debug
-extern void print_symlist( int indent, SYMBOL *head );
-
-extern SYMBOL *install( const char *s, int type, ... );
-extern SYMBOL *lookup( const char *s );
-extern SYMBOL *lookup_section( const char *s );
-extern SYMBOL *lookup_repo( const char *s );
-
-extern SYMBOL *assign_value( SYMBOL *dest, SYMBOL *src );
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __SYMTAB_H */
Index: cscm-0.1.4/cscmd/symtab.c
===================================================================
--- cscm-0.1.4/cscmd/symtab.c (revision 10)
+++ cscm-0.1.4/cscmd/symtab.c (nonexistent)
@@ -1,471 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <unistd.h>
-
-#include <defs.h>
-
-#include <main.h>
-#include <error.h>
-#include <msglog.h>
-#include <xalloc.h>
-#include <utf8ing.h>
-#include <lex.h>
-
-#include <symtab.h>
-#include <parse.h>
-
-
-SYMBOL *symlist = NULL;
-
-static SYMTAB *symtab = NULL;
-
-static int constants_counter = 0;
-static int sections_counter = 0;
-static int repos_counter = 0;
-
-
-static SYMBOL *free_const( SYMBOL *sp )
-{
- SYMBOL *next = NULL;
-
- if( !sp ) return next;
-
- next = sp->next;
-
- free( sp->name );
-
- switch( sp->type )
- {
- case STRING:
- if( sp->u.string ) free( sp->u.string );
- break;
- case PATH:
- if( sp->u.string ) free( sp->u.path );
- break;
-
- case NUMERICAL:
- default:
- break;
- }
-
- free( sp );
-
- return next;
-}
-
-static void free_symlist( SYMBOL *sp );
-
-static SYMBOL *free_symbol( SYMBOL *sp )
-{
- SYMBOL *next = NULL;
-
- if( !sp ) return next;
-
- if( sp->list ) (void)free_symlist( sp->list );
-
- next = sp->next;
-
- free( sp->name );
-
- switch( sp->type )
- {
- case SECTION:
- case STRING:
- if( sp->u.string ) free( sp->u.string );
- break;
- case REPO:
- case PATH:
- if( sp->u.string ) free( sp->u.path );
- break;
-
- case VARIABLE:
- case NUMERICAL:
- default:
- break;
- }
-
- free( sp );
-
- return next;
-}
-
-static void free_symlist( SYMBOL *sp )
-{
- SYMBOL *next = NULL;
-
- if( !sp ) return;
-
- next = free_symbol( sp );
- while( next )
- {
- next = free_symbol( next );
- }
-}
-
-/******************************************
- Initialize the stak of symlist pointers:
- */
-void init_symtab( void )
-{
- SYMTAB *sa = (SYMTAB *)xmalloc( sizeof( SYMTAB ) );
-
- symtab = NULL;
- symlist = NULL;
-
- constants_counter = 0;
- sections_counter = 0;
- repos_counter = 0;
-
- sa->symlist = (SYMBOL **)&symlist;
- sa->next = symtab;
- symtab = sa;
-}
-
-
-/*******************************************
- Push the address of symlist to the stack:
- */
-void push_symlist( SYMBOL **head )
-{
- if( head )
- {
- SYMTAB *sa = (SYMTAB *)xmalloc( sizeof( SYMTAB ) );
-
- sa->symlist = head;
- sa->next = symtab;
- symtab = sa;
- }
-}
-
-/********************************************
- Pop the address of symlist from the stack:
- */
-void pop_symlist( void )
-{
- if( symtab && symtab->next )
- {
- SYMTAB *sa = symtab;
- symtab = symtab->next;
- free( sa );
- }
-}
-
-/************************************
- Free the stak of symlist pointers:
- */
-void fini_symtab( void )
-{
- if( !symtab ) return;
-
- while( symtab )
- {
- SYMTAB *sa = symtab;
- symtab = symtab->next;
- free( sa );
- }
-
- constants_counter = 0;
- sections_counter = 0;
- repos_counter = 0;
-
- symtab = NULL;
- free_symlist( symlist ); /* free main symlist */
- symlist = NULL;
-}
-
-
-/******************************
- Reverse symlist recursively:
- */
-void reverse_symlist( SYMBOL **head )
-{
- SYMBOL *prev = NULL, *curr = *head, *next;
-
- while( curr )
- {
- if( curr->list ) reverse_symlist( (SYMBOL **)&(curr->list) );
-
- next = curr->next;
- curr->next = prev;
- prev = curr;
- curr = next;
- }
-
- *head = prev;
-}
-
-/******************************************************
- Remove temporary constants from symlist recursively:
- */
-void remove_consts( SYMBOL **head )
-{
- SYMBOL *tmp = NULL;
-
- while( *head )
- {
- tmp = *head;
- if( !strncmp( tmp->name, "__const.", 8 ) )
- {
- *head = tmp->next;
- (void)free_const( tmp );
- }
- else
- {
- head = &tmp->next;
- if( tmp->list ) remove_consts( (SYMBOL **)&(tmp->list) );
- }
- }
-}
-
-
-SYMBOL *assign_value( SYMBOL *dest, SYMBOL *src )
-{
- SYMBOL *ret = NULL;
-
- if( !dest || !src ) return ret;
-
- if( dest->type == VARIABLE ) /* always not initialized */
- {
- dest->type = src->type;
- dest->u.value = 0;
-
- switch( src->type )
- {
- case NUMERICAL:
- dest->u.value = src->u.value;
- break;
- case STRING:
- dest->u.string = strdup( (const char *)src->u.string );
- break;
- case PATH:
- dest->u.path = strdup( (const char *)src->u.path );
- break;
- default:
- /* error */
- break;
- }
- }
- else if( dest->type == STRING || dest->type == SECTION )
- {
- switch( src->type )
- {
- case STRING:
- if( src->u.string )
- {
- if( dest->u.string ) free( dest->u.string );
- dest->u.string = strdup( (const char *)src->u.string );
- }
- else
- {
- if( dest->u.string ) free( dest->u.string );
- dest->u.string = NULL;
- }
- break;
- default:
- /* error */
- break;
- }
- }
- else if( dest->type == PATH || dest->type == REPO )
- {
- switch( src->type )
- {
- case PATH:
- if( src->u.path )
- {
- if( dest->u.path ) free( dest->u.path );
- dest->u.path = strdup( (const char *)src->u.path );
- }
- else
- {
- if( dest->u.path ) free( dest->u.path );
- dest->u.path = NULL;
- }
- break;
- default:
- /* error */
- break;
- }
- }
- else if( dest->type == src->type )
- {
- switch( src->type )
- {
- case NUMERICAL:
- dest->u.value = src->u.value;
- break;
- case STRING:
- if( dest->u.string ) free( dest->u.string );
- dest->u.string = strdup( (const char *)src->u.string );
- break;
- case PATH:
- if( dest->u.path ) free( dest->u.path );
- dest->u.path = strdup( (const char *)src->u.path );
- break;
- default:
- /* error */
- break;
- }
- }
- else
- {
- /* error */
- }
-
- return dest;
-}
-
-
-SYMBOL *install( const char *s, int type, ... )
-{
- SYMBOL *sp = NULL;
- char name[80] = "__undef";
-
- if( !symtab ) return sp;
-
- va_list argp;
-
- if( ! type ) return( sp );
-
- sp = (SYMBOL *)xmalloc( sizeof( SYMBOL ) );
-
- switch( type )
- {
- case NUMERICAL:
- case STRING:
- case PATH:
- sprintf( (char *)&name[0], "__const.%d", constants_counter++ );
- sp->name = strdup( (const char *)&name[0] );
- break;
- case REPO:
- sprintf( (char *)&name[0], "__repo.%d", repos_counter++ );
- sp->name = strdup( (const char *)&name[0] );
- break;
- case SECTION:
- sprintf( (char *)&name[0], "__section.%d", sections_counter++ );
- sp->name = strdup( (const char *)&name[0] );
- break;
- default:
- if( !s )
- sp->name = strdup( (const char *)&name[0] );
- else
- sp->name = strdup( s );
- break;
- }
- sp->type = type;
-
- va_start( argp, type );
-
- switch( type )
- {
- case SECTION:
- case STRING:
- {
- char *string = (char *)va_arg( argp, char * );
- if( string ) sp->u.string = strdup( (const char *)string );
- break;
- }
- case REPO:
- case PATH:
- {
- char *path = (char *)va_arg( argp, char * );
- if( path ) sp->u.path = strdup( (const char *)path );
- break;
- }
-
- case VARIABLE:
- case NUMERICAL:
- default:
- sp->u.value = (int)va_arg( argp, int );
- break;
- }
-
- sp->next = *(symtab->symlist); /* alloc in begin of list */
- *(symtab->symlist) = sp;
-
- return( sp );
-}
-
-/***********************************
- Find variable in current symlist:
- */
-SYMBOL *lookup( const char *s )
-{
- SYMBOL *sp;
-
- for( sp = *(symtab->symlist); sp != (SYMBOL *)0; sp = sp->next )
- {
- if( strcmp( sp->name, s ) == 0 ) return( sp );
- }
-
- return( 0 ); /* запись не найдена */
-}
-
-/*********************************
- Find section in global symlist:
- */
-SYMBOL *lookup_section( const char *s )
-{
- SYMBOL *sp;
-
- for( sp = symlist; sp != (SYMBOL *)0; sp = sp->next )
- {
- if( sp->type == SECTION && sp->u.string && strcmp( sp->u.string, s ) == 0 ) return( sp );
- }
-
- return( 0 ); /* запись не найдена */
-}
-
-/********************************
- Find repo globally in symlist:
- */
-#if 0
-SYMBOL *lookup_repo_global( const char *s )
-{
- SYMBOL *sp;
-
- for( sp = symlist; sp != (SYMBOL *)0; sp = sp->next )
- {
- /***************************
- lookup in global section:
- */
- if( sp->type == REPO && sp->u.path && strcmp( sp->u.path, s ) == 0 ) return( sp );
-
- /*************************
- lookup in each section:
- */
- if( sp->type == SECTION && sp->list )
- {
- SYMBOL *rp;
- for( rp = sp->list; rp != (SYMBOL *)0; rp = rp->next )
- {
- if( rp->type == REPO && rp->u.path && strcmp( rp->u.path, s ) == 0 ) return( rp );
- }
- }
- }
-
- return( 0 ); /* запись не найдена */
-}
-#endif
-
-/*******************************
- Find repo in current symlist:
- */
-SYMBOL *lookup_repo( const char *s )
-{
- SYMBOL *sp;
-
- for( sp = *(symtab->symlist); sp != (SYMBOL *)0; sp = sp->next )
- {
- if( sp->type == REPO && sp->u.path && strcmp( sp->u.path, s ) == 0 ) return( sp );
- }
-
- return( 0 ); /* запись не найдена */
-}
Index: cscm-0.1.4/cscmd/error.c
===================================================================
--- cscm-0.1.4/cscmd/error.c (revision 10)
+++ cscm-0.1.4/cscmd/error.c (nonexistent)
@@ -1,92 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdarg.h>
-#include <limits.h>
-#include <locale.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include <defs.h>
-
-#include <error.h>
-#include <msglog.h>
-#include <utf8ing.h>
-#include <lex.h>
-
-
-extern char *config_fname;
-
-int errors = 0;
-int warnings = 0;
-
-
-void error( char *fmt, ... )
-{
- va_list arg_ptr;
- char buf[MAX_ERROR_MSG_SIZE];
- char msg[MAX_ERROR_MSG_SIZE];
- char *format = "%s:%d:%d: %s";
-
- va_start( arg_ptr, fmt );
-
- vsnprintf( msg, MAX_ERROR_MSG_SIZE, (const void *)fmt, arg_ptr );
-
- va_end( arg_ptr ); /* Reset variable arguments. */
-
- snprintf( buf, MAX_ERROR_MSG_SIZE, format, config_fname, lineno, colno, msg );
-
- ERROR( "%s", buf );
-
- ++errors;
-}
-
-void warning( char *fmt, ... )
-{
- va_list arg_ptr;
- char buf[MAX_ERROR_MSG_SIZE];
- char msg[MAX_ERROR_MSG_SIZE];
- char *format = "%s:%d:%d: %s";
-
- va_start( arg_ptr, fmt );
-
- vsnprintf( msg, MAX_ERROR_MSG_SIZE, (const void *)fmt, arg_ptr );
-
- va_end( arg_ptr ); /* Reset variable arguments. */
-
- snprintf( buf, MAX_ERROR_MSG_SIZE, format, config_fname, lineno, colno, msg );
-
- WARNING( "%s", buf );
-
- ++warnings;
-}
-
-void no_space( void )
-{
- char buf[MAX_ERROR_MSG_SIZE];
- char *format = "%s: Cannot allocate memory";
-
- snprintf( buf, MAX_ERROR_MSG_SIZE, format, config_fname );
-
- FATAL_ERROR( "%s", buf );
-
- ++errors;
-}
-
-void unterminated_comment( void )
-{
- char buf[MAX_ERROR_MSG_SIZE];
- char *format = "%s:%d:%d: Unterminated comment";
-
- snprintf( buf, MAX_ERROR_MSG_SIZE, format, config_fname, lineno, colno );
-
- ERROR( "%s", buf );
-
- ++errors;
-}
Index: cscm-0.1.4/cscmd/README.in
===================================================================
--- cscm-0.1.4/cscmd/README.in (revision 10)
+++ cscm-0.1.4/cscmd/README.in (nonexistent)
@@ -1,5 +0,0 @@
-
-@CSCM_PROGRAM_NAME@ Daemon HOME directory:
-==========================
-
-@CSCM_PROGRAM@.bcf - is a binary config file created by @CSCM_PROGRAM_NAME@ Daemon
Index: cscm-0.1.4/cscmd/error.h
===================================================================
--- cscm-0.1.4/cscmd/error.h (revision 10)
+++ cscm-0.1.4/cscmd/error.h (nonexistent)
@@ -1,25 +0,0 @@
-
-#ifndef __ERROR_H
-#define __ERROR_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MAX_ERROR_MSG_SIZE PATH_MAX
-
-extern int errors;
-extern int warnings;
-
-extern void error( char *fmt, ... );
-extern void warning( char *fmt, ... );
-extern void no_space( void );
-extern void unterminated_comment( void );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ERROR_H */
Index: cscm-0.1.4/cscmd/msglog.c
===================================================================
--- cscm-0.1.4/cscmd/msglog.c (revision 10)
+++ cscm-0.1.4/cscmd/msglog.c (nonexistent)
@@ -1,70 +0,0 @@
-
-/**********************************************************************
-
- Copyright 2019 Andrey V.Kosteltsev
-
- Licensed under the Radix.pro License, Version 1.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- https://radix.pro/licenses/LICENSE-1.0-en_US.txt
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied.
-
- **********************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <time.h>
-#include <sys/time.h>
-
-#include <msglog.h>
-
-FILE *errlog;
-
-void (*fatal_error_hook)( void );
-
-void logmsg( FILE *logfile, enum _msg_type type, char *format, ... )
-{
- va_list argp;
-
- if( ! format ) return;
-
- {
- time_t t = time( NULL );
- struct tm tm = *localtime(&t);
-
- fprintf( logfile, "[%04d-%02d-%02d %02d:%02d:%02d]: ",
- tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
- tm.tm_hour, tm.tm_min, tm.tm_sec );
- }
-
- switch( type )
- {
- case MSG_FATAL: fprintf( logfile, "%s: FATAL: ", program ); break;
- case MSG_ERROR: fprintf( logfile, "%s: ERROR: ", program ); break;
- case MSG_WARNING: fprintf( logfile, "%s: WARNING: ", program ); break;
- case MSG_NOTICE: fprintf( logfile, "%s: NOTE: ", program ); break;
- case MSG_INFO: fprintf( logfile, "%s: INFO: ", program ); break;
- case MSG_DEBUG: fprintf( logfile, "%s: DEBUG: ", program ); break;
- case MSG_LOG:
- fprintf( logfile, "%s: ", program );
- break;
- default:
- fprintf( logfile, "%s: ", program );
- break;
- }
- va_start( argp, format );
- vfprintf( errlog, format, argp );
- fprintf( errlog, "\n" );
- (void)fflush( errlog );
-}
Index: cscm-0.1.4/cscmd/msglog.h
===================================================================
--- cscm-0.1.4/cscmd/msglog.h (revision 10)
+++ cscm-0.1.4/cscmd/msglog.h (nonexistent)
@@ -1,98 +0,0 @@
-
-/**********************************************************************
-
- Copyright 2019 Andrey V.Kosteltsev
-
- Licensed under the Radix.pro License, Version 1.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- https://radix.pro/licenses/LICENSE-1.0-en_US.txt
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied.
-
- **********************************************************************/
-
-#ifndef _MSG_LOG_H_
-#define _MSG_LOG_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern FILE *errlog;
-
-extern void (*fatal_error_hook)( void );
-
-extern char *program;
-extern int exit_status;
-
-enum _msg_type
-{
- MSG_FATAL = 0,
- MSG_ERROR,
- MSG_WARNING,
- MSG_NOTICE,
- MSG_INFO,
- MSG_DEBUG,
-
- MSG_LOG
-};
-
-#define FATAL_ERROR( ... ) \
- do \
- { \
- logmsg( errlog, MSG_FATAL, __VA_ARGS__ ); \
- if( fatal_error_hook) fatal_error_hook(); \
- exit( EXIT_FAILURE ); \
- } while (0)
-
-#define ERROR( ... ) \
- do \
- { \
- logmsg( errlog, MSG_ERROR, __VA_ARGS__ ); \
- ++exit_status; \
- } while (0)
-
-#define WARNING( ... ) \
- do \
- { \
- logmsg( errlog, MSG_WARNING, __VA_ARGS__ ); \
- } while (0)
-
-#define NOTICE( ... ) \
- do \
- { \
- logmsg( errlog, MSG_NOTICE, __VA_ARGS__ ); \
- } while (0)
-
-#define INFO( ... ) \
- do \
- { \
- logmsg( errlog, MSG_INFO, __VA_ARGS__ ); \
- } while (0)
-
-#define DEBUG( ... ) \
- do \
- { \
- logmsg( errlog, MSG_DEBUG, __VA_ARGS__ ); \
- } while (0)
-
-#define LOG( ... ) \
- do \
- { \
- logmsg( errlog, MSG_LOG, __VA_ARGS__ ); \
- } while (0)
-
-
-extern void logmsg( FILE *logfile, enum _msg_type type, char *format, ... );
-
-
-#ifdef __cplusplus
-} /* ... extern "C" */
-#endif
-
-#endif /* _MSG_LOG_H_ */
Index: cscm-0.1.4/cscmd/utf8ing.c
===================================================================
--- cscm-0.1.4/cscmd/utf8ing.c (revision 10)
+++ cscm-0.1.4/cscmd/utf8ing.c (nonexistent)
@@ -1,121 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdarg.h>
-#include <limits.h>
-#include <locale.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include <defs.h>
-#include <utf8ing.h>
-
-
-static const ucs4_t replacement_char = 0xfffd;
-static const ucs4_t maximum_ucs4 = 0x7fffffff;
-
-static const int half_shift = 10;
-static const ucs4_t half_base = 0x0010000;
-
-static const ucs4_t surrogate_high_start = 0xd800;
-static const ucs4_t surrogate_high_end = 0xdbff;
-static const ucs4_t surrogate_low_start = 0xdc00;
-static const ucs4_t surrogate_low_end = 0xdfff;
-
-static utf8_t
-first_byte_mark[7] = { 0x00, 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc };
-
-
-/***************************************************************
- static copy_ucs4_to_utf8()
-
- Переводит строку символов UCS4( src ) в UTF8( dest ).
-
- Возвращаемое значение:
- Количество байт, реально записанное в DEST.
-
- NOTE:
- Выход за пределы памяти, выделенной под указатель DEST
- не контролируются.
- Подразумевается, что строка SRC имеет null-терминатор.
- ***************************************************************/
-int copy_ucs4_to_utf8( utf8_t *dest, const ucs4_t *src )
-{
- utf8_t target[7];
- utf8_t *ptr;
- int count = 0;
-
- while( *src )
- {
- ucs4_t c;
- int bytes_to_write = 0;
- const ucs4_t byte_mask = 0xbf;
- const ucs4_t byte_mark = 0x80;
-
- c = *src++;
-
- if( c >= surrogate_high_start &&
- c <= surrogate_high_end && *src )
- {
- ucs4_t c2 = *src;
-
- if( c2 >= surrogate_low_start &&
- c2 <= surrogate_low_end )
- {
- c = ((c - surrogate_high_start) << half_shift) +
- (c2 - surrogate_low_start) + half_base;
- ++src;
- }
- }
-
- if( c < 0x80 ) bytes_to_write = 1;
- else if( c < 0x800 ) bytes_to_write = 2;
- else if( c < 0x10000 ) bytes_to_write = 3;
- else if( c < 0x200000 ) bytes_to_write = 4;
- else if( c < 0x4000000 ) bytes_to_write = 5;
- else if( c <= maximum_ucs4 ) bytes_to_write = 6;
- else
- {
- bytes_to_write = 2; c = replacement_char;
- }
-
- ptr = &target[0] + bytes_to_write;
-
- switch( bytes_to_write )
- {
- case 6:
- *--ptr = (c | byte_mark) & byte_mask; c >>= 6;
- case 5:
- *--ptr = (c | byte_mark) & byte_mask; c >>= 6;
- case 4:
- *--ptr = (c | byte_mark) & byte_mask; c >>= 6;
- case 3:
- *--ptr = (c | byte_mark) & byte_mask; c >>= 6;
- case 2:
- *--ptr = (c | byte_mark) & byte_mask; c >>= 6;
- case 1:
- *--ptr = c | first_byte_mark[bytes_to_write];
- }
-
- ptr = &target[0];
-
- while( bytes_to_write > 0 )
- {
- *dest++ = *ptr++; /* write byte */
- --bytes_to_write;
- ++count;
- }
-
- } /* End while( *src ) */
-
- *dest = (utf8_t)0; /* null terminator */
-
- return( count );
-
-} /* End of static copy_ucs4_to_utf8() */
Index: cscm-0.1.4/cscmd/cscmd.8.in
===================================================================
--- cscm-0.1.4/cscmd/cscmd.8.in (revision 10)
+++ cscm-0.1.4/cscmd/cscmd.8.in (nonexistent)
@@ -1,66 +0,0 @@
-.\"
-.TH "CSCMD" 8 "2022-02-19" "cScm Configuration Daemon" "cscmd"
-
-.SH "NAME"
-\fBcscmd\fR \- cScm Configurations Daemon
-
-.SH "SYNOPSIS"
-.PP
-\fB\fBcscmd\fR [\fBOPTIONS\fR]\fR \fB\-\-scm\fR=[\fIsvn\fR|\fIgit\fR]
-
-.SH "SUMMARY"
-\fBcscmd\fR should be run at boot time by \fI@sysconfdir@/rc.d/rc.csvnd\fR or \fI@sysconfdir@/rc.d/rc.cgitd\fR.
-This daemon read the config file \fI@sysconfdir@/csvn-ui.rc\fR or \fI@sysconfdir@/cgit-ui.rc\fR (depends on \fB\-\-scm\fR option)
-and convert it to binary (see \fI@includedir@/cscm/bcf.h\fR) form for cSvn or cGit CGI scripts.
-
-
-.SH "OPTIONS"
-
-.TP
-\fB-h\fR,\fB--help\fR
-Display help information.
-
-.TP
-\fB-v\fR,\fB--version\fR
-Display the version of \fBcscm\fR daemon.
-
-.TP
-\fB-d\fR,\fB--daemonize\fR
-Run in background as a daemon.
-
-.TP
-\fB-i\fR,\fB--inotify\fR
-Notify about configuration changes. If this option is set then \fBcscmd\fR daemon selects changes made
-in \fI@sysconfdir@/csvn-ui.rc\fR or \fI@sysconfdir@/cgit-ui.rc\fR config file and reread configuration when changes is done.
-Without this option rereading configuration file can be done by sending \fB-HUP\fR to the \fBcscmd\fR daemon.
-
-.TP
-\fB-b\fR,\fB--bcf\fR=\fB<BCF_FILE>\fR
-Binary config file (depends on \fB\-\-scm\fR option). Default: \fI@CSCM_HOME_PATH@/csvn/csvn.bcf\fR.
-
-.TP
-\fB-c\fR,\fB--config\fR=\fB<CONFIG_FILE>\fR
-Config file (depends on \fB\-\-scm\fR option). Default: \fI@sysconfdir@/csvn-ui.rc\fR.
-
-.TP
-\fB-l\fR,\fB--log\fR=\fB<LOG_FILE>\fR
-Log file (depends on \fB\-\-scm\fR option). Default: \fI@CSCM_LOG_DIR@/csvnd.log\fR.
-
-.TP
-\fB-p\fR,\fB--pid\fR=\fB<PID_FILE>\fR
-Log file (depends on \fB\-\-scm\fR option). Default: \fI@CSCM_PID_DIR@/csvnd.pid\fR.
-
-.TP
-\fB-s\fR,\fB--scm\fR=\fB[svn|git]\fR
-SCM engine name: \fIsvn\fR or \fIgit\fR. Default: \fIsvn\fR.
-
-.TP
-\fB-t\fR,\fB--test\fR
-Test the config file and exit.
-
-
-.SH "SEE ALSO"
-.BR csvn-ui.rc(5),
-.BR cgit-ui.rc(5)
-
-
Index: cscm-0.1.4/cscmd/lex.c
===================================================================
--- cscm-0.1.4/cscmd/lex.c (revision 10)
+++ cscm-0.1.4/cscmd/lex.c (nonexistent)
@@ -1,815 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdarg.h>
-#include <limits.h>
-#include <locale.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#define PCRE2_CODE_UNIT_WIDTH 32
-#include <pcre2.h>
-
-#include <defs.h>
-
-#include <main.h>
-#include <error.h>
-#include <msglog.h>
-#include <xalloc.h>
-#include <utf8ing.h>
-#include <symtab.h>
-#include <parse.h>
-
-#include <lex.h>
-
-
-
-int lineno = 0;
-int colno = 0;
-
-static int maxtoken;
-static wchar_t *token_buffer;
-
-static int max8token;
-static utf8_t *token_utf8_buffer;
-
-int indent_level = 0; /* Number of '{' minus number of '}'. */
-
-static int end_of_file = 0;
-static int nextchar = -1;
-
-static char *locale;
-
-#define GETC(c) ({ wint_t ret; ++colno; ret = fgetwc( config ); ret; })
-#define UNGETC(c) ({ wint_t ret; --colno; ret = ungetwc( c, config ); ret; })
-
-
-static wchar_t *extend_token_buffer( wchar_t *p )
-{
- int offset = p - token_buffer;
- maxtoken = maxtoken * 2 + 10;
- token_buffer = (wchar_t *)xrealloc( token_buffer, (maxtoken + 2)*sizeof(wchar_t) );
-
- return( token_buffer + offset );
-}
-
-static utf8_t *extend_token_utf8_buffer( utf8_t *p )
-{
- int offset = p - token_utf8_buffer;
- max8token = max8token * 2 + 10;
- token_utf8_buffer = (utf8_t *)xrealloc( token_utf8_buffer, (max8token + 2)*6 );
-
- return( token_utf8_buffer + offset );
-}
-
-
-void yyerror( char const *s )
-{
- error( "%s", s );
-}
-
-
-void init_lex( void )
-{
- locale = setlocale( LC_ALL, "en_US.utf8" );
-
- lineno = 0;
- colno = 0;
-
- nextchar = -1;
- maxtoken = 40;
- max8token = 40;
-
- indent_level = 0;
- end_of_file = 0;
-
- token_buffer = (wchar_t *)xmalloc( maxtoken * sizeof(wchar_t) + 2 );
- token_utf8_buffer = (utf8_t *)xmalloc( max8token * 6 + 2 );
-}
-
-void fini_lex( void )
-{
- locale = setlocale( LC_ALL, locale );
-
- if( token_buffer ) { free( token_buffer ); token_buffer = NULL; }
- if( token_utf8_buffer ) { free( token_utf8_buffer ); token_utf8_buffer = NULL; }
-
- indent_level = 0;
- end_of_file = 0;
-
- max8token = 0;
- maxtoken = 0;
- nextchar = -1;
-
- lineno = 0;
- colno = 0;
-}
-
-static wint_t check_newline( void )
-{
- wint_t c;
-
- ++lineno;
- colno = 0; /* считает GETC()/UNGETC(); здесь надо только обнулить */
-
- /*****************************************
- Read first nonwhite char on the line.
- *****************************************/
- c = GETC();
- while( c == ' ' || c == '\t' ) c = GETC();
-
- if( c == '#' ) goto skipline;
- else return( c );
-
- /* skip the rest of this line */
-skipline:
-
- while( c != '\n' && c != WEOF )
- c = GETC();
-
- return( c );
-}
-
-static wint_t skip_comment( int c )
-{
- if( c == '*' )
- {
-do1:
- do
- {
- c = GETC();
- if( c == '\n' ) { ++lineno; colno = 0; }
-
- } while( c != '*' && c != WEOF );
-
- if( c == WEOF )
- {
- unterminated_comment();
- return( WEOF );
- }
-
- c = GETC();
-
- if( c == '/' )
- {
- c = GETC();
- if( c == '\n' ) c = check_newline();
- return( c );
- }
- else
- {
- UNGETC( c );
- goto do1;
- }
- }
- else if( c == '/' || c == '#' )
- {
- do
- {
- c = GETC();
-
- } while( c != '\n' && c != WEOF );
-
- if( c == WEOF )
- {
- unterminated_comment();
- return( WEOF );
- }
- else c = check_newline();
-
- return( c );
- }
-
- return( c );
-
-} /* End skip_commemnt() */
-
-static wint_t skip_white_space( wint_t c )
-{
- for( ;; )
- {
- switch( c )
- {
- case '\n':
- c = check_newline();
- break;
-
- case '#':
- c = skip_comment( c );
- return( skip_white_space( c ) );
- break;
-
- case '/':
- c = GETC();
- if( c == '/' || c == '*' )
- {
- c = skip_comment( c );
- return( skip_white_space( c ) );
- }
- else
- {
- UNGETC( c );
- return( '/' );
- }
- break;
-
- case ' ':
- case '\t':
- case '\f':
- case '\v':
- case '\b':
- case '\r':
- c = GETC();
- break;
- case '\\':
- c = GETC();
- if( c == '\n' ) { ++lineno; colno = 0; }
- else
- {
- warning( "%s", "Stray '\\' in program" );
- }
- c = GETC();
- break;
- default:
- return( c );
-
- } /* End switch( c ) */
-
- } /* End for( ;; ) */
-
-} /* End skip_white_space() */
-
-static wint_t readescape( int *ignore_ptr )
-/*
- read escape sequence, returning a char, or store 1 in *ignore_ptr
- if it is backslash-newline
- */
-{
- wint_t c = GETC();
- wint_t code;
- unsigned count;
- unsigned firstdig = 0;
- int nonull;
-
- switch( c )
- {
- case 'x':
- code = 0;
- count = 0;
- nonull = 0;
- while( 1 )
- {
- c = GETC();
- if( !(c >= 'a' && c <= 'f') &&
- !(c >= 'A' && c <= 'F') &&
- !(c >= '0' && c <= '9') )
- {
- UNGETC( c );
- break;
- }
- code *= 16;
- if( c >= 'a' && c <= 'f' ) code += c - 'a' + 10;
- if( c >= 'A' && c <= 'F' ) code += c - 'A' + 10;
- if( c >= '0' && c <= '9' ) code += c - '0';
- if( code != 0 || count != 0 )
- {
- if( count == 0 ) firstdig = code;
- count++;
- }
- nonull = 1;
-
- } /* End while( 1 ) */
-
- if( !nonull )
- {
- error( "%s", "\\x used with no following hex digits" );
- }
- else if( count == 0 )
- /* Digits are all 0's. Ok. */
- ;
- else if( (count - 1) * 4 >= 32 || /* 32 == bits per INT */
- (count > 1 && ((1 << (32 - (count-1) * 4)) <= firstdig )))
- {
- warning( "%s", "Hex escape out of range" );
- }
- return( code );
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7':
- code = 0;
- count = 0;
- while( (c <= '7') && (c >= '0') && (count++ < 6) )
- {
- code = (code * 8) + (c - '0');
- c = GETC();
- }
- UNGETC( c );
- return( code );
-
- case '\\': case '\'': case '"':
- return( c );
-
- case '\n':
- lineno++; colno = 0;
- *ignore_ptr = 1;
- return( 0 );
-
- case 'n':
- return( '\n' );
-
- case 't':
- return( '\t' );
-
- case 'r':
- return( '\r' );
-
- case 'f':
- return( '\f' );
-
- case 'b':
- return( '\b' );
-
- case 'a':
- return( '\a' );
-
- case 'v':
- return( '\v' );
- }
-
- return( c );
-
-} /* End of readescape() */
-
-
-int html_symbol_name( wchar_t *str )
-{
- int rc = 0, error = 0;
- PCRE2_SIZE offset = 0;
- wchar_t pattern[] = L"^(&[#A-Za-z0-9]*;)";
-
- pcre2_match_data *match;
-
- pcre2_code *regexp = pcre2_compile( (PCRE2_SPTR)pattern, PCRE2_ZERO_TERMINATED, 0, &error, &offset, NULL );
- if( regexp == NULL )
- {
- return 0; /* PCRE compilation failed */
- }
-
- match = pcre2_match_data_create_from_pattern( regexp, NULL );
-
- rc = pcre2_match( regexp, (PCRE2_SPTR)str, (int)wcslen(str), 0, 0, match, NULL );
- if( rc < 0 )
- {
- /* not match */
- pcre2_match_data_free( match );
- pcre2_code_free( regexp );
- return 0;
- }
- else
- {
- /* match */
- pcre2_match_data_free( match );
- pcre2_code_free( regexp );
- return 1;
- }
-}
-
-
-int yylex( void )
-{
- wint_t c;
- wchar_t *p;
- int value;
-
- if( nextchar >= 0 )
- c = nextchar, nextchar = -1;
- else
- c = GETC();
-
- while( 1 )
- {
- switch( c )
- {
- case ' ':
- case '\t':
- case '\f':
- case '\v':
- case '\b':
- c = skip_white_space( c );
- break;
-
- case '\r':
- case '\n':
- case '/':
- case '#':
- case '\\':
- c = skip_white_space( c );
-
- default:
- goto found_nonwhite;
-
- } /* End switch( c ) */
-found_nonwhite:
-
- token_buffer[0] = c;
- token_buffer[1] = 0;
-
- switch( c )
- {
- case WEOF:
- end_of_file = 1;
- token_buffer[0] = 0;
- value = 0;
- goto done;
- break;
-
- case '$': /* dollar in identifier */
- if( 1 ) goto letter;
- return '$';
-
- case 'A': case 'B': case 'C': case 'D': case 'E':
- case 'F': case 'G': case 'H': case 'I': case 'J':
- case 'K': case 'L': case 'M': case 'N': case 'O':
- case 'P': case 'Q': case 'R': case 'S': case 'T':
- case 'U': case 'V': case 'W': case 'X': case 'Y':
- case 'Z':
- case 'a': case 'b': case 'c': case 'd': case 'e':
- case 'f': case 'g': case 'h': case 'i': case 'j':
- case 'k': case 'l': case 'm': case 'n': case 'o':
- case 'p': case 'q': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'y':
- case 'z':
- case '_':
-
- /* RUSSIAN */
- case L'А': case L'Б': case L'В': case L'Г': case L'Д':
- case L'Е': case L'Ё': case L'Ж': case L'З': case L'И':
- case L'Й': case L'К': case L'Л': case L'М': case L'Н':
- case L'О': case L'П': case L'Р': case L'С': case L'Т':
- case L'У': case L'Ф': case L'Х': case L'Ц': case L'Ч':
- case L'Ш': case L'Щ': case L'Ъ': case L'Ы': case L'Ь':
- case L'Э': case L'Ю': case L'Я':
-
- case L'а': case L'б': case L'в': case L'г': case L'д':
- case L'е': case L'ё': case L'ж': case L'з': case L'и':
- case L'й': case L'к': case L'л': case L'м': case L'н':
- case L'о': case L'п': case L'р': case L'с': case L'т':
- case L'у': case L'ф': case L'х': case L'ц': case L'ч':
- case L'ш': case L'щ': case L'ъ': case L'ы': case L'ь':
- case L'э': case L'ю': case L'я':
-
-letter:
- p = token_buffer;
- while( iswalnum( c ) || c == '_' || c == '$' || c == '@' || c == '-' || c == '.' || c == ':' )
- {
- if( p >= token_buffer + maxtoken )
- {
- p = extend_token_buffer( p );
- extend_token_utf8_buffer( token_utf8_buffer );
- }
-
- *p++ = c;
- c = GETC();
- }
- *p = 0;
- nextchar = c;
- value = VARIABLE;
-
- (void)copy_ucs4_to_utf8( (utf8_t *)token_utf8_buffer, (const ucs4_t *)token_buffer );
-
- /*********************
- install into symtab
- *********************/
- {
- if( !strcmp( "section", (const char *)token_utf8_buffer ) )
- {
- value = SECTION;
- yylval.sym = install( NULL, SECTION, NULL );
- }
- else if( !strcmp( "repo", (const char *)token_utf8_buffer ) )
- {
- value = REPO;
- yylval.sym = install( NULL, REPO, NULL );
- }
- else
- {
- SYMBOL *sp = NULL;
-
- if( (sp = lookup( (const char *)token_utf8_buffer )) == (SYMBOL *)0 )
- sp = install( (const char *)token_utf8_buffer, VARIABLE, 0 );
-
- /******************************************************************
- Если переменная уже в таблице, то мы предполагаем, что она имеет
- тип равный одному из допустимых: NUMERICAL, STRING, или PATH.
- ******************************************************************/
- if( sp->type != VARIABLE )
- {
- switch( sp->type )
- {
- case NUMERICAL:
- case STRING:
- case PATH:
- value = sp->type;
- break;
- default:
- /* error */
- break;
- }
- }
- yylval.sym = sp;
- }
- }
-
- token_buffer[0] = 0;
- token_utf8_buffer[0] = 0;
- goto done;
- break;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- {
- int constant = 0;
-/* integer: */
- p = token_buffer;
- while( iswdigit( c ) )
- {
- if( p >= token_buffer + maxtoken )
- {
- p = extend_token_buffer( p );
- extend_token_utf8_buffer( token_utf8_buffer );
- }
-
- *p++ = c;
- c = GETC();
- }
- *p = 0;
- nextchar = c;
- value = NUMERICAL;
-
- (void)copy_ucs4_to_utf8( (utf8_t *)token_utf8_buffer, (const ucs4_t *)token_buffer );
-
- /*********************
- install into symtab
- *********************/
- {
- (void)swscanf( (const wchar_t *)token_buffer, L"%d", &constant );
- yylval.sym = install( NULL, NUMERICAL, constant );
- }
-
- token_buffer[0] = 0;
- token_utf8_buffer[0] = 0;
- goto done;
- break;
- }
-
- case '\'':
-/* path_constant: */
- {
- int num_chars = 0;
- unsigned int width = 8; /* to allow non asscii in path set width = 16 */
-
- while( 1 )
- {
-tryagain:
- c = GETC();
-
- if( c == '\'' || c == WEOF ) break;
- if( c == '\\' )
- {
- int ignore = 0;
- c = readescape( &ignore );
- if( ignore ) goto tryagain;
- if( (unsigned)c >= (1 << width) )
- {
- warning( "%s", "Escape sequence out of range" );
- }
- }
- else if( c == '\n' ) { lineno++; colno = 0; }
-
- num_chars++;
- if( num_chars > maxtoken - 4 )
- {
- extend_token_buffer( token_buffer );
- extend_token_utf8_buffer( token_utf8_buffer );
- }
-
- token_buffer[num_chars] = c;
-
- } /* End while( 1 ) */
-
- token_buffer[num_chars + 1] = '\'';
- token_buffer[num_chars + 2] = 0;
-
- if( c != '\'' )
- {
- error( "%s", "Malformated path constant" );
- }
- else if( num_chars == 0 )
- {
- error( "%s", "Empty path constant" );
- }
-
- /* build path: */
- {
- wchar_t *s, *string = NULL;
- wchar_t *p = &token_buffer[0];
-
- while( *p )
- {
- if( *p == '\n' || *p == '\t' ) *p = ' ';
- ++p;
- }
-
- string = (wchar_t *)malloc( maxtoken * 4 + 10 );
-
- p = &token_buffer[1];
- s = &string[0];
-
- while( *p == ' ' ) ++p;
-
- while( *p )
- {
- if( *p != ' ' )
- *s++ = *p++;
- else
- ++p;
- }
- --s; *s = 0;
- while( *(s-1) == ' ' ) --s;
- *s = 0;
-
- (void)copy_ucs4_to_utf8( (utf8_t *)token_utf8_buffer, (const ucs4_t *)string );
-
- free( string );
- }
-
- /*********************
- install into symtab
- *********************/
- {
- yylval.sym = install( NULL, PATH, (char *)token_utf8_buffer );
- }
-
- token_buffer[0] = 0;
- token_utf8_buffer[0] = 0;
- value = PATH;
- goto done;
- }
-
- case '"':
-/* string_constant: */
- {
- c = GETC();
- p = token_buffer + 1;
-
- while( c != '"' && c >= 0 )
- {
- if( c == '\\' )
- {
- int ignore = 0;
- c = readescape( &ignore );
- if( ignore ) goto skipnewline;
- }
- else if( c == '\n' ) lineno++;
-
- if( p == token_buffer + maxtoken )
- {
- p = extend_token_buffer( p );
- extend_token_utf8_buffer( token_utf8_buffer );
- }
- *p++ = c;
-
-skipnewline:
- c = GETC();
-
- } /* End while( " ) */
-
- *p = 0;
-
- if( c < 0 )
- {
- error( "%s", "Unterminated string constant" );
- }
-
-
- *p++ = '"';
- *p = 0;
-
- /* build string: */
- {
- wchar_t *s, *string = NULL;
- wchar_t *p = &token_buffer[0];
-
- while( *p )
- {
- if( *p == '\n' || *p == '\t' ) *p = ' ';
- ++p;
- }
-
- string = (wchar_t *)malloc( maxtoken * 4 + 10 );
-
- p = &token_buffer[1];
- s = &string[0];
-
- while( *p == ' ' ) ++p;
-
- while( *p )
- {
- if( *p != ' ' )
- {
- switch( *p )
- {
- case '&':
- /************************************************
- Skip HTML symbol names such as  ,... etc.:
- */
- if( ! html_symbol_name( p ) )
- {
- *s++ = '&'; *s++ = 'a'; *s++ = 'm'; *s++ = 'p'; *s++ = ';'; ++p;
- }
- else
- {
- *s++ = *p++;
- }
- break;
-
- case '<':
- *s++ = '&'; *s++ = 'l'; *s++ = 't'; *s++ = ';'; ++p;
- break;
-
- case '>':
- *s++ = '&'; *s++ = 'g'; *s++ = 't'; *s++ = ';'; ++p;
- break;
-
- default:
- *s++ = *p++;
- break;
- }
- }
- else
- {
- /* skip multiple spaces */
- if( *(p+1) != ' ' )
- *s++ = *p++;
- else
- ++p;
- }
- }
- --s; *s = 0;
- while( *(s-1) == ' ' ) --s;
- *s = 0;
-
- (void)copy_ucs4_to_utf8( (utf8_t *)token_utf8_buffer, (const ucs4_t *)string );
-
- free( string );
- }
-
- /*********************
- install into symtab
- *********************/
- {
- yylval.sym = install( NULL, STRING, (char *)token_utf8_buffer );
- }
-
- token_buffer[0] = 0;
- token_utf8_buffer[0] = 0;
- value = STRING;
- goto done;
- }
-
- case 0:
- value = 1;
- goto done;
- break;
-
- case '{':
- indent_level++;
- value = c;
- goto done;
- break;
-
- case '}':
- indent_level--;
- value = c;
- goto done;
- break;
-
- default:
- value = c;
- goto done;
- break;
-
- } /* End switch( c ) */
-
- } /* End while( 1 ) */
-
-done:
-
- return( value );
-}
Index: cscm-0.1.4/cscmd/utf8ing.h
===================================================================
--- cscm-0.1.4/cscmd/utf8ing.h (revision 10)
+++ cscm-0.1.4/cscmd/utf8ing.h (nonexistent)
@@ -1,22 +0,0 @@
-
-#ifndef __UTF8_H
-#define __UTF8_H
-
-
-typedef unsigned int ucs4_t;
-typedef unsigned char utf8_t;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-extern int copy_ucs4_to_utf8( utf8_t *, const ucs4_t * );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __UTF8_H */
Index: cscm-0.1.4/cscmd/bconf.c
===================================================================
--- cscm-0.1.4/cscmd/bconf.c (revision 10)
+++ cscm-0.1.4/cscmd/bconf.c (nonexistent)
@@ -1,477 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/sysinfo.h>
-#include <sys/types.h>
-#include <stdint.h>
-#include <dirent.h>
-#include <sys/stat.h> /* chmod(2) */
-#include <sys/file.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <string.h> /* strdup(3) */
-#include <libgen.h> /* basename(3) */
-#include <ctype.h> /* tolower(3) */
-#include <errno.h>
-#include <time.h>
-#include <sys/time.h>
-#include <pwd.h>
-#include <grp.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <endian.h>
-
-#include <error.h>
-#include <msglog.h>
-#include <xalloc.h>
-#include <symtab.h>
-#include <parse.h>
-#include <bconf.h>
-
-#include <defs.h>
-
-extern const char *SHM_BCF;
-
-FILE *bcf = NULL;
-char *bcf_fname = NULL;
-
-static void *bcf_shm_address = NULL;
-static int bcf_shm_fd = -1;
-
-static int snum, rnum, dnum, global_dnum, global_rnum, indent;
-
-static unsigned char *ftab, *stab = NULL;
-static Bcf32_Off stabsz = 0;
-
-static Bcf32_Off shoff; /* section header table’s file offset in bytes */
-static Bcf32_Off rhoff; /* repository header table’s file offset in bytes */
-static Bcf32_Off dtoff; /* data entries table’s file offset in bytes */
-static Bcf32_Off stoff; /* string table’s file offset in bytes */
-
-static Bcf32_fhdr *fhdr;
-static Bcf32_shdr *shdr;
-static Bcf32_rhdr *rhdr;
-static Bcf32_dntr *dntr;
-
-
-void bcf_shm_free( void )
-{
- if( bcf_shm_address )
- {
- struct stat st;
-
- if( !fstat( bcf_shm_fd, (struct stat *)&st ) )
- {
- (void)munmap( bcf_shm_address, (size_t)st.st_size );
- bcf_shm_address = NULL;
- bcf_shm_fd = shm_unlink( SHM_BCF );
- }
- }
- bcf_shm_address = NULL;
- bcf_shm_fd = -1;
-}
-
-/************************************************
- Функции создания BCF файла по таблице symlist:
- */
-
-static Bcf32_Off extend_strtab( const char *val )
-{
- Bcf32_Off off = 1;
- Bcf32_Off len = 0;
- unsigned char *dest = NULL;
-
- if( !stab )
- {
- /*************************************
- The first string in strtab is equal
- to "" for empty strings.
- */
- stabsz = (Bcf32_Off)(strlen( val ) + 2);
- stab = (unsigned char *)xmalloc( (size_t)stabsz );
- (void)strncpy( (char *)&stab[1], val, stabsz - 1 );
- return off;
- }
- else
- {
- off = stabsz;
- len = (Bcf32_Off)(strlen( val ) + 1);
- stabsz += len;
-
- stab = (unsigned char *)xrealloc( (void *)stab, (size_t)stabsz );
- dest = &stab[off];
- (void)strncpy( (char *)dest, val, len );
- return off;
- }
-}
-
-static void count_symbols( int *snum, int *rnum, int *dnum, int *gdts, int *grps, SYMBOL *list )
-{
- SYMBOL *head = list;
-
- if( !head ) return;
-
- while( head )
- {
- /************************************
- count symbols( head ):
- */
- switch( head->type )
- {
- case STRING:
- if( indent == 0 ) *gdts += 1;
- *dnum += 1;
- break;
- case PATH:
- if( indent == 0 ) *gdts += 1;
- *dnum += 1;
- break;
- case NUMERICAL:
- if( indent == 0 ) *gdts += 1;
- *dnum += 1;
- break;
-
- case SECTION:
- *snum += 1;
- break;
- case REPO:
- if( indent == 0 ) *grps += 1;
- *rnum += 1;
- break;
-
- default:
- break;
- }
-
- if( head->list ) { indent += 1; count_symbols( snum, rnum, dnum, gdts, grps, head->list ); }
- /*
- End of count symbols( head ).
- ************************************/
-
- head = head->next;
- }
-}
-
-static void write_global_data( SYMBOL *list )
-{
- SYMBOL *head = list;
-
- if( !head ) return;
-
- while( head )
- {
- /************************************
- global symbols( head ):
- */
- switch( head->type )
- {
- case STRING:
- dntr->d_name = extend_strtab( (const char *)head->name );
- dntr->d_type = DT_STRING;
- dntr->_v.d_valptr = extend_strtab( (const char *)head->u.string );
- dtoff += (Bcf32_Off)sizeof( Bcf32_dntr );
- ++dntr;
- break;
- case PATH:
- dntr->d_name = extend_strtab( (const char *)head->name );
- dntr->d_type = DT_PATH;
- dntr->_v.d_valptr = extend_strtab( (const char *)head->u.path );
- dtoff += (Bcf32_Off)sizeof( Bcf32_dntr );
- ++dntr;
- break;
- case NUMERICAL:
- dntr->d_name = extend_strtab( (const char *)head->name );
- dntr->d_type = DT_NUMERICAL;
- dntr->_v.d_value = head->u.value;
- dtoff += (Bcf32_Off)sizeof( Bcf32_dntr );
- ++dntr;
- break;
-
- default:
- break;
- }
- /*
- End of global symbols( head ).
- ************************************/
-
- head = head->next;
- }
-}
-
-static Bcf32_Half write_repo_data( SYMBOL *list )
-{
- Bcf32_Half cntr = 0;
- SYMBOL *head = list;
-
- if( !head ) return cntr;
-
- while( head )
- {
- /************************************
- symbols( head ):
- */
- switch( head->type )
- {
- case STRING:
- dntr->d_name = extend_strtab( (const char *)head->name );
- dntr->d_type = DT_STRING;
- dntr->_v.d_valptr = extend_strtab( (const char *)head->u.string );
- dtoff += (Bcf32_Off)sizeof( Bcf32_dntr );
- ++dntr;
- ++cntr;
- break;
- case PATH:
- dntr->d_name = extend_strtab( (const char *)head->name );
- dntr->d_type = DT_PATH;
- dntr->_v.d_valptr = extend_strtab( (const char *)head->u.path );
- dtoff += (Bcf32_Off)sizeof( Bcf32_dntr );
- ++dntr;
- ++cntr;
- break;
- case NUMERICAL:
- dntr->d_name = extend_strtab( (const char *)head->name );
- dntr->d_type = DT_NUMERICAL;
- dntr->_v.d_value = head->u.value;
- dtoff += (Bcf32_Off)sizeof( Bcf32_dntr );
- ++dntr;
- ++cntr;
- break;
-
- default:
- break;
- }
- /*
- End of symbols( head ).
- ************************************/
-
- head = head->next;
- }
-
- return cntr;
-}
-
-static void write_global_repos( SYMBOL *list )
-{
- SYMBOL *head = list;
-
- if( !head ) return;
-
- while( head )
- {
- /************************************
- global symbols( head ):
- */
- if( head->type == REPO )
- {
- rhdr->r_rhdr = extend_strtab( (const char *)head->u.path );
- rhdr->r_rdata = dtoff;
- rhdr->r_dnum = write_repo_data( head->list );
-
- rhoff += (Bcf32_Off)sizeof( Bcf32_rhdr );
- ++rhdr;
- }
- /*
- End of global symbols( head ).
- ************************************/
-
- head = head->next;
- }
-}
-
-
-static Bcf32_Half write_repos( SYMBOL *list )
-{
- Bcf32_Half cntr = 0;
- SYMBOL *head = list;
-
- if( !head ) return cntr;
-
- while( head )
- {
- /************************************
- symbols( head ):
- */
- if( head->type == REPO )
- {
- rhdr->r_rhdr = extend_strtab( (const char *)head->u.path );
- rhdr->r_rdata = dtoff;
- rhdr->r_dnum = write_repo_data( head->list );
-
- rhoff += (Bcf32_Off)sizeof( Bcf32_rhdr );
- ++rhdr;
- ++cntr;
- }
- /*
- End of symbols( head ).
- ************************************/
-
- head = head->next;
- }
-
- return cntr;
-}
-
-static void write_sections( SYMBOL *list )
-{
- SYMBOL *head = list;
-
- if( !head ) return;
-
- while( head )
- {
- /************************************
- global symbols( head ):
- */
- if( head->type == SECTION )
- {
- (void)strncpy( (char *)shdr->s_name, SMAG_REPOS, (size_t)SI_NIDENT );
- shdr->s_type = ST_REPOS;
- shdr->s_shdr = extend_strtab( (const char *)head->u.string );
- shdr->s_sdata = rhoff;
- shdr->s_dnum = write_repos( head->list );;
-
- shoff += (Bcf32_Off)sizeof( Bcf32_shdr );
- ++shdr;
- }
- /*
- End of global symbols( head ).
- ************************************/
-
- head = head->next;
- }
-}
-
-
-int write_binary_config( void )
-{
- int ret = 0;
-
- ftab = NULL;
- stab = NULL;
-
- snum = 0, rnum = 0, dnum = 0, global_dnum = 0, global_rnum = 0, indent = 0, stabsz = 0;
- fhdr = NULL, shdr = NULL, rhdr = NULL, dntr = NULL;
- shoff = 0, rhoff = 0, dtoff = 0, stoff = 0;
-
- count_symbols( &snum, &rnum, &dnum, &global_dnum, &global_rnum, symlist );
-
- if( global_dnum ) snum += 1; /* add .global section for global variables */
- if( global_rnum ) snum += 1; /* add noname .repos section for global repositories */
-
- shoff = (Bcf32_Off)sizeof( Bcf32_fhdr );
- rhoff = (Bcf32_Off)(shoff + snum * sizeof( Bcf32_shdr ));
- dtoff = (Bcf32_Off)(rhoff + rnum * sizeof( Bcf32_rhdr ));
- stoff = (Bcf32_Off)(dtoff + dnum * sizeof( Bcf32_dntr ));
-
- ftab = (unsigned char *)xmalloc( (size_t)stoff );
-
- /******************
- Fill File Header
- */
- fhdr = (Bcf32_fhdr *)ftab;
-
- (void)strncpy( (char *)fhdr->b_ident, BCFMAG, (size_t)SZBCFMAG );
- fhdr->b_ident[BI_CLASS] = BCF_CLASS_32;
-#if __BYTE_ORDER == __LITTLE_ENDIAN
- fhdr->b_ident[BI_DATA] = BCF_DATA_LSB;
-#else
- fhdr->b_ident[BI_DATA] = BCF_DATA_MSB;
-#endif
- fhdr->b_ident[BI_VERSION] = BV_CURRENT;
- fhdr->b_ident[BI_PAD] = BCF_PAD;
-
- fhdr->b_hsize = (Bcf32_Half)sizeof( Bcf32_fhdr );
- fhdr->b_shoff = (Bcf32_Off)shoff;
- fhdr->b_shentsize = (Bcf32_Half)sizeof( Bcf32_shdr );
- fhdr->b_shnum = (Bcf32_Half)snum;
- fhdr->b_rhoff = (Bcf32_Off)rhoff;
- fhdr->b_rhentsize = (Bcf32_Half)sizeof( Bcf32_rhdr );
- fhdr->b_rhnum = (Bcf32_Half)rnum;
- fhdr->b_dtoff = (Bcf32_Off)dtoff;
- fhdr->b_dtentsize = (Bcf32_Half)sizeof( Bcf32_dntr );
- fhdr->b_dtnum = (Bcf32_Half)dnum;
- fhdr->b_stoff = (Bcf32_Off)stoff;
-
- shdr = (Bcf32_shdr *)&ftab[shoff];
- rhdr = (Bcf32_rhdr *)&ftab[rhoff];
- dntr = (Bcf32_dntr *)&ftab[dtoff];
-
- if( global_dnum )
- {
- (void)strncpy( (char *)shdr->s_name, SMAG_GLOBAL, (size_t)SI_NIDENT );
- shdr->s_type = ST_GLOBAL;
- shdr->s_shdr = 0; /* Global section is always a first noname .global section */
- shdr->s_sdata = fhdr->b_dtoff;
- shdr->s_dnum = (Bcf32_Half)global_dnum;
-
- write_global_data( symlist );
-
- shoff += (Bcf32_Off)sizeof( Bcf32_shdr );
- ++shdr;
- }
-
- if( global_rnum )
- {
- (void)strncpy( (char *)shdr->s_name, SMAG_REPOS, (size_t)SI_NIDENT );
- shdr->s_type = ST_REPOS;
- shdr->s_shdr = 0; /* Global repos plased in the second noname .repos section */
- shdr->s_sdata = fhdr->b_rhoff;
- shdr->s_dnum = (Bcf32_Half)global_rnum;
-
- write_global_repos( symlist );
-
- shoff += (Bcf32_Off)sizeof( Bcf32_shdr );
- ++shdr;
- }
-
- write_sections( symlist );
-
- /**********************
- Whole BCF file size:
- */
- fhdr->b_fsize = (Bcf32_Word)( stoff + stabsz );
-
- bcf_shm_free();
-
- bcf_shm_fd = shm_open( SHM_BCF, O_CREAT | O_TRUNC | O_RDWR, 0644 );
- if( bcf_shm_fd != -1 )
- {
- (void)ftruncate( bcf_shm_fd, (size_t)fhdr->b_fsize );
- bcf_shm_address = mmap( NULL, (size_t)fhdr->b_fsize, PROT_WRITE, MAP_SHARED, bcf_shm_fd, 0 );
- if( bcf_shm_address != MAP_FAILED )
- {
- memcpy( bcf_shm_address, (const void *)ftab, (size_t)stoff );
- memcpy( bcf_shm_address + (size_t)stoff, (const void *)stab, (size_t)stabsz );
- }
- }
-
- if( bcf_fname )
- {
- bcf = fopen( (const char *)bcf_fname, "w" );
- if( !bcf ) { FATAL_ERROR( "Cannot open BCF file: %s", bcf_fname ); }
- }
-
- (void)fwrite( (void *)ftab, (size_t)stoff, 1, bcf );
- (void)fwrite( (void *)stab, (size_t)stabsz, 1, bcf );
-
- if( bcf_fname )
- {
- if( bcf ) { fclose( bcf ); bcf = NULL; } /* Do not free bcf_fname[] */
- }
-
- if( ftab ) { free( ftab ); ftab = NULL; }
- if( stab ) { free( stab ); stab = NULL; }
-
- shoff = 0, rhoff = 0, dtoff = 0, stoff = 0;
- fhdr = NULL, shdr = NULL, rhdr = NULL, dntr = NULL;
- snum = 0, rnum = 0, dnum = 0, global_dnum = 0, global_rnum = 0, indent = 0, stabsz = 0;
-
- ret = 1; /* success */
-
- return ret;
-}
Index: cscm-0.1.4/cscmd/lex.h
===================================================================
--- cscm-0.1.4/cscmd/lex.h (revision 10)
+++ cscm-0.1.4/cscmd/lex.h (nonexistent)
@@ -1,26 +0,0 @@
-
-#ifndef __LEX_H
-#define __LEX_H
-
-
-extern int lineno;
-extern int colno;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-extern void init_lex( void );
-extern void fini_lex( void );
-
-extern int yylex( void );
-extern void yyerror( char const *s );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LEX_H */
Index: cscm-0.1.4/cscmd/main.c
===================================================================
--- cscm-0.1.4/cscmd/main.c (revision 10)
+++ cscm-0.1.4/cscmd/main.c (nonexistent)
@@ -1,737 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/sysinfo.h>
-#include <sys/types.h>
-#include <stdint.h>
-#include <dirent.h>
-#include <sys/stat.h> /* chmod(2) */
-#include <fcntl.h>
-#include <limits.h>
-#include <string.h> /* strdup(3) */
-#include <libgen.h> /* basename(3) */
-#include <ctype.h> /* tolower(3) */
-#include <errno.h>
-#include <time.h>
-#include <sys/time.h>
-#include <pwd.h>
-#include <grp.h>
-#include <stdarg.h>
-#include <unistd.h>
-
-#include <sys/inotify.h>
-
-#include <locale.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include <sys/wait.h>
-
-#include <sys/resource.h>
-
-#include <signal.h>
-#if !defined SIGCHLD && defined SIGCLD
-# define SIGCHLD SIGCLD
-#endif
-
-#define _GNU_SOURCE
-#include <getopt.h>
-
-
-#include <daemon.h>
-#include <msglog.h>
-#include <error.h>
-#include <utf8ing.h>
-#include <symtab.h>
-#include <parse.h>
-#include <lex.h>
-#include <bconf.h>
-
-#include <defs.h>
-
-
-/*********************
- Default File Names:
- */
-const char *CONFIG_FILE = CSVN_CONFIG;
-const char *BCF_FILE = CSVN_HOME_DIR "/" CSVN_PROGRAM ".bcf";
-const char *LOG_FILE = CSCM_LOG_DIR "/" CSVN_PROGRAM "d.log";
-const char *PID_FILE = CSCM_PID_DIR "/" CSVN_PROGRAM "d.pid";
-const char *SHM_BCF = CSVN_SHM_BCF;
-
-
-char *program = PROGRAM_DAEMON;
-int exit_status = EXIT_SUCCESS; /* errors counter */
-
-FILE *config = NULL;
-char *config_fname = NULL;
-
-char *log_fname = NULL;
-char *pid_fname = NULL;
-
-static sigset_t blockmask;
-
-static int run_as_daemon = 0;
-static int test_config_file = 0;
-static int config_inotify = 0;
-
-
-static void free_resources( void );
-
-
-/***********************
- Inotify declarations:
- */
-#define IN_BUFFER_SIZE (7 * (sizeof(struct inotify_event) + NAME_MAX + 1))
-
-static int inotify_fd = 0, wd = 0;
-static struct inotify_event *event = NULL;
-static char buf[IN_BUFFER_SIZE] __attribute__ ((aligned(8)));
-
-static int check_event( struct inotify_event *e )
-{
- if( e->mask & IN_CLOSE_WRITE ) return 1;
- return 0;
-}
-
-static void init_config_inotify( void )
-{
- inotify_fd = inotify_init(); /* Create inotify instance */
- if( inotify_fd == -1 )
- {
- ERROR( "Cannot initialize inotify for file: %s", config_fname );
- LOG( "Stop cScm Configuration Daemon." );
- free_resources();
- exit( 1 );
- }
-
- wd = inotify_add_watch( inotify_fd, config_fname, IN_CLOSE_WRITE );
- if( wd == -1 )
- {
- ERROR( "Cannot add inotify watch for file: %s", config_fname );
- LOG( "Stop cScm Configuration Daemon." );
- free_resources();
- exit( 1 );
- }
-}
-
-static void fini_config_inotify( void )
-{
- if( wd > 0 ) { (void)inotify_rm_watch( inotify_fd, wd ); wd = 0; }
- if( inotify_fd > 0 ) { (void)close( inotify_fd ); inotify_fd = 0; }
-}
-
-
-static void free_resources( void )
-{
- fini_config_inotify();
-
- if( log_fname )
- {
- if( errlog ) { fclose( errlog ); errlog = NULL; }
- free( log_fname ); log_fname = NULL;
- }
- if( config_fname )
- {
- if( config ) { fclose( config ); config = NULL; }
- free( config_fname ); config_fname = NULL;
- }
- bcf_shm_free();
- if( bcf_fname )
- {
- if( bcf ) { fclose( bcf ); bcf = NULL; }
- (void)unlink( (const char *)bcf_fname );
- free( bcf_fname ); bcf_fname = NULL;
- }
- if( pid_fname )
- {
- (void)unlink( (const char *)pid_fname );
- free( pid_fname ); pid_fname = NULL;
- }
-}
-
-
-void usage()
-{
- free_resources();
-
- fprintf( stdout, "\n" );
- fprintf( stdout, "Usage: %s [options]\n", program );
- fprintf( stdout, "\n" );
- fprintf( stdout, "Start cScm Configuration Daemon to read config file.\n" );
- fprintf( stdout, "\n" );
- fprintf( stdout, "Options:\n" );
- fprintf( stdout, " -h,--help Display this information.\n" );
- fprintf( stdout, " -v,--version Display the version of %s utility.\n", program );
- fprintf( stdout, " -d,--daemonize Run in background as a daemon.\n" );
- fprintf( stdout, " -i,--inotify Notify about configuration changes.\n" );
- fprintf( stdout, " -b,--bcf=<BCF_FILE> Binary config file. Default: %s.\n", BCF_FILE );
- fprintf( stdout, " -c,--config=<CONFIG_FILE> Config file. Default: %s.\n", CONFIG_FILE );
- fprintf( stdout, " -l,--log=<LOG_FILE> Log file. Default: %s.\n", LOG_FILE );
- fprintf( stdout, " -p,--pid=<PID_FILE> PID file. Default: %s.\n", PID_FILE );
- fprintf( stdout, " -s,--scm=<SCM> SCM 'svn' or 'git'. Default: 'svn'.\n" );
- fprintf( stdout, " -t,--test Test config file and exit.\n" );
- fprintf( stdout, "\n" );
-
- exit( EXIT_FAILURE );
-}
-
-void to_lowercase( char *s )
-{
- char *p = s;
- while( p && *p ) { int c = *p; *p = tolower( c ); ++p; }
-}
-
-void to_uppercase( char *s )
-{
- char *p = s;
- while( p && *p ) { int c = *p; *p = toupper( c ); ++p; }
-}
-
-void version()
-{
- char *upper = NULL;
-
- upper = (char *)alloca( strlen( program ) + 1 );
-
- strcpy( (char *)upper, (const char *)program );
- to_uppercase( upper );
-
- fprintf( stdout, "%s (%s) %s\n", program, upper, PROGRAM_VERSION );
-
- fprintf( stdout, "Copyright (C) 2022 Andrey V.Kosteltsev.\n" );
- fprintf( stdout, "This is free software. There is NO warranty; not even\n" );
- fprintf( stdout, "for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" );
- fprintf( stdout, "\n" );
-
- free_resources();
- exit( EXIT_SUCCESS );
-}
-
-void get_args( int argc, char *argv[] )
-{
- const char* short_options = "hvdic:l:p:s:t";
-
- const struct option long_options[] =
- {
- { "help", no_argument, NULL, 'h' },
- { "version", no_argument, NULL, 'v' },
- { "daemonize", no_argument, NULL, 'd' },
- { "inotify", no_argument, NULL, 'i' },
- { "bcf", required_argument, NULL, 'b' },
- { "config", required_argument, NULL, 'c' },
- { "log", required_argument, NULL, 'l' },
- { "pid", required_argument, NULL, 'p' },
- { "scm", required_argument, NULL, 's' },
- { "test", no_argument, NULL, 't' },
- { NULL, 0, NULL, 0 }
- };
-
- int ret;
- int option_index = 0;
-
- while( (ret = getopt_long( argc, argv, short_options, long_options, &option_index )) != -1 )
- {
- switch( ret )
- {
- case 'h':
- {
- usage();
- break;
- }
- case 'v':
- {
- version();
- break;
- }
- case 'd':
- {
- run_as_daemon = 1;
- break;
- }
- case 'i':
- {
- config_inotify = 1;
- break;
- }
- case 't':
- {
- test_config_file = 1;
- break;
- }
-
- case 'b':
- {
- if( optarg != NULL )
- {
- bcf_fname = strdup( optarg );
- }
- else
- /* option is present but without value */
- usage();
- break;
- }
-
- case 'c':
- {
- if( optarg != NULL )
- {
- config_fname = strdup( optarg );
- }
- else
- /* option is present but without value */
- usage();
- break;
- }
-
- case 'l':
- {
- if( optarg != NULL )
- {
- log_fname = strdup( optarg );
- }
- else
- /* option is present but without value */
- usage();
- break;
- }
-
- case 'p':
- {
- if( optarg != NULL )
- {
- pid_fname = strdup( optarg );
- }
- else
- /* option is present but without value */
- usage();
- break;
- }
-
- case 's':
- {
- if( optarg != NULL )
- {
- if( *optarg && !strncmp( optarg, "git", 3 ) )
- {
- CONFIG_FILE = CGIT_CONFIG;
- BCF_FILE = CGIT_HOME_DIR "/" CGIT_PROGRAM ".bcf";
- LOG_FILE = CSCM_LOG_DIR "/" CGIT_PROGRAM "d.log";
- PID_FILE = CSCM_PID_DIR "/" CGIT_PROGRAM "d.pid";
- SHM_BCF = CGIT_SHM_BCF;
- }
- }
- else
- /* option is present but without value */
- usage();
- break;
- }
-
- case '?': default:
- {
- usage();
- break;
- }
- }
- }
-}
-
-
-static int is_directory( const char *path )
-{
- struct stat st;
- return ( !stat( path, &st ) && S_ISDIR(st.st_mode) );
-}
-
-static void logpid( void )
-{
- FILE *fp;
-
- if( !pid_fname )
- {
- /* allocate memory for PID file name */
- pid_fname = (char *)malloc( strlen( PID_FILE ) + 1 );
- if( !pid_fname ) { FATAL_ERROR( "Cannot allocate memory for PID file name: %s", PID_FILE ); }
- (void)strcpy( pid_fname, PID_FILE );
- }
-
- /* Create CSCM_PID_DIR if not exists: */
- {
- char *pid_dir = NULL, *dir = strdup( pid_fname );
-
- pid_dir = dirname( dir );
-
- if( !is_directory( (const char *)pid_dir ) )
- {
- /* Create if not exists */
- if( 0 != mkdir( (const char *)pid_dir, 0755 ) )
- {
- FATAL_ERROR( "Cannot create directory for PID file: %s", PID_FILE );
- }
- }
- free( dir );
- }
-
- if( (fp = fopen( pid_fname, "w" )) != NULL )
- {
- fprintf( fp, "%u\n", getpid() );
- (void)fclose( fp );
- }
-}
-
-void init_logs( void )
-{
- /* print to stderr until the errlog file is open */
- errlog = stderr;
-
- if( !log_fname )
- {
- /* allocate memory for LOG file name */
- log_fname = (char *)malloc( strlen( LOG_FILE ) + 1 );
- if( !log_fname ) { FATAL_ERROR( "Cannot open log file: %s", LOG_FILE ); }
- (void)strcpy( log_fname, LOG_FILE );
- }
-
- /* Create CSCM_LOG_DIR if not exists: */
- {
- char *log_dir = NULL, *dir = strdup( log_fname );
-
- log_dir = dirname( dir );
-
- if( !is_directory( (const char *)log_dir ) )
- {
- /* Create if not exists */
- if( 0 != mkdir( (const char *)log_dir, 0755 ) )
- {
- FATAL_ERROR( "Cannot create directory for log file: %s", LOG_FILE );
- }
- }
- free( dir );
- }
-
- /* open LOG file */
- errlog = fopen( (const char *)log_fname, "a" );
- if( !errlog ) { errlog = stderr; FATAL_ERROR( "Cannot open log file: %s", log_fname ); }
-}
-
-void open_config_file( void )
-{
- if( !config_fname )
- {
- /* allocate memory for CONFIG file name */
- config_fname = (char *)malloc( strlen( CONFIG_FILE ) + 1 );
- if( !config_fname )
- {
- FATAL_ERROR( "Cannot open config file: %s", CONFIG_FILE );
- if( log_fname ) { fclose( errlog ); free( log_fname ); }
- }
- (void)strcpy( config_fname, CONFIG_FILE );
- }
-
- /* open CONFIG file */
- config = fopen( (const char *)config_fname, "r" );
- if( !config )
- {
- FATAL_ERROR( "Cannot open config file: %s", config_fname );
- if( log_fname ) { fclose( errlog ); free( log_fname ); }
- }
-
- if( !bcf_fname )
- {
- /* allocate memory for BCF file name */
- bcf_fname = (char *)malloc( strlen( BCF_FILE ) + 1 );
- if( !bcf_fname )
- {
- FATAL_ERROR( "Cannot allocate memory gor BCF file name: %s", BCF_FILE );
- if( log_fname ) { fclose( errlog ); free( log_fname ); }
- }
- (void)strcpy( bcf_fname, BCF_FILE );
- }
-}
-
-void close_config_file( void )
-{
- if( config ) { fclose( config ); config = NULL; }
-}
-
-
-
-void parse_config_file( void )
-{
- int ret;
-
- /***********************************
- Blick signals until parser works:
- */
- (void)sigprocmask( SIG_BLOCK, (const sigset_t *)&blockmask, (sigset_t *)NULL );
-
- open_config_file();
- init_symtab();
- init_lex();
-
- if( !(ret = yyparse()) )
- {
- reverse_symlist( (SYMBOL **)&symlist );
- remove_consts( (SYMBOL **)&symlist );
- (void)write_binary_config();
- }
- else
- {
- bcf_shm_free();
- if( bcf_fname )
- {
- if( bcf ) { fclose( bcf ); bcf = NULL; }
- (void)unlink( (const char *)bcf_fname );
- }
- }
-
- fini_lex();
- fini_symtab();
- close_config_file();
-
- (void)sigprocmask( SIG_UNBLOCK, (const sigset_t *)&blockmask, (sigset_t *)NULL );
-
- if( test_config_file )
- {
- if( ret )
- {
- fprintf( stdout, "%s: %s: Config file is not correct. See: %s\n", program, config_fname, log_fname );
- LOG( "Stop cScm Configuration Daemon." );
- free_resources();
- exit( 1 );
- }
- else
- {
- fprintf( stdout, "%s: %s: Config file is correct.\n", program, config_fname );
- LOG( "Stop cScm Configuration Daemon." );
- free_resources();
- exit( 0 );
- }
- }
-}
-
-
-
-void fatal_error_actions( void )
-{
- free_resources();
-}
-
-void sigint( int signum )
-{
- (void)signum;
-
- LOG( "received SIGINT: free resources at exit" );
- LOG( "Stop cScm Configuration Daemon." );
-
- free_resources();
- exit( 0 );
-}
-
-void sigusr( int signum )
-{
- if( signum == SIGUSR1 )
- {
- LOG( "signal USR1 has been received" );
- }
- else if( signum == SIGUSR2 )
- {
- LOG( "signal USR2 has been received" );
- }
-}
-
-void sighup( int signum )
-{
- (void)signum;
-
- LOG( "received SIGHUP: parse config file: %s", config_fname );
-
- parse_config_file();
-}
-
-static void set_signal_handlers()
-{
- struct sigaction sa;
- sigset_t set;
-
- memset( &sa, 0, sizeof( sa ) );
- sa.sa_handler = sighup; /* HUP: read config file */
- sa.sa_flags = SA_RESTART;
- sigemptyset( &set );
- sigaddset( &set, SIGHUP );
- sa.sa_mask = set;
- sigaction( SIGHUP, &sa, NULL );
-
- memset( &sa, 0, sizeof( sa ) );
- sa.sa_handler = sigusr; /* USR1, USR2 */
- sa.sa_flags = SA_RESTART;
- sigemptyset( &set );
- sigaddset( &set, SIGUSR1 );
- sigaddset( &set, SIGUSR2 );
- sa.sa_mask = set;
- sigaction( SIGUSR1, &sa, NULL );
- sigaction( SIGUSR2, &sa, NULL );
-
- memset( &sa, 0, sizeof( sa ) );
- sa.sa_handler = sigint; /* TERM, INT */
- sa.sa_flags = SA_RESTART;
- sigemptyset( &set );
- sigaddset( &set, SIGTERM );
- sigaddset( &set, SIGINT );
- sa.sa_mask = set;
- sigaction( SIGTERM, &sa, NULL );
- sigaction( SIGINT, &sa, NULL );
-
- memset( &sa, 0, sizeof( sa ) ); /* ignore SIGPIPE */
- sa.sa_handler = SIG_IGN;
- sa.sa_flags = 0;
- sigaction( SIGPIPE, &sa, NULL );
-
- /* на случай блокировки сигналов с помощью sigprocmask(): */
- sigemptyset( &blockmask );
- sigaddset( &blockmask, SIGHUP );
- sigaddset( &blockmask, SIGUSR1 );
- sigaddset( &blockmask, SIGUSR2 );
- sigaddset( &blockmask, SIGTERM );
- sigaddset( &blockmask, SIGINT );
-
- /* System V fork+wait does not work if SIGCHLD is ignored */
- signal( SIGCHLD, SIG_DFL );
-}
-
-
-
-int main( int argc, char *argv[] )
-{
- gid_t gid;
-
- set_signal_handlers();
-
- gid = getgid();
- setgroups( 1, &gid );
-
- fatal_error_hook = fatal_error_actions;
-
- program = basename( argv[0] );
- get_args( argc, argv );
-
- if( getppid() != 1 )
- {
- if( run_as_daemon ) daemon( 1, 0 );
- }
-
- init_logs();
- logpid();
-
- LOG( "Start cScm Configuration Daemon..." );
-
- parse_config_file();
-
- if( config_inotify ) init_config_inotify();
-
- for( ;; )
- {
- int max_sd;
- struct timeval timeout;
- fd_set listen_set;
-
- /*************************************
- Waiting for events from inotify_fd:
- */
- max_sd = inotify_fd + 1;
- FD_ZERO( &listen_set );
- FD_SET( inotify_fd, &listen_set );
-
- do
- {
- int rc;
-
- /*********************************************
- Initialize the timeval struct to 5 seconds:
- */
- timeout.tv_sec = 5;
- timeout.tv_usec = 0;
-
- rc = select( max_sd, &listen_set, NULL, NULL, &timeout );
-
- /*****************************************
- Check to see if the select call failed:
- */
- if( rc < 0 && errno != EINTR )
- {
- WARNING( "%s: inotify select() failed", config_fname );
- break;
- }
-
- /************************************************
- Check to see if the 5 second time out expired:
- */
- if( rc == 0 )
- {
- /* Here we can output some log info. */
- break;
- }
-
- if( FD_ISSET( inotify_fd, &listen_set ) )
- {
- ssize_t n;
- char *p;
-
- n = read( inotify_fd, buf, IN_BUFFER_SIZE );
- if( n == 0 )
- {
- ERROR( "%s: read() from inotify file descriptor returned '0'", config_fname );
- LOG( "Stop cScm Configuration Daemon." );
- free_resources();
- exit( 1 );
- }
- if( n == -1 )
- {
- ERROR( "%s: read() from inotify file descriptor returned '-1'", config_fname );
- LOG( "Stop cScm Configuration Daemon." );
- free_resources();
- exit( 1 );
- }
-
- for( p = buf; p < buf + n; )
- {
- event = (struct inotify_event *)p;
- /************************************************************
- в принципе, нам хватает одного события и, если мы получили
- нужное событие и перечитали config file, то здесь мы можем
- выйти из цикла чтения событий с помощью break
- */
- if( check_event( event ) )
- {
- LOG( "Config file '%s' has been changed. Read new config content...", config_fname );
- parse_config_file();
- break;
- }
- p += sizeof(struct inotify_event) + event->len;
- }
-
- } /* End if( FD_ISSET() ) */
-
- } while( 1 );
-
- /*
- Здесь мы можем выполнить действия, которые необходимы
- в том случае, если в течение 5-и секунд мы не получили
- ни одного сигнала об изменении дескриптора inotify_fd.
- */
- {
- sleep( 5 );
- }
-
- } /* End of waiting for( ;; ) */
-
-
- LOG( "Stop cScm Configuration Daemon." );
- free_resources();
-
- return 0;
-}
Index: cscm-0.1.4/cscmd/xalloc.h
===================================================================
--- cscm-0.1.4/cscmd/xalloc.h (revision 10)
+++ cscm-0.1.4/cscmd/xalloc.h (nonexistent)
@@ -1,19 +0,0 @@
-
-#ifndef __XALLOC_H
-#define __XALLOC_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-extern void *xmalloc ( size_t );
-extern void *xrealloc ( void *, size_t );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XALLOC_H */
Index: cscm-0.1.4/cscmd/xalloc.c
===================================================================
--- cscm-0.1.4/cscmd/xalloc.c (revision 10)
+++ cscm-0.1.4/cscmd/xalloc.c (nonexistent)
@@ -1,36 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <defs.h>
-
-#include <error.h>
-#include <msglog.h>
-
-
-void *xmalloc( size_t n )
-{
- void *p = NULL;
-
- p = malloc( n );
- if( !p ) no_space();
- bzero( p, n );
-
- return( p );
-}
-
-void *xrealloc( void *b, size_t n )
-{
- void *p = NULL;
-
- p = realloc( b , n );
- if( !p ) no_space();
-
- return( p );
-}
Index: cscm-0.1.4/cscmd/bconf.h
===================================================================
--- cscm-0.1.4/cscmd/bconf.h (revision 10)
+++ cscm-0.1.4/cscmd/bconf.h (nonexistent)
@@ -1,25 +0,0 @@
-
-#ifndef __BCONF_H
-#define __BCONF_H
-
-#include <cscm/bcf.h>
-
-
-extern FILE *bcf;
-extern char *bcf_fname;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-extern int write_binary_config( void );
-extern void bcf_shm_free( void );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __BCONF_H */
Index: cscm-0.1.4/cscmd/parse.y
===================================================================
--- cscm-0.1.4/cscmd/parse.y (revision 10)
+++ cscm-0.1.4/cscmd/parse.y (nonexistent)
@@ -1,107 +0,0 @@
-
-%{
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdarg.h>
-#include <limits.h>
-#include <locale.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include <defs.h>
-
-#include <main.h>
-#include <error.h>
-#include <msglog.h>
-#include <xalloc.h>
-#include <utf8ing.h>
-#include <symtab.h>
-#include <parse.h>
-#include <lex.h>
-
-
-%}
-
-
-%union
-{
- SYMBOL *sym;
-}
-
-%token <sym> VARIABLE 501 SECTION 502 REPO 503
-%token <sym> NUMERICAL 510 STRING 511 PATH 512
-%right '='
-%left UNARYMINUS
-/************************************************************
- Following tokens declared only for verbose error messaging
- to prevent "$undefined" values of unexpected symbols:
- */
-%token '!' '"' '#' '$' '%' '&' '\'' '(' ')' '*' '/' '+' '-'
-%token '.' ',' ':' '<' '>' '?' '@' '[' '\\' ']' '^' '`'
-
-%start list
-
-%%
-list: /* nothing */
- | list ';'
- | list repo
- | list section
- | list assign ';'
- | list error ';' { return 1; }
- ;
-
-assign: VARIABLE '=' NUMERICAL { (void)assign_value( $1, $3 ); }
- | VARIABLE '=' '+' NUMERICAL { (void)assign_value( $1, $4 ); }
- | VARIABLE '=' '-' NUMERICAL %prec UNARYMINUS { $4->u.value = -$4->u.value; (void)assign_value( $1, $4 ); }
- | VARIABLE '=' STRING { (void)assign_value( $1, $3 ); }
- | VARIABLE '=' PATH { (void)assign_value( $1, $3 ); }
- | NUMERICAL '=' NUMERICAL { (void)assign_value( $1, $3 ); }
- | STRING '=' STRING { (void)assign_value( $1, $3 ); }
- | PATH '=' PATH { (void)assign_value( $1, $3 ); }
- ;
-
-alist: /* nothing */
- | alist ';'
- | alist assign ';'
- ;
-
-repo: REPO PATH '{'
- {
- if( lookup_repo( $2->u.path ) )
- {
- error( "Repository '%s' is already defined", $2->u.path );
- return 1;
- }
- (void)assign_value( $1, $2 ); push_symlist( (SYMBOL **)&($1->list) );
- }
- alist
- '}' { pop_symlist(); }
- ;
-
-rlist: /* nothing */
- | rlist repo
- ;
-
-section:
- SECTION STRING '{'
- {
- if( lookup_section( $2->u.string ) )
- {
- error( "Section '%s' is already defined", $2->u.string );
- return 1;
- }
- (void)assign_value( $1, $2 ); push_symlist( (SYMBOL **)&($1->list) );
- }
- rlist
- '}' { pop_symlist(); }
- ;
-
-%%
-
Index: cscm-0.1.4/cscmd/main.h
===================================================================
--- cscm-0.1.4/cscmd/main.h (revision 10)
+++ cscm-0.1.4/cscmd/main.h (nonexistent)
@@ -1,21 +0,0 @@
-
-#ifndef __MAIN_H
-#define __MAIN_H
-
-
-extern FILE *config;
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __MAIN_H */
Index: cscm-0.1.4/cscmd/logrotate.in
===================================================================
--- cscm-0.1.4/cscmd/logrotate.in (revision 10)
+++ cscm-0.1.4/cscmd/logrotate.in (nonexistent)
@@ -1,8 +0,0 @@
-
-@CSCM_LOG_DIR@/@CSCM_PROGRAM@d.log {
- rotate 7
- size=5M
- compress
- notifempty
- missingok
-}
Index: cscm-0.1.4/cscmd/rc.cscmd.in
===================================================================
--- cscm-0.1.4/cscmd/rc.cscmd.in (revision 10)
+++ cscm-0.1.4/cscmd/rc.cscmd.in (nonexistent)
@@ -1,96 +0,0 @@
-#!/bin/sh
-#
-# /etc/rc.d/rc.@CSCM_PROGRAM@d - @CSCM_PROGRAM_NAME@ daemon control script.
-#
-
-BIN=@sbindir@/@PROGRAM_DAEMON@
-CONF=@CSCM_CONFIG@
-BCF=@CSCM_HOME_PATH@/@CSCM_PROGRAM@/@CSCM_PROGRAM@.bcf
-PID=@CSCM_PID_DIR@/@CSCM_PROGRAM@d.pid
-LOG=@CSCM_LOG_DIR@/@CSCM_PROGRAM@d.log
-
-INOTIFY=--inotify
-
-cscmd_start() {
- # Sanity checks.
- if [ ! -r $CONF ]; then
- echo "$CONF does not appear to exist. Abort."
- exit 1
- fi
-
- if [ -s $PID ]; then
- echo "@CSCM_PROGRAM_NAME@ daemon appears to already be running?"
- exit 1
- fi
-
- echo "Starting @CSCM_PROGRAM_NAME@ server daemon..."
- if [ -x $BIN ]; then
- $BIN --daemonize $INOTIFY --scm=@CSCM_NAME@ --pid=$PID --log=$LOG --bcf=$BCF --config=$CONF
- fi
-}
-
-cscmd_test_conf() {
- echo "Checking configuration for correct syntax and then"
- echo "trying to open files referenced in configuration..."
- echo ""
- if [ -s $PID ] ; then
- echo "@PROGRAM_DAEMON@: $CONF: Config file is correct."
- else
- $BIN --test --scm=@CSCM_NAME@ --pid=$PID --log=$LOG --bcf=$BCF --config=$CONF
- fi
-}
-
-cscmd_status() {
- if [ -s $PID ] ; then
- echo "@CSCM_PROGRAM_NAME@ daemon is running as PID: $(cat $PID)"
- else
- echo "@CSCM_PROGRAM_NAME@ daemon is stopped."
- fi
-}
-
-cscmd_stop() {
- echo "Shutdown @CSCM_PROGRAM_NAME@ daemon gracefully..."
- if [ -s $PID ] ; then
- kill -TERM $(cat $PID)
- else
- echo "@CSCM_PROGRAM_NAME@ daemon appears to already be stopped."
- fi
-}
-
-cscmd_reload() {
- echo "Reloading @CSCM_PROGRAM_NAME@ daemon configuration..."
- if [ -s $PID ] ; then
- kill -HUP $(cat $PID)
- else
- echo "@CSCM_PROGRAM_NAME@ daemon is not running."
- fi
-}
-
-cscmd_restart() {
- cscmd_stop
- sleep 3
- cscmd_start
-}
-
-case "$1" in
- check)
- cscmd_test_conf
- ;;
- reload)
- cscmd_reload
- ;;
- restart)
- cscmd_restart
- ;;
- start)
- cscmd_start
- ;;
- stop)
- cscmd_stop
- ;;
- status)
- cscmd_status
- ;;
- *)
- echo "usage: `basename $0` {check|reload|restart|start|stop|status}"
-esac
Index: cscm-0.1.4/cscmd/Makefile.am
===================================================================
--- cscm-0.1.4/cscmd/Makefile.am (revision 10)
+++ cscm-0.1.4/cscmd/Makefile.am (nonexistent)
@@ -1,63 +0,0 @@
-
-AM_CPPFLAGS = -I@top_srcdir@ -DYYERROR_VERBOSE=1
-
-sbin_PROGRAMS = cscmd
-
-cscmd_SOURCES = bconf.c daemon.c error.c lex.c main.c msglog.c symtab.c utf8ing.c xalloc.c
-
-noinst_HEADERS = bconf.h daemon.h error.h lex.h main.h msglog.h symtab.h utf8ing.h xalloc.h
-
-control_DATA = rc.cgitd rc.csvnd
-logrotate_DATA = cgit csvn
-
-csvndhome_DATA = README.csvn
-cgitdhome_DATA = README.cgit
-
-man8_MANS = cscmd.8
-notrans_nodist_man8_MANS = cscmd.8
-
-nodist_cscmd_SOURCES = parse.c parse.h rc.csvnd csvn rc.cgitd cgit
-BUILT_SOURCES = parse.c parse.h rc.csvnd csvn rc.cgitd cgit
-
-parse.c: parse.y
- @BISON@ -lvy --defines=parse.h -o $@ $^
-
-README.csvn: README.in
- cat $^ | sed "s,\@CSCM_PROGRAM\@,${CSVN_PROGRAM},g" | \
- sed "s,\@CSCM_PROGRAM_NAME\@,${CSVN_PROGRAM_NAME},g" > $@
-
-README.cgit: README.in
- cat $^ | sed "s,\@CSCM_PROGRAM\@,${CGIT_PROGRAM},g" | \
- sed "s,\@CSCM_PROGRAM_NAME\@,${CGIT_PROGRAM_NAME},g" > $@
-
-rc.csvnd: rc.cscmd.in
- cat $^ | sed "s,\@sbindir\@,${sbindir},g" | \
- sed "s,\@CSCM_NAME\@,${CSVN_NAME},g" | \
- sed "s,\@CSCM_CONFIG\@,${CSVN_CONFIG},g" | \
- sed "s,\@CSCM_HOME_PATH\@,${CSCM_HOME_PATH},g" | \
- sed "s,\@CSCM_PID_DIR\@,${CSCM_PID_DIR},g" | \
- sed "s,\@CSCM_LOG_DIR\@,${CSCM_LOG_DIR},g" | \
- sed "s,\@CSCM_PROGRAM\@,${CSVN_PROGRAM},g" | \
- sed "s,\@CSCM_PROGRAM_NAME\@,${CSVN_PROGRAM_NAME},g" | \
- sed "s,\@PROGRAM_DAEMON\@,${PROGRAM_DAEMON},g" > $@
-
-rc.cgitd: rc.cscmd.in
- cat $^ | sed "s,\@sbindir\@,${sbindir},g" | \
- sed "s,\@CSCM_NAME\@,${CGIT_NAME},g" | \
- sed "s,\@CSCM_CONFIG\@,${CGIT_CONFIG},g" | \
- sed "s,\@CSCM_HOME_PATH\@,${CSCM_HOME_PATH},g" | \
- sed "s,\@CSCM_PID_DIR\@,${CSCM_PID_DIR},g" | \
- sed "s,\@CSCM_LOG_DIR\@,${CSCM_LOG_DIR},g" | \
- sed "s,\@CSCM_PROGRAM\@,${CGIT_PROGRAM},g" | \
- sed "s,\@CSCM_PROGRAM_NAME\@,${CGIT_PROGRAM_NAME},g" | \
- sed "s,\@PROGRAM_DAEMON\@,${PROGRAM_DAEMON},g" > $@
-
-csvn: logrotate.in
- cat $^ | sed "s,\@CSCM_LOG_DIR\@,${CSCM_LOG_DIR},g" | \
- sed "s,\@CSCM_PROGRAM\@,${CSVN_PROGRAM},g" > $@
-
-cgit: logrotate.in
- cat $^ | sed "s,\@CSCM_LOG_DIR\@,${CSCM_LOG_DIR},g" | \
- sed "s,\@CSCM_PROGRAM\@,${CGIT_PROGRAM},g" > $@
-
-CLEANFILES = parse.c parse.h parse.output README.csvn rc.csvnd csvn README.cgit rc.cgitd cgit cscmd.8
Index: cscm-0.1.4/cscmd/daemon.h
===================================================================
--- cscm-0.1.4/cscmd/daemon.h (revision 10)
+++ cscm-0.1.4/cscmd/daemon.h (nonexistent)
@@ -1,7 +0,0 @@
-
-#ifndef __DAEMON_H__
-#define __DAEMON_H__
-
-extern int daemon( int, int );
-
-#endif /* __DAEMON_H__ */
Index: cscm-0.1.4/cscmd/daemon.c
===================================================================
--- cscm-0.1.4/cscmd/daemon.c (revision 10)
+++ cscm-0.1.4/cscmd/daemon.c (nonexistent)
@@ -1,39 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <fcntl.h>
-#include <paths.h>
-#include <unistd.h>
-
-#include <daemon.h>
-
-int daemon( int nochdir, int noclose )
-{
- int fd;
-
- switch( fork() )
- {
- case -1:
- return( -1 );
- case 0:
- break;
- default:
- _exit( 0 ); /* direct use kernel exit */
- }
-
- if( setsid() == -1 ) return( -1 );
- if( !nochdir ) chdir( "/" );
- if( noclose ) return( 0 );
-
- fd = open( _PATH_DEVNULL, O_RDWR, 0 );
- if( fd != -1 )
- {
- dup2( fd, STDIN_FILENO );
- dup2( fd, STDOUT_FILENO );
- dup2( fd, STDERR_FILENO );
- if( fd > 2 ) close( fd );
- }
- return( 0 );
-}
Index: cscm-0.1.4/cscmd
===================================================================
--- cscm-0.1.4/cscmd (revision 10)
+++ cscm-0.1.4/cscmd (nonexistent)
Property changes on: cscm-0.1.4/cscmd
___________________________________________________________________
Deleted: svn:ignore
## -1,35 +0,0 ##
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/.gitignore
===================================================================
--- cscm-0.1.4/.gitignore (revision 10)
+++ cscm-0.1.4/.gitignore (nonexistent)
@@ -1,35 +0,0 @@
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~
Index: cscm-0.1.4/acsite.m4
===================================================================
--- cscm-0.1.4/acsite.m4 (revision 10)
+++ cscm-0.1.4/acsite.m4 (nonexistent)
@@ -1,55 +0,0 @@
-
-dnl ============================================================
-dnl Display Configuration Headers
-dnl
-dnl configure.in:
-dnl AC_MSG_CFG_PART(<text>)
-dnl ============================================================
-
-define(AC_MSG_CFG_PART,[dnl
- AC_MSG_RESULT()
- AC_MSG_RESULT(${TB}$1:${TN})
-])dnl
-
-AC_DEFUN(AC_CSCM_HEADLINE,[dnl
- # Use a `Quadrigaph'. @<:@ gives you [ and @:>@ gives you ] :
- TB=`echo -n -e '\033@<:@1m'`
- TN=`echo -n -e '\033@<:@0m'`
- echo ""
- echo "Configuring ${TB}$1${TN} ($2), Version ${TB}${PACKAGE_VERSION}${TN}"
- echo "$3"
-])dnl
-
-
-dnl ============================================================
-dnl Test for build_host `ln -s' .
-dnl ============================
-dnl
-dnl Usage:
-dnl -----
-dnl AC_PATH_PROG_LN_S
-dnl AC_SUBST(LN)
-dnl AC_SUBST(LN_S)
-dnl
-dnl ============================================================
-AC_DEFUN(AC_PATH_PROG_LN_S,
-[AC_PATH_PROG(LN, ln, no, /usr/local/bin:/usr/bin:/bin:$PATH)
-AC_MSG_CHECKING(whether ln -s works on build host)
-AC_CACHE_VAL(ac_cv_path_prog_LN_S,
-[rm -f conftestdata
-if $LN -s X conftestdata 2>/dev/null
-then
- rm -f conftestdata
- ac_cv_path_prog_LN_S="$LN -s"
-else
- ac_cv_path_prog_LN_S="$LN"
-fi])dnl
-LN_S="$ac_cv_path_prog_LN_S"
-if test "$ac_cv_path_prog_LN_S" = "$LN -s"; then
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-AC_SUBST(LN)dnl
-AC_SUBST(LN_S)dnl
-])
Index: cscm-0.1.4/Makefile.am
===================================================================
--- cscm-0.1.4/Makefile.am (revision 10)
+++ cscm-0.1.4/Makefile.am (nonexistent)
@@ -1,17 +0,0 @@
-
-ACLOCAL_AMFLAGS = -I m4
-
-#
-# In build order:
-# ==============
-#
-SUBDIRS = cscmd
-
-EXTRA_DIST = \
- doc LICENSE README.md acsite.m4 auto-clean bootstrap \
- cscmd/parse.y cscmd/README.in cscmd/rc.cscmd.in cscmd/logrotate.in \
- .svnignore .gitignore
-
-nobase_include_HEADERS = cscm/bcf.h
-
-noinst_HEADERS = defs.h
Index: cscm-0.1.4/README.md
===================================================================
--- cscm-0.1.4/README.md (revision 10)
+++ cscm-0.1.4/README.md (nonexistent)
@@ -1,214 +0,0 @@
-
-# cScm Configuration Daemon
-
-**cScm** Configuration Daemon – is a tool to convert SCM configuration files into binary format and store its in shared memory
-for reading by **cSvn-ui** and **cGit-ui** CGI scripts.
-
-
-## Reqired packages
-
-**cScm** daemon depends on [libpcre2-32](https://www.pcre.org/) library. ArchLinux distribution has the **pcre2** binary package.
-On RPM based systems you can find somethink like **pcre2-devel** RPM.
-
-
-## Installation
-
-The **cScm** package provides a regular Linux daemon with control scripts.
-
-
-### Download Sources
-
-To obtain sources we have to checkout its from SVN repository:
-
-```Bash
-svn checkout svn://radix.pro/scm-tools/cscm/tags/cscm-0.1.4 cscm-0.1.4
-```
-and run the bootstrap script:
-
-```Bash
-cd csvn-0.1.4
-./bootstrap
-```
-Also **cScm** source packages are available for download on the
-[Radix.pro FTP-server](https://ftp.radix.pro/pub/cscm/).
-
-
-#### Bootstrap Script
-
-The *bootstrap* script especialy created for *Autotools* install automation. To install
-*Autotools* into sourse directory on build machine (i.e. when **build** == **host**) the *bootstrap*
-script can be run without arguments.
-
-```Bash
-./bootstrap
-```
-
-I this case *Autotools* will be installed from current root file system.
-
-For the cross environment the `--target-dest-dir` option allows to install some stuff from
-development root file system:
-
-```Bash
-TARGET_DEST_DIR=/home/developer/prog/trunk-672/dist/.s9xx-glibc/enybox-x2 \
- ./bootstrap --target-dest-dir=${TARGET_DEST_DIR}
-```
-
-For example, in this case the *aclocal.m4* script will be collected from the
-`${TARGET_DEST_DIR}/usr/share/aclocal` directory.
-
-
-### Configuring Sources
-
-```Bash
-./configure --prefix=/usr \
- --sysconfdir=/etc \
- --with-controldir=/etc/rc.d \
- --with-logrotatedir=/etc/logrotate.d \
- --with-homepath=/var/lib \
- --with-logdir=/var/log \
- --with-piddir=/var/run
-```
-
-
-#### Install on the Build Machine
-
-```Bash
-make
-make install
-```
-
-
-#### Cross Compilation Example
-
-```Bash
-#!/bin/sh
-
-TARGET_DEST_DIR=/home/developer/prog/trunk-672/dist/.s9xx-glibc/enybox-x2
-TOOLCHAIN_PATH=/opt/toolchains/aarch64-S9XX-linux-glibc/1.1.4/bin
-TARGET=aarch64-s9xx-linux-gnu
-
-./bootstrap --target-dest-dir=${TARGET_DEST_DIR}
-
-PKG_CONFIG=/usr/bin/pkg-config \
-PKG_CONFIG_PATH=${TARGET_DEST_DIR}/usr/lib${LIBDIRSUFFIX}/pkgconfig:${TARGET_DEST_DIR}/usr/share/pkgconfig \
-PKG_CONFIG_LIBDIR=${TARGET_DEST_DIR}/usr/lib${LIBDIRSUFFIX}/pkgconfig:${TARGET_DEST_DIR}/usr/share/pkgconfig \
-STRIP="${TOOLCHAIN_PATH}/${TARGET}-strip" \
-CC="${TOOLCHAIN_PATH}/${TARGET}-gcc --sysroot=${TARGET_DEST_DIR}" \
-./configure --prefix=/usr
- --build=x86_64-pc-linux-gnu \
- --host=${TARGET} \
- --sysconfdir=/etc \
- --with-controldir=/etc/rc.d \
- --with-logrotatedir=/etc/logrotate.d \
- --with-homepath=/var/lib \
- --with-logdir=/var/log \
- --with-piddir=/var/run
-
-make
-make install DESTDIR=${TARGET_DEST_DIR}
-```
-
-Also we can make use of additional variables such as `CFLAGS`, `LDFLAGS`:
-
-```Bash
-LDFLAGS="-L${TARGET_DEST_DIR}/lib -L${TARGET_DEST_DIR}/usr/lib"
-TARGET_INCPATH="-L${TARGET_DEST_DIR}/usr/include"
-CFLAGS="${TARGET_INCPATH}"
-CPPFLAGS="${TARGET_INCPATH}"
-```
-
-### Post Install
-
-To run **cScm** daemon for some SCM engine we have to make control scripts executable:
-
-```Bash
-chmod a+x /etc/rc.d/rc.csvnd
-chmod a+x /etc/rc.d/rc.cgitd
-```
-
-If you want to run the **cscmd** daemons on boot time then on systems with BSD-like initialization such as **Slackware** we have
-to add following lines to the */etc/rc.d/rc.M* and */etc/rc.d/rc.6* scripts correspondengly:
-
-**/etc/rc.d/rc.M:**
-
-```Bash
-# Start cSvn SCM daemon:
-if [ -x /etc/rc.d/rc.csvnd ]; then
- /etc/rc.d/rc.csvnd start
-fi
-
-# Start cGit SCM daemon:
-if [ -x /etc/rc.d/rc.cgitd ]; then
- /etc/rc.d/rc.cgitd start
-fi
-```
-
-**/etc/rc.d/rc.6:**
-
-```Bash
-# Stop cSvn SCM daemon:
-if [ -x /etc/rc.d/rc.csvnd ]; then
- /etc/rc.d/rc.csvnd stop
-fi
-
-# Stop cGit SCM daemon:
-if [ -x /etc/rc.d/rc.cgitd ]; then
- /etc/rc.d/rc.cgitd stop
-fi
-```
-
-For systems which uses systemd initialization you have to setup your own systemd unit like following:
-
-**/etc/systemd/system/csvnd.service:**
-
-```ini
-[Unit]
-Description=The cSvn daemon
-After=network.target
-
-[Service]
-PIDFile=/var/run/csvnd.pid
-ExecStart=/usr/sbin/cscmd --daemonize --inotify --scm=svn --pid=/var/run/csvnd.pid --log=/var/log/csvnd.log --config=/etc/csvn-ui.rc
-ExecReload=/bin/kill -s HUP $MAINPID
-ExecStop=/bin/kill -s TERM $MAINPID
-
-[Install]
-WantedBy=multi-user.target
-```
-
-**/etc/systemd/system/cgitd.service:**
-
-```ini
-[Unit]
-Description=The cGit daemon
-After=network.target
-
-[Service]
-PIDFile=/var/run/cgitd.pid
-ExecStart=/usr/sbin/cscmd --daemonize --inotify --scm=git --pid=/var/run/cgitd.pid --log=/var/log/cgitd.log --config=/etc/cgit-ui.rc
-ExecReload=/bin/kill -s HUP $MAINPID
-ExecStop=/bin/kill -s TERM $MAINPID
-
-[Install]
-WantedBy=multi-user.target
-```
-
-
-## Binary Packages
-
-The instructions to build binary packages for popular Linux distributions are present in the
-[**Documentation**](https://csvn.radix.pro/scm-tools/cscm/trunk/doc/) directory where you can find **RPM** **spec** file and also
-**ArchLinux** Package Build script.
-
-
-## See Also
-
-> [**cscmd(8)**](https://csvn.radix.pro/scm-tools/cscm/trunk/doc/cscmd.8.md),
-> [**csvn-ui.rc(5)**](https://csvn.radix.pro/scm-tools/csvn-ui/trunk/doc/csvn-ui.rc.5.md),
-> [**cgit-ui.rc(5)**](https://csvn.radix.pro/scm-tools/cgit-ui/trunk/doc/cgit-ui.rc.5.md).
-
-
-## Copyright and License
-
-© Andrey V. Kosteltsev, 2019 – 2022.<br/>
-Code and documentation released under [the **Radix.pro** License](https://csvn.radix.pro/cscm/trunk/LICENSE).
Index: cscm-0.1.4/auto-clean
===================================================================
--- cscm-0.1.4/auto-clean (revision 10)
+++ cscm-0.1.4/auto-clean (nonexistent)
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-CWD=`pwd`
-
-program=`basename $0`
-
-usage() {
- cat << EOF
-
-Usage: $program [options]
-
-Options:
- -h,--help Display this message.
-
-EOF
-}
-
-if [ -f "${CWD}/Makefile" ] ; then
- make distclean
-fi
-
-svnignore='.svnignore'
-
-while read ln; do
- line=`echo "${ln}" | sed 's,^[ \t],,' | sed 's,[ \t]$,,'`
- if [ "x$line" != "x" -a "${line:0:1}" != "#" ] ; then
- if `echo "${line}" | grep -q '\*~$'` ; then
- find "`dirname "${line}"`" -type f -iname '*~' -print0 | while IFS= read -r -d '' file ; do
- rm -f "$file"
- done
- elif `echo "${line}" | grep -q '\*'` ; then
- find "`dirname "${line}"`" -type f -iname "`basename "${line}"`" -print0 | while IFS= read -r -d '' file ; do
- rm -f "$file"
- done
- else
- if [ -d "${line}" ] ; then rm -rf "${line}" ; fi
- if [ -f "${line}" ] ; then rm -f "${line}" ; fi
- fi
- fi
-done < ${CWD}/${svnignore}
Property changes on: cscm-0.1.4/auto-clean
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: cscm-0.1.4/defs.h
===================================================================
--- cscm-0.1.4/defs.h (revision 10)
+++ cscm-0.1.4/defs.h (nonexistent)
@@ -1,24 +0,0 @@
-
-#ifndef __DEFS_H
-#define __DEFS_H
-
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __DEFS_H */
Index: cscm-0.1.4
===================================================================
--- cscm-0.1.4 (revision 10)
+++ cscm-0.1.4 (nonexistent)
Property changes on: cscm-0.1.4
___________________________________________________________________
Deleted: svn:ignore
## -1,35 +0,0 ##
-
-autom4te.cache/
-
-Makefile
-Makefile.in
-config.h
-config.h.in
-config.log
-config.status
-compile
-config.guess
-config.sub
-configure
-install-sh
-missing
-stamp-h1
-aclocal.m4
-depcomp
-ylwrap
-
-cscmd/.deps/
-cscmd/Makefile
-cscmd/Makefile.in
-cscmd/cscmd.8
-cscmd/parse.c
-cscmd/parse.h
-cscmd/parse.output
-cscmd/csvn
-cscmd/cgit
-cscmd/rc.csvnd
-cscmd/rc.cgitd
-cscmd/README.csvn
-cscmd/README.cgit
-
-*~