diff -r b0a35bae4961 -r e10f418d8e1d setup/setup.c --- a/setup/setup.c Thu Nov 10 11:15:09 2011 +0000 +++ b/setup/setup.c Sat Nov 15 19:10:51 2014 +0000 @@ -31,67 +31,25 @@ LUALIB_API int luaopen_posix(lua_State *L); -struct vector { - int len,alloc; - char **strings; -}; - -struct vector *vector_new(void) -{ - struct vector *vector; - vector=malloc(sizeof(*vector)); - vector->len=0; - vector->alloc=16; - vector->strings=calloc(vector->alloc,sizeof(char *)); - return vector; -} - -void vector_append(struct vector *vector,const char *str) -{ - if (++(vector->len)>=vector->alloc) - { - vector->alloc*=2; - vector->strings=realloc(vector->strings,vector->alloc*sizeof(char *)); - } - vector->strings[vector->len-1]=strdup(str); - vector->strings[vector->len]=NULL; -} - -int vector_contains(struct vector *vector,const char *str) -{ - int i; - for(i=0;ilen;i++) - if (!strcmp(vector->strings[i],str)) - return 1; - return 0; -} - -void vector_free(struct vector *vector) -{ - int i; - for(i=0;ilen;i++) - free(vector->strings[i]); - free(vector->strings); - free(vector); -} - void setup(const char *argv0) { - char *path,*s,*prefix; + char *path; + gchar *s,*prefix; int ch,changed; struct comps *comps; struct comps_group *group; struct comps_requirement *pkg; - struct vector *packages=NULL; + struct plover_vector *packages=NULL; + GError *error=NULL; path=plover_get_program_directory(argv0); - s=plover_strconcat(path,"/repodata/comps.xml",NULL); + s=g_strconcat(path,"/repodata/comps.xml",NULL); comps=plover_comps_new_from_file(s); if (!comps) { perror(s); exit(1); } - free(s); + g_free(s); prefix=plover_default_prefix_for_vendor(comps->vendor); if (!plover_installed_files_match_prefix(prefix)) { @@ -103,7 +61,12 @@ exit(1); while(ch!='\n' && ch!=EOF) ch=getchar(); - plover_remove(NULL); + if (plover_remove(NULL,&error)) + { + fprintf(stderr,"%s\n",error->message); + g_error_free(error); + exit(1); + } } group=plover_comps_lookup_group(comps,"base"); if (!group) @@ -111,21 +74,21 @@ fprintf(stderr,"No base group found in comps.xml\n"); exit(1); } - packages=vector_new(); + packages=plover_vector_new(); do { changed=0; for(pkg=group->packages;pkg;pkg=pkg->next) { - if (vector_contains(packages,pkg->name)) + if (plover_vector_contains(packages,pkg->name)) continue; if (pkg->type==COMPS_REQUIREMENT_DEFAULT || pkg->type==COMPS_REQUIREMENT_MANDATORY || pkg->type==COMPS_REQUIREMENT_CONDITIONAL && - vector_contains(packages,pkg->requires)) + plover_vector_contains(packages,pkg->requires)) { changed++; - vector_append(packages,pkg->name); + plover_vector_append(packages,pkg->name); } } } while(changed); @@ -135,18 +98,31 @@ fprintf(stderr,"No packages to install\n"); exit(1); } - plover_install(path,prefix,packages->strings); - vector_free(packages); - free(prefix); + if (!plover_install(path,prefix,packages->strings,&error)) + { + fprintf(stderr,"%s\n",error->message); + g_error_free(error); + exit(1); + } + plover_vector_free(packages); + g_free(prefix); free(path); } int main(int argc,char **argv) { + GError *error=NULL; razor_set_lua_loader("posix",luaopen_posix); razor_set_lua_loader("whelk",luaopen_whelk); if (argc>1 && !strcmp(argv[1],"-u")) - plover_remove(NULL); + { + if (!plover_remove(NULL,&error)) + { + fprintf(stderr,"%s\n",error->message); + g_error_free(error); + exit(1); + } + } else setup(argv[0]); exit(0);