Mercurial > hg > nginx
comparison src/core/ngx_string.c @ 3512:098100f5f54b
ngx_atofp()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 14 May 2010 09:01:30 +0000 |
parents | 76fc7ad463cb |
children | 76d252724db5 |
comparison
equal
deleted
inserted
replaced
3511:e2fa6caf3305 | 3512:098100f5f54b |
---|---|
875 return value; | 875 return value; |
876 } | 876 } |
877 } | 877 } |
878 | 878 |
879 | 879 |
880 /* parse a fixed point number, e.g., ngx_atofp("10.5", 4, 2) returns 1050 */ | |
881 | |
882 ngx_int_t | |
883 ngx_atofp(u_char *line, size_t n, size_t point) | |
884 { | |
885 ngx_int_t value; | |
886 ngx_uint_t dot; | |
887 | |
888 if (n == 0) { | |
889 return NGX_ERROR; | |
890 } | |
891 | |
892 dot = 0; | |
893 | |
894 for (value = 0; n--; line++) { | |
895 | |
896 if (point == 0) { | |
897 return NGX_ERROR; | |
898 } | |
899 | |
900 if (*line == '.') { | |
901 if (dot) { | |
902 return NGX_ERROR; | |
903 } | |
904 | |
905 dot = 1; | |
906 continue; | |
907 } | |
908 | |
909 if (*line < '0' || *line > '9') { | |
910 return NGX_ERROR; | |
911 } | |
912 | |
913 value = value * 10 + (*line - '0'); | |
914 point -= dot; | |
915 } | |
916 | |
917 while (point--) { | |
918 value = value * 10; | |
919 } | |
920 | |
921 if (value < 0) { | |
922 return NGX_ERROR; | |
923 | |
924 } else { | |
925 return value; | |
926 } | |
927 } | |
928 | |
929 | |
880 ssize_t | 930 ssize_t |
881 ngx_atosz(u_char *line, size_t n) | 931 ngx_atosz(u_char *line, size_t n) |
882 { | 932 { |
883 ssize_t value; | 933 ssize_t value; |
884 | 934 |