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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ini.c

?? 其他人不需帳號就可自由下載此源碼 其他人不需帳號就可自由下載此源碼
?? C
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

#include "ini.h"

#define INI_MAX_LENGTH 1024

static int  split_keyval(char *line, char **key, char **val);
static int  read_line(FILE *fp, char *buf, int maxlen);

static int  read_file(FILE *fp, INI_FILE *fb);
static void free_file(INI_FILE *fb);

static int  key_val(INI_FILE   *fb, const char *sec, const char *key, char *buf, int len);
static int  write_file(FILE *fp, INI_FILE *fb);
static int  set_key_val(INI_FILE *fb, char *sec, char *key, char *buf);


static char *trim(char *buf);
static char *ltrim(char *buf);
static char *rtrim(char *buf);
static void print_file(INI_FILE *fb);


/*

讀取鍵值

*/
int ReadConfigKey(char *fname, char *sec, char *key, char *val) {
	
	FILE *fp;
	INI_FILE fb;

	int rb = 0;
	if ((fp = fopen(fname, "rb")) != NULL) {
		if (read_file(fp, &fb)) {
			if (key_val(&fb, sec, key, val, sizeof(val))) {
				rb = 1;
			}
		}
		fclose(fp);
		free_file(&fb);
	}
	return rb;
}

/*

修改鍵值

*/
int WriteConfigKey(char *fname, char *sec, char *key, char *val) {
	
	int rb = 0;
	FILE *fp;
	INI_FILE fb;
	
	if ((fp = fopen(fname, "rb")) != NULL) {
		if (read_file(fp, &fb)) {
			fclose(fp);
			if (set_key_val(&fb, sec, key, val)) {
				if ((fp = fopen(fname, "wb")) != NULL) {
					if (write_file(fp, &fb)) {
						rb = 1;
					}
				}      
			}
		} 
		fflush(fp);
		fclose(fp);    
		free_file(&fb);
	}
	return rb;
}

/**
* 
* 讀取配置文件的內容到內存,并生成鏈表,以便操作如果讀取成
* 功則返回1否則返回0,注意該過程沒有對文件作任何修改的
* 操作,只是把文件內容按照段以及一行一行的格式讀入內存
*/
static int read_file(FILE *fp, INI_FILE *fb) {
	
	int n;
	INI_SECTION *cur_sec,  *pre_sec;
	INI_KEY_VALUE *cur_key, *pre_key;
	char buf[INI_MAX_LENGTH + 1], tmp[INI_MAX_LENGTH + 1];
	char *bp, *key, *val;

	fb->sections = NULL;
	fb->keyval   = NULL;
	pre_sec = NULL;
	pre_key = NULL;
	while(1) {
		n = read_line(fp, buf, INI_MAX_LENGTH);
		if (n < -1 ) return 0;

		//讀取文件結束
		if (n < 0) return 1;
		strcpy(tmp, buf);
		n = (int)strlen(trim(buf));
		if( n > 2 && ((buf[0] == '[' && buf[n-1] != ']') || 
			(buf[0] == '{' && buf[n-1] != '}'))) { //非法段
				return 0;
		}
		bp = (char *)calloc(n + 1, 1);
		if (bp == NULL) {
			return 0;
		}
		strcpy(bp, tmp);

		if (n > 2 && (buf[0] == '[' || buf[0] == '{')) { //如果是段
			cur_sec = (INI_SECTION *)calloc(sizeof(INI_SECTION), 1);
			if (cur_sec == NULL) {
				return 0;
			} else {
				cur_sec->keyval = NULL;
				cur_sec->next = NULL;
				cur_sec->line = bp;
				if (fb->sections == NULL) {
					fb->sections = cur_sec;
				} else {
					pre_sec->next = cur_sec;
				}
				pre_sec = cur_sec;
				//新的一個段開始需要置NULL
				pre_key = NULL;
			}
		} else { //如果是鍵值或空行以及說明信息
			//檢查文件內容的合法性
			if (strlen(trim(tmp)) > 0) {
				if (tmp[0] != ';') {
					if (split_keyval(tmp, &key, &val)) {
						if (strlen(trim(key)) == 0) {
							return 0;
						} 
					}
				}
			}
			cur_key = (INI_KEY_VALUE *)calloc(sizeof(INI_KEY_VALUE), 1);
			if (cur_key == NULL) {
				return 0;
			}
			cur_key->next = NULL;
			cur_key->line = bp;
			if (fb->sections == NULL) { //如果段為空
				if (pre_key == NULL) {    //如果還沒有關鍵字(最前面的配置信息可以沒有段名稱)
					fb->keyval = cur_key;
				} else {
					pre_key->next = cur_key;
				}
			} else {//段不為空,加入到
				if (pre_key == NULL) {
					pre_sec->keyval = cur_key;
				} else {
					pre_key->next = cur_key;
				}
			}
			pre_key = cur_key;
		}
	}
	return 1;
}


