Filename:  BTR515.TXT
Products:  Btrieve NLM v5.15
           Btrieve VAP v5.15
Date:      JULY 2 1992

   This file accompanies the NLM and VAP environment patches for Btrieve
   v5.15 programs.

****************** NOTICE  ***********************
This is the last patch release for Btrieve NLM version 5.15.  Btrieve
NLM version 5.15 is no longer the current version of the Btrieve NLM
and Novell is only updating the most current version of the Btrieve
NLM.

This patch set does not contain patches for Btrieve requesters.
Instead, version replacement modules have been included in the
file BTRREQ.EXE.  BTRREQ.EXE contains the latest requesters for
DOS, Windows, OS/2, and UnixWare. The latest requester should be
use with all 5.x versions of the VAP and NLM and all 6.x versions
of the NLM.
See the BTRREQ.TXT file contained in BTRREQ.EXE for details.
***************************************************



============================================================================

Disclaimer
==========

   Novell, Inc. makes no representations or warranties with respect to any
   NetWare software, and specifically disclaims any express or implied
   warranties of merchantability, title, or fitness for a particular
   purpose.

   Distribution of any NetWare software is forbidden without the express
   written consent of Novell, Inc.  Further, Novell reserves the right to
   discontinue distribution of any NetWare software.

   Novell is not responsible for lost profits or revenue, loss of use of
   the software, loss of data, costs of re-creating lost data, the cost of
   any substitute equipment or program, or claims by any party other than
   you.  Novell strongly recommends a backup be made before any software is
   installed.  Technical support for this software may be provided at the
   discretion of Novell.

============================================================================

Contents
========

    Patch File Information
    Installation Procedure
    Source File Information
    Patch Set Descriptions

============================================================================

Patch File Information
======================

   Patch Set Filename:  BTR515.EXE

   Date:  4/19/93

Files Included:      
BTR515   DOC    This file
PATCH515 CMD      2366 09-04-92  11:16a
BPATRTRN 515      1019 09-04-92  11:16a
BPATRTRV 515       255 09-04-92  11:16a
BPATNLM  515     18941 04-09-93  12:51p
PI       EXE     33520 09-04-92  11:16a
PATCH515 BAT      2366 09-04-92  11:16a
BPATVAP  515      9088 04-15-93  12:23p


============================================================================

Installation Procedure
======================

   The installation procedure for the Btrieve v5.15 patch set is as
   follows:

   1.  Copy all the files to the directory on your system that contains the
       files to be patched, and make this the default directory.

   2.  Ensure that PI.EXE is available on the system.  PI.EXE is a patch
       utility that Novell provides to install product patches.  You can
       use PI.EXE in DOS or OS/2 environments.

       CAUTION:  Make sure you are patching the original (unpatched),
                 released version of the software, since PI.EXE cannot
                 patch a patched version. Refer to the following section,
                 "Source File Information," for a list of the original
                 files.

                 The first time you patch the ORIGINAL software, the patch
                 utility renames these files using the .ORG extension.

   3.  Run the batch or files files relevant to your situation:

       PATCH515.BAT   Corrects the VAP and NLM versions under DOS
       PATCH515.CMD   Corrects the VAP and NLM versions under OS/2

============================================================================

Source File Information
=======================

   To ensure you are patching the original files, compare the files to be
   patched with the following list, which shows the byte size and the date
   and time stamps for the original releases:

   Source File            Size     Original Date   Time
   -----------            ----     -------------   ----
   BSERVER  VAP         132015      1-24-91         5:49p
   BROUTER  VAP          12860      1-31-91        10:21a
   BROUTER  NLM          15884      1-24-91        11:38a
   BTRIEVE  NLM          64616      2-19-91        11:22a

============================================================================

