Пример #1
0
int build_download_list(list_t *download, list_t *src)
{
    int count = 0;
    char *cache_path;
    package_t   *pkg, *tmp;
    fileinfo_t  info;
    list_for_each_entry(tmp, src, list)
    {
        cache_path = make_cache_path(tmp->filename);

        if( get_fileinfo(cache_path, &info) != 0)
        {
            pkg = (package_t*)malloc(sizeof(package_t));

            INIT_LIST_HEAD(&pkg->file_list);
            pkg->id       = tmp->id;
            pkg->name     = strdup(tmp->name);
            pkg->version  = strdup(tmp->version);
            pkg->group    = strdup(tmp->group);
            pkg->filename = strdup(tmp->filename);
            pkg->description = strdup(tmp->description);
            list_add_tail(&pkg->list, download);
            count++;
        };
    }
Пример #2
0
void
FileCache::cancel(const TCHAR *name, FILE *file)
{
  fclose(file);

  TCHAR path[path_buffer_size(name)];
  File::Delete(make_cache_path(path, name));
}
Пример #3
0
bool
FileCache::commit(const TCHAR *name, FILE *file)
{
  if (fclose(file) != 0) {
    TCHAR path[path_buffer_size(name)];
    File::Delete(make_cache_path(path, name));
    return false;
  }

  return true;
}
Пример #4
0
FILE *
FileCache::save(const TCHAR *name, const TCHAR *original_path)
{
  struct file_info original_info;
  if (!get_regular_file_info(original_path, &original_info))
    return NULL;

  TCHAR path[path_buffer_size(name)];
  make_cache_path(path, name);

  File::Delete(path);
  FILE *file = _tfopen(path, _T("wb"));
  if (file == NULL)
    return NULL;

  if (fwrite(&file_cache_magic, sizeof(file_cache_magic), 1, file) != 1 ||
      fwrite(&original_info, sizeof(original_info), 1, file) != 1) {
    fclose(file);
    File::Delete(path);
    return NULL;
  }

  return file;
}
Пример #5
0
FILE *
FileCache::load(const TCHAR *name, const TCHAR *original_path)
{
  struct file_info original_info;
  if (!get_regular_file_info(original_path, &original_info))
    return NULL;

  TCHAR path[path_buffer_size(name)];
  make_cache_path(path, name);

  struct file_info cached_info;
  if (!get_regular_file_info(path, &cached_info))
    return NULL;
#ifndef _WIN32_WCE
  if (original_info.mtime > cached_info.mtime) {
    File::Delete(path);
    return NULL;
  }
#endif
  FILE *file = _tfopen(path, _T("rb"));
  if (file == NULL)
    return NULL;

  unsigned magic;
  struct file_info old_info;
  if (fread(&magic, sizeof(magic), 1, file) != 1 ||
      magic != file_cache_magic ||
      fread(&old_info, sizeof(old_info), 1, file) != 1 ||
      old_info != original_info) {
    fclose(file);
    File::Delete(path);
    return NULL;
  }

  return file;
}
Пример #6
0
void
FileCache::flush(const TCHAR *name)
{
  TCHAR buffer[path_buffer_size(name)];
  File::Delete(make_cache_path(buffer, name));
}