-/*
- * Copyright (C) 1994-2002, Index Data
- * All rights reserved.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: zsets.c,v 1.34 2002-04-04 14:14:13 adam Exp $
- */
+/* $Id: zsets.c,v 1.38 2002-08-02 19:26:56 adam Exp $
+ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
+ Index Data Aps
+
+This file is part of the Zebra server.
+
+Zebra 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, or (at your option) any later
+version.
+
+Zebra 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 Zebra; see the file LICENSE.zebra. If not, write to the
+Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+*/
+
+
#include <stdio.h>
#include <assert.h>
#ifdef WIN32
}
-const char *zebra_resultSetTerms (ZebraHandle zh, const char *setname,
- int no, int *count, int *no_max)
+int zebra_resultSetTerms (ZebraHandle zh, const char *setname,
+ int no, int *count,
+ int *type, char *out, size_t *len)
{
ZebraSet s = resultSetGet (zh, setname);
+ int no_max = 0;
- *count = 0;
- *no_max = 0;
+ if (count)
+ *count = 0;
if (!s || !s->rset)
return 0;
- *no_max = s->rset->no_rset_terms;
- if (no < 0 || no >= *no_max)
+ no_max = s->rset->no_rset_terms;
+ if (no < 0 || no >= no_max)
return 0;
- *count = s->rset->rset_terms[no]->count;
- return s->rset->rset_terms[no]->name;
+ if (count)
+ *count = s->rset->rset_terms[no]->count;
+ if (type)
+ *type = s->rset->rset_terms[no]->type;
+
+ if (out)
+ {
+ char *inbuf = s->rset->rset_terms[no]->name;
+ size_t inleft = strlen(inbuf);
+ size_t outleft = *len - 1;
+ int converted = 0;
+#if HAVE_ICONV_H
+ if (zh->iconv_from_utf8 != (iconv_t)(-1))
+ {
+ char *outbuf = out;
+ size_t ret;
+
+ ret = iconv(zh->iconv_from_utf8, &inbuf, &inleft,
+ &outbuf, &outleft);
+ if (ret == (size_t)(-1))
+ *len = 0;
+ else
+ *len = outbuf - out;
+ converted = 1;
+ }
+#endif
+ if (!converted)
+ {
+ if (inleft > outleft)
+ inleft = outleft;
+ *len = inleft;
+ memcpy (out, inbuf, *len);
+ }
+ out[*len] = 0;
+ }
+ return no_max;
}