/*

把配置信息寫入到文件中

*/
static int write_file(FILE *fp, INI_FILE *fb) {
	
	INI_SECTION *pre_sec;
	INI_KEY_VALUE *pre_key;
	char temp[1024];
	
	if (fb != NULL) {

		pre_key = fb->keyval;
		while(pre_key != NULL) {
			strcpy(temp, pre_key->line);
			strcat(temp, "\r\n");
			if (fwrite(temp, strlen(temp), 1, fp) != 1) {
				return 0;
			}
			pre_key = pre_key->next;
		}

		pre_sec = fb->sections;
		while(pre_sec != NULL) {
			strcpy(temp, pre_sec->line);
			strcat(temp, "\r\n");
			if (fwrite(temp, strlen(temp), 1, fp) != 1) {
				return 0;
			}
			pre_key = pre_sec->keyval;
			while(pre_key != NULL) {
				strcpy(temp, pre_key->line);
				strcat(temp, "\r\n");
				if (fwrite(temp, strlen(temp), 1, fp) != 1) {
					return 0;
				}
				pre_key = pre_key->next;
			}
			pre_sec = pre_sec->next;
		}
	}
	fflush(fp);
	return 1;
}


/**
*
*  把字符串從等號分開得到一個key和相應的值 
*  xxx    =   yyyyyyyy 
*   |      |   | 
*   k1     k2  i 
*
*/
static int split_keyval(char *line, char **key, char **val) { 
	char *pt;
	int  n;
	
	if((n = (int)strlen(line)) < 1) 
		return 0;
	pt = strchr(line, '=');
	if (pt != NULL) {
		*val = pt + 1;
		*key = line;
		*pt = '\0';
	} else {
		return 0;
	}
	return 1;
} 


static int key_val(INI_FILE *fb, const char *sec, const char *key, char *buf, int len) {
	
	int n;
	INI_SECTION *pre_sec;
	INI_KEY_VALUE *pre_key;
	char *mkey;
	char *val;
	char temp[1024];

	if (fb == NULL || len < 1) 
		return 0;
	if (sec == NULL) {
		pre_key = fb->keyval;
		while(pre_key != NULL) {
			strcpy(temp, pre_key->line);
			n = (int)strlen(trim(temp));
			if (n > 0 && temp[0] != ';') {
				if (split_keyval(temp, &mkey, &val)) {
					n = (int)strlen(trim(mkey));
					if (n == 0) {//配置文件有錯誤
						return 0;
					} else {
						if (strcmp(mkey, key) == 0) {
							strcpy(buf, trim(val));
							return 1;
						}
					}
				}
			}
			pre_key = pre_key->next;
		}
		return 0;
	} else {
		pre_sec = fb->sections;
		while(pre_sec != NULL) {
			strcpy(temp, pre_sec->line);
			temp[strlen(temp) - 1] = '\0';
			if (strcmp(temp+1, sec) == 0) {
				break;
			}
			pre_sec = pre_sec->next;
		}
		if (pre_sec == NULL) return 0;
		pre_key = pre_sec->keyval;
		while(pre_key != NULL) {
			strcpy(temp, pre_key->line);
			n = (int)strlen(trim(temp));
			if (n > 0 && temp[0] != ';') {
				if (split_keyval(temp, &mkey, &val)) {
					n = (int)strlen(trim(mkey));
					if (n == 0) {//配置文件有錯誤
						return 0;
					} else {
						if (strcmp(mkey, key) == 0) {
							strcpy(buf, trim(val));
							return 1;
						}
					}
				}
			}
			pre_key = pre_key->next;
		}
		return 0;
	}
	return 0;
}


