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;
|
||||
}
|
||||
|
||||
/** 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.
|
||||
*
|
||||
|
|
|
@ -593,10 +593,6 @@ struct drv_context {
|
|||
GSList *instances;
|
||||
};
|
||||
|
||||
/*--- input/input.c ---------------------------------------------------------*/
|
||||
|
||||
SR_PRIV int64_t sr_file_get_size(FILE *file);
|
||||
|
||||
/*--- log.c -----------------------------------------------------------------*/
|
||||
|
||||
#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 ------------------------------------------------------------*/
|
||||
|
||||
SR_PRIV int64_t sr_file_get_size(FILE *file);
|
||||
|
||||
SR_PRIV int sr_resource_open(struct sr_context *ctx,
|
||||
struct sr_resource *res, int type, const char *name)
|
||||
G_GNUC_WARN_UNUSED_RESULT;
|
||||
|
|
|
@ -35,6 +35,47 @@
|
|||
* 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,
|
||||
const char *name)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue