cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=33227fc15d7fe2dcf7bdb7a69b3c46034d3c43b1

commit 33227fc15d7fe2dcf7bdb7a69b3c46034d3c43b1
Author: Vincent Torri <vincent.to...@gmail.com>
Date:   Thu Aug 13 08:11:15 2015 +0200

    eina: add API to join pahs, as well as path separators
    
    eina_str_join() is used a lot to contatenate paths, but the
    separator should be '\' on Windows. So add 2 API and 2 defines for
    more cross platform code
    
    @feature
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/Makefile_Eina.am            |  1 +
 src/lib/eina/eina_file.h        | 38 ++++++++++++++++++
 src/lib/eina/eina_inline_file.x | 85 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 124 insertions(+)

diff --git a/src/Makefile_Eina.am b/src/Makefile_Eina.am
index 7537e8a..7e65a26 100644
--- a/src/Makefile_Eina.am
+++ b/src/Makefile_Eina.am
@@ -29,6 +29,7 @@ lib/eina/eina_inlist.h \
 lib/eina/eina_inline_inlist.x \
 lib/eina/eina_list.h \
 lib/eina/eina_file.h \
+lib/eina/eina_inline_file.x \
 lib/eina/eina_mempool.h \
 lib/eina/eina_module.h \
 lib/eina/eina_rectangle.h \
diff --git a/src/lib/eina/eina_file.h b/src/lib/eina/eina_file.h
index cf245e7..952e22c 100644
--- a/src/lib/eina/eina_file.h
+++ b/src/lib/eina/eina_file.h
@@ -28,6 +28,7 @@
 #include "eina_array.h"
 #include "eina_iterator.h"
 #include "eina_tmpstr.h"
+#include "eina_str.h"
 
 /**
  * @page eina_file_example_01_page
@@ -161,6 +162,29 @@ typedef enum {
  * @brief The constant defined as the highest value for PATH_MAX.
  */
 #define EINA_PATH_MAX 8192
+
+/**
+ * @def EINA_PATH_SEP_C
+ * @brief The constant defined the path separator as the character '\'
+ * on Windows and '/' otherwise.
+ *
+ * @since 1.16
+ */
+/**
+ * @def EINA_PATH_SEP_S
+ * @brief The constant defined the path separator as the string "\" on Windows
+ * and "/" otherwise.
+ *
+ * @since 1.16
+ */
+#ifdef _WIN32
+# define EINA_PATH_SEP_C '\\'
+# define EINA_PATH_SEP_S "\\"
+#else
+# define EINA_PATH_SEP_C '/'
+# define EINA_PATH_SEP_S "/"
+#endif
+
 /**
  * @struct _Eina_File_Direct_Info
  * @brief The structure to store information of a path.
@@ -670,6 +694,20 @@ EAPI Eina_Iterator *eina_file_map_lines(Eina_File *file);
  */
 EAPI Eina_Bool eina_file_map_faulted(Eina_File *file, void *map);
 
+static inline size_t eina_file_path_join_len(char *dst,
+                                             size_t size,
+                                             const char *a,
+                                             size_t a_len,
+                                             const char *b,
+                                             size_t b_len);
+
+static inline size_t eina_file_path_join(char *dst,
+                                         size_t size,
+                                         const char *a,
+                                         const char *b);
+
+#include "eina_inline_file.x"
+
 /**
  * @}
  */
diff --git a/src/lib/eina/eina_inline_file.x b/src/lib/eina/eina_inline_file.x
new file mode 100644
index 0000000..d9dffdd
--- /dev/null
+++ b/src/lib/eina/eina_inline_file.x
@@ -0,0 +1,85 @@
+/* EINA - EFL data type library
+ * Copyright (C) 2015 Vincent Torri
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library;
+ * if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef EINA_FILE_INLINE_H_
+#define EINA_FILE_INLINE_H_
+
+/**
+ * @addtogroup Eina_File_Group File
+ *
+ * @{
+ */
+
+/**
+ * @brief Join two paths of known length.
+ *
+ * @param dst The buffer to store the result.
+ * @param size Size (in byte) of the buffer.
+ * @param a First path to use.
+ * @param a_len length of @p a.
+ * @param b Second path to use.
+ * @param b_len length of @p b.
+ * @return The number of characters printed.
+ *
+ * This function is similar to eina_str_join_len(), but the separator
+ * is '\' on Windows and '/' otherwise.
+ *
+ * @see eina_str_join_len()
+ * @see eina_file_path_join()
+ *
+ * @since 1.16
+ */
+static inline size_t
+eina_file_path_join_len(char *dst,
+                        size_t size,
+                        const char *a,
+                        size_t a_len,
+                        const char *b,
+                        size_t b_len)
+{
+   return eina_str_join_len(dst, size, EINA_PATH_SEP_C, a, a_len, b, b_len);
+}
+
+/**
+ * @brief Join two paths of known length.
+ *
+ * @param dst The buffer to store the result.
+ * @param size Size (in byte) of the buffer.
+ * @param a First string to use.
+ * @param b Second string to use.
+ * @return The number of characters printed.
+ *
+ * This function is similar to eina_file_path_join_len(), but will compute
+ * the length of @p a and @p b using strlen(). The path separator is
+ * '\' on Windows and '/' otherwise.
+ *
+ * @see eina_file_path_join_len()
+ *
+ * @since 1.16
+ */
+static inline size_t
+eina_file_path_join(char *dst, size_t size, const char *a, const char *b)
+{
+   return eina_file_path_join_len(dst, size, a, strlen(a), b, strlen(b));
+}
+
+/**
+ * @}
+ */
+
+#endif /* EINA_FILE_INLINE_H_ */

-- 


Reply via email to