cScm Configuration Daemon

cScm – 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

2 Commits   0 Branches   1 Tag
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   1) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   2) %{
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   3) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   4) #ifdef HAVE_CONFIG_H
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   5) #include <config.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   6) #endif
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   7) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   8) #include <stdlib.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300   9) #include <stdio.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  10) #include <unistd.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  11) #include <string.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  12) #include <stdarg.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  13) #include <limits.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  14) #include <locale.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  15) #include <wchar.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  16) #include <wctype.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  17) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  18) #include <defs.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  19) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  20) #include <main.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  21) #include <error.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  22) #include <msglog.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  23) #include <xalloc.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  24) #include <utf8ing.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  25) #include <symtab.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  26) #include <parse.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  27) #include <lex.h>
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  28) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  29) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  30) %}
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  31) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  32) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  33) %union
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  34) {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  35)   SYMBOL *sym;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  36) }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  37) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  38) %token <sym>  VARIABLE 501 SECTION 502 REPO 503
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  39) %token <sym>  NUMERICAL 510 STRING 511 PATH 512
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  40) %right '='
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  41) %left UNARYMINUS
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  42) /************************************************************
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  43)   Following tokens declared only for verbose error messaging
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  44)   to prevent "$undefined" values of unexpected symbols:
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  45)  */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  46) %token '!' '"' '#' '$' '%' '&' '\'' '(' ')' '*' '/' '+' '-'
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  47) %token '.' ',' ':' '<' '>' '?' '@' '[' '\\' ']' '^' '`'
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  48) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  49) %start list
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  50) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  51) %%
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  52) list:    /* nothing */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  53)        | list ';'
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  54)        | list repo
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  55)        | list section
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  56)        | list assign ';'
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  57)        | list error  ';' { return 1; }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  58)        ;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  59) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  60) assign:  VARIABLE '=' NUMERICAL  { (void)assign_value( $1, $3 ); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  61)        | VARIABLE '=' '+' NUMERICAL { (void)assign_value( $1, $4 ); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  62)        | VARIABLE '=' '-' NUMERICAL %prec UNARYMINUS { $4->u.value = -$4->u.value; (void)assign_value( $1, $4 ); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  63)        | VARIABLE '=' STRING     { (void)assign_value( $1, $3 ); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  64)        | VARIABLE '=' PATH       { (void)assign_value( $1, $3 ); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  65)        | NUMERICAL '=' NUMERICAL { (void)assign_value( $1, $3 ); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  66)        | STRING '=' STRING       { (void)assign_value( $1, $3 ); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  67)        | PATH '=' PATH           { (void)assign_value( $1, $3 ); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  68)        ;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  69) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  70) alist:   /* nothing */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  71)        | alist ';'
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  72)        | alist assign ';'
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  73)        ;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  74) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  75) repo:    REPO PATH '{'
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  76)            {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  77)              if( lookup_repo( $2->u.path ) )
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  78)              {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  79)                error( "Repository '%s' is already defined", $2->u.path );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  80)                return 1;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  81)              }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  82)              (void)assign_value( $1, $2 ); push_symlist( (SYMBOL **)&($1->list) );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  83)            }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  84)            alist
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  85)          '}' { pop_symlist(); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  86)        ;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  87) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  88) rlist:   /* nothing */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  89)        | rlist repo
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  90)        ;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  91) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  92) section:
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  93)          SECTION STRING '{'
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  94)            {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  95)              if( lookup_section( $2->u.string ) )
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  96)              {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  97)                error( "Section '%s' is already defined", $2->u.string );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  98)                return 1;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300  99)              }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 100)              (void)assign_value( $1, $2 ); push_symlist( (SYMBOL **)&($1->list) );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 101)            }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 102)            rlist
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 103)          '}' { pop_symlist(); }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 104)        ;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 105) 
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 106) %%
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 107)