示例#1
0
文件: config.c 项目: Limsik/e17
static Eina_Bool
config_save(Eet_Data_Descriptor *descriptor, const char *filename, const char *section, const void *data)
{
  Eet_File *ef;
  FILE *f;
  char buffer[PATH_MAX];
  int i;

  /* human readable version */
  snprintf(buffer, PATH_MAX, "%s.%s", filename, section);
  f = fopen(buffer, "w");
  if (!f) {
    fprintf(stderr, "Not able to open human readable config file.\n");
    goto on_error;
  }

  /* save the configuration */
  snprintf(buffer, PATH_MAX, "%s.eet", filename);
  ef = eet_open(buffer, EET_FILE_MODE_READ_WRITE);
  if (!ef) {
    fprintf(stderr, "Not able to open config file for read write mode.\n");
    goto on_error;
  }
  
  if (!eet_data_write(ef, descriptor, section, data, 1)) {
    fprintf(stderr, "Can't write data inside the config file.\n");
    goto on_write_error;
  }

  if (!eet_data_dump(ef, section, invert_fputs, f)) {
    fprintf(stderr, "Can't dump section `%s`.\n");
    goto on_write_error;
  }

  eet_close(ef);
  sleep(2);
  fclose(f);

  return EINA_TRUE;

 on_write_error:
  eet_close(ef);

  snprintf(buffer, PATH_MAX, "%s.eet", filename);
  unlink(buffer);

 on_error:
  if (f)
    {
      fclose(f);

      snprintf(buffer, PATH_MAX, "%s.%s", filename, section);
      unlink(buffer);
    }

  return EINA_FALSE;
}
示例#2
0
void
ems_config_save(void)
{
	Eet_File *file;
	FILE *fp;

	file = eet_open(ems_config_tmp_filename_get(),
	                EET_FILE_MODE_READ_WRITE);
	eet_data_write(file, conf_edd, "config", ems_config, EINA_FALSE);
	printf("save to : %s\n", ems_config_filename_get());
	fp = fopen(ems_config_filename_get(), "w");
	if (!fp)
		goto error;
	eet_data_dump(file, "config", _dump_cb, fp);
	fclose(fp);

error:
	eet_close(file);
}
示例#3
0
END_TEST

START_TEST(eet_test_file_data_dump)
{
   Eet_Data_Descriptor *edd;
   Eet_Test_Ex_Type *result;
   Eet_Data_Descriptor_Class eddc;
   Eet_Test_Ex_Type etbt;
   Eet_File *ef;
   char *string1;
   char *file;
   int test;
   int tmpfd;

   file = strdup("/tmp/eet_suite_testXXXXXX");

   eet_init();

   eet_test_ex_set(&etbt, 0);
   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
   etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
   etbt.hash = eina_hash_string_superfast_new(NULL);
   eina_hash_add(etbt.hash, EET_TEST_KEY1, eet_test_ex_set(NULL, 2));
   eina_hash_add(etbt.hash, EET_TEST_KEY2, eet_test_ex_set(NULL, 2));
   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
   etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
   etbt.ihash = eina_hash_string_superfast_new(NULL);
   eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
   eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
   etbt.slist = eina_list_prepend(NULL, "test");
   etbt.shash = eina_hash_string_superfast_new(NULL);
   eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
   memset(&etbt.charray, 0, sizeof(etbt.charray));
   etbt.charray[0] = "test";

   eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc),
                                           "Eet_Test_Ex_Type",
                                           sizeof(Eet_Test_Ex_Type));

   edd = eet_data_descriptor_file_new(&eddc);
   fail_if(!edd);

   eet_build_ex_descriptor(edd, EINA_FALSE);

   fail_if(-1 == (tmpfd = mkstemp(file)));
   fail_if(!!close(tmpfd));

   /* Save the encoded data in a file. */
   ef = eet_open(file, EET_FILE_MODE_WRITE);
   fail_if(!ef);

   fail_if(!eet_data_write(ef, edd, EET_TEST_FILE_KEY1, &etbt, 0));

   eet_close(ef);

   /* Use dump/undump in the middle */
   ef = eet_open(file, EET_FILE_MODE_READ_WRITE);
   fail_if(!ef);

   string1 = NULL;
   fail_if(eet_data_dump(ef, EET_TEST_FILE_KEY1, append_string, &string1) != 1);
   fail_if(eet_delete(ef, EET_TEST_FILE_KEY1) == 0);
   fail_if(!eet_data_undump(ef, EET_TEST_FILE_KEY1, string1, strlen(string1), 1));

   eet_close(ef);

   /* Test the correctness of the reinsertion. */
   ef = eet_open(file, EET_FILE_MODE_READ);
   fail_if(!ef);

   result = eet_data_read(ef, edd, EET_TEST_FILE_KEY1);
   fail_if(!result);

   eet_close(ef);

   /* Test the resulting data. */
   fail_if(eet_test_ex_check(result, 0, EINA_TRUE) != 0);
   fail_if(eet_test_ex_check(eina_list_data_get(result->list), 1, EINA_TRUE) != 0);
   fail_if(eina_list_data_get(result->ilist) == NULL);
   fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
   fail_if(eina_list_data_get(result->slist) == NULL);
   fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
   fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
   fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
   fail_if(strcmp(result->charray[0], "test") != 0);

   test = 0;
   _dump_call = EINA_TRUE;
   if (result->hash)
     eina_hash_foreach(result->hash, func, &test);
   _dump_call = EINA_FALSE;

   fail_if(test != 0);
   if (result->ihash)
     eina_hash_foreach(result->ihash, func7, &test);

   fail_if(test != 0);

   fail_if(unlink(file) != 0);

   eet_shutdown();
}