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

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

?? cfg.c

?? 嵌入式linux下液晶編程院代碼, 可以在LINUX2.4內(nèi)核下運行
?? C
字號:
/* $Id: cfg.c,v 1.16 2003/09/09 06:54:43 reinelt Exp $ * * config file stuff * * Copyright 1999, 2000 by Michael Reinelt (reinelt@eunet.at) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * * $Log: cfg.c,v $ * Revision 1.16  2003/09/09 06:54:43  reinelt * new function 'cfg_number()' * * Revision 1.15  2003/08/24 05:17:58  reinelt * liblcd4linux patch from Patrick Schemitz * * Revision 1.14  2003/08/14 03:47:40  reinelt * remove PID file if driver initialisation fails * * Revision 1.13  2003/02/22 07:53:10  reinelt * cfg_get(key,defval) * * Revision 1.12  2001/03/09 12:14:24  reinelt * * minor cleanups * * Revision 1.11  2001/03/08 15:25:38  ltoetsch * improved exec * * Revision 1.10  2001/03/07 18:10:21  ltoetsch * added e(x)ec commands * * Revision 1.9  2000/08/10 09:44:09  reinelt * * new debugging scheme: error(), info(), debug() * uses syslog if in daemon mode * * Revision 1.8  2000/07/31 06:46:35  reinelt * * eliminated some compiler warnings with glibc * * Revision 1.7  2000/04/15 11:13:54  reinelt * * added '-d' (debugging) switch * added several debugging messages * removed config entry 'Delay' for HD44780 driver * delay loop for HD44780 will be calibrated automatically * * Revision 1.6  2000/04/03 04:46:38  reinelt * * added '-c key=val' option * * Revision 1.5  2000/03/28 07:22:15  reinelt * * version 0.95 released * X11 driver up and running * minor bugs fixed * * Revision 1.4  2000/03/26 20:00:44  reinelt * * README.Raster added * * Revision 1.3  2000/03/26 19:03:52  reinelt * * more Pixmap renaming * quoting of '#' in config file * * Revision 1.2  2000/03/10 17:36:02  reinelt * * first unstable but running release * * Revision 1.1  2000/03/10 11:40:47  reinelt * *** empty log message *** * * Revision 1.3  2000/03/07 11:01:34  reinelt * * system.c cleanup * * Revision 1.2  2000/03/06 06:04:06  reinelt * * minor cleanups * *//*  * exported functions: * * cfg_init (source) *   read configuration from source *   returns  0 if successful *   returns -1 in case of an error *  * cfg_source (void) *   returns the file the configuration was read from *  * cfg_cmd (arg) *   allows us to overwrite entries in the  *   config-file from the command line. *   arg is 'key=value' *   cfg_cmd can be called _before_ cfg_read() *   returns 0 if ok, -1 if arg cannot be parsed * * cfg_get (key, defval)  *   return the a value for a given key  *   or <defval> if key does not exist * */#include <stdlib.h>#include <stdio.h>#include <string.h>#include <ctype.h>#include <errno.h>#include <unistd.h>#include <sys/stat.h>#include "debug.h"#include "cfg.h"typedef struct {  char *key;  char *val;  int lock;} ENTRY;static char  *Config_File=NULL;static ENTRY *Config=NULL;static int   nConfig=0;static char *strip (char *s, int strip_comments){  char *p;    while (isblank(*s)) s++;  for (p=s; *p; p++) {    if (*p=='"') do p++; while (*p && *p!='\n' && *p!='"');    if (*p=='\'') do p++; while (*p && *p!='\n' && *p!='\'');    if (*p=='\n' || (strip_comments && *p=='#' && (p==s || *(p-1)!='\\'))) {      *p='\0';      break;    }  }  for (p--; p>s && isblank(*p); p--) *p='\0';  return s;}static char *dequote (char *string){  char *s=string;  char *p=string;    do {    if (*s=='\\' && *(s+1)=='#') {      *p++=*++s;    } else {      *p++=*s;    }  } while (*s++);    return string;}static void cfg_add (char *key, char *val, int lock){  int i;  for (i=0; i<nConfig; i++) {    if (strcasecmp(Config[i].key, key)==0) {      if (Config[i].lock>lock) return;      if (Config[i].val) free (Config[i].val);      Config[i].val=dequote(strdup(val));      return;    }  }  nConfig++;  Config=realloc(Config, nConfig*sizeof(ENTRY));  Config[i].key=strdup(key);  Config[i].val=dequote(strdup(val));  Config[i].lock=lock;}int l4l_cfg_cmd (char *arg){  char *key, *val;  char buffer[256];    strncpy (buffer, arg, sizeof(buffer));  key=strip(buffer, 0);  for (val=key; *val; val++) {    if (*val=='=') {      *val++='\0';      break;    }  }  if (*key=='\0' || *val=='\0') return -1;  cfg_add (key, val, 1);  return 0;}char *l4l_cfg_get (char *key, char *defval){  int i;  for (i=0; i<nConfig; i++) {    if (strcasecmp(Config[i].key, key)==0) {      return Config[i].val;    }  }  return defval;}int l4l_cfg_number (char *key, int defval, int min, int max, int *value) {    char *s, *e;    s=cfg_get(key, NULL);  if (s==NULL) {    *value=defval;    return 0;  }    *value=strtol(s, &e, 0);  if (*e!='\0') {    error ("bad %s entry '%s' in %s", key, s, cfg_source());    return -1;  }    if (*value<min) {    error ("bad %s value '%s' in %s, minimum is %d", key, s, cfg_source(), min);    return -1;  }    if (*value>max) {    error ("bad %s value '%s' in %s, maximum is %d", key, s, cfg_source(), max);    return -1;  }  return 0;}static int check_cfg_source(char *file){  /* as passwords and commands are stored in the config file,   * we will check that:   * - file is a normal file (or /dev/null)   * - file owner is owner of program   * - file is not accessible by group   * - file is not accessible by other   */  struct stat stbuf;  uid_t uid, gid;  int error;  uid = geteuid();  gid = getegid();    if (stat(file, &stbuf) == -1) {    error ("stat(%s) failed: %s", file, strerror(errno));    return -1;  }  if (S_ISCHR(stbuf.st_mode) && strcmp(file, "/dev/null") == 0)    return 0;    error=0;  if (!S_ISREG(stbuf.st_mode)) {    error ("security error: '%s' is not a regular file", file);    error=-1;  }  if (stbuf.st_uid != uid || stbuf.st_gid != gid) {    error ("security error: owner and/or group of '%s' don't match", file);    error=-1;  }  if (stbuf.st_mode & S_IRWXG || stbuf.st_mode & S_IRWXO) {    error ("security error: group or other have access to '%s'", file);    error=-1;  }  return error;}int l4l_cfg_init (char *file){  FILE *stream;  char buffer[256];  char *line, *p, *s;  if (check_cfg_source(file) == -1) {    error("config file '%s' is insecure, aborting", file);    return -1;  }    stream=fopen (file, "r");  if (stream==NULL) {    error ("open(%s) failed: %s", file, strerror(errno));    return -1;  }  if (Config_File) free (Config_File);  Config_File=strdup(file);      while ((line=fgets(buffer,256,stream))!=NULL) {    if (*(line=strip(line, 1))=='\0') continue;    for (p=line; *p; p++) {      if (isblank(*p)) {	*p++='\0';	break;      }    }    p=strip(p, 1);    if (*p) for (s=p; *(s+1); s++);    else s=p;    if (*p=='"' && *s=='"') {      *s='\0';      p++;    }    else if (*p=='\'' && *s=='\'') {      *s='\0';      p++;    }    cfg_add (line, p, 0);  }  fclose (stream);  return 0;}char *l4l_cfg_source (void){  if (Config_File)    return Config_File;  else    return "";}int   (*cfg_init)   (char *source)                 = l4l_cfg_init;char *(*cfg_source) (void)                         = l4l_cfg_source;int   (*cfg_cmd)    (char *arg)                    = l4l_cfg_cmd;char *(*cfg_get)    (char *key, char *defval)      = l4l_cfg_get;int   (*cfg_number) (char *key, int   defval, 		     int min, int max, int *value) = l4l_cfg_number;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲国产专区| 亚洲美女屁股眼交3| 97精品久久久午夜一区二区三区| 亚洲一区二区三区在线播放| 久久亚洲影视婷婷| 色天使色偷偷av一区二区| 六月丁香综合在线视频| 亚洲男人电影天堂| 精品国产乱码久久久久久1区2区 | 亚洲一级片在线观看| 精品免费国产一区二区三区四区| 91成人在线观看喷潮| 免费在线观看不卡| 亚洲一区二区三区四区五区黄| 久久久久久**毛片大全| 9191成人精品久久| 91麻豆蜜桃一区二区三区| 久久99国产精品尤物| 日韩精品亚洲专区| 亚洲综合一区二区三区| 麻豆91在线播放免费| 天堂午夜影视日韩欧美一区二区| 1区2区3区精品视频| 国产亚洲欧美日韩日本| 日韩欧美国产系列| 欧美精品一二三| 色美美综合视频| 99久久er热在这里只有精品15 | 91精品91久久久中77777| 成人av综合在线| 国产精品一线二线三线精华| 久久国产尿小便嘘嘘| 日韩精品一二三四| 日韩高清一区在线| 日韩精品久久理论片| 亚洲国产精品久久艾草纯爱| 亚洲精品国产a| 亚洲裸体xxx| 亚洲天堂精品视频| 亚洲丝袜精品丝袜在线| 亚洲激情综合网| 亚洲美女视频在线观看| 亚洲自拍欧美精品| 亚洲精品国产无套在线观| 亚洲欧美视频在线观看视频| 亚洲精品免费在线播放| 亚洲男人天堂av| 色综合一区二区三区| 99精品视频在线观看| 不卡的av网站| 91美女蜜桃在线| 欧美性欧美巨大黑白大战| 在线观看日韩高清av| 欧美午夜片在线观看| 欧美乱熟臀69xxxxxx| 在线播放/欧美激情| 精品免费99久久| 国产精品亲子伦对白| 国产精品乱码一区二区三区软件| 国产精品国模大尺度视频| 亚洲毛片av在线| 爽好久久久欧美精品| 麻豆精品在线观看| 国产一区不卡视频| 99re这里只有精品视频首页| 欧日韩精品视频| 日韩一区二区影院| 久久久久9999亚洲精品| 亚洲人成在线观看一区二区| 亚洲精品成人少妇| 性感美女极品91精品| 韩国理伦片一区二区三区在线播放 | 国产精品三级av在线播放| 亚洲欧洲色图综合| 天天亚洲美女在线视频| 国产麻豆精品视频| 91美女蜜桃在线| 日韩一区二区电影在线| 欧美精彩视频一区二区三区| 一区二区三区日韩欧美精品| 美女www一区二区| 久久精品国产亚洲aⅴ| 成人免费视频一区| 欧美夫妻性生活| 国产精品色哟哟| 日韩国产成人精品| aaa亚洲精品| 日韩一区二区麻豆国产| 国产精品久久久久一区| 日韩电影免费在线观看网站| 9i看片成人免费高清| 69堂国产成人免费视频| 中文字幕视频一区二区三区久| 日欧美一区二区| 成人中文字幕在线| 日韩一卡二卡三卡四卡| 亚洲精品国产无天堂网2021| 精彩视频一区二区三区| 欧美在线制服丝袜| 国产欧美日韩不卡免费| 水野朝阳av一区二区三区| 99re免费视频精品全部| 久久综合色鬼综合色| 亚洲一区二三区| 成人av网站在线观看| 欧美成人精品高清在线播放| 亚洲人快播电影网| 成人小视频在线| 2019国产精品| 偷拍一区二区三区四区| 97se狠狠狠综合亚洲狠狠| 久久午夜电影网| 日韩精品欧美精品| 欧美亚日韩国产aⅴ精品中极品| 国产精品久久久久久久久果冻传媒 | 7777精品伊人久久久大香线蕉的 | 国产三级三级三级精品8ⅰ区| 日韩精品久久久久久| 色系网站成人免费| 国产精品午夜久久| 国产精品资源网| 日韩欧美一二三四区| 免费人成在线不卡| 精品视频在线免费观看| 亚洲精品久久久久久国产精华液| eeuss鲁一区二区三区| 久久久久久久久久久久电影| 久久精品国产网站| 欧美一区午夜精品| 手机精品视频在线观看| 欧美日韩在线直播| 亚洲影院免费观看| 在线日韩一区二区| 一区二区视频免费在线观看| 一道本成人在线| 亚洲精品五月天| 日本久久一区二区三区| 亚洲欧美视频在线观看视频| 91啪亚洲精品| 一区二区三区鲁丝不卡| 色婷婷精品大在线视频| 亚洲精品午夜久久久| 欧美日韩亚洲不卡| 天天综合天天综合色| 欧美一区二区三区四区五区| 轻轻草成人在线| 日韩精品资源二区在线| 久久99国产精品免费网站| 久久夜色精品一区| 成人av在线电影| 亚洲男女毛片无遮挡| 91成人在线精品| 青青草视频一区| 久久精品亚洲国产奇米99| gogogo免费视频观看亚洲一| 亚洲乱码国产乱码精品精98午夜 | 成av人片一区二区| 亚洲乱码国产乱码精品精可以看 | 欧美高清视频不卡网| 日本不卡一区二区| 精品日产卡一卡二卡麻豆| 国产成人精品一区二区三区四区 | 国产一区久久久| 国产精品久久久一本精品| 日本黄色一区二区| 蜜桃视频在线观看一区二区| 久久久99精品免费观看不卡| av资源站一区| 亚洲国产精品人人做人人爽| 制服丝袜激情欧洲亚洲| 国产福利一区二区| 亚洲三级在线免费| 91精品国产色综合久久不卡蜜臀| 国产精品小仙女| 亚洲一区国产视频| 久久久久9999亚洲精品| 91在线视频在线| 免费成人在线网站| 国产精品美女久久久久aⅴ| 欧美体内she精高潮| 韩国三级在线一区| 一区二区三区欧美| 精品国产髙清在线看国产毛片| 成人激情小说网站| 日日骚欧美日韩| 中文字幕亚洲一区二区va在线| 欧美美女网站色| 国产99久久久精品| 首页欧美精品中文字幕| 国产精品免费网站在线观看| 91精品国产美女浴室洗澡无遮挡| 成人自拍视频在线观看| 免费人成精品欧美精品| 亚洲男帅同性gay1069| 久久亚区不卡日本| 在线不卡一区二区| 99久久国产综合精品麻豆| 狠狠色伊人亚洲综合成人| 亚洲最快最全在线视频| 中文文精品字幕一区二区|