| /* indexbyte.c -- implement strings.IndexByte for Go. |
| |
| Copyright 2013 The Go Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style |
| license that can be found in the LICENSE file. */ |
| |
| #include <stddef.h> |
| |
| #include "runtime.h" |
| #include "go-string.h" |
| |
| /* This is in C so that the compiler can optimize it appropriately. |
| We deliberately don't split the stack in case it does call the |
| library function, which shouldn't need much stack space. */ |
| |
| intgo IndexByte (String, char) |
| __asm__ (GOSYM_PREFIX "strings.IndexByte") |
| __attribute__ ((no_split_stack)); |
| |
| intgo |
| IndexByte (String s, char b) |
| { |
| const char *p; |
| |
| p = __builtin_memchr ((const char *) s.str, b, s.len); |
| if (p == NULL) |
| return -1; |
| return p - (const char *) s.str; |
| } |