%% options copyright owner = Dirk Krause copyright year = 2014 license = bsd %% header /** @file dk3madso.h Output double values to string. */ #include #include #if DK3_HAVE_SYS_TYPES_H #include #endif #if DK3_HAVE_STDINT #include #endif #if DK3_HAVE_INTTYPES_H #include #endif #if DK3_HAVE_LIMITS_H #include #endif #if DK3_HAVE_MATH_H #include #endif #if DK3_HAVE_FLOAT_H #include #endif #ifdef __cplusplus extern "C" { #endif /** Convert double value to string. @param rb Result buffer. @param sz Size of rb (number of char). @param va Value to convert. @return 1 on success, 0 on error. */ int dk3ma_d_to_c8_string(char *rb, size_t sz, double va); /** Convert double value to string. @param rb Result buffer. @param sz Size of rb (number of dkChar). @param va Value to convert. @return 1 on success, 0 on error. */ int dk3ma_d_to_string(dkChar *rb, size_t sz, double va); #ifdef __cplusplus } #endif %% module #include "dk3ma.h" #if DK3_HAVE_STDLIB_H #include #endif #if DK3_HAVE_UNISTD_H #include #endif #if DK3_HAVE_STRING_H #include #endif #if DK3_HAVE_ERRNO_H #include #endif $!trace-include int dk3ma_d_to_c8_string(char *rb, size_t sz, double va) { int back = 0; #if DK3_HAVE_SNPRINTF || DK3_HAVE__SNPRINTF || DK3_ON_WINDOWS int res; if ((NULL != rb) && (0 < sz)) { #if DK3_HAVE_SNPRINTF res = snprintf(rb, sz, "%lg", va); #else res = _snprintf(rb, sz, "%lg", va); #endif if (0 < res) { /* Anything written? */ if ((size_t)res < sz) { /* Buffer large enough? */ rb[res] = '\0'; rb[sz - 1] = '\0'; back = 1; } else { /* Buffer too small! */ rb[sz - 1] = '\0'; } } else { /* Nothing written! */ rb[0] = '\0'; } } #else char buf[128]; if ((NULL != rb) && (0 < sz)) { sprintf(buf, "%lg", va); if (dk3str_c8_len(buf) < sz) { dk3str_c8_cpy(rb, buf); back = 1; } else { rb[0] = '\0'; } } #endif return back; } int dk3ma_d_to_string(dkChar *rb, size_t sz, double va) { #if DK3_CHAR_SIZE > 1 char buf[128]; char *cptr; dkChar *dptr; int back = 0; if ((NULL != rb) && (0 < sz)) { if (dk3ma_d_to_c8_string(buf, sizeof(buf), va)) { if (dk3str_c8_len(buf) < sz) { back = 1; dptr = rb; cptr = buf; while(*cptr) { *(dptr++) = (dkChar)(*(cptr++)); } *dptr = dkT('\0'); } else { rb[0] = dkT('\0'); } } else { rb[0] = dkT('\0'); } } return back; #else return (dk3ma_d_to_c8_string(rb, sz, va)); #endif }