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