installparse.l
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:5k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  */
  33. /* lex file for analyzing PKCS #11 Module installation instructions */
  34. /*----------------------------- Definitions ---------------------------*/
  35. %{
  36. #include <string.h>
  37. #include "install-ds.h" /* defines tokens and data structures */
  38. #include "installparse.h" /* produced by yacc -d */
  39. #include <prprf.h>
  40. static char *putSimpleString(char*); /* return copy of string */
  41. static char *putComplexString(char*); /* strip out quotes, deal with */
  42. /* escaped characters */
  43. void Pk11Install_yyerror(char *);
  44. /* Overrides to use NSPR */
  45. #define malloc PR_Malloc
  46. #define realloc PR_Realloc
  47. #define free PR_Free
  48. int Pk11Install_yylinenum=1;
  49. static char *err;
  50. #define YY_NEVER_INTERACTIVE 1
  51. #define yyunput Pkcs11Install_yyunput
  52. /* This is the default YY_INPUT modified for NSPR */
  53. #define YY_INPUT(buf,result,max_size) 
  54. if ( yy_current_buffer->yy_is_interactive ) { 
  55. char c; 
  56. int n; 
  57. for ( n = 0; n < max_size && 
  58.   PR_Read(Pk11Install_FD, &c, 1)==1 && c != 'n'; ++n ) { 
  59. buf[n] = c; 
  60.         if ( c == 'n' ) { 
  61.             buf[n++] = c; 
  62.         result = n; 
  63. } else { 
  64. result = PR_Read(Pk11Install_FD, buf, max_size); 
  65. }
  66. %}
  67. /*** Regular expression definitions ***/
  68. /* simple_string has no whitespace, quotes, or braces */
  69. simple_string [^ trn""{""}"]+
  70. /* complex_string is enclosed in quotes. Inside the quotes, quotes and
  71.    backslashes must be backslash-escaped. No newlines or carriage returns
  72.    are allowed inside the quotes. Otherwise, anything goes. */
  73. complex_string "([^"\rn]|(\")|(\\))+"
  74. /* Standard whitespace */
  75. whitespace [ tr]+
  76. other .
  77. /*---------------------------- Actions --------------------------------*/
  78. %%
  79. "{" return OPENBRACE;
  80. "}" return CLOSEBRACE;
  81. {simple_string} {Pk11Install_yylval.string =
  82. putSimpleString(Pk11Install_yytext);
  83. return STRING;}
  84. {complex_string} {Pk11Install_yylval.string =
  85. putComplexString(Pk11Install_yytext);
  86. return STRING;}
  87. "n" Pk11Install_yylinenum++;
  88. {whitespace} ;
  89. {other} {err = PR_smprintf("Invalid lexeme: %s",Pk11Install_yytext);
  90. Pk11Install_yyerror(err);
  91. PR_smprintf_free(err);
  92. return 1;
  93. }
  94. %%
  95. /*------------------------ Program Section ----------------------------*/
  96. PRFileDesc *Pk11Install_FD=NULL;
  97. /*************************************************************************/
  98. /* dummy function required by lex */
  99. int Pk11Install_yywrap(void) { return 1;}
  100. /*************************************************************************/
  101. /* Return a copy of the given string */
  102. static char*
  103. putSimpleString(char *str)
  104. {
  105. char *tmp = (char*) PR_Malloc(strlen(str)+1);
  106. strcpy(tmp, str);
  107. return tmp;
  108. }
  109. /*************************************************************************/
  110. /* Strip out quotes, replace escaped characters with what they stand for.
  111.    This function assumes that what is passed in is actually a complex
  112.    string, so error checking is lax. */
  113. static char*
  114. putComplexString(char *str)
  115. {
  116. int size, i,j;
  117. char *tmp;
  118. if(!str) {
  119. return NULL;
  120. }
  121. size = strlen(str);
  122. /* Allocate the new space.  This string will actually be too big, 
  123. since quotes and backslashes will be stripped out.  But that's ok. */
  124. tmp = (char*) PR_Malloc(size+1);
  125. /* Copy it over */
  126. for(i=0, j=0; i < size; i++) {
  127. if(str[i]=='"') {
  128. continue;  /* skip un-escaped quotes */
  129. } else if(str[i]=='\') {
  130. ++i;       /* escaped character. skip the backslash */
  131. }
  132. tmp[j++] = str[i];
  133. }
  134. tmp[j] = '';
  135. return tmp;
  136. }