b29f1fbf93c9df5aa65fed050d9f8132dc6a2c73
braney
  Tue Nov 24 14:20:10 2015 -0800
support htslib for sam/bam/cram/tabix support  #14717

diff --git src/lib/knetUdc.c src/lib/knetUdc.c
index 4bbf9c2..0b85438 100644
--- src/lib/knetUdc.c
+++ src/lib/knetUdc.c
@@ -1,40 +1,49 @@
 /* knetUdc -- install udc i/o functions in knetfile interface in samtools. */
 /* As of 2/23/10, the KNETFILE_HOOKS extension is a UCSC-local modification of samtools. */
 
 /* Copyright (C) 2014 The Regents of the University of California 
  * See README in this or parent directory for licensing information. */
 
 #if ((defined USE_BAM || defined USE_TABIX) && defined KNETFILE_HOOKS)
 
 #include "common.h"
 #include "udc.h"
 #include "knetUdc.h"
+#ifdef USE_HTS
+#include "htslib/knetfile.h"
+#else
 #include "knetfile.h"
 
 
 struct knetFile_s {
     struct udcFile *udcf;
 }; // typedef'd to knetFile in knetfile.h
+#endif
 
 static char *udcCacheDir = NULL;
 
 static knetFile *kuOpen(const char *filename, const char *mode)
 /* Open the given filename with mode which must be "r". */
 {
+#ifdef USE_HTS
+if (!(sameOk((char *)mode, "r") || sameOk((char *)mode, "rb")))
+    errAbort("mode passed to kuOpen must be 'r' or 'rb' not '%s'", mode);
+#else
 if (!sameOk((char *)mode, "r"))
     errAbort("mode passed to kuOpen must be 'r' not '%s'", mode);
+#endif
 struct udcFile *udcf = udcFileMayOpen((char *)filename, udcCacheDir);
 if (udcf == NULL)
     return NULL;
 knetFile *kf = NULL;
 AllocVar(kf);
 kf->udcf = udcf;
 verbose(2, "kuOpen: returning %lu\n", (unsigned long)(kf->udcf));
 return kf;
 }
 
 static knetFile *kuDopen(int fd, const char *mode)
 /* Open from a file descriptor -- not necessary for our use of samtools. */
 {
 errAbort("kuDopen not implemented");
 return NULL;