Patch Set Descriptions
======================

   This section describes each patch in the patch set.  For each patch, the
   description includes one or more keywords that may help you quickly
   determine whether the patch you need for a specific problem is included
   in this patch set.

   * * * * * * * * *

   Patch Number:      1

   Platform/Product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          INDEX, SUPPLEMENTAL, EXTENDED, NULL

   Problem Fixed by This Patch:

   When Btrieve creates a supplemental index using a null key and an
   extended key type, if the null value is an even number, Btrieve does not
   recognize the extended key type.  Instead, it uses the third bit of the
   key flags word to flag the key as either binary or string.

   * * * * * * * * *

   Patch Number:      2

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          UPDATE, INSERT, GET POSITION, COMPRESSED, DUPLICATE

   Problem Fixed by This Patch:

   This patch corrects a problem that causes positioning to be lost after
   you perform an Update operation on a file with compressed records.
   Performing a Get Position operation causes Btrieve to return a Status 8
   (Invalid Positioning); a Get Next operation skips to the next key value,
   ignoring the next duplicate, if any exist.  Similarly, after an Insert
   operation is performed on a file with a compressed record, a Get
   Previous operation skips to the previous key value, instead of the
   previous duplicate, if any exist.

   * * * * * * * * *

   Patch Number:      3

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          POSITION, DELETE, STEP FIRST, STEP PREVIOUS

   Problem Fixed by This Patch:

   This patch corrects a problem that sometimes occurs when a Step Previous
   operation follows a Step First operation and a Delete operation, causing
   Btrieve to return a Status 80 (Conflict) because positioning has been
   lost on the failed Step Previous operation.  This patch restores
   positioning.

   * * * * * * * * *

   Patch Number:      4

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          TTS, PRE-IMAGE

   Problem Fixed by This Patch:

   This patch fixes a problem causing systems using the Transaction
   Tracking System (TTS) under heavy load to intermittently return a Status
   14 (Pre-Image Open Error).  Access problems continue until the file is
   closed and reopened.  The problem does not occur when the BSPXCOM -W
   parameter is set to 1.  This patch implements a semaphore to control
   TTS task switching.

   * * * * * * * * *

   Patch Number:      5

   Platform/Product:  Btrieve VAP - BSERVER.VAP, v5.15; BROUTER.VAP, v5.15
                      Btrieve NLM - BTRIEVE.NLM, v5.15; BROUTER.NLM, v5.15

                      Not included in the patch set is a patch for:
                      Btrieve Requesters (DOS) - BREQUEST.EXE, v5.16;
                                         (OS/2) - BTRCALLS.DLL, v5.17
                      This problem is source fixed in the 6.0 requesters 
                      contained in this patch kit.  

   Keywords:          EXTENDED, INSERT, BUFFER

   Problem Fixed by This Patch:

   After an Extended Insert operation, Btrieve should pass back the data
   buffer with a count of records successfully inserted in the first word
   of the buffer.  This patch corrects a problem that prevents the data
   buffer from being sent to the application if an Extended Insert returns
   a nonzero status.

   * * * * * * * * *

   Patch Number:      6

   Platform/Product:  Btrieve NLM - BROUTER.NLM, v5.15

   Keywords:          BROUTER, REMOTE, BUFFER, LENGTH

   Problem Fixed by This Patch:

   When you use BROUTER to access a remote server, it fails to update the
   application's data buffer length parameter.  This patch enables the
   update.

   * * * * * * * * *

   Patch Number:      7

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          UPDATE, DELETE, CONFLICT

   Problem Fixed by This Patch:

   When you perform an Update or Delete operation, you may receive a Status
   80 (Conflict) even though only one workstation is accessing the file.
   This problem occurs only if the record you are updating or deleting
   contains a data pattern in which all bytes except the first four are
   binary zeros.

   * * * * * * * * *

   Patch Number:      9

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          UPDATE, GET NEXT

   Problem Fixed by This Patch:

   When two clients are pointing to the same record in a file and one of
   them performs an Update operation that changes its key, the second
   client receives an unpredictable, out-of-sequence record the next time
   it performs a Get Next operation.  This patch invalidates the second
   client's current record but leaves the next and previous pointers
   unchanged to maintain the relative position for the second client.

   * * * * * * * * *

   Patch Number:      10

   Platform/Product:  Not included in the patch set is a patch for:
                      Btrieve Requester (DOS) - BREQUEST.EXE, v5.16
                      This problem is source fixed in the 6.0 requester
                      contained in this patch kit.  

   Keywords:          SPX, ESTABLISH CONNECTION, SEGMENT

   Problem Fixed by This Patch:

   Due to incorrect segment usage in the SPXEstablish-Connection library
   call, 2 bytes of the caller's data area are overwritten whenever a new
   connection is made to a Btrieve server.  This patch corrects the
   segment.

   * * * * * * * * *

   Patch Number:      11

   Platform/Product:  Btrieve NLM - BROUTER.NLM, v5.15
                      Not included in the patch set is a patch for:
                      Btrieve Requester (DOS) - BREQUEST.EXE, v5.16
                      This problem is source fixed in the 6.0 requester
                      contained in this patch kit.  

   Keywords:          BUFFER, GET, STEP NEXT

   Problem Fixed by This Patch:

   This patch corrects a problem in Patch #5 that returns corrupt data in
   the data buffer after any Get or Step Next operation returns a Status 9
   (End of File).

   * * * * * * * * *

   Patch Number:      12

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          PROTECTION CHECK, INTERRUPT, UNLOAD

   Problem Fixed by This Patch:

   This patch corrects a problem that causes protection-check NLMs to
   interrupt when the Btrieve NLM is unloading.  The interruption occurs
   because of data being written to a byte of memory that has just
   been freed.  This patch uses other memory to prevent this interruption.

   * * * * * * * * *

   Patch Number:      13

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          ARCNET, VAP, SAP, ADVERTISER

   Problem Fixed by This Patch:

   When all workstations are shut down on an ArcNet network, the VAP
   operating system returns an error to all VAPs using the Service
   Advertising Protocol (SAP).  This causes BSERVER to issue an Error Log
   message of "Send Failure in Advertiser."  This patch prevents the error
   message from being sent.  The patch is normally commented out, since
   BSERVER issues this error message only on the ArcNet, but may be enabled
   by ArcNet users who find their error logs becoming congested by the
   error message.

   * * * * * * * * *

   Patch Number:      14

   Platform/Product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          STATUS 2, TASK, TTS

   Problem Fixed by This Patch:

   With multiple workstations involved in transactions, a client can
   receive erratic and nonrepeatable Status 2s (I/O Error) on operations
   ranging from OPENs to GETs.  Btrieve returns a Status 2 because a client
   has opened the file to a Transaction Tracking System (TTS) task and then
   closed the file for rotation (due to limited handles).

   The initial client must reopen the file on the next access, but only
   that client, as the owner task, can do so; all other tasks get errors
   that translate to Status 2.  The problem disappears as soon as the first
   client accesses or ends the transaction.  This patch allows other
   clients to temporarily assume the right task number.

   * * * * * * * * *

   Patch Number:      16

   Platform/Product:  Btrieve VAP - BTRIEVE.VAP, v5.15

   Keywords:          STAT, ZERO

   Problem Fixed by This Patch:

   The STAT command may erroneously return zero for unused pages whenever
   the number is greater than 32 KB (32768).  This patch forces a nonzero
   return.

   * * * * * * * * *

   Patch Number:      17

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          UPDATE, GET PREVIOUS

   Problem Fixed by This Patch:

   Btrieve v5.10 patch #9 causes the following problem:  after an Update
   operation that changes a record's key value, a subsequent Get Previous
   operation skips any records whose key value is a duplicate of the new
   key value of the record that was just changed. This patch corrects the
   problem so that the Get Previous operation does not skip records with
   duplicate key values.

   * * * * * * * * *

   Patch Number:      19

   Platform/Product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          UPDATE, GET NEXT

   Problem Fixed by This Patch:

   When two clients are pointing to the same record in a file and one of
   them performs an Update operation that changes its key, the second
   client receives an unpredictable, out-of-sequence record the next time
   it performs a Get Next operation.  This patch invalidates the second
   client's current record but leaves the next and previous pointers
   unchanged to maintain the relative position for the second client.

   * * * * * * * * *

   Patch Number:      20

   Platform/Product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          SUPPLEMENTAL, INDEX, ACCELERATED, DUPLICATE, INFINITE

   Problem Fixed by This Patch:

   This patch corrects a problem that causes Btrieve to enter an infinite
   loop if you build a supplemental index on a file opened in accelerated
   mode, and if Btrieve detects a duplicate key value in the opened file
   when the supplemental index specifies that duplicates are not allowed.

   * * * * * * * * *

   Patch Number:      21

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          LOG, PARSING, VOLUME

   Problem Fixed by This Patch:

   This patch makes it possible to specify a log file on a different volume
   from the data file to be logged.  Applying this patch to the Btrieve NLM
   corrects filename parsing to allow you to place the log file on any
   other volume of the same server.

   * * * * * * * * *

   Patch Number:      22

   Platform/Product:  Not included in the patch set is a patch for:
                      Btrieve Requester (DOS) - BREQUEST.EXE, v5.16
                      This problem is source fixed in the 6.0 requester
                      contained in this patch kit.  

   Keywords:          SET DIRECTORY, DIRECTORY ERROR, DRIVE

   Problem Fixed by This Patch:

   On a Set Directory operation, if you specify only a drive letter and
   colon in the key buffer, Btrieve returns a Status 35 (Directory Error)
   and the default drive is not changed.  This patch corrects the problem
   so that the default drive is changed to the drive letter you specify in
   the key buffer.

   * * * * * * * * *

   Patch Number:      23

   Platform/Product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          GET POSITION, POSITION, SUCCESSFUL OPERATION

   Problem Fixed by This Patch:

   If you execute a Get Position operation without first establishing
   position, Btrieve returns a Status 0 (Successful Operation) instead of a
   Status 8 (Invalid Positioning).  The operation also returns a Status 0
   when it is performed on an empty file.  This patch corrects position
   information set by the Open operation.

   * * * * * * * * *

   Patch Number:      24

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          KEY-BIASED, +50

   Problem Fixed by This Patch:

   This patch improves Btrieve's performance on key-biased (+50)
   operations.

   * * * * * * * * *

   Patch Number:      25

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          ALTER TABLE, NETWARE SQL, ABEND

   Problem Fixed by This Patch:

   This patch corrects a problem that abends the server if the "filespec"
   string in the data buffer is longer than 64 bytes.  The problem is in an
   undocumented Btrieve function call that NetWare SQL uses in its Alter
   Table statement.

   * * * * * * * * *

   Patch Number:      26

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          DROP, SUPPLEMENTAL, INDEX, LOCKED

   Problem Fixed by This Patch:

   This patch corrects a problem that allows a Drop Supplemental Index
   operation to proceed on a file locked in a transaction by another user,
   disrupting that user's transaction.  As in Btrieve for DOS v5.10, this
   transaction now returns a Status 85 (File In Use).

   * * * * * * * * *

   Patch Number:      27

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          REBOOT, FILE, OPEN

   Problem Fixed by This Patch:

   This patch fixes the following problem:  If, after opening a file and
   starting a transaction to insert records, you restart your system during
   the transaction, the transaction and the file are left open.  This
   problem occurs because of the BSPXCOM watchdog-reset mechanism fails to
   reset the connection.

   * * * * * * * * *

   Patch Number:      28

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          CREATE, SUPPLEMENTAL, INDEX, ABEND

   Problem Fixed by This Patch:

   This patch fixes a problem that causes the server to abend when the
   Create Supplemental Index operation returns a nonzero status.  This
   problem is caused by a failure of the drop supplemental index algorithm.

   * * * * * * * * *

   Patch Number:      29

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          CREATE, SUPPLEMENTAL, INDEX, SKIP, NULL, KEY

   Problem Fixed by This Patch:

   This patch fixes the following problem:  The Create Supplemental Index
   operation fails to skip records with null-value keys even though the
   manual key flag is set in the key description file.

   * * * * * * * * *

   Patch Number:      30

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          STATUS, -1, ERROR

   Problem Fixed by This Patch:

   When multiple users attempt to update the same file, Btrieve may
   occasionally return a Status -1 due to an internal error.  This patch
   prevents this invalid, internal-only error code from being returned.

   * * * * * * * * *

   Patch Number:      31

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          FREE, SPACE, THRESHOLD

   Problem Fixed by This Patch:

   This patch fixes a problem with the Free Space Threshold feature.  The
   NLM starts a new page for variable portions of records before there is
   less space left on the page than specified in the free space threshold.
   This patch corrects the way the free space threshold is calculated.

   * * * * * * * * *

   Patch Number:      34

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          STATUS 2, STATUS 15, I/O, ERROR

   Problem Fixed by This Patch:

   This patch prevents a small timing window produced when many users are
   updating, inserting, and deleting data in a file and another user opens
   the file.  During this timing window, the file can become corrupted,
   causing Btrieve to return a Status 2 (I/O Error) and a Status 15
   (Pre-Image I/O Error).

   * * * * * * * * *

   Patch Number:      35

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          KEY-BIASED, +50

   Problem Fixed by This Patch:

   This patch improves Btrieve's performance on key-biased (+50)
   operations.

   * * * * * * * * *

   Patch Number:      36

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          ABEND, GET GREATER, GET EQUAL

   Problem Fixed by This Patch:

   This patch prevents a server from abending following a Get Greater or
   Equal operation on a particular key value in a corrupted file.  This
   situation very rarely occurs.

   * * * * * * * * *

   Patch Number:      37

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          EXTENDED, GET, KEY-ONLY

   Problem Fixed by This Patch:

   When an Extended Get operation following a key-only operation returns a
   Status 9 (End of File), the data buffer may be unchanged or may contain
   corrupted data.  This patch completes the handling of extended
   operations after key-only operations.

   * * * * * * * * *

   Patch Number:      38

   Platform/Product:  Btrieve NLM - BROUTER.NLM, v5.15
                      Not included in the patch set is a patch for:
                      Btrieve Requester (DOS) - BREQUEST.EXE, v5.16
                      This problem is source fixed in the 6.0 requester
                      contained in this patch kit.  

   Keywords:          INSERT, STATUS 22, DATA, BUFFER, LENGTH

   Problem Fixed by This Patch:

   During an Insert operation, if the data buffer is big enough to contain
   the fixed-portion of the record but too small for the entire record,
   Btrieve returns a Status 22 (Data Buffer Length) and does not insert the
   record.  However, the key buffer may be incorrectly altered.  This patch
   ensures that the key buffer is not altered during unsuccessful Insert,
   Insert Extended, and Update operations.

   * * * * * * * * *

   Patch Number:      39

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          GPI, PRE-IMAGE

   Problem Fixed by This Patch:

   When a large (32+ KB) pre-image file is produced, as in a large
   transaction, a value greater than 32 KB may be erroneously treated as
   "signed" and is sign-extended with hex code FFs.  This is later
   interpreted as an extremely large unsigned value when it is passed to
   the operating system, causing a General Protection Interrupt (GPI).
   This patch ensures that conversions are performed without sign
   extension.

   * * * * * * * * *


   Patch Number:      40

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          ABEND, HANDLE, CLOSE, READ ONLY, OPEN

   Problems Fixed by This Patch:

   Erratic Btrieve errors, including a General Protection Interrupt (GPI),
   can be caused by the following scenario:

   - A file is opened to a single read-only handle that is in the process
     of closing.

   - A request is received to open another handle in read-write mode,
     causing a timing window that allows the file's table entry to be
     deleted.

   This patch eliminates the timing window.

   * * * * * * * * *

   Patch Number:      42

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          POSITION, DUPLICATE, SUPPLEMENTAL, INDEX

   Problem Fixed by This Patch:

   This patch ensures that the correct position is reached when you perform
   a Get Next or Get Previous operation following a Delete operation on a
   file that contains a supplemental index with duplicate values.

   * * * * * * * * *

   Patch Number:      43

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          TRANSACTION, FLAG

   Problem Fixed by This Patch:

   If a Btrieve transaction file exists when you load BTRIEVE.NLM and is
   not flagged transactional, BTRIEVE.TRN is not erased when the NLM is
   unloaded.  This patch ensures that the transaction file is always erased
   when BTRIEVE.NLM is unloaded.

   * * * * * * * * *

   Patch Number:      44

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          TRANSACTION, MODE, NORMAL, READ ONLY, STATUS 85

   Problem Fixed by This Patch:

   If a file opened in normal mode is used inside a transaction, another
   workstation cannot open this file in read-only mode in a transaction.
   The Open operation returns a Status 85 (File Locked).  This patch allows
   the Open operation to be completed successfully.

   * * * * * * * * *

   Patch Number:      45

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          MODE, ACCELERATED, STATUS 5

   Problem Fixed by This Patch:

   This patch prevents file corruption on files opened in accelerated mode
   that return a Status 5 (Duplicate Key Value) during an Update operation.
   Damaged files may not display obvious symptoms of the corruption.  (In
   the reported case, a key was lost from the B-tree.)

   * * * * * * * * *

   Patch Number:      46

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          GET DIRECT, DELETE, STATUS 2, STATUS 8, STATUS 9

   Problems Fixed by This Patch:

   The patch corrects the following problems with the Get Direct operation:

   -   Performing a Get Direct operation after deletion of the record by
       another application returns a Status 2 (I/O Error) instead of a
       Status 8 (Lost Position).

   -   If a file contains records with duplicate values, a Get Next
       operation performed after a Get Direct returns a Status 9 (End of
       File) instead of the next record.

    -  The status codes returned by a Get Direct operation following a
       Delete  operation are inconsistent.

    -  In certain cases, after deletion of the last record, Get Direct
       operations do not return a status code on the record just deleted.

   * * * * * * * * *

   Patch Number:      47

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          DELETE, STATUS 2

   Problem Fixed by This Patch:

   In special situations, performing a Delete operation results in either a
   Status 2 (I/O Error) or the loss of a key from the B-tree.  This patch
   prevents key loss and ensures file integrity.

   * * * * * * * * *

   Patch Number:      48

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          LOG, LOGGING

   Problem Fixed by This Patch:

   The logging feature of Btrieve can be disabled on some servers.  This
   patch ensures that logging functions correctly.

   * * * * * * * * *

   Patch Number:      49

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          STATUS 52, PRE-IMAGE

   Problem Fixed by This Patch:

   When you open a file that requires recovery from the pre-image file, and
   the file has a page size larger than 1024 bytes, you may receive a
   Status 52 (Error Writing Cache) if any other file is open.  This patch
   corrects the problem and adds new logic to Btrieve that helps control
   the size of the pre-image file.

   * * * * * * * * *

   Patch Number:      52

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          STATUS 8, STATUS 80, GET POSITION, UPDATE

   Problem Fixed by This Patch:

   Building a supplemental index can cause the server utilization to go to
   100%, and other workstations making Btrieve calls to receive a Status 95
   (Session No Longer Valid).  This patch corrects the problem by
   decreasing the amount of time Btrieve uses to sort the keys.

   * * * * * * * * *

   Patch Number:      53

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          STATUS 19, ABEND

   Problem Fixed by This Patch:

   Reading or updating a corrupted file causes the server to abend.  This
   patch prevents an abend and returns a Status 19 (Unrecoverable Error).

   * * * * * * * * *

   Patch Number:      54

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          KEY ONLY, AUTOINC, STATUS 5

   Problem Fixed by This Patch:

   On a key-only file, if an autoincrement field does not begin at the
   first byte, the second insert with a binary zero value in that field
   causes Btrieve to return a Status 5 (Duplicate Key).  This patch allows
   the second insert to succeed and returns a Status 0 (Successful
   Completion).

   * * * * * * * * *

   Patch Number:      55

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          SUPPLEMENTAL INDEX

   Problem Fixed by This Patch:

   When you add two supplemental indexes and then remove one of them, you
   can no longer access the other index.  This patch enables you to access
   the remaining index.

   * * * * * * * * *

   Patch Number:      56

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          BREQUEST, READ-ONLY, STATUS 94

   Problem Fixed by This Patch:

   If you are using BREQUEST.EXE v6.0, attempting to open a file in
   read-only mode when you have only Read rights to the file causes Btrieve
   to deny the Open operation and return a Status 94 (Permission Error).
   This patch allows you to open the file.

   * * * * * * * * *

   Patch Number:      57

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          KEY-ONLY, GET NEXT EXTENDED, STATUS 19

   Problem Fixed by This Patch:

   A Get Next Extended operation following a Greater Than Or Equal
   operation with key-only bias causes Btrieve to return a Status 19
   (Unrecoverable Error).  This patch allows the Get Next Extended
   operation to succeed with a Status 0 (Successful Completion).

   * * * * * * * * *

   Patch Number:      58

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          EXTENDED GET, EXTENDED STEP, STATUS 62, STATUS 22

   Problem Fixed by This Patch:

   In the Btrieve NLM, setting up an Extended Step or Extended Get
   operation to return only record positions (NumOfFields = 0) without any
   record data causes Btrieve to return a Status 62 (Incorrect Descriptor).

   * * * * * * * * *

   Patch Number:      59

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          STATUS 80, UPDATE, DELETE

   Problem Fixed by This Patch:

   If a workstation tries to update or delete a record that a second
   workstation has changed since the first workstation read that record,
   Btrieve returns a Status 80 (Conflict).  However, Btrieve incorrectly
   allows the conflict condition to be cleared after the first workstation
   performs any of the following operations:  Stat, Unlock, Set Owner,
   Clear Owner, Create Index, or Drop Index.  This patch corrects the
   problem by forcing the first workstation to reread the record before
   changing it.

   * * * * * * * * *

   Patch Number:      60

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          HANG, ABEND, TTS

   Problem Fixed by This Patch:

   When the NetWare Transaction Tracking System (TTS) is performing disk
   I/O and detects a hardware error, the TTS dismounts the volume and
   Btrieve abends the server.  This patch prevents the abend.

   * * * * * * * * *

   Patch Number:      61

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          ZSTRING, LSTRING, NULL, MANUAL

   Problem Fixed by This Patch:

   This patch pertains only to zstring and lstring keys that are flagged
   with the NULL or MANUAL attribute.  If an application updates a record
   and changes the key from NULL or MANUAL to non-NULL (or vice versa) by
   changing bytes beyond the end of the key from the null character to any
   other character (or vice versa), Btrieve does not update the index to
   reflect the change in the key.  This patch ensures that Btrieve updates
   the index.

   * * * * * * * * *

   Patch Number:      62

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          OPEN, CLOSE, LOOP

   Problem Fixed by This Patch:

   Btrieve enters an infinite loop when you perform a large number of Open
   and Close operations on the same file.  This patch enables Btrieve to
   handle multiple Open and Close operations and prevents the infinite
   loop.

   * * * * * * * * *

   Patch Number:      63

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          GET NEXT, UPDATE, PATCH 51, PATCH 9

   Problem Fixed by This Patch:

   Patch #51 reintroduced a problem that an earlier patch (Patch #9 for the
   Btrieve NLM) had corrected.  The problem is that when two clients are
   pointing to the same record in a file and one of them performs an update
   operation that changes the record's key, the second client receives an
   unpredictable, out-of-sequence record the next time it performs a Get Next
   operation.

   This patch (#63) invalidates the second client's current record but
   leaves the next and previous pointers unchanged, thus maintaining the
   relative position for the second client.

   * * * * * * * * *

   Patch Number:      64

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          KEY-ONLY, STATUS 9, STATUS 19, HANG

   Problem Fixed by This Patch:

   Get Greater Than(8) or Get Less Than(10) operations do not work
   correctly in case of key-only files if the key value specified for
   the operation exists in the file.  It might return a wrong record or
   status 9 or status 19 incorrectly, or it might even cause the server
   to hang, depending on the file and the key value involved.

   * * * * * * * * *

   Patch Number:      65

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          STATUS 37, TRANSACTION, BEGIN, ROLL FORWARD, LOGGING

   Problem Fixed by This Patch:

   If, having started a transaction, the first operation is an insert and the
   record has a duplicate key and logging is active for that file, Btrieve
   will erroneously make a second BEGIN_TRANSACTION entry in the log file. 
   This second entry causes a status 37 when rolling forward the file. 
   This patch prevents Btrieve from logging the same BEGIN_TRANSACTION twice.

   * * * * * * * * *

   Patch Number:      66

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          GET DIRECT, GET POSITION, STATUS 43, EXTENED INSERT

   Problem Fixed by This Patch:

   A GET_DIRECT could return a status 43 right after a successful
   GET_POSITION, even though no other workstation deleted the
   record. It happened when the EOF had been reached by using STEP or
   STEP_EXTENDED operations.
   In addition, the logical and physical position information were not set
   properly on an EXTENDED_INSERT when one of the inserts failed because of
   duplicate keys.
   This patch corrects the position information in both cases.

   * * * * * * * * *

   Patch Number:      67

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          TTS, UPDATE, GET EQUAL, STATUS 7

   Problem Fixed by This Patch:

   If all patches are applied to the BTRIEVE.NLM and a data file 
   is flagged transactional (TTS),  an update following a Get Equal
   returns a status 7 (Different Key Number).  The problem was
   introduced by patch #49.  This patch fixes the problem with patch
   #49.  Both this patch and patch #49 must be applied together.

   * * * * * * * * *

   Patch Number:      68

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          DELETE, STATUS 2, STATUS 14, STATUS 15

   Problem Fixed by This Patch:

   Fixes a bug which appears only under very special circumstances:
   If a workstation has no current record in a file (either because it
   has just opened the file, or because it has deleted its current record)
   and the workstation attempts to get a record with a lock bias, and
   the attempt fails because the record is already locked by another user,
   and then the workstation makes an Update call, instead of a returning
   a status 8 as it should, Btrieve returns either a status 2 or a status
   15 (depending on the file's page size).  If a status 15 is returned,
   and all users of the file then do a Close operation, subsequent attempts
   to open the file will fail with a status 14.  This patch corrects
   the problem.

   * * * * * * * * *

   Patch Number:      69

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          PREIMAGE, STATUS 2, STATUS 14, STATUS 15

   Problem Fixed by This Patch:

   Under certain rare conditions, Btrieve fails to recover a file's 
   preimage after an error that would have returned a status 2.  A 
   status 15 is returned instead, and later attempts to open the file 
   may fail with a status 14.  This patch ensures that the original 
   status 2 is returned and that the file's preimage is rolled-back.

   * * * * * * * * *

   Patch Number:      70

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          GET DIRECT, NULL, STATUS 82, STATUS 44

   Problem Fixed by This Patch:

   If a data file contains a key with both duplicates and a null 
   attribute, a GET DIRECT (operation 23) on a record with a null key 
   could give different status codes (status 82 or status 44) depending 
   on whether the key is a permanent or a supplemental key. This patch 
   ensures that the proper status code (status 44, null key path) will 
   always be returned this GET DIRECT. 

   * * * * * * * * *

   Patch Number:      71

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          PREIMAGE, STATUS 14

   Problem Fixed by This Patch:

   If the machine is turned off or rebooted between the time a Btrieve 
   file has marked as having a preimage file and the time the preimage 
   file is created, the file cannot be opened. Btrieve returns status 14.
   This patch fixes the problem caused by a timing window, and it ensures 
   that the file can be opened.

   * * * * * * * * *

   Patch Number:      72

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          DELETE, GET NEXT, KEY ONLY

   Problem Fixed by This Patch:

   Doing a Delete (operation 4) followed by a Get Next (operation 6) 
   on a key-only file with duplicated key values where the key consists 
   of more than one segment, the given status or record was not the 
   proper one.  This patch ensures that both the status and the record 
   are correct.
     
   * * * * * * * * *

   Patch Number:      73

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          CORRUPT, VARIABLE, STATUS 2, RECOVER

   Problem Fixed by This Patch:
      
   Given a file with corruption on the variable pages (specifically
   corrupt page number fields), Btrieve would return a status 2,
   thwarting efforts to recover the file by using Step Next (or
   Step Previous operations) to retrieve undamaged records.  This patch 
   causes Btrieve to return the correct status code, 54 (variable
   page error), which in addition to returning the first part of the 
   record, also advances the position block farther into the file so 
   that subsequent, undamaged records can be retrieved.

   * * * * * * * * *

   Patch Number:      74

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          CORRUPT, RETRIEVE, STATUS 2, RECOVER

   Problem Fixed by This Patch:
     
   When Stepping through a file with corrupted pages (specifically 
   corrupt page number fields), Btrieve would sometimes have trouble 
   returning a record from the first good page read after a series of 
   bad pages.  This patch fixes the problem.

   * * * * * * * * *

   Patch Number:      75

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          GET LESS, STATUS 9, GET POSITION

   Problem Fixed by This Patch:
     
   After an application does a Get Less Than or a Get Less Than 
   or Equal (opcodes 10 and 11) with an empty file and receives 
   a status 9 (End of File) error, if it does a Get Position
   (operation 22), garbage is returned in the data buffer, instead 
   of a record address and the status code is set to 0, indicating 
   no error.  This patch ensures that the status code is set to 8, 
   invalid positioning.

   * * * * * * * * *

   Patch Number:      76

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          OPERATION 11, GET LESS, POSITION, SUPPLEMENTAL

   Problem Fixed by This Patch:

   Doing an operation 11 (Get Less or Equal) on a key-only file or on 
   a file with a supplemental key with duplicates allowed, Btrieve 
   does not always set the position properly. This patch ensures the 
   correct positioning in this case.
      
   * * * * * * * * *

   Patch Number:      77 

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          INSERT, UPDATE, PREIMAGE

   Problem Fixed by This Patch:

   During insert and update operations, unnecessary key pages are recorded 
   in the preimage (.PRE) file.  This patch corrects the problem.

   * * * * * * * * *

   Patch Number:      78

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          ACCELERATED MODE, STATUS 5, CORRUPTION

   Problem Fixed by This Patch:

   This patch prevents file corruption on files opened in accelerated mode
   that return a Status 5 (Duplicate Key Value) during an Update operation.
   Damaged files may not display obvious symptoms of the corruption.  (In
   the reported case, a key was lost from the B-tree.)

GROW PATCH

   * * * * * * * * *

   Patch Number:      79

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          GET DIRECT, DELETE, STATUS 2, STATUS 8, STATUS 9

   Problems Fixed by This Patch:

   The patch corrects the following problems with the Get Direct operation:

   -   Performing a Get Direct operation after deletion of the record by
       another application returns a Status 2 (I/O Error) instead of a
       Status 8 (Lost Position).

   -   If a file contains records with duplicate values, a Get Next
       operation performed after a Get Direct returns a Status 9 (End of
       File) instead of the next record.

    -  The status codes returned by a Get Direct operation following a
       Delete  operation are inconsistent.

    -  In certain cases, after deletion of the last record, Get Direct
       operations do not return a status code on the record just deleted.

   * * * * * * * * *

   Patch Number:      80

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          EXTENDED GET, EXTENDED STEP, STATUS 22

   Problem Fixed by This Patch:

   In the Btrieve VAP, setting up an Extended Step or Extended Get
   operation to return only record positions (NumOfFields = 0) without any
   record data causes the VAP to return a status 22 if the data buffer is 
   just as long as required by Btrieve.  This patch corrects the
   problem so that the data is returned with no error.

   * * * * * * * * *

   Patch Number:      81

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          EXTENDED FILES, STATUS 14, PREIMAGE, OPEN

   Problem Fixed by This Patch:

   For extended files, if the machine reboots in the middle of
   a transaction, a subsequent open would not be able to open the
   file.  A status 14 would be returned (preimage open error).  This
   patch corrects the problem.

   * * * * * * * * *

   Patch Number:      82

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          STATUS 80, UPDATE, DELETE

   Problem Fixed by This Patch:

   If a workstation tries to update or delete a record that a second
   workstation has changed since the first workstation read that record,
   Btrieve returns a Status 80 (Conflict).  However, Btrieve incorrectly
   allows the conflict condition to be cleared after the first workstation
   performs any of the following operations:  Stat, Unlock, Set Owner,
   Clear Owner, Create Index, or Drop Index.  This patch corrects the
   problem by forcing the first workstation to reread the record before
   changing it.

   * * * * * * * * *

   Patch Number:      83

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          PATCH 78

   Problem Fixed by This Patch:

   This patch fixes a problem that was introduced by patch #78. This 
   patch fixes the problem with patch #78. Both of these patches should 
   be used to eliminate the original problem mentioned in the patch #78
   description.

   * * * * * * * * *

   Patch Number:      84

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          ZSTRING, LSTRING, NULL, MANUAL

   Problem Fixed by This Patch:

   This patch pertains only to zstring and lstring keys that are flagged
   with the NULL or MANUAL attribute.  If an application updates a record
   and changes the key from NULL or MANUAL to non-NULL (or vice versa) by
   changing bytes beyond the end of the key from the null character to any
   other character (or vice versa), Btrieve does not update the index to
   reflect the change in the key.  This patch ensures that Btrieve updates
   the index.

   * * * * * * * * *

   Patch Number:      85

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          GET NEXT, UPDATE, GET POSITION

   Problem Fixed by This Patch:

   If a client application receives a status 80 on an Update (because
   a second client has Updated the record since the first client
   read it), and then the application does a Get Position, an incorrect
   status 8 will be returned.  This patch fixes the problem so that
   a status 0 and a valid record address will be returned from the
   Get Position call.  

   * * * * * * * * *

   Patch Number:      86

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          GET EXTENDED

   Problem Fixed by This Patch:

   This patch implements an enhancement to the GET_EXTENDED API to
   allow it to use the current record as the starting point, rather than
   the next record.  The header signature "UC" must be used instead of the
   normal extended get signature, "EG".  This enhancement is present in
   the NLM without a patch, and is implemented with recent patches in the
   DOS, Windows, and OS/2 client Btrieves.

   * * * * * * * * *

   Patch Number:      87

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          CASE INSENSITIVE, KEY

   Problem Fixed by This Patch:

   This patch implements an enhancement that allows applications to 
   define case-insensitive keys by setting the 0x0400 bit in the key 
   flags word for a Create or Create Supplemental Index call.  
   But, unpatched or older Btrieve engines may misinterpret and even 
   corrupt these case-insensitive keys.

   * * * * * * * * *

   Patch Number:      88

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          GET DIRECT, NULL, STATUS 82, STATUS 44

   Problem Fixed by This Patch:

   If a data file contains a key with both duplicates and a null 
   attribute, a GET DIRECT (operation 23) on a record with a null key 
   could give different status codes (status 82 or status 44) depending 
   on whether the key is a permanent or a supplemental key. This patch 
   ensures that the proper status code (status 44, null key path) will 
   always be returned this GET DIRECT. 

   * * * * * * * * *

   Patch Number:      89

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          PREIMAGE, STATUS 14

   Problem Fixed by This Patch:

   If the machine is turned off or rebooted between the time a Btrieve
   file has marked as having a pre-image file and the time the pre-image
   file is created, the file cannot be opened. Btrieve returns status 14.
   This patch fixes the problem caused by a timing window, and it ensures
   that the file can be opened.

   * * * * * * * * *

  Patch Number:      90

   Platform/product:  Btrieve VAP - BSERVER.VAP, v5.15

   Keywords:          PREALLOCATE, PAGES

   Problem Fixed by This Patch:

   When a file is created with the preallocation flag set and the file's 
   page size multiplied by the number of pages to preallocate is an even 
   multiple of 65536, an additional 65536 bytes are preallocated to the 
   file.  This patch corrects the problem so that only the specified 
   number of pages are preallocated.

   * * * * * * * * *

   Patch Number:      91

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          SUPPLEMENTAL INDEX, STATUS 9, NULL

   Problem Fixed by This Patch:

   When creating a supplemental index where the key has a null value defined
   and all the existing records in the file already contain that null value
   in the appropriate place, Btrieve returns a status 9 on the create 
   supplemental index call, and no index is created.
   This patch fixes the problem by returning a status zero after creating the
   index with zero number of keys in it.

   * * * * * * * * *

   Patch Number:      92

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          DROP SUPPLEMENTAL INDEX, CORRUPT, OPERATION 31

   Problem Fixed by This Patch:

   If an application works on several files at the same time and 
   the pagesizes of those files are greater than 1024 the first page
   of one or more files (FCRs) can get corrupted especially if the 
   Drop Supplemental Index (op. 31) is used. The corruption is usually 
   located in the second half of the FCR first, but later, doing the same
   sequence of operations many times, it moves backwards to the beginning
   of the file. In extreme situation the file could become a non-openable 
   file by Btrieve.
   The bug was found in the module where Btrieve opens the file. Actually
   not the whole FCR was read then later used, just a part of it. But at 
   completion the FCR with proper size was written down to the disk 
   eventually with garbage in it.
   This patch ensures that the whole FCR page will be loaded every time 
   when it is needed.

   * * * * * * * * *

   Patch Number:      93

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          OWNER NAME, CLEAR OWNER, STATUS 46

   Problem Fixed by This Patch:

   This bug applied to files with owner names which allowed non-owner 
   applications to open them, but not to write to them.  Btrieve was 
   incorrectly allowing a Clear Owner operation to complete
   successfully after the application opened the file without its owner
   name.  Now Btrieve will return the proper error code instead: 46, 
   Access To File Denied.

   * * * * * * * * *

   Patch Number:      94

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          TRANSACTION, PREIMAGE, LARGE

   Problem Fixed by This Patch:

   Users whose applications perform a very large number (several 
   thousand) of writing operations on any one file inside a single  
   transaction may have been noticing that, during the course of such 
   a transaction, the associated preimage file's size would jump from 
   a large number (say 33 megabytes) to a huge number (approaching 4
   gigabytes) in an instant, even though there was not 4 gigabytes of 
   free space on the volume.  This patch fixes this sparse file
   problem.
      
   * * * * * * * * *

   Patch Number:      95

   Platform/Product:  Btrieve NLM - BTRIEVE.NLM, v5.15

   Keywords:          TRANSACTION, PREIMAGE, CORRUPT, STATUS 109

   Problem Fixed by This Patch:

   Transactions which insert, update, or delete several
   thousands of records in any one file can cause a 16-bit
   counter of pages in the preimage file to overflow.  If the
   transaction is aborted after the counter has overflowed the
   Btrieve file would be corrupted.  This patch causes Btrieve
   to guard against the overflow, and to return a new error
   status code, 109, to any operation which would trigger the
   overflow.
      
** End of BTR515.TXT **
