Вторник, 10 Июнь 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;
}

Написано в: 16:44 | 0 комментариев | | теги: , , , | постоянная ссылка |
Добавить пост в:   Delicious Reddit Slashdot Digg Technorati Google


Последние комментарии

Комментарии

К этой публикации комментариев нет

Форма комментирования для «nginx programming: поиcк подстроки в строке»

Обязательное поле. Не больше 30 символов.

Обязательное поле