ccan/str/str.o \
ccan/take/take.o \
ccan/tal/tal.o \
+ ccan/tal/grab_file/grab_file.o \
ccan/tal/link/link.o \
ccan/tal/path/path.o \
ccan/tal/str/str.o \
ccan/strmap/strmap.o \
ccan/take/take.o \
ccan/tal/tal.o \
+ ccan/tal/grab_file/grab_file.o \
ccan/tal/link/link.o \
ccan/tal/path/path.o \
ccan/tal/str/str.o \
#include <err.h>
#include <ccan/str/str.h>
#include <ccan/noerr/noerr.h>
+#include <ccan/tal/grab_file/grab_file.h>
static void check_info_documentation_exists(struct manifest *m,
unsigned int *timeleft,
err(1, "Writing to _info.new to insert documentation");
}
- oldcontents = tal_grab_file(m, m->info_file->fullname, NULL);
+ oldcontents = grab_file(m, m->info_file->fullname);
if (!oldcontents) {
unlink_noerr("_info.new");
err(1, "Reading %s", m->info_file->fullname);
#include <tools/tools.h>
#include <ccan/str/str.h>
#include <ccan/tal/path/path.h>
+#include <ccan/tal/grab_file/grab_file.h>
#include <ccan/foreach/foreach.h>
#include <sys/types.h>
#include <sys/stat.h>
apostrophe = strchr(filename, '\'');
*apostrophe = '\0';
if (lines_matter) {
- file = tal_grab_file(score, filename, NULL);
+ file = grab_file(score, filename);
if (!file) {
score->error = tal_fmt(score,
"Reading %s",
#include <ccan/str/str.h>
#include <ccan/take/take.h>
#include <ccan/foreach/foreach.h>
+#include <ccan/tal/grab_file/grab_file.h>
#include "tests_pass.h"
#include <sys/types.h>
#include <sys/stat.h>
continue;
}
- output = tal_grab_file(i, i->valgrind_log, NULL);
+ output = grab_file(i, i->valgrind_log);
/* No valgrind errors? */
if (!output || output[0] == '\0') {
err = NULL;
#include <ccan/read_write_all/read_write_all.h>
#include <ccan/rbuf/rbuf.h>
#include <ccan/tal/path/path.h>
+#include <ccan/tal/grab_file/grab_file.h>
#include <ccan/compiler/compiler.h>
#include <ccan/err/err.h>
#include "tools.h"
char *compile_info(const void *ctx, const char *dir)
{
char *info_c_file, *info, *compiled, *output;
- size_t len;
int fd;
/* Copy it to a file with proper .c suffix. */
- info = tal_grab_file(ctx, tal_fmt(ctx, "%s/_info", dir), &len);
+ info = grab_file(ctx, tal_fmt(ctx, "%s/_info", dir));
if (!info)
return NULL;
fd = open(info_c_file, O_WRONLY|O_CREAT|O_EXCL, 0600);
if (fd < 0)
return NULL;
- if (!write_all(fd, info, len))
+ if (!write_all(fd, info, tal_count(info)-1))
return NULL;
if (close(fd) != 0)
bool correct_style = false;
fname = path_join(ctx, dir, "_info");
- raw = tal_grab_file(fname, fname, NULL);
+ raw = grab_file(fname, fname);
if (!raw)
errx(1, "Could not open %s", fname);
/* This merely extracts, doesn't do XML or anything. */
#include <ccan/str/str.h>
#include <ccan/err/err.h>
+#include <ccan/tal/grab_file/grab_file.h>
#include "tools.h"
#include <string.h>
#include <stdio.h>
struct list_head *list;
struct doc_section *d;
- file = tal_grab_file(NULL, argv[i], NULL);
+ file = grab_file(NULL, argv[i]);
if (!file)
err(1, "Reading file %s", argv[i]);
lines = tal_strsplit(file, file, "\n", STR_EMPTY_OK);
#include "tools.h"
#include <ccan/str/str.h>
#include <ccan/tal/link/link.h>
+#include <ccan/tal/grab_file/grab_file.h>
#include <ccan/tal/path/path.h>
#include <ccan/hash/hash.h>
#include <ccan/htable/htable_type.h>
const char *get_ccan_file_contents(struct ccan_file *f)
{
if (!f->contents) {
- f->contents = tal_grab_file(f, f->fullname,
- &f->contents_size);
+ f->contents = grab_file(f, f->fullname);
if (!f->contents)
err(1, "Reading file %s", f->fullname);
+ f->contents_size = tal_count(f->contents) - 1;
}
return f->contents;
}
#include "ccan/take/take.h"
#include "ccan/rbuf/rbuf.h"
#include "ccan/tal/path/path.h"
+#include "ccan/tal/grab_file/grab_file.h"
#include "ccan/err/err.h"
#include "tools.h"
hdr = tal_fmt(dir, "%s.h",
path_join(NULL, dir, take(path_basename(NULL, dir))));
- contents = tal_grab_file(dir, hdr, NULL);
+ contents = grab_file(dir, hdr);
if (!contents)
err(1, "Reading %s", hdr);
int fd;
verbose("Rewriting %s\n", filename);
- file = tal_grab_file(filename, filename, NULL);
+ file = grab_file(filename, filename);
if (!file)
err(1, "Reading file %s", filename);
char *replname = path_join(depdir, depdir, ".namespacize");
char *file, **line;
- file = tal_grab_file(replname, replname, NULL);
+ file = grab_file(replname, replname);
if (!file) {
if (errno != ENOENT)
err(1, "Opening %s", replname);
#include <ccan/err/err.h>
#include <ccan/str/str.h>
#include <ccan/tal/path/path.h>
+#include <ccan/tal/grab_file/grab_file.h>
#include "read_config_header.h"
#include "tools.h"
#include <string.h>
unsigned int i;
char *config_header;
- config_header = tal_grab_file(NULL, fname, NULL);
+ config_header = grab_file(NULL, fname);
tal_free(fname);
if (!config_header)
#include <ccan/noerr/noerr.h>
#include <ccan/time/time.h>
#include <ccan/tal/path/path.h>
+#include <ccan/tal/grab_file/grab_file.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
bool move_file(const char *oldname, const char *newname)
{
char *contents;
- size_t size;
int fd;
bool ret;
}
/* Try copy and delete: not atomic! */
- contents = tal_grab_file(NULL, oldname, &size);
+ contents = grab_file(NULL, oldname);
if (!contents) {
if (tools_verbose)
printf("read failed: %s\n", strerror(errno));
goto free;
}
- ret = write_all(fd, contents, size);
+ ret = write_all(fd, contents, tal_count(contents)-1);
if (close(fd) != 0)
ret = false;
tal_resize((char **)&p, size);
return p;
}
-
-void *tal_grab_file(const void *ctx, const char *filename, size_t *size)
-{
- struct rbuf rbuf;
- char *buf = tal_arr(ctx, char, 0);
-
- if (!rbuf_open(&rbuf, filename, buf, 0))
- return tal_free(buf);
-
- if (!rbuf_fill_all(&rbuf, do_tal_realloc) && errno)
- rbuf.buf = tal_free(rbuf.buf);
- else {
- rbuf.buf[rbuf.len] = '\0';
- if (size)
- *size = rbuf.len;
- }
- close(rbuf.fd);
-
- return rbuf.buf;
-}
bool move_file(const char *oldname, const char *newname);
void *do_tal_realloc(void *p, size_t size);
-void *tal_grab_file(const void *ctx, const char *filename, size_t *size);
/* Freed on exit: a good parent for auto cleanup. */
tal_t *autofree(void);