| /* 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; | |
| } |