/pidgin/main: 4bba5ea5d08a: Provide a portable alternative for f...

Tomasz Wasilczyk twasilczyk at pidgin.im
Tue May 13 07:14:06 EDT 2014


Changeset: 4bba5ea5d08ac12863431ac5c8f9e411ce77b112
Author:	 Tomasz Wasilczyk <twasilczyk at pidgin.im>
Date:	 2014-05-13 13:13 +0200
Branch:	 default
URL: https://hg.pidgin.im/pidgin/main/rev/4bba5ea5d08a

Description:

Provide a portable alternative for fstat

diffstat:

 libpurple/internal.h            |  11 +++++++++++
 libpurple/log.c                 |   4 ++--
 libpurple/protocols/silc/util.c |  24 ++----------------------
 libpurple/util.c                |  20 ++++++++++++++++++--
 4 files changed, 33 insertions(+), 26 deletions(-)

diffs (132 lines):

diff --git a/libpurple/internal.h b/libpurple/internal.h
--- a/libpurple/internal.h
+++ b/libpurple/internal.h
@@ -354,4 +354,15 @@ const gchar *
 gboolean
 _purple_network_set_common_socket_flags(int fd);
 
+/**
+ * A fstat alternative, like g_stat for stat.
+ *
+ * @param fd The file descriptor.
+ * @param st The stat buffer.
+ *
+ * @return the result just like for fstat.
+ */
+int
+_purple_fstat(int fd, GStatBuf *st);
+
 #endif /* _PURPLE_INTERNAL_H_ */
diff --git a/libpurple/log.c b/libpurple/log.c
--- a/libpurple/log.c
+++ b/libpurple/log.c
@@ -1732,7 +1732,7 @@ static GList *old_logger_list(PurpleLogT
 		g_free(pathstr);
 		return NULL;
 	}
-	if (fstat(file_fd, &st) == -1) {
+	if (_purple_fstat(file_fd, &st) == -1) {
 		purple_stringref_unref(pathref);
 		g_free(pathstr);
 		fclose(file);
@@ -1745,7 +1745,7 @@ static GList *old_logger_list(PurpleLogT
 
 	index_fd = g_open(pathstr, 0, O_RDONLY);
 	if (index_fd != -1) {
-		if (fstat(index_fd, &st) != 0) {
+		if (_purple_fstat(index_fd, &st) != 0) {
 			close(index_fd);
 			index_fd = -1;
 		}
diff --git a/libpurple/protocols/silc/util.c b/libpurple/protocols/silc/util.c
--- a/libpurple/protocols/silc/util.c
+++ b/libpurple/protocols/silc/util.c
@@ -68,26 +68,6 @@ gboolean silcpurple_ip_is_private(const 
 	return FALSE;
 }
 
-/* there is no fstat alternative for GStatBuf */
-static int g_fstat(int fd, GStatBuf *st)
-{
-	struct stat sst;
-	int ret;
-
-	g_return_val_if_fail(st != NULL, -1);
-
-	ret = fstat(fd, &sst);
-	if (ret != 0)
-		return ret;
-
-	memset(st, 0, sizeof(GStatBuf));
-	/* only these two are used here */
-	st->st_uid = sst.st_uid;
-	st->st_mode = sst.st_mode;
-
-	return 0;
-}
-
 /* This checks stats for various SILC files and directories. First it
    checks if ~/.silc directory exist and is owned by the correct user. If
    it doesn't exist, it will create the directory. After that it checks if
@@ -213,7 +193,7 @@ gboolean silcpurple_check_silc_dir(Purpl
 #endif
 
 	if ((fd = g_open(file_private_key, O_RDONLY, 0)) != -1) {
-		if ((g_fstat(fd, &st)) == -1) {
+		if (_purple_fstat(fd, &st) == -1) {
 			purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n",
 					   file_private_key, g_strerror(errno));
 			close(fd);
@@ -235,7 +215,7 @@ gboolean silcpurple_check_silc_dir(Purpl
 			}
 
 			if ((fd = g_open(file_private_key, O_RDONLY, 0)) != -1) {
-				if ((g_fstat(fd, &st)) == -1) {
+				if (_purple_fstat(fd, &st) == -1) {
 					purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n",
 							   file_private_key, g_strerror(errno));
 					close(fd);
diff --git a/libpurple/util.c b/libpurple/util.c
--- a/libpurple/util.c
+++ b/libpurple/util.c
@@ -4961,6 +4961,22 @@ gchar *purple_http_digest_calculate_resp
 	return g_strdup(hash2);
 }
 
+int
+_purple_fstat(int fd, GStatBuf *st)
+{
+	int ret;
+
+	g_return_val_if_fail(st != NULL, -1);
+
+#ifdef _WIN32
+	ret = _fstat(fd, st);
+#else
+	ret = fstat(fd, st);
+#endif
+
+	return ret;
+}
+
 #if 0
 
 /* Temporarily removed - re-add this when you need ini file support. */
@@ -4975,7 +4991,7 @@ purple_key_file_load_from_ini(GKeyFile *
 	const gchar *header = "[default]\n\n";
 	int header_len = strlen(header);
 	int fd;
-	struct stat st;
+	GStatBuf st;
 	gsize file_size, buff_size;
 	gchar *buff;
 	GError *error = NULL;
@@ -4993,7 +5009,7 @@ purple_key_file_load_from_ini(GKeyFile *
 		return FALSE;
 	}
 
-	if (fstat(fd, &st) != 0) {
+	if (_purple_fstat(fd, &st) != 0) {
 		purple_debug_error("util", "Failed to fstat ini file %s", file);
 		return FALSE;
 	}



More information about the Commits mailing list