7df6e18265341f87a69fba808aa1f92f8ebca841
markd
  Wed Apr 15 13:39:42 2026 -0700
move copy of htslib

diff --git src/htslib/cram/vlen.c src/htslib/cram/vlen.c
deleted file mode 100644
index 083174144d5..00000000000
--- src/htslib/cram/vlen.c
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
-Author: James Bonfield (jkb@sanger.ac.uk)
-
-Copyright (c) 1995-1996 MEDICAL RESEARCH COUNCIL
-All rights reserved
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
-   1 Redistributions of source code must retain the above copyright notice, 
-this list of conditions and the following disclaimer.
-
-   2 Redistributions in binary form must reproduce the above copyright notice, 
-this list of conditions and the following disclaimer in the documentation 
-and/or other materials provided with the distribution.
-
-   3 Neither the name of the MEDICAL RESEARCH COUNCIL, THE LABORATORY OF 
-MOLECULAR BIOLOGY nor the names of its contributors may be used to endorse or 
-promote products derived from this software without specific prior written 
-permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
-Copyright (c) 2004, 2009, 2011-2012 Genome Research Ltd.
-
-Author: James Bonfield <jkb@sanger.ac.uk>
-
-Redistribution and use in source and binary forms, with or without 
-modification, are permitted provided that the following conditions are met:
-
-   1. Redistributions of source code must retain the above copyright notice, 
-this list of conditions and the following disclaimer.
-
-   2. Redistributions in binary form must reproduce the above copyright notice, 
-this list of conditions and the following disclaimer in the documentation 
-and/or other materials provided with the distribution.
-
-   3. Neither the names Genome Research Ltd and Wellcome Trust Sanger
-Institute nor the names of its contributors may be used to endorse or promote
-products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY GENOME RESEARCH LTD AND CONTRIBUTORS "AS IS" AND 
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
-DISCLAIMED. IN NO EVENT SHALL GENOME RESEARCH LTD OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <sys/types.h>
-#include <string.h>
-
-#include "cram/vlen.h"
-#include "cram/os.h"
-
-#ifndef MAX
-#define MAX(a,b) ((a)>(b)?(a):(b))
-#endif
-
-#ifndef ABS
-#define ABS(a) ((a)>0?(a):-(a))
-#endif
-
-/* #define DEBUG_printf(a,n) printf(a,n) */
-#define DEBUG_printf(a,n)
-
-/*
- * vlen: 27/10/95 written by James Bonfield, jkb@mrc-lmb.cam.ac.uk
- *
- * Given sprintf style of arguments this routine returns the maximum
- * size of buffer needed to allocate to use with sprintf. It errs on
- * the side of caution by being simplistic in its approach: we assume
- * all numbers are of maximum length.
- *
- * Handles the usual type conversions (%[%diuaxXcfeEgGpns]), but not
- * the 'wide' character conversions (%C and %S).
- * Precision is handled in the correct formats, including %*.*
- * notations.
- * Additionally, some of the more dubious (but probably illegal) cases
- * are supported (eg "%10%" will expand to "         %" on many
- * systems).
- *
- * We also assume that the largest integer and larger pointer are 64
- * bits, which at least covers the machines we'll need it for.
- */
-int flen(char *fmt, ...)
-{
-    va_list args;
-
-    va_start(args, fmt);
-    return vflen(fmt, args);
-}
-
-int vflen(char *fmt, va_list ap)
-{
-    int len = 0;
-    char *cp, c;
-    long long l;
-    int i;
-    double d; 
-
-    /*
-     * This code modifies 'ap', but we do not know if va_list is a structure
-     * or a pointer to an array so we do not know if it is a local variable
-     * or not.
-     * C99 gets around this by defining va_copy() to make copies of ap, but
-     * this does not exist on all systems.
-     * For now, I just assume that when va_list is a pointer the system also
-     * provides a va_copy macro to work around this problem. The only system
-     * I have seen needing this so far was Linux on AMD64.
-     */
-#if defined(HAVE_VA_COPY)
-    va_list ap_local;
-    va_copy(ap_local, ap);
-#    define ap ap_local
-#endif
-
-    for(cp = fmt; *cp; cp++) {
-	switch(*cp) {
-
-	/* A format specifier */
-	case '%': {
-	    char *endp;
-	    long conv_len1=0, conv_len2=0, conv_len=0;
-	    signed int arg_size;
-
-	    /* Firstly, strip the modifier flags (+-#0 and [space]) */
-	    for(; (c=*++cp);) {
-		if ('#' == c)
-		    len+=2; /* Worst case of "0x" */
-		else if ('-' == c || '+' == c || ' ' == c)
-		    len++;
-		else
-		    break;
-	    }
-
-	    /* Width specifier */
-	    l = strtol(cp, &endp, 10);
-	    if (endp != cp) {
-		cp = endp;
-		conv_len = conv_len1 = l;
-	    } else if (*cp == '*') {
-		conv_len = conv_len1 = (int)va_arg(ap, int);
-		cp++;
-	    }
-
-	    /* Precision specifier */
-	    if ('.' == *cp) {
-		cp++;
-		conv_len2 = strtol(cp, &endp, 10);
-		if (endp != cp) {
-		    cp = endp;
-		} else if (*cp == '*') {
-		    conv_len2 = (int)va_arg(ap, int);
-		    cp++;
-		}
-		conv_len = MAX(conv_len1, conv_len2);
-	    }
-
-	    /* Short/long identifier */
-	    if ('h' == *cp) {
-		arg_size = -1; /* short */
-		cp++;
-	    } else if ('l' == *cp) {
-		arg_size = 1; /* long */
-		cp++;
-		if ('l' == *cp) {
-		    arg_size = 2; /* long long */
-		    cp++;
-		}
-	    } else {
-		arg_size = 0; /* int */
-	    }
-
-	    /* The actual type */
-	    switch (*cp) {
-	    case '%':
-		/*
-		 * Not real ANSI I suspect, but we'll allow for the
-		 * completely daft "%10%" example.
-		 */
-		len += MAX(conv_len1, 1);
-		break;
-
-	    case 'd':
-	    case 'i':
-	    case 'u':
-	    case 'a':
-	    case 'x':
-	    case 'X':
-		/* Remember: char and short are sent as int on the stack */
-		if (arg_size == -1)
-		    l = (long)va_arg(ap, int);
-		else if (arg_size == 1)
-		    l = va_arg(ap, long); 
-		else if (arg_size == 2)
-		    l = va_arg(ap, long long); 
-		else 
-		    l = (long)va_arg(ap, int);
-
-		DEBUG_printf("%d", l);
-
-		/*
-		 * No number can be more than 24 characters so we'll take
-		 * the max of conv_len and 24 (23 is len(2^64) in octal).
-		 * All that work above and we then go and estimate ;-),
-		 * but it's needed incase someone does %500d.
-		 */
-		len += MAX(conv_len, 23);
-		break;
-
-	    case 'c':
-		i = va_arg(ap, int);
-		DEBUG_printf("%c", i);
-		/*
-		 * Note that %10c and %.10c act differently.
-		 * Besides, I think precision is not really allowed for %c.
-		 */
-		len += MAX(conv_len1, i>=0x80 ?MB_CUR_MAX :1);
-		break;
-
-	    case 'f':
-		d = va_arg(ap, double);
-		DEBUG_printf("%f", d);
-		/*
-		 * Maybe "Inf" or "NaN", but we'll not worry about that.
-		 * Again, err on side of caution and take max of conv_len
-		 * and max length of a double. The worst case I can
-		 * think of is 317 characters (-1[308 zeros].000000)
-		 * without using precision codes. That's horrid. I
-		 * cheat and either use 317 or 15 depending on how
-		 * large the number is as I reckon 99% of floats
-		 * aren't that long.
-		 */
-		l = (ABS(d) > 1000000) ? 317 : 15;
-		l = MAX(l, conv_len1 + 2);
-		if (conv_len2) l += conv_len2 - 6;
-		len += l;
-		break;
-
-	    case 'e':
-	    case 'E':
-	    case 'g':
-	    case 'G':
-		d = va_arg(ap, double);
-		DEBUG_printf("%g", d);
-		/*
-		 * Maybe "Inf" or "NaN", but we'll not worry about that
-		 * Again, err on side of caution and take max of conv_len
-		 * and max length of a double (which defaults to only
-		 * '-' + 6 + '.' + 'E[+-]xxx' == 13.
-		 */
-		len += MAX(conv_len, 13);
-		break;
-
-	    case 'p':
-		l = (long)va_arg(ap, void *);
-		/*
-		 * Max pointer is 64bits == 16 chars (on alpha),
-		 * == 20 with + "0x".
-		 */
-		DEBUG_printf("%p", (void *)l);
-		len += MAX(conv_len, 20);
-		break;
-
-	    case 'n':
-		/* produces no output */
-		break;
-
-	    case 's': {
-		char *s = (char *)va_arg(ap, char *);
-		DEBUG_printf("%s", s);
-
-		if (!conv_len2) {
-		    len += MAX(conv_len, (int)strlen(s));
-		} else {
-		    len += conv_len;
-		}
-		break;
-	    }
-
-	    default:
-		/* wchar_t types of 'C' and 'S' aren't supported */
-		DEBUG_printf("Arg is %c\n", *cp);
-	    }
-	    
-	}
-
-	case '\0':
-	    break;
-
-	default:
-	    DEBUG_printf("%c", *cp);
-	    len++;
-	}
-    }
-
-    va_end(ap);
-
-    return len+1; /* one for the null character */
-}
-
-#if 0
-int main() {
-    int l;
-    char buf[10000];
-
-    sprintf(buf, "d: %d\n", 500);
-    l = flen("d: %d\n", 500);
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "");
-    l = flen("");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%s\n","test");
-    l = flen("%s\n", "test");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%c\n", 'a');
-    l = flen("%c\n", 'a');
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%31.30f\n", -9999.99);
-    l = flen("%31.30f\n", -9999.99);
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%f\n", -1e308);
-    l = flen("%f\n", -1e308);
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%.9f\n", -1e308);
-    l = flen("%.9f\n", -1e308);
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%10.20f\n", -1.999222333);
-    l = flen("%10.20f\n", -1.999222333);
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%#g\n", -3.14159265358e-222);
-    l = flen("%#g\n", -3.1415927e-222);
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%e\n", -123456789123456789.1);
-    l = flen("%e\n", -123456789123456789.1);
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%c %f %d %s %c %g %ld %s\n", 'a', 3.1, 9, "one", 'b', 4.2, 9, "two");
-    l = flen("%c %f %d %s %c %g %ld %s\n", 'a', 3.1, 9, "one", 'b', 4.2, 9, "two");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%*.*e %*c\n", 10, 5, 9.0, 20, 'x');
-    l = flen("%*.*e %*c\n", 10, 5, 9.0, 20, 'x');
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%10c\n", 'z');
-    l = flen("%10c\n", 'z');
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%.10c\n", 'z');
-    l = flen("%.10c\n", 'z');
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%10d\n", 'z');
-    l = flen("%10d\n", 'z');
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%.10d\n", 'z');
-    l = flen("%.10d\n", 'z');
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%10%\n");
-    l = flen("%10%\n");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%.10%\n");
-    l = flen("%.10%\n");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%s\n", "0123456789");
-    l = flen("%s\n", "0123456789");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%5s\n", "0123456789");
-    l = flen("%5s\n", "0123456789");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%50s\n", "0123456789");
-    l = flen("%50s\n", "0123456789");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%.5s\n", "0123456789");
-    l = flen("%.5s\n", "0123456789");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%.50s\n", "0123456789");
-    l = flen("%.50s\n", "0123456789");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%5.50s\n", "0123456789");
-    l = flen("%5.50s\n", "0123456789");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    sprintf(buf, "%50.5s\n", "0123456789");
-    l = flen("%50.5s\n", "0123456789");
-    printf("%d %d\n\n", strlen(buf), l);
-
-    return 0;
-}
-#endif