Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9572
  • 博文数量: 3
  • 博客积分: 126
  • 博客等级: 入伍新兵
  • 技术积分: 35
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-21 17:50
文章分类
文章存档

2012年(2)

2011年(1)

我的朋友
最近访客

分类: C/C++

2012-10-26 09:51:53


点击(此处)折叠或打开

  1. int get_set_variable_val(unsigned char* file_name, unsigned char* variable_name, unsigned char* dest_val, char mode)

  2. {
  3.     int i=0,t1=0;
  4.     FILE *p;
  5.     char ch;
  6.     int Count=0;
  7.     int dest_len = strlen(variable_name);
  8.     int file_size = -1;
  9.     unsigned char* orig_file;
  10.     int switch_pos = -1;
  11.     unsigned char pos_char = 0;
  12.     unsigned char *tmp = NULL;

  13.     if(mode == 0){
  14.         memset(dest_val, 0, 32);
  15.     }
  16.     else if(mode == 1){
  17.         if(NULL == dest_val)
  18.             return -1;
  19.     }

  20.     if((p=fopen(file_name, "rb"))==NULL)
  21.     {
  22.         fprintf(stderr, "can not open file %s \n", file_name);
  23.         return -1;
  24.     }
  25.     fseek( p, 0L, SEEK_END );
  26.     file_size = ftell(p);
  27.     fseek( p, 0L, SEEK_SET );

  28.     ch=fgetc(p);
  29.     while( !feof(p))
  30.     {
  31.         if(t1 < dest_len){
  32.             if(ch==variable_name[t1])
  33.                 t1++;
  34.             else
  35.                 t1=0;
  36.         }
  37.         else{
  38.             if(ch == 0xa || ch == 0xd || (pos_char != 0 && ch == pos_char))
  39.                 break;
  40.             if(ch != '='){
  41.                 if(mode == 0){
  42.                     dest_val[Count++] = ch;
  43.                 }
  44.                 else if(mode == 1 && switch_pos == -1){
  45.                     if(ch != '\'' && ch != '\"')
  46.                         switch_pos = i;
  47.                     else{
  48.                         pos_char = ch;
  49.                         switch_pos = i;
  50.                     }
  51.                 }
  52.             }
  53.         }
  54.         i++;
  55.         ch=fgetc(p);
  56.     }

  57.     if(mode == 1){
  58.         orig_file = (unsigned char*)malloc(file_size + (strlen(dest_val) - (i - switch_pos)) + 5);

  59.         if(orig_file == NULL){
  60.             fprintf(stderr, "malloc memory error, exit \n");
  61.             return -1;
  62.         }
  63.         memset(orig_file, 0, file_size + (strlen(dest_val) - (i - switch_pos)) + 4);
  64.         fseek(p, 0, SEEK_SET);

  65.         if(pos_char != 0){
  66.             fread(orig_file, switch_pos+1, 1, p);
  67.         }
  68.         else{
  69.             fread(orig_file, switch_pos, 1, p);
  70.         }

  71.         strcat(orig_file, dest_val);
  72.         fseek(p, i, SEEK_SET);
  73.         tmp = (unsigned char*)malloc(file_size - i + 2);
  74.         memset(tmp, 0, file_size - i);
  75.         fread(tmp, 1, file_size - i, p);
  76.         tmp[file_size-i] = '\0';
  77.         //fread(orig_file + strlen(orig_file) + 1, 1, file_size - i, p);
  78.         strcat(orig_file, tmp);
  79.         //dbg("get_set_variable_val fist call free \n");

  80.         free(tmp);
  81.         fclose(p);
  82.         update_file(file_name, orig_file, strlen(orig_file));
  83.         //dbg("get_set_variable_val second call free \n

阅读(814) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~