diff options
Diffstat (limited to 'lib/libaccess/attrec.cpp')
-rw-r--r-- | lib/libaccess/attrec.cpp | 309 |
1 files changed, 0 insertions, 309 deletions
diff --git a/lib/libaccess/attrec.cpp b/lib/libaccess/attrec.cpp deleted file mode 100644 index d637ccd9..00000000 --- a/lib/libaccess/attrec.cpp +++ /dev/null @@ -1,309 +0,0 @@ -/** BEGIN COPYRIGHT BLOCK - * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission. - * Copyright (C) 2005 Red Hat, Inc. - * All rights reserved. - * END COPYRIGHT BLOCK **/ - -/* - * Description (attrec.c) - * - * This module contains routines for encoding and decoding - * attribute records. See attrec.h for a description of attribute - * records. - */ - -#include "base/systems.h" -#include "netsite.h" -#include "assert.h" -#define __PRIVATE_ATTREC -#include "libaccess/attrec.h" - -/* - * Description (NTS_Length) - * - * This function returns the length of a null-terminated string. - * The length includes the terminating null octet. - * - * Use of the NTSLENGTH() macro is recommended (see attrec.h). - * - * Arguments: - * - * nts - a pointer to the null-terminate string - * (may be null) - * - * Returns: - * - * The length of the string. If 'nts' is null, the value is one, - * since there is always a null octet. - */ - -int NTS_Length(NTS_t nts) -{ - return ((nts) ? strlen((const char *)nts) + 1 : 1); -} - -/* - * Description (NTS_Decode) - * - * This function decodes a null-terminated string from a specified - * attribute record buffer. It copies the string into a dynamically - * allocated buffer, if 'pnts' is not null, and returns a pointer - * to it. The return value of the function is a pointer to the - * octet following the NTS in the attribute record buffer. - * - * Use of the NTSDECODE() macro is recommended (see attrec.h). - * - * Arguments: - * - * cp - pointer into the attribute record buffer - * pnts - pointer to returned reference to decoded - * NTS, or null, if the decoded NTS is not - * to be copied to a dynamic buffer - * - * Returns: - * - * The function return value is a pointer to the octet following - * the NTS in the attribute record buffer. A pointer to a - * dynamically allocated buffer containing the decoded NTS will - * be returned through 'pnts', if it is non-null. This returned - * pointer will be null if the NTS contains only a terminating - * octet. - */ - -ATR_t NTS_Decode(ATR_t cp, NTS_t * pnts) -{ - NTS_t nts = 0; - int len = NTSLENGTH(cp); /* length of the string */ - - /* Are we going to return a copy of the string? */ - if (pnts) { - - /* Yes, is it more than just a null octet? */ - if (len > 1) { - - /* Yes, allocate a buffer and copy the string to it */ - nts = (NTS_t)MALLOC(len); - if (nts) { - memcpy((void *)nts, (void *)cp, len); - } - } - - /* Return a pointer to the copied string, or null */ - *pnts = nts; - } - - /* Return pointer to octet after string */ - return cp + len; -} - -/* - * Description (NTS_Encode) - * - * This function encodes a null-terminated string into a specified - * attribute record buffer. It returns a pointer to the octet - * following the encoding. - * - * Use of the NTSENCODE() macro is recommended (see attrec.h). - * - * Arguments: - * - * cp - pointer into the attribute record buffer - * nts - pointer to the string to be encoded - * - * Returns: - * - * A pointer to the octet following the encoding in the attribute - * record buffer is returned. - */ - -ATR_t NTS_Encode(ATR_t cp, NTS_t nts) -{ - - /* Is the string pointer null? */ - if (nts) { - int len = NTSLENGTH(nts); - - /* No, copy the string to the attribute record buffer */ - memcpy((void *)cp, (void *)nts, len); - - /* Get pointer to octet after it */ - cp += len; - } - else { - - /* A null pointer indicates an empty NTS, i.e. just a null octet */ - *cp++ = 0; - } - - /* Return a pointer to the octet after the encoding */ - return cp; -} - -/* - * Description (USI_Decode) - * - * This function decodes an unsigned integer value from a specified - * attribute record buffer. - * - * Use of the USIDECODE() macro is recommended (see attrec.h). - * - * Arguments: - * - * cp - pointer into the attribute record buffer - * pval - pointer to returned integer value - * - * Returns: - * - * If 'pval' is not null, the decoded integer value is returned - * in the referenced location. The function return value is a - * pointer to the octet following the USI encoding in the attribute - * record buffer. - */ - -ATR_t USI_Decode(ATR_t cp, USI_t * pval) -{ - int val; - - /* Is this a length value? */ - if (*(cp) & 0x80) { - int i; - int len; - - /* Yes, build the value from the indicated number of octets */ - len = *cp++ & 0x7; - val = 0; - for (i = 0; i < len; ++i) { - val <<= 8; - val |= (cp[i] & 0xff); - } - cp += len; - } - else { - - /* This octet is the value */ - val = *cp++; - } - - /* Return the value if there's a place to put it */ - if (pval) *pval = val; - - /* Return a pointer to the next item in the attribute record */ - return cp; -} - -/* - * Description (USI_Encode) - * - * This function encodes an unsigned integer value into a specified - * attribute record buffer. - * - * Use of the USIENCODE() macro is recommended (see attrec.h). - * - * Arguments: - * - * cp - pointer into the attribute record buffer - * val - the value to be encoded - * - * Returns: - * - * A pointer to the octet following the generated encoding in the - * attribute record buffer is returned. - */ - -ATR_t USI_Encode(ATR_t cp, USI_t val) -{ - /* Check size of value to be encoded */ - if (val <= 0x7f) *cp++ = val; - else if (val <= 0xff) { - /* Length plus 8-bit value */ - *cp++ = 0x81; - *cp++ = val; - } - else if (val <= 0xffff) { - /* Length plus 16-bit value */ - *cp++ = 0x82; - cp[1] = val & 0xff; - val >>= 8; - cp[0] = val & 0xff; - cp += 2; - } - else if (val <= 0xffffff) { - /* Length plus 24-bit value */ - *cp++ = 0x83; - cp[2] = val & 0xff; - val >>= 8; - cp[1] = val & 0xff; - val >>= 8; - cp[0] = val & 0xff; - cp += 3; - } - else { - /* Length plus 32-bit value */ - *cp++ = 0x84; - cp[3] = val & 0xff; - val >>= 8; - cp[2] = val & 0xff; - val >>= 8; - cp[1] = val & 0xff; - val >>= 8; - cp[0] = val & 0xff; - cp += 4; - } - - /* Return a pointer to the next position in the attribute record */ - return cp; -} - -/* - * Description (USI_Insert) - * - * This function is a variation of USI_Encode() that always generates - * the maximum-length encoding for USI value, regardless of the - * actual specified value. For arguments, returns, see USI_Encode(). - * - * Use of the USIINSERT() macro is recommended. The USIALLOC() macro - * returns the number of octets that USIINSERT() will generate. - */ - -ATR_t USI_Insert(ATR_t cp, USI_t val) -{ - int i; - - assert(USIALLOC() == 5); - - *cp++ = 0x84; - for (i = 3; i >= 0; --i) { - cp[i] = val & 0xff; - val >>= 8; - } - - return cp + 5; -} - -/* - * Description (USI_Length) - * - * This function returns the number of octets required to encode - * an unsigned integer value. - * - * Use of the USILENGTH() macro is recommended (see attrec.h). - * - * Arguments: - * - * val - the unsigned integer value - * - * Returns: - * - * The number of octets required to encode the specified value is - * returned. - */ - -int USI_Length(USI_t val) -{ - return (((USI_t)(val) <= 0x7f) ? 1 - : (((USI_t)(val) <= 0xff) ? 2 - : (((USI_t)(val) <= 0xffff) ? 3 - : (((USI_t)(val) <= 0xffffff) ? 4 - : 5)))); -} - |