aboutsummaryrefslogtreecommitdiff
path: root/contrib/groff/libbib/linear.cc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/groff/libbib/linear.cc')
-rw-r--r--contrib/groff/libbib/linear.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/contrib/groff/libbib/linear.cc b/contrib/groff/libbib/linear.cc
index 3d2729af1523..a8c2a553735d 100644
--- a/contrib/groff/libbib/linear.cc
+++ b/contrib/groff/libbib/linear.cc
@@ -30,6 +30,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "error.h"
#include "cset.h"
#include "cmap.h"
+#include "nonposix.h"
#include "refid.h"
#include "search.h"
@@ -330,6 +331,19 @@ int file_buffer::load(int fd, const char *filename)
else {
close(fd);
buffer[3] = '\n';
+ int sidx = 4, didx = 4;
+ for ( ; sidx < size + 4; sidx++, didx++)
+ {
+ if (buffer[sidx] == '\r')
+ {
+ if (buffer[++sidx] != '\n')
+ buffer[didx++] = '\r';
+ else
+ size--;
+ }
+ if (sidx != didx)
+ buffer[didx] = buffer[sidx];
+ }
bufend = buffer + 4 + size;
if (bufend[-1] != '\n')
*bufend++ = '\n';
@@ -345,7 +359,7 @@ int file_buffer::load(int fd, const char *filename)
linear_searcher::linear_searcher(const char *query, int query_len,
const char *ign, int trunc)
-: keys(0), nkeys(0), truncate_len(trunc), ignore_fields(ign)
+: ignore_fields(ign), truncate_len(trunc), keys(0), nkeys(0)
{
const char *query_end = query + query_len;
int nk = 0;