resource: Move sr_file_get_size() to resource.c
This commit is contained in:
parent
bee246665b
commit
7d89fd60e5
|
@ -403,43 +403,6 @@ SR_API int sr_input_scan_buffer(GString *buf, const struct sr_input **in)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Retrieve the size of the open stream @a file.
|
|
||||||
* This function only works on seekable streams. However, the set of seekable
|
|
||||||
* streams is generally congruent with the set of streams that have a size.
|
|
||||||
* Code that needs to work with any type of stream (including pipes) should
|
|
||||||
* require neither seekability nor advance knowledge of the size.
|
|
||||||
* On failure, the return value is negative and errno is set.
|
|
||||||
* @param file An I/O stream opened in binary mode.
|
|
||||||
* @return The size of @a file in bytes, or a negative value on failure.
|
|
||||||
*/
|
|
||||||
SR_PRIV int64_t sr_file_get_size(FILE *file)
|
|
||||||
{
|
|
||||||
off_t filepos, filesize;
|
|
||||||
|
|
||||||
/* ftello() and fseeko() are not standard C, but part of POSIX.1-2001.
|
|
||||||
* Thus, if these functions are available at all, they can reasonably
|
|
||||||
* be expected to also conform to POSIX semantics. In particular, this
|
|
||||||
* means that ftello() after fseeko(..., SEEK_END) has a defined result
|
|
||||||
* and can be used to get the size of a seekable stream.
|
|
||||||
* On Windows, the result is fully defined only for binary streams.
|
|
||||||
*/
|
|
||||||
filepos = ftello(file);
|
|
||||||
if (filepos < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (fseeko(file, 0, SEEK_END) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
filesize = ftello(file);
|
|
||||||
if (filesize < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (fseeko(file, filepos, SEEK_SET) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return filesize;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to find an input module that can parse the given file.
|
* Try to find an input module that can parse the given file.
|
||||||
*
|
*
|
||||||
|
|
|
@ -593,10 +593,6 @@ struct drv_context {
|
||||||
GSList *instances;
|
GSList *instances;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*--- input/input.c ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
SR_PRIV int64_t sr_file_get_size(FILE *file);
|
|
||||||
|
|
||||||
/*--- log.c -----------------------------------------------------------------*/
|
/*--- log.c -----------------------------------------------------------------*/
|
||||||
|
|
||||||
#if defined(G_OS_WIN32) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
|
#if defined(G_OS_WIN32) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
|
||||||
|
@ -771,6 +767,8 @@ SR_PRIV int std_serial_dev_close(struct sr_dev_inst *sdi);
|
||||||
|
|
||||||
/*--- resource.c ------------------------------------------------------------*/
|
/*--- resource.c ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
SR_PRIV int64_t sr_file_get_size(FILE *file);
|
||||||
|
|
||||||
SR_PRIV int sr_resource_open(struct sr_context *ctx,
|
SR_PRIV int sr_resource_open(struct sr_context *ctx,
|
||||||
struct sr_resource *res, int type, const char *name)
|
struct sr_resource *res, int type, const char *name)
|
||||||
G_GNUC_WARN_UNUSED_RESULT;
|
G_GNUC_WARN_UNUSED_RESULT;
|
||||||
|
|
|
@ -35,6 +35,47 @@
|
||||||
* Access to resource files.
|
* Access to resource files.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** Retrieve the size of the open stream @a file.
|
||||||
|
*
|
||||||
|
* This function only works on seekable streams. However, the set of seekable
|
||||||
|
* streams is generally congruent with the set of streams that have a size.
|
||||||
|
* Code that needs to work with any type of stream (including pipes) should
|
||||||
|
* require neither seekability nor advance knowledge of the size.
|
||||||
|
* On failure, the return value is negative and errno is set.
|
||||||
|
*
|
||||||
|
* @param file An I/O stream opened in binary mode.
|
||||||
|
* @return The size of @a file in bytes, or a negative value on failure.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
SR_PRIV int64_t sr_file_get_size(FILE *file)
|
||||||
|
{
|
||||||
|
off_t filepos, filesize;
|
||||||
|
|
||||||
|
/* ftello() and fseeko() are not standard C, but part of POSIX.1-2001.
|
||||||
|
* Thus, if these functions are available at all, they can reasonably
|
||||||
|
* be expected to also conform to POSIX semantics. In particular, this
|
||||||
|
* means that ftello() after fseeko(..., SEEK_END) has a defined result
|
||||||
|
* and can be used to get the size of a seekable stream.
|
||||||
|
* On Windows, the result is fully defined only for binary streams.
|
||||||
|
*/
|
||||||
|
filepos = ftello(file);
|
||||||
|
if (filepos < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (fseeko(file, 0, SEEK_END) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
filesize = ftello(file);
|
||||||
|
if (filesize < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (fseeko(file, filepos, SEEK_SET) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return filesize;
|
||||||
|
}
|
||||||
|
|
||||||
static FILE *try_open_file(const char *datadir, const char *subdir,
|
static FILE *try_open_file(const char *datadir, const char *subdir,
|
||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue