setup/setup.c
changeset 28 c880957671f6
parent 13 b0a35bae4961
child 31 a53fcb780468
     1.1 --- a/setup/setup.c	Thu Nov 10 11:15:09 2011 +0000
     1.2 +++ b/setup/setup.c	Mon Nov 17 11:36:20 2014 +0000
     1.3 @@ -31,67 +31,25 @@
     1.4  
     1.5  LUALIB_API int luaopen_posix(lua_State *L);
     1.6  
     1.7 -struct vector {
     1.8 -    int len,alloc;
     1.9 -    char **strings;
    1.10 -};
    1.11 -
    1.12 -struct vector *vector_new(void)
    1.13 -{
    1.14 -    struct vector *vector;
    1.15 -    vector=malloc(sizeof(*vector));
    1.16 -    vector->len=0;
    1.17 -    vector->alloc=16;
    1.18 -    vector->strings=calloc(vector->alloc,sizeof(char *));
    1.19 -    return vector;
    1.20 -}
    1.21 -
    1.22 -void vector_append(struct vector *vector,const char *str)
    1.23 -{
    1.24 -    if (++(vector->len)>=vector->alloc)
    1.25 -    {
    1.26 -	vector->alloc*=2;
    1.27 -	vector->strings=realloc(vector->strings,vector->alloc*sizeof(char *));
    1.28 -    }
    1.29 -    vector->strings[vector->len-1]=strdup(str);
    1.30 -    vector->strings[vector->len]=NULL;
    1.31 -}
    1.32 -
    1.33 -int vector_contains(struct vector *vector,const char *str)
    1.34 -{
    1.35 -    int i;
    1.36 -    for(i=0;i<vector->len;i++)
    1.37 -	if (!strcmp(vector->strings[i],str))
    1.38 -	    return 1;
    1.39 -    return 0;
    1.40 -}
    1.41 -
    1.42 -void vector_free(struct vector *vector)
    1.43 -{
    1.44 -    int i;
    1.45 -    for(i=0;i<vector->len;i++)
    1.46 -	free(vector->strings[i]);
    1.47 -    free(vector->strings);
    1.48 -    free(vector);
    1.49 -}
    1.50 -
    1.51  void setup(const char *argv0)
    1.52  {
    1.53 -    char *path,*s,*prefix;
    1.54 +    char *path;
    1.55 +    gchar *s,*prefix;
    1.56      int ch,changed;
    1.57      struct comps *comps;
    1.58      struct comps_group *group;
    1.59      struct comps_requirement *pkg;
    1.60 -    struct vector *packages=NULL;
    1.61 +    struct plover_vector *packages=NULL;
    1.62 +    GError *error=NULL;
    1.63      path=plover_get_program_directory(argv0);
    1.64 -    s=plover_strconcat(path,"/repodata/comps.xml",NULL);
    1.65 +    s=g_strconcat(path,"/repodata/comps.xml",NULL);
    1.66      comps=plover_comps_new_from_file(s);
    1.67      if (!comps)
    1.68      {
    1.69  	perror(s);
    1.70  	exit(1);
    1.71      }
    1.72 -    free(s);
    1.73 +    g_free(s);
    1.74      prefix=plover_default_prefix_for_vendor(comps->vendor);
    1.75      if (!plover_installed_files_match_prefix(prefix))
    1.76      {
    1.77 @@ -103,7 +61,12 @@
    1.78  	    exit(1);
    1.79  	while(ch!='\n' && ch!=EOF)
    1.80  	    ch=getchar();
    1.81 -	plover_remove(NULL);
    1.82 +	if (plover_remove(NULL,&error))
    1.83 +	{
    1.84 +	    fprintf(stderr,"%s\n",error->message);
    1.85 +	    g_error_free(error);
    1.86 +	    exit(1);
    1.87 +	}
    1.88      }
    1.89      group=plover_comps_lookup_group(comps,"base");
    1.90      if (!group)
    1.91 @@ -111,21 +74,21 @@
    1.92  	fprintf(stderr,"No base group found in comps.xml\n");
    1.93  	exit(1);
    1.94      }
    1.95 -    packages=vector_new();
    1.96 +    packages=plover_vector_new();
    1.97      do
    1.98      {
    1.99  	changed=0;
   1.100  	for(pkg=group->packages;pkg;pkg=pkg->next)
   1.101  	{
   1.102 -	    if (vector_contains(packages,pkg->name))
   1.103 +	    if (plover_vector_contains(packages,pkg->name))
   1.104  		continue;
   1.105  	    if (pkg->type==COMPS_REQUIREMENT_DEFAULT ||
   1.106  	      pkg->type==COMPS_REQUIREMENT_MANDATORY ||
   1.107  	      pkg->type==COMPS_REQUIREMENT_CONDITIONAL &&
   1.108 -	      vector_contains(packages,pkg->requires))
   1.109 +	      plover_vector_contains(packages,pkg->requires))
   1.110  	    {
   1.111  		changed++;
   1.112 -		vector_append(packages,pkg->name);
   1.113 +		plover_vector_append(packages,pkg->name);
   1.114  	    }
   1.115  	}
   1.116      } while(changed);
   1.117 @@ -135,18 +98,31 @@
   1.118  	fprintf(stderr,"No packages to install\n");
   1.119  	exit(1);
   1.120      }
   1.121 -    plover_install(path,prefix,packages->strings);
   1.122 -    vector_free(packages);
   1.123 -    free(prefix);
   1.124 +    if (!plover_install(path,prefix,packages->strings,&error))
   1.125 +    {
   1.126 +	fprintf(stderr,"%s\n",error->message);
   1.127 +	g_error_free(error);
   1.128 +	exit(1);
   1.129 +    }
   1.130 +    plover_vector_free(packages);
   1.131 +    g_free(prefix);
   1.132      free(path);
   1.133  }
   1.134  
   1.135  int main(int argc,char **argv)
   1.136  {
   1.137 +    GError *error=NULL;
   1.138      razor_set_lua_loader("posix",luaopen_posix);
   1.139      razor_set_lua_loader("whelk",luaopen_whelk);
   1.140      if (argc>1 && !strcmp(argv[1],"-u"))
   1.141 -	plover_remove(NULL);
   1.142 +    {
   1.143 +	if (!plover_remove(NULL,&error))
   1.144 +	{
   1.145 +	    fprintf(stderr,"%s\n",error->message);
   1.146 +	    g_error_free(error);
   1.147 +	    exit(1);
   1.148 +	}
   1.149 +    }
   1.150      else
   1.151  	setup(argv[0]);
   1.152      exit(0);