1.1 --- a/setup/setup.c Thu Nov 10 11:15:09 2011 +0000
1.2 +++ b/setup/setup.c Sun Nov 01 21:44:52 2015 +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);