X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fsortspec.c;h=83b04b597a75c6ddd4cf66baf9751db11c48ea34;hp=7b5d09668d797cee55f70a71ec30c530ecf347d6;hb=3f282496986cbae7fd4bd7f95d44bf47a2cc6874;hpb=fb6d99a0c7e07d9cc4a315c447deaf6564a85505 diff --git a/src/sortspec.c b/src/sortspec.c index 7b5d096..83b04b5 100644 --- a/src/sortspec.c +++ b/src/sortspec.c @@ -1,8 +1,8 @@ /* - * Copyright (C) 1995-2005, Index Data ApS + * Copyright (C) 1995-2006, Index Data ApS * See the file LICENSE for details. * - * $Id: sortspec.c,v 1.5 2005-06-25 15:46:05 adam Exp $ + * $Id: sortspec.c,v 1.7 2006-05-30 22:00:09 adam Exp $ */ /** * \file sortspec.c @@ -19,7 +19,7 @@ Z_SortKeySpecList *yaz_sort_spec (ODR out, const char *arg) { - char sort_string_buf[32], sort_flags[32]; + char sort_string_buf[64], sort_flags[64]; Z_SortKeySpecList *sksl = (Z_SortKeySpecList *) odr_malloc (out, sizeof(*sksl)); int off; @@ -27,7 +27,7 @@ Z_SortKeySpecList *yaz_sort_spec (ODR out, const char *arg) sksl->num_specs = 0; sksl->specs = (Z_SortKeySpec **)odr_malloc (out, sizeof(sksl->specs) * 20); - while ((sscanf (arg, "%31s %31s%n", sort_string_buf, + while ((sscanf (arg, "%63s %63s%n", sort_string_buf, sort_flags, &off)) == 2 && off > 1) { int i; @@ -109,6 +109,20 @@ Z_SortKeySpecList *yaz_sort_spec (ODR out, const char *arg) case 's': *sks->caseSensitivity = Z_SortKeySpec_caseSensitive; break; + case '!': + sks->which = Z_SortKeySpec_abort; + sks->u.abort = odr_nullval(); + break; + case '=': + sks->which = Z_SortKeySpec_missingValueData; + sks->u.missingValueData = (Odr_oct*) + odr_malloc(out, sizeof(Odr_oct)); + i++; + sks->u.missingValueData->len = strlen(sort_flags+i); + sks->u.missingValueData->size = sks->u.missingValueData->len; + sks->u.missingValueData->buf = (unsigned char*) + odr_strdup(out, sort_flags+i); + i += strlen(sort_flags+i); } } }