aboutsummaryrefslogtreecommitdiff
path: root/utfutf.c
diff options
context:
space:
mode:
authorAlexander Gutkin <agutkin@google.com>2014-02-28 11:33:45 +0000
committerAlexander Gutkin <agutkin@google.com>2014-02-28 11:33:45 +0000
commit439f3d1f87279a8be383ee01ef98cb9a5ca68573 (patch)
treede42c34fb1e2a4f5997782c71730ffea07667d52 /utfutf.c
parent86456b0f43cde20930f39abe12c9255c3e185712 (diff)
downloadlibutf-439f3d1f87279a8be383ee01ef98cb9a5ca68573.tar.gz
Initial revision of libutf library.
Libutf is a port of Plan 9's support library for UTF-8 and Unicode. Downloaded from http://swtch.com/plan9port/unix/libutf.tgz. No modifications required to compile. Change-Id: I5646bc8709bafc14039d30e28a0c69a804e78548
Diffstat (limited to 'utfutf.c')
-rw-r--r--utfutf.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/utfutf.c b/utfutf.c
new file mode 100644
index 0000000..13c8502
--- /dev/null
+++ b/utfutf.c
@@ -0,0 +1,41 @@
+/*
+ * The authors of this software are Rob Pike and Ken Thompson.
+ * Copyright (c) 2002 by Lucent Technologies.
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose without fee is hereby granted, provided that this entire notice
+ * is included in all copies of any software which is or includes a copy
+ * or modification of this software and in all copies of the supporting
+ * documentation for such software.
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE
+ * ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ */
+#include <stdarg.h>
+#include <string.h>
+#include "plan9.h"
+#include "utf.h"
+
+
+/*
+ * Return pointer to first occurrence of s2 in s1,
+ * 0 if none
+ */
+char*
+utfutf(char *s1, char *s2)
+{
+ char *p;
+ long f, n1, n2;
+ Rune r;
+
+ n1 = chartorune(&r, s2);
+ f = r;
+ if(f <= Runesync) /* represents self */
+ return strstr(s1, s2);
+
+ n2 = strlen(s2);
+ for(p=s1; p=utfrune(p, f); p+=n1)
+ if(strncmp(p, s2, n2) == 0)
+ return p;
+ return 0;
+}