static int set_key_val(INI_FILE *fb, char *sec, char *key, char *buf ) {
	
	int n;
	INI_SECTION *pre_sec;
	INI_KEY_VALUE *pre_key;
	char *mkey;
	char *val;
	char temp[1024];
	char *pt;

	if (fb == NULL) 
		return 0;
	if (sec == NULL) {
		pre_key = fb->keyval;
		while(pre_key != NULL) {
			strcpy(temp, pre_key->line);
			n = (int)strlen(trim(temp));
			if (n > 0 && temp[0] != ';') {
				if (split_keyval(temp, &mkey, &val)) {
					n = (int)strlen(trim(mkey));
					if (n == 0) {//配置文件有錯誤
						return 0;
					} else {
						if (strcmp(mkey, key) == 0) {
							pt = (char *)calloc(strlen(key) + 4 + strlen(buf), sizeof(char));
							if (pt == NULL) return 0;
							sprintf(pt, "%s = %s", mkey, buf);
							free(pre_key->line);
							pre_key->line = pt;
							return 1;
						}
					}
				}
			}
			pre_key = pre_key->next;
		}
		return 0;
	} else {
		
		pre_sec = fb->sections;
		while(pre_sec != NULL) {
			strcpy(temp, pre_sec->line);
			temp[strlen(temp) - 1] = '\0';
			if (strcmp(temp+1, sec) == 0) {
				break;
			}
			pre_sec = pre_sec->next;
		}
		if (pre_sec == NULL) return 0;
		pre_key = pre_sec->keyval;
		while(pre_key != NULL) {
			strcpy(temp, pre_key->line);
			n = (int)strlen(trim(temp));
			if (n > 0 && temp[0] != ';') {
				if (split_keyval(temp, &mkey, &val)) {
					n = (int)strlen(trim(mkey));
					if (n == 0) {//配置文件有錯誤
						return 0;
					} else {
						if (strcmp(mkey, key) == 0) {
							pt = (char *)calloc(strlen(mkey) + 4 + strlen(buf), sizeof(char));
							if (pt == NULL) return 0;
							sprintf(pt, "%s = %s", mkey, buf);
							free(pre_key->line);
							pre_key->line = pt;
							return 1;
						}
					}
				}
			}
			pre_key = pre_key->next;
		}
		return 0;
	}
	return 0;
}




/**
*
* 釋放內存空閑,注意先釋放文件頭部的空間,
* 接著一個段一個段的釋放
*
*/
static void free_file(INI_FILE *fb) {
	
	INI_SECTION *pre_sec;
	INI_KEY_VALUE *pre_key;
	
	if (fb != NULL) {
		pre_key = fb->keyval;
		while(pre_key != NULL) {
			fb->keyval = pre_key->next;
			if (pre_key->line != NULL) {
				free(pre_key->line);
			}
			free(pre_key);
			pre_key = fb->keyval;
		}
		pre_sec = fb->sections;
		while(pre_sec != NULL) {
			fb->sections = pre_sec->next;
			pre_key = pre_sec->keyval;
			while(pre_key != NULL) {
				pre_sec->keyval = pre_key->next;
				if (pre_key->line != NULL) {
					free(pre_key->line);
				}
				free(pre_key);
				pre_key = pre_sec->keyval;
			}
			if(pre_sec->line != NULL) {
				free(pre_sec->line);
			}
			free(pre_sec);
			pre_sec = fb->sections;
		}
	}
}

