<br><font size=2 face="sans-serif">Frank, et al.:</font>
<br>
<br><font size=2 face="sans-serif">I believe I have found and resolved
a bug in shapelib's DBFCloneEmpty function.  I was finding that dbf
files created with this function were improperly created and could not
be opened, because the "cloned" files were missing a 0x0d-valued
byte at the end of the header section.  As it turns out, the culprit
was the assignment of nHeaderLength in DBFCloneEmpty:</font>
<br>
<br><font size=2 face="sans-serif">        newDBF->nHeaderLength
= 32 * (psDBF->nFields+1);  // incorrect</font>
<br><font size=2 face="sans-serif">        </font>
<br><font size=2 face="sans-serif">When a new dbf is created with DBFCreate,
nHeaderLength is given an initial value of:</font>
<br>
<br><font size=2 face="sans-serif">        psDBF->nHeaderLength
= 33;</font>
<br><font size=2 face="sans-serif">        </font>
<br><font size=2 face="sans-serif">Subsequent calls to DBFAddField increment
nHeaderLength by 32, as</font>
<br>
<br><font size=2 face="sans-serif">        psDBF->nHeaderLength
+= 32;</font>
<br><font size=2 face="sans-serif">        </font>
<br><font size=2 face="sans-serif">Therefore, the correct assignment of
nHeaderLength in DBFCloneEmpty is:</font>
<br>
<br><font size=2 face="sans-serif">        newDBF->nHeaderLength
= 33 + 32 * (psDBF->nFields);  // correct</font>
<br><font size=2 face="sans-serif">        </font>
<br>
<br><font size=2 face="sans-serif">After this modification, cloded dbf
files are written correctly.</font>
<br>
<br><font size=2 face="sans-serif">Best regards,</font>
<br>
<br><font size=2 face="sans-serif">David Gancarz</font>
<br>
<br>
<br>
<br>