X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fresource.c;h=b921d93da8df5ecef1849460f2f3df8d8b3aae0e;hb=4b1a9d5d8641080bf10e269aa12a3fc17460365f;hp=bcb7a19146b59ef7ca6ea70372ae7a377d04d076;hpb=7d89fd60e5bce5bbb3271a5ecd54c3c6c63dc6bf;p=libsigrok.git diff --git a/src/resource.c b/src/resource.c index bcb7a191..b921d93d 100644 --- a/src/resource.c +++ b/src/resource.c @@ -99,7 +99,10 @@ static int resource_open_default(struct sr_resource *res, const char *name, void *cb_data) { int64_t filesize; - const char *builtindir, *subdir; +#ifdef FIRMWARE_DIR + const char *builtindir; +#endif + const char *subdir; const char *const *datadirs; FILE *file; @@ -107,7 +110,9 @@ static int resource_open_default(struct sr_resource *res, switch (res->type) { case SR_RESOURCE_FIRMWARE: +#ifdef FIRMWARE_DIR builtindir = FIRMWARE_DIR; +#endif subdir = "sigrok-firmware"; break; default: @@ -120,9 +125,10 @@ static int resource_open_default(struct sr_resource *res, * Scan the hard-coded directory before the system directories to * avoid picking up possibly outdated files from a system install. */ +#ifdef FIRMWARE_DIR if (!file) file = try_open_file(builtindir, "", name); - +#endif if (!file) { datadirs = g_get_system_data_dirs(); while (*datadirs && !file) @@ -167,7 +173,7 @@ static int resource_close_default(struct sr_resource *res, void *cb_data) return SR_OK; } -static ssize_t resource_read_default(const struct sr_resource *res, +static gssize resource_read_default(const struct sr_resource *res, void *buf, size_t count, void *cb_data) { FILE *file; @@ -180,7 +186,7 @@ static ssize_t resource_read_default(const struct sr_resource *res, sr_err("%s: invalid handle.", __func__); return SR_ERR_ARG; } - if (count > SSIZE_MAX) { + if (count > G_MAXSSIZE) { sr_err("%s: count %zu too large.", __func__, count); return SR_ERR_ARG; } @@ -303,10 +309,10 @@ SR_PRIV int sr_resource_close(struct sr_context *ctx, struct sr_resource *res) * * @private */ -SR_PRIV ssize_t sr_resource_read(struct sr_context *ctx, +SR_PRIV gssize sr_resource_read(struct sr_context *ctx, const struct sr_resource *res, void *buf, size_t count) { - ssize_t n_read; + gssize n_read; n_read = (*ctx->resource_read_cb)(res, buf, count, ctx->resource_cb_data); @@ -335,7 +341,8 @@ SR_PRIV void *sr_resource_load(struct sr_context *ctx, { struct sr_resource res; void *buf; - ssize_t n_read; + size_t res_size; + gssize n_read; if (sr_resource_open(ctx, &res, type, name) != SR_OK) return NULL; @@ -346,17 +353,19 @@ SR_PRIV void *sr_resource_load(struct sr_context *ctx, sr_resource_close(ctx, &res); return NULL; } - buf = g_try_malloc(res.size); + res_size = res.size; + + buf = g_try_malloc(res_size); if (!buf) { sr_err("Failed to allocate buffer for '%s'.", name); sr_resource_close(ctx, &res); return NULL; } - n_read = sr_resource_read(ctx, &res, buf, res.size); + n_read = sr_resource_read(ctx, &res, buf, res_size); sr_resource_close(ctx, &res); - if (n_read < 0 || (size_t)n_read != res.size) { + if (n_read < 0 || (size_t)n_read != res_size) { if (n_read >= 0) sr_err("Failed to read '%s': premature end of file.", name); @@ -364,7 +373,7 @@ SR_PRIV void *sr_resource_load(struct sr_context *ctx, return NULL; } - *size = res.size; + *size = res_size; return buf; }