Great, thanks. On Tue, Nov 10, 2015 at 6:56 PM, Cedric BAIL <[email protected]> wrote:
> On Tue, Nov 10, 2015 at 3:06 AM, Tom Hacohen <[email protected]> wrote: > > Hey Cedric, > > > > The APIs are marked as since 1.16.0. Please fix that, and look for those > > things in the future. > > Already done, see b9913d52. > > > -- > > 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 > > > > > > -- > Cedric BAIL > > > ------------------------------------------------------------------------------ > _______________________________________________ > enlightenment-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > ------------------------------------------------------------------------------ _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
