diff --git a/build-aux/check-mescc.sh b/build-aux/check-mescc.sh index eec5b9a3..26403a31 100755 --- a/build-aux/check-mescc.sh +++ b/build-aux/check-mescc.sh @@ -134,6 +134,7 @@ t 85-sizeof 86-strncpy 87-sscanf +88-strrchr 90-strpbrk 91-fseek 92-stat diff --git a/lib/libc+tcc.c b/lib/libc+tcc.c index e7cf1cc7..3c4f8650 100644 --- a/lib/libc+tcc.c +++ b/lib/libc+tcc.c @@ -448,7 +448,7 @@ strchr (char const *s, int c) { if (c == *p) return p; - *p++; + p++; } return 0; } @@ -472,12 +472,17 @@ char * strrchr (char const *s, int c) { int n = strlen (s); - if (!n) return 0; - char const *p = s + n - 1; - while (*p || !c) + if (!n) + return 0; + char const *p = s + n; + if (!*p && !c) + return p; + p--; + while (n-- && (*p || !c)) { - if (c == *p) return p; - *p--; + if (c == *p) + return p; + p--; } return 0; } diff --git a/scaffold/tests/88-strrchr.c b/scaffold/tests/88-strrchr.c new file mode 100644 index 00000000..44d1ad57 --- /dev/null +++ b/scaffold/tests/88-strrchr.c @@ -0,0 +1,37 @@ +/* -*-comment-start: "//";comment-end:""-*- + * Mes --- Maxwell Equations of Software + * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * + * This file is part of Mes. + * + * Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Mes. If not, see . + */ + +#include + +int +main (int argc, char *argv[]) +{ + char *string = "foo.bar"; + char *p = strrchr (string, 0); + if (!p) + return 1; + if (strcmp (p, "")) + return 2; + p = strrchr (string, '.'); + if (strcmp (p, ".bar")) + return 3; + + return 0; +}