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_ */ --