1439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin/*
2439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * The authors of this software are Rob Pike and Ken Thompson.
3439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin *              Copyright (c) 2002 by Lucent Technologies.
4439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * Permission to use, copy, modify, and distribute this software for any
5439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * purpose without fee is hereby granted, provided that this entire notice
6439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * is included in all copies of any software which is or includes a copy
7439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * or modification of this software and in all copies of the supporting
8439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * documentation for such software.
9439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
1096039b7897bb8b5853e91404d97abca72d933c69Alexander Gutkin * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
1196039b7897bb8b5853e91404d97abca72d933c69Alexander Gutkin * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
12439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
13439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin */
14439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin#include <stdarg.h>
15439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin#include <string.h>
16439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin#include "utf.h"
1796039b7897bb8b5853e91404d97abca72d933c69Alexander Gutkin#include "utfdef.h"
18439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin
19439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin/*
20439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * Return pointer to first occurrence of s2 in s1,
21439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin * 0 if none
22439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin */
2396039b7897bb8b5853e91404d97abca72d933c69Alexander Gutkinconst
24439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander GutkinRune*
2596039b7897bb8b5853e91404d97abca72d933c69Alexander Gutkinrunestrstr(const Rune *s1, const Rune *s2)
26439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin{
2796039b7897bb8b5853e91404d97abca72d933c69Alexander Gutkin	const Rune *p, *pa, *pb;
28439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin	int c0, c;
29439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin
30439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin	c0 = *s2;
31439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin	if(c0 == 0)
32439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin		return s1;
33439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin	s2++;
34439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin	for(p=runestrchr(s1, c0); p; p=runestrchr(p+1, c0)) {
35439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin		pa = p;
36439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin		for(pb=s2;; pb++) {
37439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin			c = *pb;
38439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin			if(c == 0)
39439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin				return p;
40439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin			if(c != *++pa)
41439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin				break;
42439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin		}
43439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin	}
44439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin	return 0;
45439f3d1f87279a8be383ee01ef98cb9a5ca68573Alexander Gutkin}
46