github.com/tcnksm/go@v0.0.0-20141208075154-439b32936367/src/lib9/utf/utfutf.c (about)

     1  /*
     2   * The authors of this software are Rob Pike and Ken Thompson.
     3   *              Copyright (c) 2002 by Lucent Technologies.
     4   * Permission to use, copy, modify, and distribute this software for any
     5   * purpose without fee is hereby granted, provided that this entire notice
     6   * is included in all copies of any software which is or includes a copy
     7   * or modification of this software and in all copies of the supporting
     8   * documentation for such software.
     9   * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
    10   * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
    11   * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
    12   * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
    13   */
    14  #include <u.h>
    15  #include <libc.h>
    16  #include "utf.h"
    17  #include "utfdef.h"
    18  
    19  
    20  /*
    21   * Return pointer to first occurrence of s2 in s1,
    22   * 0 if none
    23   */
    24  const
    25  char*
    26  utfutf(const char *s1, const char *s2)
    27  {
    28  	const char *p;
    29  	long f, n1;
    30  	size_t n2;
    31  	Rune r;
    32  
    33  	n1 = chartorune(&r, s2);
    34  	f = r;
    35  	if(f <= Runesync)		/* represents self */
    36  		return strstr(s1, s2);
    37  
    38  	n2 = strlen(s2);
    39  	for(p=s1; (p=utfrune(p, r)) != 0; p+=n1)
    40  		if(strncmp(p, s2, n2) == 0)
    41  			return p;
    42  	return 0;
    43  }