+++ /dev/null
-/*****************************************************************
- * SQUID - a library of functions for biological sequence analysis
- * Copyright (C) 1992-2002 Washington University School of Medicine
- *
- * This source code is freely distributed under the terms of the
- * GNU General Public License. See the files COPYRIGHT and LICENSE
- * for details.
- *****************************************************************/
-
-/* file: types.c
- *
- * Finicky type checkers for strings. Return 1 (TRUE) if ok, 0 elsewise.
- * Also, finicky type converters (sre_ntoh32() and friends)
- *
- * CVS $Id: types.c,v 1.5 2001/01/08 22:58:12 eddy Exp)
- */
-
-#include <string.h>
-#include <ctype.h>
-#include "squid.h"
-
-/* Function: IsInt()
- *
- * Returns TRUE if s points to something that atoi() will parse
- * completely and convert to an integer.
- */
-int
-IsInt(char *s)
-{
- int hex = 0;
-
- if (s == NULL) {squid_errno = SQERR_PARAMETER; return 0; }
-
- /* skip whitespace */
- while (isspace((int) (*s))) s++;
- /* skip leading sign */
- if (*s == '-' || *s == '+') s++;
- /* skip leading conversion signals */
- if ((strncmp(s, "0x", 2) == 0 && (int) strlen(s) > 2) ||
- (strncmp(s, "0X", 2) == 0 && (int) strlen(s) > 2))
- {
- s += 2;
- hex = 1;
- }
- else if (*s == '0' && (int) strlen(s) > 1)
- s++;
- /* examine remainder for garbage chars */
- if (!hex)
- while (*s != '\0')
- {
- if (!isdigit((int) (*s))) return 0;
- s++;
- }
- else
- while (*s != '\0')
- {
- if (!isxdigit((int) (*s))) return 0;
- s++;
- }
-
- return 1;
-}
-
-
-/* Function: IsReal()
- *
- * Purpose: Returns TRUE if s is a string representation
- * of a valid floating point number.
- */
-int
-IsReal(char *s)
-{
- int gotdecimal = 0;
- int gotexp = 0;
- int gotreal = 0;
-
- if (s == NULL) return 0;
-
- while (isspace((int) (*s))) s++; /* skip leading whitespace */
- if (*s == '-' || *s == '+') s++; /* skip leading sign */
-
- /* Examine remainder for garbage. Allowed one '.' and
- * one 'e' or 'E'; if both '.' and e/E occur, '.'
- * must be first.
- */
- while (*s != '\0')
- {
- if (isdigit((int) (*s)))
- gotreal++;
- else if (*s == '.')
- {
- if (gotdecimal) return 0; /* can't have two */
- if (gotexp) return 0; /* e/E preceded . */
- else gotdecimal++;
- }
- else if (*s == 'e' || *s == 'E')
- {
- if (gotexp) return 0; /* can't have two */
- else gotexp++;
- }
- else if (isspace((int) (*s)))
- break;
-
- s++;
- }
-
- while (isspace((int) (*s))) s++; /* skip trailing whitespace */
- if (*s == '\0' && gotreal) return 1;
- else return 0;
-}
-
-
-/* Function: Byteswap()
- *
- * Purpose: Swap between big-endian and little-endian.
- * For example:
- * int foo = 0x12345678;
- * byteswap((char *) &foo, sizeof(int));
- * printf("%x\n", foo)
- * gives 78563412.
- *
- * I don't fully understand byte-swapping issues.
- * However, I have tested this on chars through floats,
- * on various machines:
- * SGI IRIX 4.0.5, SunOS 4.1.3, DEC Alpha OSF/1, Alliant
- *
- * Date: Sun Feb 12 10:26:22 1995
- */
-void
-Byteswap(char *swap, int nbytes)
-{
- int x;
- char byte;
-
- for (x = 0; x < nbytes / 2; x++)
- {
- byte = swap[nbytes - x - 1];
- swap[nbytes - x - 1] = swap[x];
- swap[x] = byte;
- }
-}
-
-
-
-/* Functions: sre_ntoh16(), etc.
- * Date: SRE, Sun Dec 31 11:26:53 2000 [St. Louis]
- *
- * Purpose: Provide functionality of ntohs(), etc; extended
- * to 64-bit unsigned ints, and explicitly provided
- * in case a machine doesn't have the ntohs()
- * family.
- *
- * If we're using the host functions,
- * USE_HOST_BYTESWAP_FUNCTIONS was set to 1 in
- * squidconf.h, and we #define'd sre_hton16(x)=hton(x), etc.
- * in squid.h. In doing this, we assumed that the
- * host functions work on 16- and 32-bit unsigned quantities.
- * If for some reason that's not true, set
- * USE_HOST_BYTESWAP_FUNCTIONS to 0.
- */
-#ifndef USE_HOST_BYTESWAP_FUNCTIONS
-sqd_uint16
-sre_ntoh16(sqd_uint16 netshort)
-{
-#ifdef WORDS_BIGENDIAN
- return netshort;
-#else
- Byteswap((char *) &netshort, 2);
- return netshort;
-#endif
-}
-sqd_uint32
-sre_ntoh32(sqd_uint32 netlong)
-{
-#ifdef WORDS_BIGENDIAN
- return netlong;
-#else
- Byteswap((char *) &netlong, 4);
- return netlong;
-#endif
-}
-sqd_uint16
-sre_hton16(sqd_uint16 hostshort)
-{
-#ifdef WORDS_BIGENDIAN
- return hostshort;
-#else
- Byteswap((char *) &hostshort, 2);
- return hostshort;
-#endif
-}
-sqd_uint32
-sre_hton32(sqd_uint32 hostlong)
-{
-#ifdef WORDS_BIGENDIAN
- return hostlong;
-#else
- Byteswap((char *) &hostlong, 4);
- return hostlong;
-#endif
-}
-#endif /*USE_HOST_BYTESWAP_FUNCTIONS*/
-
-sqd_uint64
-sre_ntoh64(sqd_uint64 net_int64)
-{
-#ifdef WORDS_BIGENDIAN
- return net_int64;
-#else
- Byteswap((char *) &net_int64, 8);
- return net_int64;
-#endif
-}
-sqd_uint64
-sre_hton64(sqd_uint64 host_int64)
-{
-#ifdef WORDS_BIGENDIAN
- return host_int64;
-#else
- Byteswap((char *) &host_int64, 8);
- return host_int64;
-#endif
-}
-
-
-
-