亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cf.c

?? The configuration file reading samples for ARM project development. Including the sample .conf files
?? C
字號(hào):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "cf.h"

#define MAX_CONFIG_FILES            32
#define BUF_LENGTH                1024
#define CF_EMPTY_SLOT               -1

#define BEFORE_START                 0
#define EXAM_KEYWORD_APPEAR          1    /* examine keyword appearing in the line */
#define EXAM_BEGIN_APPEAR            2    /* examine BEGIN in the line             */
#define EXAM_END_APPEAR              3    /* examine END in the line               */
#define EXAM_CONTENT_AFTER_BEGIN     4    /* examine content line just leaving BEGIN */
#define EXAM_CONTENT_AS_KEYW_IS_NULL 5    /* examine content line of the current file position as the passed keyword is NULL */
#define SKIP_CURRENT_SECTION         6    /* skip the current section in case the keyword is not matched */
#define EXAM_END_TO_MATCH_BEGIN      7    /* examine END to match BEGIN within the skipped section */

#define CF_TRUE                      1
#define CF_FALSE                     0

typedef struct
{
  long fd;                        /* file descriptor */
  int fpos;                      /* file current position */
} cf_t;

static cf_t cf_array[MAX_CONFIG_FILES];
static int cf_array_init = 0;

static FILE * Config_fptr = (FILE *)NULL;


static int cf_new_index(long fd, int fpos);
static int cf_get_env_value(char *cptr,int buf_len,char *keyword, int *error);
char *cf_get_line(FILE *fptr, int *nofwords, int *error);
static int cf_match_token(char *cptr,char *text);

int CF_open(char *cf_path);
int CF_read(int cf_id, char *keyword, char *buf, int buf_len);
int CF_close(int cf_id);


/*
 * Open a configuration file
 *
 * flag indicator is used to check syntax of the  config file
 *              1 : EXAM_KEYWORD_APPEAR
 *              2 : EXAM_BEGIN_APPEAR
 *              3 : EXAM_END_APPEAR
 */

int
CF_open(char *cf_path)
{
  char *cptr;
  int nofwords = 0;
  int fpos, slot_index, err, flag = BEFORE_START, forever = 1 ;
  long fd;


  Config_fptr = fopen(cf_path,"r");

  if (Config_fptr == (FILE *)NULL)
    return (CF_NOT_FOUND);

  while (forever)
    {
       if ((cptr = cf_get_line(Config_fptr, &nofwords, &err)) == NULL)
         {
            if (err != CF_NOT_FOUND)
              {
                 fclose(Config_fptr);
                 return(err);
              }
            break;
         }
       if (flag == BEFORE_START)
           flag = EXAM_KEYWORD_APPEAR;          /* at beginning, assume keyword appear */

       switch (flag)
         {
            case (EXAM_KEYWORD_APPEAR):     /* expect KEYWORD appear */
              if (nofwords == 1)     /* one word in the line */
                {
			if (cf_match_token(cptr,"BEGIN") || cf_match_token(cptr,"END"))
                     {
                        fclose(Config_fptr);
                        return(CF_ERR_WITHOUT_KEYW);
                     }
                   flag = EXAM_BEGIN_APPEAR;         /*  assume BEGIN appear */
                }
              break;
            case (EXAM_BEGIN_APPEAR):       /* expect BEGIN appear */
              if (nofwords == 1)
                {
                   if (!cf_match_token(cptr,"BEGIN"))
                     {
                        fclose(Config_fptr);
                        return(CF_ERR_WITHOUT_BEGIN);
                     }
                   flag = EXAM_END_APPEAR;
                }
              else
                {
                   fclose(Config_fptr);
                   if (cf_match_token(cptr,"BEGIN"))
                     return(CF_ERR_BEGIN_DATA);
                   else
                     return(CF_ERR_WITHOUT_BEGIN);
                }
              break;
            case (EXAM_END_APPEAR):       /* expect END appear */
              if (nofwords == 1)
                {
                   if (cf_match_token(cptr,"END"))
                     flag = EXAM_KEYWORD_APPEAR;
                   if (cf_match_token(cptr,"BEGIN"))
                     {
                        fclose(Config_fptr);
                        return(CF_ERR_WITHOUT_END);
                     }
                }
         }
    }

   /*  handle syntax error
    *  normal case : flag = EXAM_KEYWORD_APPEAR; otherwise syntax error occurs
    */
  switch (flag)
    {
       case (BEFORE_START):
         fclose(Config_fptr);
         return(CF_NOT_FOUND);

       case (EXAM_BEGIN_APPEAR):
         fclose(Config_fptr);
         return(CF_ERR_WITHOUT_BEGIN);

       case (EXAM_END_APPEAR):
         fclose(Config_fptr);
         return(CF_ERR_WITHOUT_END);
    }


  fd = (long)Config_fptr;
  fpos = -1;
  slot_index = cf_new_index(fd,fpos);

  /* if no. of slots used reaches maximum, it returns error CF_ERR_SLOT_TOO_MANY.
   * otherwise one slot index is assigned to the CF opened
   */

  if (slot_index == CF_ERR_SLOT_TOO_MANY)
    {
       fclose(Config_fptr);
       return(CF_ERR_SLOT_TOO_MANY);
    }
  return (slot_index);
}


