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