]> sigrok.org Git - libsigrok.git/commitdiff
resource: Move sr_file_get_size() to resource.c
authorDaniel Elstner <redacted>
Sat, 26 Sep 2015 16:10:28 +0000 (18:10 +0200)
committerDaniel Elstner <redacted>
Thu, 1 Oct 2015 13:44:55 +0000 (15:44 +0200)
src/input/input.c
src/libsigrok-internal.h
src/resource.c

index e93925d2b1c590572d7eb5b66ad7fa839b57d283..5e8f2129676f1f2839953a7c5dd797debbd1fca9 100644 (file)
@@ -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.
  *
index 32f49197c128bd038539686dcdd76d6e46d078e7..f3b932b7a707f3418e686d62ad6e91e3a2b58c57 100644 (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;
index b29be60863b0eb83584d04bfe777f75b6a666d46..bcb7a19146b59ef7ca6ea70372ae7a377d04d076 100644 (file)
  * 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)
 {