/*
 *  read a configuration file
 *  output : CF_OK - successfully read and buf contains the result
 *           otherwise returns error code
 */

int
CF_read(int cf_id, char *keyw, char *buf, int buf_len)
{
   int forever=1, nofwords=0, err=0, flag;
   char *cptr, *keyword;

   if (cf_id >= MAX_CONFIG_FILES || cf_id < 0)
     return (CF_ERR_PARAMETER);

   if (buf == NULL)
     return (CF_ERR_PARAMETER);

   if (buf_len > BUF_LENGTH || buf_len < 2 || buf_len == 0)
     return (CF_ERR_PARAMETER);

   Config_fptr = (FILE *)cf_array[cf_id].fd;
   keyword = keyw;

   if (keyword != NULL)
     {
        if (fseek(Config_fptr,0L,0))
          return (CF_ERR_FILE_POS);
        flag = EXAM_KEYWORD_APPEAR;
     }
   else
     {
        if (cf_array[cf_id].fpos == -1)
          return (CF_NOT_FOUND);

        if (fseek(Config_fptr, cf_array[cf_id].fpos, 0))
          return (CF_ERR_FILE_POS);
        flag = EXAM_CONTENT_AS_KEYW_IS_NULL;
     }


   while (forever)
     {
        if ((cptr = cf_get_line(Config_fptr, &nofwords, &err)) == NULL)
          return (err);

        switch (flag)
          {
             case (EXAM_KEYWORD_APPEAR):                    /* for matching KEYWORD */
               if (cf_match_token(cptr,keyword))
                 {
                    if (nofwords == 1)
                      {
                         flag = EXAM_BEGIN_APPEAR;
                         break;
                      }

                    if (cf_get_env_value(cptr,buf_len,keyword, &err))
                      {
                         strcpy(buf,cptr);
                         cf_array[cf_id].fpos = -1;
                         return (CF_OK);
                      }
                    else
                      return (err);
                 }
               else
                 {
                    if (nofwords == 1)
                      flag = SKIP_CURRENT_SECTION;     /* skip section */
                    break;
                 }
             case (EXAM_BEGIN_APPEAR):                       /* expect  BEGIN */
               if (cf_match_token(cptr,"BEGIN"))
                 {
                    flag = EXAM_CONTENT_AFTER_BEGIN;
                    break;
                 }
               return (CF_ERR_WITHOUT_BEGIN);

             case (EXAM_CONTENT_AFTER_BEGIN):                       /* just leaving BEGIN */
               if (cf_match_token(cptr,"END"))
                 return (CF_ERR_WITHOUT_DATA);

               if (cf_get_env_value(cptr,buf_len,keyword, &err))
                 {
                    strcpy(buf,cptr);
                    cf_array[cf_id].fpos = (int)ftell(Config_fptr);
                    return (CF_OK);
                 }
               else
                 return (err);

             case (EXAM_CONTENT_AS_KEYW_IS_NULL):                    /* As Keyword is passed as NULL */
               if (cf_match_token(cptr,"END"))
                 {
                    cf_array[cf_id].fpos = -1;
                    return (CF_NOT_FOUND);
                 }

               if (cf_get_env_value(cptr,buf_len,keyword, &err))
                 {
                    strcpy(buf,cptr);
                    cf_array[cf_id].fpos = (int)ftell(Config_fptr);
                    return (CF_OK);
                 }
               else
                 return (err);

             case (SKIP_CURRENT_SECTION):                   /* skip the section */
               if (cf_match_token(cptr,"BEGIN"))
                 {
                    flag = EXAM_END_TO_MATCH_BEGIN;
                    break;
                 }
               else
                 return (CF_ERR_WITHOUT_END);

             case (EXAM_END_TO_MATCH_BEGIN):                   /* jump to the next section for matching the KEYWORD */
               if (cf_match_token(cptr,"END"))
                 flag = EXAM_KEYWORD_APPEAR;
         }
     }
   return (CF_ERR_WITHOUT_DATA);
}



/*
 * close a configuration file
 */

int
CF_close(int cf_id)
{
  Config_fptr = (FILE *)cf_array[cf_id].fd;
  if (fclose(Config_fptr) == EOF)
     return (CF_ERR_CLOSE);

  Config_fptr = NULL;
  return (CF_OK);
}


/*
 *  Replace environment variable by its content in the input string
 *  Truncate the instring with the keyword and any spaces
 */

static int
cf_get_env_value(char *instring,int buf_len,char *keyword, int *err)
{
  int i, startvalue=0, pre_len, env_len, post_len, tot_len;
  char *dollar_bracket, *closing_bracket, *pre_str, *env_str, *env_val, *post_str;
  char tmp_line[BUF_LENGTH], env_cpy[BUF_LENGTH];

  if (keyword != NULL)
    {
       if (strncmp(instring,keyword,strlen(keyword)) == 0)
         startvalue = strlen(keyword);
    }

  for (i=startvalue; i<buf_len; i++)
    {
       if ( *(instring + i) != ' ' && *(instring + i) != '\t')
          break;
    }

  strcpy(instring,instring + i);

  while ((dollar_bracket = strstr(instring,"$(")) != NULL)
    {
       pre_str = instring;
       env_str = dollar_bracket + 2;

       if ((closing_bracket = strchr(env_str, ')')) == NULL)
         {
            *err = CF_ERR_SYNTAX_ENV;        /* bad enviornment valuable syntax format */
            return (CF_FALSE);
         }

       post_str = closing_bracket + 1;

       strncpy(env_cpy, env_str, (int) (closing_bracket - env_str));
       env_cpy[closing_bracket - env_str] = '\0';

       if ((env_val = getenv(env_cpy)) == (char *)NULL)
         {
            *err = CF_ERR_ENV_VAR;         /* no env variable set */
            return (CF_FALSE);
         }

       pre_len = (int) (dollar_bracket - pre_str);
       env_len = strlen(env_val);
       post_len = strlen(post_str);

       tot_len = pre_len + env_len + post_len + 1;
       if (tot_len > buf_len)
         {
            *err = CF_ERR_LINE_TOO_LONG;
            return (CF_FALSE);
         }
       *dollar_bracket = '\0';
       sprintf(tmp_line, "%s%s%s", pre_str,env_val,post_str);
       strncpy(instring, tmp_line, buf_len);
    }
  for (i=0; i<strlen(instring); i++)
    if (*(instring + i) == '\n')
      {
         *(instring + i) = '\0';
         break;
      }
  return (CF_TRUE);
}


/*
 * Function used to find whether the line contains the text pattern or not
 */

static int
cf_match_token(char *cptr, char *text)
{
  if (strncmp(cptr, text, strlen(text)) == 0)
     return (CF_TRUE);
  return (CF_FALSE);
}


/*
 * Get next free item index from the cf_array
 */

