Exemplo n.º 1
0
void getconfig(pkgstate* state) {
	pkgconfig* c = &state->cfg;
	stringptr_fromchar(getenv("A"), &c->arch);
	stringptr_fromchar(getenv("R"), &c->installroot);
	stringptr_fromchar(getenv("S"), &c->pkgroot);
	stringptr_fromchar(getenv("C"), &c->filecache);
	stringptr_fromchar(getenv("K"), &c->keep);
	stringptr_fromchar(getenv("LOGPATH"), &c->logdir);
	
	if(!c->arch.size) {
		die(SPL("need to set $A to either x86_64 or i386!\n"));
	}
	if(!c->installroot.size) c->installroot = *(stringptr_copy(SPL("/")));
	if(!c->pkgroot.size) c->pkgroot = *(stringptr_copy(SPL("/src")));
	if(!c->filecache.size) c->filecache = *(stringptr_copy(SPL("/src/tarballs")));
	if(!c->keep.size) c->keep = *(stringptr_copy(SPL("/src/KEEP")));
	if(!c->logdir.size) c->logdir = *(stringptr_copy(SPL("/src/logs")));
	
#define check_access(X) if(access(c->X.ptr, W_OK) == -1) { \
		log_put(2, VARISL("cannot access "), VARISL(#X), NULL); \
		log_perror(c->X.ptr); \
		die(SPL("check your environment vars, if the directory exists and that you have write perm (may need root)")); \
	}
	
	check_access(logdir);
	check_access(installroot);
	check_access(pkgroot);
	check_access(filecache);
	check_access(keep);
	
	snprintf(state->builddir_buf, sizeof(state->builddir_buf), "%s/build", c->pkgroot.ptr);
	stringptr_fromchar(state->builddir_buf, &c->builddir);
	if(access(state->builddir_buf, W_OK) == -1 && (errno != ENOENT || mkdir(state->builddir_buf, 0770) == -1)) {
		check_access(builddir);
	}
	
#undef check_access
}
Exemplo n.º 2
0
int main(void) {
	ini_section sec;
	stringptr result;
	stringptr* ini = stringptr_copy(SPLITERAL("[main]\nfoo=bar\nbar=baz\n[section1]\nbaz=blah\nblah=foo\n"));
	// we need stringptr_copy since stringptr_linesplit modifies the buffer. which would segfault using a literal.
	stringptrlist* lines = stringptr_linesplit(ini);
	
	sec = iniparser_get_section(lines, SPLITERAL("main"));
	iniparser_getvalue(lines, &sec, SPLITERAL("bar"), &result);
	
	printf("[main] bar=%s, size=%d\n", result.ptr, (int) result.size);
	
	
	sec = iniparser_get_section(lines, SPLITERAL("section1"));
	iniparser_getvalue(lines, &sec, SPLITERAL("blah"), &result);
	
	printf("blah=%s, size=%d\n", result.ptr, (int) result.size);
	
	stringptr_free(ini);
	free(lines);
	
	return 0;
}
Exemplo n.º 3
0
pkgdata* packagelist_add(hashlist* list, stringptr* name, uint32_t hash) {
	pkgdata pkg_empty = {0};
	pkg_empty.name = stringptr_copy(name);
	hashlist_add(list, hash, &pkg_empty);
	return packagelist_get(list, name, hash);
}
Exemplo n.º 4
0
void add_queue(stringptr* packagename, sblist* queue) {
	pkg_exec execdata = {0};
	execdata.pid = (pid_t) -1;
	execdata.name = stringptr_copy(packagename);
	sblist_add(queue, &execdata);
}
Exemplo n.º 5
0
// contract: out is already zeroed and contains only name
void get_package_contents(pkgconfig* cfg, stringptr* packagename, pkgdata* out) {
	ini_section sec;
	char buf[256];
	ulz_snprintf(buf, sizeof(buf), "%s/pkg/%s", cfg->pkgroot.ptr, packagename->ptr);
	
	stringptr* fc = stringptr_fromfile(buf);
	stringptr val;
	
	if(!fc) goto err;
	stringptrlist* ini = stringptr_linesplit(fc);
	size_t start = 0;
	
	stringptr* tmp;
	
	sec = iniparser_get_section(ini, SPL("mirrors"));
	out->mirrors = stringptrlist_new(sec.linecount);
	
	for(start = sec.startline; start < sec.startline + sec.linecount; start++) {
		tmp = stringptrlist_get(ini, start);
		if(tmp->size) stringptrlist_add(out->mirrors, stringptr_strdup(tmp), tmp->size);
	}
	
	
	sec = iniparser_get_section(ini, SPL("main"));
	
	iniparser_getvalue(ini, &sec, SPL("tardir"), &val);
	if(val.size)
		out->tardir = stringptr_copy(&val);
	else {
		// must run after mirrors!
		stringptr fe;
		if(get_tarball_filename(out, buf, sizeof(buf))) {
			stringptr_fromchar(buf, &fe);
			strip_fileext(&fe);
		} else {
			fe.size = 0;
			fe.ptr = NULL;
		}
		out->tardir = stringptr_copy(&fe);
	}
	
	iniparser_getvalue(ini, &sec, SPL("sha512"), &val);
	if(val.size)
		out->sha512 = stringptr_copy(&val);
	else
		out->sha512 = NULL;
	
	iniparser_getvalue(ini, &sec, SPL("filesize"), &val);
	if(val.size)
		out->filesize = strtoint64(val.ptr, val.size);
	else
		out->filesize = 0;
	
	sec = iniparser_get_section(ini, SPL("deps"));
	out->deps = stringptrlist_new(sec.linecount);
	
	for(start = sec.startline; start < sec.startline + sec.linecount; start++) {
		tmp = stringptrlist_get(ini, start);
		if(tmp->size) stringptrlist_add(out->deps, stringptr_strdup(tmp), tmp->size);
	}
	
	sec = iniparser_get_section(ini, SPL("build")); // the build section has always to come last
	if(sec.startline || sec.linecount) {
		start = sec.startline;
		sec = iniparser_file_as_section(ini); // iniparser may disinterpret lines starting with [
		// so be sure to use the entire rest of the file
		sec.startline = start;
		sec.linecount -= start;
		
		out->buildscript = stringptrlist_new(sec.linecount);
		
		for(start = sec.startline; start < sec.startline + sec.linecount; start++) {
			tmp = stringptrlist_get(ini, start);
			stringptrlist_add(out->buildscript, stringptr_strdup(tmp), tmp->size);
		}
	} else 
		out->buildscript = stringptrlist_new(1);
	
	stringptrlist_free(ini);
	stringptr_free(fc);
	return;
	err:
	log_perror(packagename->ptr);
	die(SPL("package not existing"));
}
Exemplo n.º 6
0
int main() {
	stringptr* t1 = stringptr_copy(SPLITERAL("/usr/bin/../local/bin/./gcc/../.."));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("/usr/bin/..//.././/./usr/../.."));
	assert(!test(t1));
	t1 = stringptr_copy(SPLITERAL("/usr/bin/..//.././/./usr/../"));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("/usr/bin/..//.././/.//../.."));
	assert(!test(t1));
	t1 = stringptr_copy(SPLITERAL("/usr/local//bin"));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("////usr/local//bin"));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("/./././usr/local//bin"));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("/./././usr/local//bin/../../"));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("/./././usr/local//bin/../../.."));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("/usr/.local//bin../.../foo"));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("/...../usr/.local//bin../.../foo/."));
	assert(test(t1));
	t1 = stringptr_copy(SPLITERAL("/./...../usr/.local//bin../.../foo/."));
	assert(test(t1));
	
	return 0;
}