Beispiel #1
0
static char *get_filelist_name()
{
  char *dir_name = NULL;
  char *filename;

#ifndef DISABLE_CONFIGFILES
  dir_name = get_fizmo_config_dir_name();
#endif // DISABLE_CONFIGFILES

  if (dir_name == NULL)
    return NULL;

  filename = malloc(strlen(dir_name) + 16);
  strcpy(filename, dir_name);
  strcat(filename, "/story-list.txt");

  return filename;
}
Beispiel #2
0
struct babel_info *load_babel_info()
{
  struct babel_info *result = NULL;

#ifndef DISABLE_BABEL
  char *cwd = NULL;
  char *config_dir_name = NULL;
  z_dir *config_dir;
  struct z_dir_ent z_dir_entry;
  time_t last_mod_timestamp;
  z_file *new_babel_doc_file;
  xmlDocPtr new_babel_doc;

#ifndef DISABLE_CONFIGFILES
  config_dir_name = get_fizmo_config_dir_name();
#endif // DISABLE_CONFIGFILES

  if ((config_dir = fsi->open_dir(config_dir_name)) == NULL)
    return NULL;

  cwd = fsi->get_cwd();
  if (fsi->ch_dir(config_dir_name) != 0)
  {
    fsi->close_dir(config_dir);
    free(cwd);
    return NULL;
  }

  result = (struct babel_info*)fizmo_malloc(sizeof(struct babel_info));

  result->entries = NULL;
  result->entries_allocated = 0;
  result->nof_entries = 0;

  while (fsi->read_dir(&z_dir_entry, config_dir) == 0)
  {
    if (
        (fsi->is_filename_directory(z_dir_entry.d_name) == false)
        &&
        (strlen(z_dir_entry.d_name) >= 9)
        &&
        (strcasecmp(
                    z_dir_entry.d_name + strlen(z_dir_entry.d_name) - 9,
                    ".iFiction") == 0)
       )
    {
      if ((new_babel_doc = xmlReadFile(
              z_dir_entry.d_name,
              NULL,
              XML_PARSE_NOWARNING | XML_PARSE_NOERROR))
          != NULL)
      {
        if ((new_babel_doc_file
              = fsi->openfile(
                z_dir_entry.d_name, FILETYPE_DATA, FILEACCESS_READ))
            == NULL)
        {
          free_babel_info(result);
          fsi->ch_dir(cwd);
          free(cwd);
          fsi->close_dir(config_dir);
          return NULL;
        }
        last_mod_timestamp
          = fsi->get_last_file_mod_timestamp(new_babel_doc_file);
        fsi->closefile(new_babel_doc_file);

        if ((add_doc_to_babel_info(
                new_babel_doc, result, last_mod_timestamp, z_dir_entry.d_name))
            != 0)
        {
          xmlFreeDoc(new_babel_doc);
          free_babel_info(result);
          fsi->ch_dir(cwd);
          free(cwd);
          fsi->close_dir(config_dir);
          return NULL;
        }
      }
    }
  }

  fsi->ch_dir(cwd);
  free(cwd);
  fsi->close_dir(config_dir);

#endif

  return result;
}