static int
cf_new_index(long fd, int fpos)
{
  int i;

  if (!cf_array_init)
    {
       for (i=0; i<MAX_CONFIG_FILES; i++)
          cf_array[i].fd = CF_EMPTY_SLOT;
       cf_array_init = 1;
    }

  for (i=0; i<MAX_CONFIG_FILES; i++)
     if (cf_array[i].fd == CF_EMPTY_SLOT)
       {
          cf_array[i].fd = fd;
          cf_array[i].fpos = fpos;
          return (i);
       }
  return (CF_ERR_SLOT_TOO_MANY);
}


/*
 *  Function to get one line from the config file, ignoring # remark line
 *  return values : pointer to char; the line content
 *  output parameters : nofwords ; no of words in the line
 *                      err ; error code
 */

char *
cf_get_line(FILE *fptr, int *nofwords, int *err)
{
  static char buf[BUF_LENGTH + 2];
  char *instring, c, previous=' ';
  int i, blank_first = 0, nofblanks=0, remflag;
  *nofwords = 0;

  instring = buf;
  while (fgets(instring, BUF_LENGTH, fptr) != NULL)
    {
       remflag = 0;
       for (i = 0; i < strlen(instring)-1; i++)
         {
           c = instring [i];
           if (c == ' ' || c == '\t')
             {
                if (i == 0)
                  blank_first = 1;
             }
           else if (c == '#' && *nofwords == 0 && (previous == ' ' || previous == '\t'))
             {
                blank_first = nofblanks = 0;
                remflag = 1;
                *nofwords = 0;
                break;
             }
           else
             {
               if (nofblanks == 0 && blank_first)
                 nofblanks = i;
               if (previous == ' ' || previous == '\t')
                 *nofwords = *nofwords + 1;
             }
           previous = c;
         }
       if (!remflag)
         {
           instring += nofblanks;
           return (instring);
         }
    }
  *err = CF_NOT_FOUND;
  return (NULL);
}













