Hey Cedric,

The APIs are marked as since 1.16.0. Please fix that, and look for those 
things in the future.

--
Tom.

On 09/11/15 20:51, Shilpa Singh wrote:
> cedric pushed a commit to branch master.
>
> http://git.enlightenment.org/core/efl.git/commit/?id=0c1bb7d7b3d4e9a91ae33455ab761d7e9405c2df
>
> commit 0c1bb7d7b3d4e9a91ae33455ab761d7e9405c2df
> Author: Shilpa Singh <[email protected]>
> Date:   Mon Nov 9 12:42:48 2015 -0800
>
>      eina: add API eina_strftime
>
>      Summary:
>      Add new API eina_strftime API in eina_str
>
>      @feature
>
>      Test Plan: test case and example also updated
>
>      Reviewers: tasn, cedric
>
>      Reviewed By: cedric
>
>      Subscribers: cedric
>
>      Differential Revision: https://phab.enlightenment.org/D3148
>
>      Signed-off-by: Cedric BAIL <[email protected]>
> ---
>   AUTHORS                         |  1 +
>   src/examples/eina/eina_str_01.c | 11 ++++++++++-
>   src/lib/eina/eina_str.c         | 33 +++++++++++++++++++++++++++++++++
>   src/lib/eina/eina_str.h         | 26 ++++++++++++++++++++++++++
>   src/tests/eina/eina_test_str.c  | 19 +++++++++++++++++++
>   5 files changed, 89 insertions(+), 1 deletion(-)
>
> diff --git a/AUTHORS b/AUTHORS
> index eab2011..f714c39 100644
> --- a/AUTHORS
> +++ b/AUTHORS
> @@ -53,6 +53,7 @@ ChunEon Park (Hermet) <[email protected]>
>   Rajeev Ranjan (Rajeev) <[email protected]> <[email protected]>
>   Subodh Kumar <[email protected]>
>   Michelle Legrand <[email protected]>
> +Shilpa Singh <[email protected]> <[email protected]>
>
>   Eet
>   ---
> diff --git a/src/examples/eina/eina_str_01.c b/src/examples/eina/eina_str_01.c
> index 25fe75a..fbe2cf0 100644
> --- a/src/examples/eina/eina_str_01.c
> +++ b/src/examples/eina/eina_str_01.c
> @@ -14,6 +14,9 @@ int main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
>      char *part2 = "There are many copies. And they have a plan.";
>      char **arr;
>      int i;
> +   char *time_arr;
> +   time_t curr_time;
> +   struct tm *info;
>
>      eina_init();
>
> @@ -58,7 +61,13 @@ int main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
>      eina_strlcat(str, "humans", 14);
>      printf("%s\n", str);
>      free(str);
> -
> +
> +   curr_time = time(NULL);
> +   info = localtime(&curr_time);
> +   time_arr = eina_strftime("%d/%m/%Y", info);
> +   printf("Today's Date: %s\n", time_arr);
> +   free(time_arr);
> +
>      eina_shutdown();
>
>      return 0;
> diff --git a/src/lib/eina/eina_str.c b/src/lib/eina/eina_str.c
> index c3d9c4c..952f6ce 100644
> --- a/src/lib/eina/eina_str.c
> +++ b/src/lib/eina/eina_str.c
> @@ -374,6 +374,39 @@ eina_strlcat(char *dst, const char *src, size_t siz)
>      return(dlen + (s - src)); /* count does not include NUL */
>   }
>
> +EAPI char *
> +eina_strftime(const char *format, const struct tm *tm)
> +{
> +   const size_t flen = strlen(format);
> +   size_t buflen = 16; // An arbitrary starting size
> +   char *buf = NULL;
> +
> +   do {
> +      char *tmp;
> +      size_t len;
> +
> +      tmp = realloc(buf, buflen * sizeof(char));
> +      if (!tmp) goto on_error;
> +      buf = tmp;
> +
> +      len = strftime(buf, buflen, format, tm);
> +      // Check if we have the expected result and return it.
> +      if ((len > 0 && len < buflen) || (len == 0 && flen == 0))
> +        {
> +           tmp = realloc(buf, ((len + 1) * sizeof(char)));
> +           buf = tmp;
> +           return buf;
> +        }
> +
> +      /* Possibly buf overflowed - try again with a bigger buffer */
> +      buflen <<= 1; // multiply buffer size by 2
> +   } while (buflen < 128 * flen);
> +
> + on_error:
> +   free(buf);
> +   return NULL;
> +}
> +
>   EAPI Eina_Bool
>   eina_str_has_prefix(const char *str, const char *prefix)
>   {
> diff --git a/src/lib/eina/eina_str.h b/src/lib/eina/eina_str.h
> index 100cc81..0448269 100644
> --- a/src/lib/eina/eina_str.h
> +++ b/src/lib/eina/eina_str.h
> @@ -355,6 +355,32 @@ static inline size_t eina_strlen_bounded(const char 
> *str, size_t maxlen) EINA_PU
>    * @since 1.13
>    */
>   EAPI unsigned char *eina_memdup(unsigned char *mem, size_t size, Eina_Bool 
> terminate);
> +
> +/**
> + * @brief Create and update the buffer based on strftime output.
> + *
> + * @param tm Pointer to a tm structure needed by strftime.
> + * @param format String containing format specifiers needed by strftime.
> + * @return Updated buffer based on strftime output
> + *
> + * This will create a buffer of exact required size based on strftime output
> + * once use is complete the buffer has to be freed using free.
> + *
> + * Example usage:
> + * @code
> + * time_t curr_time;
> + * struct tm *info;
> + * char *buf;
> + * curr_time = time(NULL);
> + * info = localtime(&curr_time);
> + * buf = eina_strftime("%I:%M%p", info);
> + * //after use
> + * free(buf);
> + * @endcode
> + *
> + * @since 1.16.0
> + */
> +EAPI char *eina_strftime(const char *format, const struct tm *tm);
>   #include "eina_inline_str.x"
>
>   /**
> diff --git a/src/tests/eina/eina_test_str.c b/src/tests/eina/eina_test_str.c
> index 8233dd8..97b3865 100644
> --- a/src/tests/eina/eina_test_str.c
> +++ b/src/tests/eina/eina_test_str.c
> @@ -347,6 +347,24 @@ START_TEST(str_memdup)
>   }
>   END_TEST
>
> +START_TEST(str_strftime)
> +{
> +   time_t curr_time;
> +   struct tm *info;
> +   char *buf;
> +   eina_init();
> +
> +   curr_time = time(NULL);
> +   info = localtime(&curr_time);
> +
> +   buf = eina_strftime("%I:%M%p", info);
> +   fail_if(buf == NULL);
> +   free(buf);
> +
> +   eina_shutdown();
> +}
> +END_TEST
> +
>   #ifdef HAVE_ICONV
>   START_TEST(str_convert)
>   {
> @@ -385,6 +403,7 @@ eina_test_str(TCase *tc)
>      tcase_add_test(tc, str_lcat_lcpy);
>      tcase_add_test(tc, str_join_len);
>      tcase_add_test(tc, str_memdup);
> +   tcase_add_test(tc, str_strftime);
>   #ifdef HAVE_ICONV
>      tcase_add_test(tc, str_convert);
>   #endif
>
***

------------------------------------------------------------------------------
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to