github.com/akaros/go-akaros@v0.0.0-20181004170632-85005d477eab/src/lib9/utf/utfrrune.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  /* const - removed for go code */
    20  char*
    21  utfrrune(const char *s, Rune c)
    22  {
    23  	long c1;
    24  	Rune r;
    25  	const char *s1;
    26  
    27  	if(c < Runesync)		/* not part of utf sequence */
    28  		return strrchr(s, (char)c);
    29  
    30  	s1 = 0;
    31  	for(;;) {
    32  		c1 = *(uchar*)s;
    33  		if(c1 < Runeself) {	/* one byte rune */
    34  			if(c1 == 0)
    35  				return (char*)s1;
    36  			if(c1 == c)
    37  				s1 = s;
    38  			s++;
    39  			continue;
    40  		}
    41  		c1 = chartorune(&r, s);
    42  		if(r == c)
    43  			s1 = s;
    44  		s += c1;
    45  	}
    46  }