Tuesday, 10 June 2008

nginx programming: поиcк подстроки в строке

В процессе написания своих модулей под nginx часто приходится искать подстроку в строке. К сожалению обычный strstr не подходит из-за особеностей строк.

Для этих целей и была написана своя strstr, может кому пригодится:

size_t ngx_string_strstr(ngx_str_t *result, ngx_str_t* str, ngx_str_t *need)
{
  u_char     *str_ptr = str->data;
  u_char     *str_end = str->data + str->len — need->len;

  result->data = NULL;
  result->len = 0;

  if (str->len == 0) {
    return 0;
  }

  if (str_end <= str_ptr) {
    return 0;
  }

  switch (str->len) {
  case 1:
    {
      for (; str_ptr <= str_end; ++str_ptr) {
        if (*str_ptr == *need->data) {
          result->data = str_ptr;
      result->len = str->len — (str_ptr — str->data);
          break;
        }
      }
    }
    break;
  default:
    {
      for (; str_ptr <= str_end; ++str_ptr) {
        if (*str_ptr == *need->data && memcmp(str_ptr, need->data, need->len) == 0) {
          result->data = str_ptr;
          result->len = str->len — (str_ptr — str->data);
          break;
        }
      }
    }
  }

  return result->len;
}

Write on: 16:44 | 0 comments | | tags: , , , | permalink |
Add post to:   Delicious Reddit Slashdot Digg Technorati Google


Add comment

Comments

No comments for this post

Comment form for «nginx programming: поиcк подстроки в строке»

Required. 30 chars of fewer.

Required.