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
