Esempio n. 1
0
File: pkg_hash.c Progetto: DgINC/USP
pkg_t * pkg_hash_fetch_by_name_version(hash_table_t *hash, 
				       const char *pkg_name,
				       const char * version)
{
    pkg_vec_t * vec;
    register int i;
    char *version_str = NULL;
    
    if(!(vec = pkg_vec_fetch_by_name(hash, pkg_name)))
	return NULL;
    
    for(i = 0; i < vec->len; i++) {
	version_str = pkg_version_str_alloc(vec->pkgs[i]);
	if(!strcmp(version_str, version)) {
	    free(version_str);
	    break;
	}
	free(version_str);
    }
	
    if(i == vec->len)
	return NULL;
    
    return vec->pkgs[i];
}
Esempio n. 2
0
File: pkg_hash.c Progetto: DgINC/USP
int pkg_hash_add_from_file(ipkg_conf_t *conf, const char *file_name,
			   pkg_src_t *src, pkg_dest_t *dest, int is_status_file)
{
     hash_table_t *hash = &conf->pkg_hash;
     char **raw;
     char **raw_start;
     pkg_t *pkg;
    
     raw = raw_start = read_raw_pkgs_from_file(file_name);
     if (!raw)
        return -ENOMEM;

     while(*raw){         /* don't worry, we'll increment raw in the parsing function */
	  pkg = pkg_new();
	  if (!pkg)
	       return -ENOMEM;

	  if (pkg_parse_raw(pkg, &raw, src, dest) == 0) {
	       if (!pkg->architecture) {
		    char *version_str = pkg_version_str_alloc(pkg);
		    pkg->architecture = pkg_get_default_arch(conf);
		    ipkg_message(conf, IPKG_ERROR, "Package %s version %s has no architecture specified, defaulting to %s.\n",
				 pkg->name, version_str, pkg->architecture);
		    free(version_str);
	       }
	       hash_insert_pkg(hash, pkg, is_status_file,conf);
	  } else {
	       free(pkg);
	  }
     }

     /* XXX: CLEANUP: I'd like a cleaner interface for cleaning up
	memory after read_raw_pkgs_from_file */
     raw = raw_start;
     while (*raw) {
	  free(*raw++);
     }
     free(raw_start);
     return 0;
}
Esempio n. 3
0
void
print_package (pkg_t *pkg)
{
  char *v = pkg_version_str_alloc(pkg);
  printf (
      "Name:         %s\n"
      "Version:      %s\n"
      "Repository:   %s\n"
      "Architecture: %s\n"
      "Description:  %s\n"
      "Tags:         %s\n"
      "Size:         %ld\n"
      "Status:       %d\n",
      pkg->name,
      v,
      pkg->src->name,
      pkg->architecture,
      pkg->description,
      pkg->tags? pkg->tags : "",
      pkg->size,
      pkg->state_status);
  free(v);
}
Esempio n. 4
0
static void list_pkg(pkg_t *pkg)
{
  char *v = pkg_version_str_alloc(pkg);
  printf ("%s - %s\n", pkg->name, v);
  free(v);
}