aboutsummaryrefslogtreecommitdiffstats
path: root/src/build.c
diff options
context:
space:
mode:
authorTharre <tharre3@gmail.com>2014-04-16 22:13:05 +0200
committerTharre <tharre3@gmail.com>2014-04-16 22:13:05 +0200
commit9e5c74c5711557b120945b5a2c0d6723d3427c20 (patch)
treedc366a6c93ce71c30209b74cf7f4e4184f450790 /src/build.c
parent3fbeb8a37f74bda763c7de2da63ae358fc0b1b0e (diff)
downloadredo-9e5c74c5711557b120945b5a2c0d6723d3427c20.tar.gz
redo-9e5c74c5711557b120945b5a2c0d6723d3427c20.tar.xz
redo-9e5c74c5711557b120945b5a2c0d6723d3427c20.zip
Rewrote malloc() and other wrappers
Diffstat (limited to 'src/build.c')
-rw-r--r--src/build.c39
1 files changed, 16 insertions, 23 deletions
diff --git a/src/build.c b/src/build.c
index 89417fa..dc67b0f 100644
--- a/src/build.c
+++ b/src/build.c
@@ -35,7 +35,7 @@ int build_target(const char *target) {
/* TODO: write dependencies */
goto exit;
}
- fprintf(stderr, "%s couldn't be built because no "
+ log_err("%s couldn't be built because no "
"suitable do-file exists\n", target);
retval = 1;
goto exit;
@@ -66,9 +66,7 @@ int build_target(const char *target) {
char *btemp_output = xbasename(temp_output);
/* read and parse shebang */
- FILE *fp = fopen(bdo_file, "rb+");
- if (!fp)
- fatal("redo: failed to open %s", bdo_file);
+ FILE *fp = safe_fopen(bdo_file, "rb+");
const size_t bufsize = 1024;
char buf[bufsize];
@@ -84,7 +82,7 @@ int build_target(const char *target) {
if (buf[0] == '#' && buf[1] == '!') {
argv = parsecmd(&buf[2], &i, 5);
} else {
- argv = ec_malloc(7 * sizeof(char*));
+ argv = safe_malloc(7 * sizeof(char*));
argv[i++] = "/bin/sh";
argv[i++] = "-e";
}
@@ -108,16 +106,16 @@ int build_target(const char *target) {
}
/* parent */
- int returncode;
- waitpid(pid, &returncode, 0);
+ int status;
+ waitpid(pid, &status, 0);
bool remove_temp = true;
- if (WIFEXITED(returncode)) {
- if (0 != returncode) {
- fprintf(stderr, "redo: invoked do-file %s failed with %d\n",
- do_file, WEXITSTATUS(returncode));
+ if (WIFEXITED(status)) {
+ if (WEXITSTATUS(status)) { // TODO: check that
+ log_err("redo: invoked do-file %s failed: %d\n",
+ do_file, WEXITSTATUS(status));
} else {
- /* successfull */
+ /* successful */
/* if the file is 0 bytes long we delete it */
off_t f_size = fsize(temp_output);
@@ -129,7 +127,7 @@ int build_target(const char *target) {
}
} else {
/* something very wrong happened with the child */
- fprintf(stderr, "redo: invoked do-file did not terminate correctly\n");
+ log_err("redo: invoked do-file did not terminate correctly\n");
}
if (remove_temp) {
@@ -164,7 +162,7 @@ char *get_do_file(const char *target) {
free(temp);
/* Redofile */
- temp = strdup("Redofile");
+ temp = strdup("Redofile"); /* TODO: */
if (file_exists(temp))
return temp;
free(temp);
@@ -208,7 +206,7 @@ char *remove_ext(const char *str) {
if (dot) /* recalculate length to only reach just before the last dot */
len = dot - str;
- ret = ec_malloc(len+1);
+ ret = safe_malloc(len+1);
memcpy(ret, str, len);
ret[len] = '\0';
@@ -221,7 +219,7 @@ char *remove_ext(const char *str) {
char **parsecmd(char *cmd, size_t *i, size_t keep_free) {
assert(cmd);
size_t argv_len = 16;
- char **argv = ec_malloc(argv_len * sizeof(char*));
+ char **argv = safe_malloc(argv_len * sizeof(char*));
size_t j = 0;
bool prev_space = true;
for (;; ++j) {
@@ -241,13 +239,8 @@ char **parsecmd(char *cmd, size_t *i, size_t keep_free) {
/* check if we have enough space */
while (*i+keep_free >= argv_len) {
argv_len *= 2;
- debug("Reallocating memory (now %zu)\n", argv_len);
- /* TODO: replace realloc? */
- char **new_ptr = realloc(argv, argv_len * sizeof(char*));
- if (!new_ptr)
- fatal("redo: couldn't realloc %zu bytes",
- argv_len * sizeof(char*));
- argv = new_ptr;
+ debug("Reallocating memory (now %zu elements)\n", argv_len);
+ argv = safe_realloc(argv, argv_len * sizeof(char*));
}
prev_space = false;