Merge branch 'odin' of git.hitchhiker-linux.org:jeang3nie/seahag into odin
This commit is contained in:
commit
1e5b903cff
2 changed files with 11 additions and 5 deletions
|
@ -19,6 +19,10 @@ the `Destdir` pattern for ease of packaging.
|
||||||
There is a simple test harness which can be invoked via `make test`. If you wish
|
There is a simple test harness which can be invoked via `make test`. If you wish
|
||||||
to port this software to an untested platform the tests will greatly assist in
|
to port this software to an untested platform the tests will greatly assist in
|
||||||
that process.
|
that process.
|
||||||
|
> Note: if your OS uses **dash** as `/bin/sh` then the builtin echo command will not
|
||||||
|
> be up to the task of printing the escape sequences used by the test runner. If this
|
||||||
|
> bothers you, you can call `make` with the `SHELL` environment variable overridden
|
||||||
|
> by calling `make SHELL=/bin/bash all test`.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
Contributions are always welcome and can be made via pull request or `git send-email`,
|
Contributions are always welcome and can be made via pull request or `git send-email`,
|
||||||
|
|
12
haggis.c
12
haggis.c
|
@ -355,8 +355,6 @@ int haggis_load_file(FILE *stream, haggis_file *f) {
|
||||||
return -1;
|
return -1;
|
||||||
int res = fread(f->data, 1, (size_t)f->len.val, stream);
|
int res = fread(f->data, 1, (size_t)f->len.val, stream);
|
||||||
if (res != (size_t)f->len.val) {
|
if (res != (size_t)f->len.val) {
|
||||||
fprintf(stderr, "Error reading file:\n length: %i\n expected: %lu\n",
|
|
||||||
res, f->len.val);
|
|
||||||
free(f->data);
|
free(f->data);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -751,6 +749,8 @@ int haggis_extract_dev(haggis_node *node, char *basedir) {
|
||||||
} else if (node->filetype.tag == character) {
|
} else if (node->filetype.tag == character) {
|
||||||
mode = (mode_t)node->mode.val | S_IFCHR;
|
mode = (mode_t)node->mode.val | S_IFCHR;
|
||||||
}
|
}
|
||||||
|
if (access(path, F_OK) == 0)
|
||||||
|
unlink(path);
|
||||||
ret = mknod(path, mode, dev);
|
ret = mknod(path, mode, dev);
|
||||||
free(path);
|
free(path);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -782,6 +782,7 @@ int haggis_extract_fifo(haggis_node *node, char *basedir) {
|
||||||
int haggis_extract_symlink(haggis_node *node, char *basedir) {
|
int haggis_extract_symlink(haggis_node *node, char *basedir) {
|
||||||
char *path, *target;
|
char *path, *target;
|
||||||
int ret;
|
int ret;
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
assert(node->filetype.tag == softlink);
|
assert(node->filetype.tag == softlink);
|
||||||
path = get_full_path(&node->name, basedir);
|
path = get_full_path(&node->name, basedir);
|
||||||
|
@ -792,7 +793,7 @@ int haggis_extract_symlink(haggis_node *node, char *basedir) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
target = node->filetype.target.name;
|
target = node->filetype.target.name;
|
||||||
if (access(path, F_OK) == 0)
|
if (lstat(path, &st) == 0)
|
||||||
unlink(path);
|
unlink(path);
|
||||||
ret = symlink(target, path);
|
ret = symlink(target, path);
|
||||||
free(path);
|
free(path);
|
||||||
|
@ -870,7 +871,7 @@ char* haggis_extract_file(haggis_node *node, char *basedir) {
|
||||||
free(path);
|
free(path);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
fd = fopen(path, "w");
|
fd = fopen(path, "w+");
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
free(path);
|
free(path);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -938,7 +939,8 @@ int haggis_extract_node(haggis_node *self, char *basedir, haggis_mq *mq) {
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret = chmod(path, (mode_t)self->mode.val);
|
if (self->filetype.tag != softlink)
|
||||||
|
ret = chmod(path, (mode_t)self->mode.val);
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
msg = calloc(1, sizeof(haggis_msg));
|
msg = calloc(1, sizeof(haggis_msg));
|
||||||
if (msg == NULL)
|
if (msg == NULL)
|
||||||
|
|
Loading…
Add table
Reference in a new issue