diff --git a/util/ChangeLog b/util/ChangeLog index b6f35d3f4..647973faf 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,11 @@ +2005-04-12 David Shaw + + * assuan-client.c: Fix warning on OSX. + + * memrchr.c: New replacement function. + + * assuan-buffer.c: Use it here. + 2005-04-04 Werner Koch * memory.c (xcalloc, xcalloc_secure): New wrappers. diff --git a/util/assuan-buffer.c b/util/assuan-buffer.c index 47f4e189e..949e7f49d 100644 --- a/util/assuan-buffer.c +++ b/util/assuan-buffer.c @@ -34,6 +34,10 @@ #endif #include "assuan-defs.h" +#ifndef HAVE_MEMRCHR +void *memrchr(const void *s, int c, size_t n); +#endif + static int writen (assuan_context_t ctx, const char *buffer, size_t length) { diff --git a/util/assuan-client.c b/util/assuan-client.c index 08ea0f6cc..a1cd2a53a 100644 --- a/util/assuan-client.c +++ b/util/assuan-client.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "assuan-defs.h" diff --git a/util/memrchr.c b/util/memrchr.c new file mode 100644 index 000000000..009ae8ec4 --- /dev/null +++ b/util/memrchr.c @@ -0,0 +1,46 @@ +/* memrchr.c - libc replacement function + * Copyright (C) 2005 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG 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 2 of the License, or + * (at your option) any later version. + * + * GnuPG 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* + memrchr() is a GNU function that might not be available everywhere. + It's basically the inverse of memchr() - search backwards in a + memory block for a particular character. +*/ + +#include +#include + +/* There are many ways to optimize this, but this is a simple + unoptimized implementation. */ +void * +memrchr(const void *s, int c, size_t n) +{ + const unsigned char *start=s,*end=s+n-1; + + while(end>=start) + { + if(*end==c) + return (void *)end; + else + end--; + } + + return NULL; +}