?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性生交大片免费看在线播放| 国产成人在线看| 久久久久久亚洲综合影院红桃| 成人午夜电影小说| 青青草精品视频| 国产精品久久久久久久久免费丝袜 | 伊人性伊人情综合网| 日韩一区二区高清| 99re6这里只有精品视频在线观看| 日本aⅴ亚洲精品中文乱码| 国产精品私人自拍| 精品日韩成人av| 欧美日韩综合在线免费观看| 成人三级在线视频| 久久国产精品72免费观看| 一区二区免费视频| 国产女人18水真多18精品一级做| 日韩欧美一区在线观看| 在线精品视频一区二区三四| 成人高清av在线| 国产一区二区视频在线| 秋霞影院一区二区| 国产一区二区精品久久99| 日本视频一区二区三区| 一个色在线综合| 亚洲欧洲日韩av| 国产香蕉久久精品综合网| 精品久久久久99| 91精品国产免费| 欧美日韩精品系列| 欧美在线观看一二区| 99精品视频一区二区三区| 粉嫩欧美一区二区三区高清影视| 久久精品国产精品亚洲红杏| 日本视频免费一区| 午夜精品福利一区二区蜜股av| 国产成人h网站| 欧美丝袜丝nylons| 国产宾馆实践打屁股91| 精品一二三四区| 久草这里只有精品视频| 免费高清在线视频一区·| 日韩av一区二区三区四区| 日韩精品一区第一页| 婷婷综合久久一区二区三区| 天涯成人国产亚洲精品一区av| 亚洲成人免费看| 日本成人中文字幕| 看电视剧不卡顿的网站| 精品系列免费在线观看| 经典三级在线一区| 精品制服美女丁香| 国产精品 欧美精品| 国产99久久久国产精品潘金网站| 国产91色综合久久免费分享| 成人一区二区视频| 粗大黑人巨茎大战欧美成人| 99精品视频在线观看| 91视频国产观看| 欧美三片在线视频观看 | 精品在线免费视频| 国产精品羞羞答答xxdd| 成人免费看片app下载| 99久久夜色精品国产网站| 91麻豆国产香蕉久久精品| 欧美影院午夜播放| 欧美一区二区三区在线视频| 久久看人人爽人人| 国产精品电影一区二区三区| 亚洲国产日产av| 麻豆精品视频在线观看视频| 粉嫩绯色av一区二区在线观看| 99精品黄色片免费大全| 欧美精品日日鲁夜夜添| 欧美va亚洲va在线观看蝴蝶网| 亚洲国产精品av| 亚洲一级片在线观看| 男女视频一区二区| 成人a区在线观看| 欧美日韩国产a| 精品国免费一区二区三区| 亚洲欧洲色图综合| 日本少妇一区二区| a4yy欧美一区二区三区| 欧美日韩日日摸| 久久精品视频在线看| 一级日本不卡的影视| 国产在线播精品第三| 色婷婷综合久久| xf在线a精品一区二区视频网站| 国产精品综合二区| 一本色道综合亚洲| 欧美精品一区二区久久婷婷| 亚洲精品久久久蜜桃| 激情文学综合插| 欧美在线观看禁18| 国产午夜亚洲精品午夜鲁丝片| 午夜精品123| 成人app软件下载大全免费| 91精品欧美福利在线观看| 日韩一区欧美一区| 极品销魂美女一区二区三区| 欧美日韩一区二区欧美激情| 中文字幕高清一区| 久久99精品国产.久久久久久| 91成人免费电影| 国产精品久久久久永久免费观看| 免费观看一级欧美片| 欧美在线视频不卡| 18成人在线观看| 国产麻豆成人精品| 欧美一级理论性理论a| 亚洲综合区在线| 成人av免费在线观看| 精品处破学生在线二十三| 午夜不卡av免费| 日本精品裸体写真集在线观看| 国产欧美一区二区精品性| 免费在线观看成人| 欧美日高清视频| 亚洲一区二区中文在线| 99精品国产热久久91蜜凸| 国产午夜精品福利| 国产一区二区不卡在线| 日韩欧美国产电影| 日本在线不卡视频| 9191国产精品| 午夜视频在线观看一区二区三区| 91传媒视频在线播放| 亚洲欧美一区二区三区孕妇| 99久久婷婷国产综合精品电影| 中文字幕高清一区| 成人av动漫在线| 国产精品福利av| 99国产精品久久久久| 中文字幕在线观看一区二区| 成人性生交大片免费看视频在线 | 国产精品色噜噜| 国产·精品毛片| 欧美国产一区在线| 国产成a人亚洲精品| 中文字幕成人在线观看| 粉嫩蜜臀av国产精品网站| 国产精品日日摸夜夜摸av| 成人av在线资源网站| 国产精品久99| 日本韩国视频一区二区| 一区二区三区日韩| 欧美日韩一级黄| 日韩精品电影在线观看| 欧美成人女星排行榜| 激情五月播播久久久精品| 久久九九久精品国产免费直播| 国产成人自拍高清视频在线免费播放| 国产色产综合色产在线视频| 成人av电影在线观看| 尤物视频一区二区| 欧美日韩视频一区二区| 麻豆中文一区二区| 久久影院视频免费| 成人av中文字幕| 亚洲一区二区精品久久av| 7777精品伊人久久久大香线蕉完整版| 日韩**一区毛片| 国产亚洲综合在线| 99精品视频在线播放观看| 亚洲va国产va欧美va观看| 精品国产乱码91久久久久久网站| 精品亚洲免费视频| 国产精品高潮呻吟| 欧美日韩另类国产亚洲欧美一级| 久久国产三级精品| 欧美国产一区在线| 欧美三级一区二区| 国产一区二区三区电影在线观看 | 免费成人在线影院| 中文一区二区在线观看| 91福利区一区二区三区| 老司机精品视频在线| 国产精品久久看| 日韩视频一区二区在线观看| 成人精品免费视频| 日韩精品福利网| 国产精品久久久久影院色老大| 欧美日韩国产成人在线免费| 成人午夜精品在线| 丝袜亚洲另类丝袜在线| 欧美精彩视频一区二区三区| 欧美视频你懂的| 国产iv一区二区三区| 亚洲成人免费在线| 欧美激情自拍偷拍| 欧美一区二区观看视频| 成人国产精品视频| 另类小说一区二区三区| 一区二区在线观看不卡| 国产日本一区二区| 制服.丝袜.亚洲.另类.中文| 91丨porny丨国产| 国产一区二区三区香蕉|