/**
*
* 讀取文本文件的一行到buffer緩沖區(通用函數)
* 緩沖區的數據不含有行結束標識符號
* FILE *fp, 文件句柄 
* char *buffer 緩沖區
* int maxlen 讀取的最大數目
* 返回: 讀取的字符數 -1出錯誤
*
*/
static int read_line(FILE *fp, char *buf, int maxlen) { 
	
	int  i, j; 
	
	i = 0;	
	buf[0] = '\0';
	if(!feof(fp)) {
		if (fgets(buf, maxlen, fp) != NULL) {
			i = (int)strlen(buf);
		} else {
			if(feof(fp)) {
				i = (int)strlen(buf);
				if (i == 0) return -1;
			} else {
				return -2;
			}
		}
	} else {
		return -1;
	}
	for(j = i - 1; j > -1; j--) {
		if (buf[j] == '\r' || buf[j] == '\n')
			buf[j] ='\0'; 
	}
	return i; 
} 



/**
* 去掉字符串的空格
*/
static char *trim(char *buf) {
	char *p;
	p = rtrim(buf);
	p = ltrim(buf);
	return p;
}

static char *ltrim(char *buf) {
	strrev(buf);
	rtrim(buf);
	strrev(buf);
	return buf;
}

static char *rtrim(char *buf) {
	int  n, j;
	n = (int)strlen(buf) - 1;
	for (j = n; j > -1; j--) {
		if (*(buf + j) == ' ') {
			*(buf + j) = '\0';
		} else {
			break;
		}
	}
	return buf;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利视频一区二区三区| 日本一区二区三级电影在线观看| 国产一区三区三区| 美女一区二区视频| 日韩精品一二区| 免费久久99精品国产| 视频一区欧美精品| 麻豆精品精品国产自在97香蕉| 轻轻草成人在线| 国产在线不卡一区| 处破女av一区二区| 91免费观看国产| 欧美三级视频在线播放| 欧美一区二区女人| 久久这里只有精品6| 国产精品色在线观看| 亚洲日本韩国一区| 天天色天天操综合| 精品中文字幕一区二区| 成人午夜精品一区二区三区| 色视频欧美一区二区三区| 欧美亚洲国产一区在线观看网站| 欧美美女喷水视频| 久久夜色精品国产欧美乱极品| 亚洲国产高清在线观看视频| 一区二区三区在线看| 日本女优在线视频一区二区| 国产精一区二区三区| 色猫猫国产区一区二在线视频| 欧美人伦禁忌dvd放荡欲情| 精品理论电影在线| 亚洲欧洲精品一区二区三区不卡| 亚洲成在人线免费| 粉嫩嫩av羞羞动漫久久久| 日本道色综合久久| 久久久久国产一区二区三区四区| 中文字幕亚洲欧美在线不卡| 日韩国产欧美一区二区三区| 国产精品一区二区久久不卡| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 9191久久久久久久久久久| 国产亚洲精品bt天堂精选| 亚洲成人7777| 成人夜色视频网站在线观看| 91精品国产综合久久精品图片| 国产精品网曝门| 美洲天堂一区二卡三卡四卡视频| av爱爱亚洲一区| 精品人伦一区二区色婷婷| 一区二区三区欧美视频| 国产成人午夜精品影院观看视频| 欧美日产国产精品| 成人欧美一区二区三区1314| 激情文学综合插| 91精品国产入口| 一区二区三区四区在线免费观看| 国产乱一区二区| 日韩一区二区不卡| 偷窥少妇高潮呻吟av久久免费| 成人一区二区三区视频在线观看| 日韩精品一区二区三区视频播放| 亚洲五月六月丁香激情| 91无套直看片红桃| 中文字幕av一区 二区| 九九国产精品视频| 91.com在线观看| 日欧美一区二区| 欧美日韩一二三| 午夜影院在线观看欧美| 在线精品视频免费播放| 综合久久综合久久| 成人av综合在线| 国产精品久久久久久妇女6080| 国产永久精品大片wwwapp| 亚洲精品一区二区三区精华液| 日本一区中文字幕| 日韩欧美一区二区视频| 日韩中文字幕一区二区三区| 欧美日本韩国一区| 奇米四色…亚洲| 精品国产一二三| 国产河南妇女毛片精品久久久 | 国产mv日韩mv欧美| 欧美经典三级视频一区二区三区| 国产成人午夜电影网| 国产亚洲欧美一区在线观看| 国产a区久久久| 中文字幕精品综合| 91一区二区三区在线观看| 亚洲欧美激情插| 色伊人久久综合中文字幕| 亚洲一区二区三区在线播放| 欧美美女直播网站| 国产一区二区日韩精品| 国产精品热久久久久夜色精品三区| 国产91丝袜在线播放0| 中文天堂在线一区| 欧美视频中文一区二区三区在线观看| 亚洲成av人**亚洲成av**| 日韩视频在线永久播放| 国产成人av自拍| 一区二区三区中文在线| 91精品国产综合久久婷婷香蕉| 久久国产麻豆精品| 中文字幕一区二区三区视频| 欧美日韩精品欧美日韩精品| 免费在线观看日韩欧美| 久久久精品日韩欧美| 在线免费不卡视频| 激情综合网av| 一区二区三区日韩在线观看| 欧美一区二区三区不卡| 成人免费三级在线| 丝袜亚洲另类欧美| 国产精品不卡一区| 日韩一区二区精品葵司在线| 亚洲午夜成aⅴ人片| 久久99精品国产| 国产精品久久久久久久久免费相片| 色999日韩国产欧美一区二区| 奇米影视一区二区三区小说| 国产精品每日更新| 日韩欧美成人一区二区| 色综合久久88色综合天天| 麻豆freexxxx性91精品| 亚洲女厕所小便bbb| 久久久精品欧美丰满| 欧美人与禽zozo性伦| 91视频在线看| 成人免费视频caoporn| 精品一二三四区| 水蜜桃久久夜色精品一区的特点| 亚洲色图制服诱惑| 欧美成人欧美edvon| 国产精品一级在线| 日韩精品高清不卡| 亚洲第一福利一区| 亚洲欧美aⅴ...| 中文字幕av资源一区| 久久久亚洲高清| 精品久久人人做人人爱| 91精品欧美久久久久久动漫| 色婷婷综合久色| 色香蕉成人二区免费| 波多野结衣亚洲| 粉嫩aⅴ一区二区三区四区| 国内欧美视频一区二区| 久久精品国产亚洲a| 日本不卡一区二区三区高清视频| 亚洲va韩国va欧美va| 伊人色综合久久天天人手人婷| 中文字幕一区二区三区在线不卡 | 欧美三电影在线| 色综合久久六月婷婷中文字幕| 成人国产免费视频| 99国产欧美久久久精品| 色综合久久中文字幕综合网| 91视频你懂的| 欧美色图激情小说| 欧美高清www午色夜在线视频| 欧美精品1区2区3区| 91精品国产综合久久久久久久久久| 5月丁香婷婷综合| 日韩欧美一级片| 国产欧美日本一区视频| 中文字幕一区三区| 一区二区三区电影在线播| 亚洲一区二区五区| 美女被吸乳得到大胸91| 国内成人免费视频| 波多野结衣亚洲一区| 日本大香伊一区二区三区| 欧美日本韩国一区| 久久人人爽人人爽| 亚洲免费在线电影| 天堂蜜桃91精品| 国产一区二区三区在线观看免费 | 国产精品毛片久久久久久久| 成人免费一区二区三区在线观看| 亚洲婷婷综合久久一本伊一区| 亚洲美女偷拍久久| 性久久久久久久| 精品在线一区二区| a级高清视频欧美日韩| 欧美日韩一区中文字幕| 日韩免费性生活视频播放| 国产精品传媒视频| 石原莉奈一区二区三区在线观看 | 97久久久精品综合88久久| jiyouzz国产精品久久| 欧美精品v日韩精品v韩国精品v| 久久人人爽爽爽人久久久| 亚洲精选在线视频| 强制捆绑调教一区二区| 91蜜桃免费观看视频| 欧美成人激情免费网| 一区二区三区鲁丝不卡| 国产精华液一区二区三区| 欧美日韩美少妇| 日韩毛片一二三区|