Browse Source

utilfdt_read: pass back up the length of data read

For a follow up commit, we want to be able to scan the buffer that was
returned to us.  In order to do that safely, we need to know how big
the buffer actually is, so pass that back if requested.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
main
Mike Frysinger 12 years ago committed by Jon Loeliger
parent
commit
cc2c178727
  1. 2
      fdtget.c
  2. 2
      fdtput.c
  3. 2
      tests/testutils.c
  4. 8
      util.c
  5. 6
      util.h

2
fdtget.c

@ -254,7 +254,7 @@ static int do_fdtget(struct display_info *disp, const char *filename,
const char *prop; const char *prop;
int i, node; int i, node;


blob = utilfdt_read(filename); blob = utilfdt_read(filename, NULL);
if (!blob) if (!blob)
return -1; return -1;



2
fdtput.c

@ -239,7 +239,7 @@ static int do_fdtput(struct display_info *disp, const char *filename,
char *blob; char *blob;
int len, ret = 0; int len, ret = 0;


blob = utilfdt_read(filename); blob = utilfdt_read(filename, NULL);
if (!blob) if (!blob)
return -1; return -1;



2
tests/testutils.c

@ -160,7 +160,7 @@ int nodename_eq(const char *s1, const char *s2)
void *load_blob(const char *filename) void *load_blob(const char *filename)
{ {
char *blob; char *blob;
int ret = utilfdt_read_err(filename, &blob); int ret = utilfdt_read_err(filename, &blob, NULL);


if (ret) if (ret)
CONFIG("Couldn't open blob from \"%s\": %s", filename, CONFIG("Couldn't open blob from \"%s\": %s", filename,

8
util.c

@ -197,7 +197,7 @@ char get_escape_char(const char *s, int *i)
return val; return val;
} }


int utilfdt_read_err(const char *filename, char **buffp) int utilfdt_read_err(const char *filename, char **buffp, off_t *len)
{ {
int fd = 0; /* assume stdin */ int fd = 0; /* assume stdin */
char *buf = NULL; char *buf = NULL;
@ -238,13 +238,15 @@ int utilfdt_read_err(const char *filename, char **buffp)
free(buf); free(buf);
else else
*buffp = buf; *buffp = buf;
if (len)
*len = bufsize;
return ret; return ret;
} }


char *utilfdt_read(const char *filename) char *utilfdt_read(const char *filename, off_t *len)
{ {
char *buff; char *buff;
int ret = utilfdt_read_err(filename, &buff); int ret = utilfdt_read_err(filename, &buff, len);


if (ret) { if (ret) {
fprintf(stderr, "Couldn't open blob from '%s': %s\n", filename, fprintf(stderr, "Couldn't open blob from '%s': %s\n", filename,

6
util.h

@ -80,9 +80,10 @@ char get_escape_char(const char *s, int *i);
* stderr. * stderr.
* *
* @param filename The filename to read, or - for stdin * @param filename The filename to read, or - for stdin
* @param len If non-NULL, the amount of data we managed to read
* @return Pointer to allocated buffer containing fdt, or NULL on error * @return Pointer to allocated buffer containing fdt, or NULL on error
*/ */
char *utilfdt_read(const char *filename); char *utilfdt_read(const char *filename, off_t *len);


/** /**
* Read a device tree file into a buffer. Does not report errors, but only * Read a device tree file into a buffer. Does not report errors, but only
@ -91,9 +92,10 @@ char *utilfdt_read(const char *filename);
* *
* @param filename The filename to read, or - for stdin * @param filename The filename to read, or - for stdin
* @param buffp Returns pointer to buffer containing fdt * @param buffp Returns pointer to buffer containing fdt
* @param len If non-NULL, the amount of data we managed to read
* @return 0 if ok, else an errno value representing the error * @return 0 if ok, else an errno value representing the error
*/ */
int utilfdt_read_err(const char *filename, char **buffp); int utilfdt_read_err(const char *filename, char **buffp, off_t *len);




/** /**

Loading…
Cancel
Save