| 965 | } |
| 966 | |
| 967 | const ACL_VSTRING *acl_buffer_gets_nonl(ACL_VSTRING *vp, const char **src, size_t dlen) |
| 968 | { |
| 969 | const char *myname = "acl_buffer_gets_nonl"; |
| 970 | const char *ptr, *pend, *pbegin = *src; |
| 971 | |
| 972 | if (dlen <= 0) { |
| 973 | acl_msg_warn("%s(%d): dlen(%d) invalid", |
| 974 | myname, __LINE__, (int) dlen); |
| 975 | return NULL; |
| 976 | } |
| 977 | |
| 978 | ptr = memchr(pbegin, '\n', dlen); |
| 979 | if (ptr == NULL) { |
| 980 | acl_vstring_memcat(vp, pbegin, dlen); |
| 981 | ACL_VSTRING_TERMINATE(vp); |
| 982 | *src += dlen; /* �ƶ� *src ָ��λ�� */ |
| 983 | return NULL; |
| 984 | } |
| 985 | *src = ptr + 1; /* �ƶ� *src ָ��λ�� */ |
| 986 | pend = ptr; |
| 987 | |
| 988 | /* ȥ������� \r\n */ |
| 989 | while (pend >= pbegin) { |
| 990 | if (*pend != '\r' && *pend != '\n') { |
| 991 | break; |
| 992 | } |
| 993 | pend--; |
| 994 | } |
| 995 | if (pend < pbegin) { |
| 996 | /* ˵�� data ��ֻ���� \r, \n */ |
| 997 | ACL_VSTRING_TERMINATE(vp); |
| 998 | return vp; |
| 999 | } |
| 1000 | acl_vstring_memcat(vp, pbegin, pend - pbegin + 1); |
| 1001 | ACL_VSTRING_TERMINATE(vp); |
| 1002 | return vp; |
| 1003 | } |
| 1004 | |
| 1005 | const ACL_VSTRING *acl_buffer_gets(ACL_VSTRING *vp, const char **src, size_t dlen) |
| 1006 | { |
searching dependent graphs…