summaryrefslogtreecommitdiff
path: root/pjlib/src
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2014-01-16 05:30:46 +0000
committerLiong Sauw Ming <ming@teluu.com>2014-01-16 05:30:46 +0000
commite56ea14ab8531ee3cec375460577d1b89bf62e26 (patch)
treedf77c3acb961514b2022ee9e030071b691145920 /pjlib/src
parentbd1c47e995a3a844868f1d4dcc8f77f163ae721b (diff)
Closed #1723: Merging pjsua2 branch into trunk
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4704 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src')
-rw-r--r--pjlib/src/pj/string.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/pjlib/src/pj/string.c b/pjlib/src/pj/string.c
index 5610c907..d62b674a 100644
--- a/pjlib/src/pj/string.c
+++ b/pjlib/src/pj/string.c
@@ -175,6 +175,44 @@ PJ_DEF(unsigned long) pj_strtoul2(const pj_str_t *str, pj_str_t *endptr,
return value;
}
+PJ_DEF(float) pj_strtof(const pj_str_t *str)
+{
+ pj_str_t part;
+ char *pdot;
+ float val;
+
+ if (str->slen == 0)
+ return 0;
+
+ pdot = (char*)pj_memchr(str->ptr, '.', str->slen);
+ part.ptr = str->ptr;
+ part.slen = pdot ? pdot - str->ptr : str->slen;
+
+ if (part.slen)
+ val = (float)pj_strtol(&part);
+ else
+ val = 0;
+
+ if (pdot) {
+ part.ptr = pdot + 1;
+ part.slen = (str->ptr + str->slen - pdot - 1);
+ if (part.slen) {
+ pj_str_t endptr;
+ float fpart, fdiv;
+ int i;
+ fpart = (float)pj_strtoul2(&part, &endptr, 10);
+ fdiv = 1.0;
+ for (i=0; i<(part.slen - endptr.slen); ++i)
+ fdiv = fdiv * 10;
+ if (val >= 0)
+ val += (fpart / fdiv);
+ else
+ val -= (fpart / fdiv);
+ }
+ }
+ return val;
+}
+
PJ_DEF(int) pj_utoa(unsigned long val, char *buf)
{
return pj_utoa_pad(val, buf, 0, 0);