Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/yaz
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 19 Jan 2010 13:16:08 +0000 (14:16 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 19 Jan 2010 13:16:08 +0000 (14:16 +0100)
1  2 
src/seshigh.c

diff --combined src/seshigh.c
@@@ -127,6 -127,16 +127,16 @@@ static void wr_diag(WRBUF w, int error
      wrbuf_puts(w, " ");    
  }
  
+ static int odr_int_to_int(Odr_int v)
+ {
+     if (v >= INT_MAX)
+         return INT_MAX;
+     else if (v <= INT_MIN)
+         return INT_MIN;
+     else
+         return (int) v;
+ }
  /*
   * Create and initialize a new association-handle.
   *  channel  : iochannel for the current line.
@@@ -836,15 -846,6 +846,6 @@@ static int ccl2pqf(ODR odr, const Odr_o
      return 0;
  }
  
- static int odr_int_to_int(Odr_int v)
- {
-     if (v >= INT_MAX)
-         return INT_MAX;
-     else if (v <= INT_MIN)
-         return INT_MIN;
-     else return v;
- }
  static void srw_bend_search(association *assoc, request *req,
                              Z_SRW_PDU *sr,
                              Z_SRW_PDU *res,
@@@ -1244,7 -1245,6 +1245,7 @@@ static void srw_bend_scan(association *
      srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics, sr);
      if (srw_res->num_diagnostics == 0 && assoc->init)
      {
 +        int step_size = 0;
          struct scan_entry *save_entries;
  
          bend_scan_rr *bsrr = (bend_scan_rr *)
          bsrr->num_entries = srw_req->maximumTerms ?
              odr_int_to_int(*srw_req->maximumTerms) : 10;
          bsrr->term_position = srw_req->responsePosition ?
 -            *srw_req->responsePosition : 1;
 +            odr_int_to_int(*srw_req->responsePosition) : 1;
  
          bsrr->errcode = 0;
          bsrr->errstring = 0;
          bsrr->referenceId = 0;
          bsrr->stream = assoc->encode;
          bsrr->print = assoc->print;
 -        bsrr->step_size = odr_intdup(assoc->decode, 0);
 +        bsrr->step_size = &step_size;
          bsrr->entries = 0;
          bsrr->setname = 0;
  
@@@ -2290,10 -2290,10 +2291,10 @@@ static Z_APDU *process_initRequest(asso
      yaz_log(log_requestdetail, "Negotiated to v%d: %s", assoc->version, options);
  
      if (*req->maximumRecordSize < assoc->maximumRecordSize)
-         assoc->maximumRecordSize = *req->maximumRecordSize;
+         assoc->maximumRecordSize = odr_int_to_int(*req->maximumRecordSize);
  
      if (*req->preferredMessageSize < assoc->preferredMessageSize)
-         assoc->preferredMessageSize = *req->preferredMessageSize;
+         assoc->preferredMessageSize = odr_int_to_int(*req->preferredMessageSize);
  
      resp->preferredMessageSize =
          odr_intdup(assoc->encode, assoc->preferredMessageSize);
@@@ -2918,7 -2918,6 +2919,7 @@@ static Z_APDU *process_scanRequest(asso
      bend_scan_rr *bsrr = (bend_scan_rr *)
          odr_malloc(assoc->encode, sizeof(*bsrr));
      struct scan_entry *save_entries;
 +    int step_size = 0;
  
      yaz_log(log_requestdetail, "Got ScanRequest");
  
      res->referenceId = req->referenceId;
  
      /* if step is absent, set it to 0 */
 -    res->stepSize = odr_intdup(assoc->encode, 0);
      if (req->stepSize)
 -        *res->stepSize = *req->stepSize;
 +        step_size = odr_int_to_int(*req->stepSize);
  
      res->scanStatus = scanStatus;
      res->numberOfEntriesReturned = numberOfEntriesReturned;
      bsrr->referenceId = req->referenceId;
      bsrr->stream = assoc->encode;
      bsrr->print = assoc->print;
 -    bsrr->step_size = res->stepSize;
 +    bsrr->step_size = &step_size;
      bsrr->setname = yaz_oi_get_string_oid(&req->otherInfo, 
                                            yaz_oid_userinfo_scan_set, 1, 0);
      bsrr->entries = 0;
      log_scan_term_level(log_requestdetail, req->termListAndStartPoint, 
                          bsrr->attributeset);
      bsrr->term_position = req->preferredPositionInResponse ?
 -        *req->preferredPositionInResponse : 1;
 +        odr_int_to_int(*req->preferredPositionInResponse) : 1;
  
      ((int (*)(void *, bend_scan_rr *))
       (*assoc->init->bend_scan))(assoc->backend, bsrr);
              *scanStatus = Z_Scan_partial_5;
          else
              *scanStatus = Z_Scan_success;
 +        res->stepSize = odr_intdup(assoc->encode, step_size);
          ents->entries = tab;
          ents->num_entries = bsrr->num_entries;
          res->numberOfEntriesReturned = odr_intdup(assoc->encode, 
                                                     ents->num_entries);
 -        res->positionOfTerm = &bsrr->term_position;
 +        res->positionOfTerm = odr_intdup(assoc->encode, bsrr->term_position);
          for (i = 0; i < bsrr->num_entries; i++)
          {
              Z_Entry *e;
@@@ -3211,7 -3210,7 +3212,7 @@@ static Z_APDU *process_deleteRequest(as
      bdrr->statuses = 0;
      if (bdrr->num_setnames > 0)
      {
 -        bdrr->statuses = (Odr_int*) 
 +        bdrr->statuses = (int*) 
              odr_malloc(assoc->encode, sizeof(*bdrr->statuses) *
                         bdrr->num_setnames);
          for (i = 0; i < bdrr->num_setnames; i++)
                  (Z_ListStatus *)
                  odr_malloc(assoc->encode,
                              sizeof(**res->deleteListStatuses->elements));
 -            res->deleteListStatuses->elements[i]->status = bdrr->statuses+i;
 +            res->deleteListStatuses->elements[i]->status =
 +                odr_intdup(assoc->encode, bdrr->statuses[i]);
              res->deleteListStatuses->elements[i]->id =
                  odr_strdup(assoc->encode, bdrr->setnames[i]);
          }