コード例 #1
0
int main(void) {
  char buffer[20];
  size_t len;

  title("snpack()");

  test("c[5]");
  len = snpack(buffer, sizeof(buffer), "c[5]", "Hello" );
  size_ok(len, 5);
  int_ok(buffer[0], 'H'); int_ok(buffer[1], 'e'); int_ok(buffer[2], 'l'); int_ok(buffer[3], 'l'); int_ok(buffer[4], 'o');

  test("c[] with 3");
  len = snpack(buffer, sizeof(buffer), "c[]", "Hi", 3);
  size_ok(len, 3);
  int_ok(buffer[0], 'H'); int_ok(buffer[1], 'i'); int_ok(buffer[2], 0);

  test("c[c] with 0");
  len = snpack(buffer, sizeof(buffer), "c[c]", "", 0);
  size_ok(len, 1);
  int_ok(buffer[0], 0);

  test("c[c] with 4");
  len = snpack(buffer, sizeof(buffer), "c[c]", "1234", 4);
  size_ok(len, 5);
  int_ok(buffer[0], 4);
  int_ok(buffer[1], '1'); int_ok(buffer[2], '2'); int_ok(buffer[3], '3'); int_ok(buffer[4], '4');

  test("c[5] count");
  len = snpack(NULL, 0, "c[5]", "Hello" );
  size_ok(len, 5);

  test("c[] with 3 count");
  len = snpack(NULL, 0, "c[]", "Hi", 3);
  size_ok(len, 3);

  title("aspack()");

  char *dynbuffer;

  test("c[5]");
  len = aspack(&dynbuffer, 20, "c[5]", "Hello" );
  size_ok(len, 5);
  int_ok(dynbuffer[0], 'H'); int_ok(dynbuffer[1], 'e'); int_ok(dynbuffer[2], 'l'); int_ok(dynbuffer[3], 'l'); int_ok(dynbuffer[4], 'o');

  test("c[] with 3");
  len = aspack(&dynbuffer, 20, "c[]", "Hi", 3);
  size_ok(len, 3);
  int_ok(dynbuffer[0], 'H'); int_ok(dynbuffer[1], 'i'); int_ok(dynbuffer[2], 0);

  test("c[c] with 0");
  len = aspack(&dynbuffer, 20, "c[c]", "", 0);
  size_ok(len, 1);
  int_ok(dynbuffer[0], 0);

  test("c[c] with 4");
  len = aspack(&dynbuffer, 20, "c[c]", "1234", 4);
  size_ok(len, 5);
  int_ok(dynbuffer[0], 4);
  int_ok(dynbuffer[1], '1'); int_ok(dynbuffer[2], '2'); int_ok(dynbuffer[3], '3'); int_ok(dynbuffer[4], '4');

  title("snunpack()");

  char c[5];

  test("c[5]");
  memcpy(buffer, "Bye!!", 5);
  len = snunpack(buffer, sizeof(buffer), "c[5]", c);
  size_ok(len, 5);
  int_ok(c[0], 'B'); int_ok(c[1], 'y'); int_ok(c[2], 'e'); int_ok(c[3], '!'); int_ok(c[4], '!');

  test("c[] with 3");
  memcpy(buffer, "gon", 3); // gone is 4 chars
  len = snunpack(buffer, sizeof(buffer), "c[]", c, 3);
  size_ok(len, 3);
  int_ok(c[0], 'g'); int_ok(c[1], 'o'); int_ok(c[2], 'n');

  char count;

  test("c[c] with 0");
  memcpy(buffer, "\0", 1);
  count = 5;
  len = snunpack(buffer, sizeof(buffer), "c[c]", c, &count);
  size_ok(len, 1);
  int_ok(count, 0);

  test("c[c] with 4");
  memcpy(buffer, "\0045678", 5);
  count = 5;
  len = snunpack(buffer, sizeof(buffer), "c[c]", c, &count);
  size_ok(len, 5);
  int_ok(count, 4);
  int_ok(c[0], '5'); int_ok(c[1], '6'); int_ok(c[2], '7'); int_ok(c[3], '8');

  test("c[c] limit");
  memcpy(buffer, "\0069abcde", 7);
  c[1] = 0;
  count = 1;
  len = snunpack(buffer, sizeof(buffer), "c[c]", c, &count);
  size_ok(len, 7);
  int_ok(count, 1);
  int_ok(c[0], '9');
  int_ok(c[1], 0);

  return 0;
}
コード例 #2
0
int main(void) {
  FILE *file = tmpfile();
  size_t len;

  title("fpack()");

  test("s");
  rewind(file);
  len = fpack(file, "s", 0);
  size_ok(len, 1*sizeof(short));
  rewind(file);
  int_ok(fget_short(file), 0);

  test("ss");
  rewind(file);
  len = fpack(file, "ss", 1, 2);
  size_ok(len, 2*sizeof(short));
  rewind(file);
  int_ok(fget_short(file), 1);
  int_ok(fget_short(file), 2);

  test("i");
  rewind(file);
  len = fpack(file, "i", 0);
  size_ok(len, 1*sizeof(int));
  rewind(file);
  int_ok(fget_int(file), 0);

  test("ii");
  rewind(file);
  len = fpack(file, "ii", 1, 2);
  size_ok(len, 2*sizeof(int));
  rewind(file);
  int_ok(fget_int(file), 1);
  int_ok(fget_int(file), 2);

  test("l");
  rewind(file);
  len = fpack(file, "l", 0L);
  long_ok(len, 1*sizeof(long));
  rewind(file);
  long_ok(fget_long(file), 0);

  test("ll");
  rewind(file);
  len = fpack(file, "ll", 1L, 2L);
  long_ok(len, 2*sizeof(long));
  rewind(file);
  long_ok(fget_long(file), 1);
  long_ok(fget_long(file), 2);

  title("funpack()");

  short s1, s2;

  test("s");
  rewind(file);
  fput_short(0, file);
  rewind(file);
  len = funpack(file, "s", &s1);
  size_ok(len, 1*sizeof(short));
  int_ok(s1, 0);

  test("ss");
  rewind(file);
  fput_short(1, file);
  fput_short(2, file);
  rewind(file);
  len = funpack(file, "ss", &s1, &s2);
  size_ok(len, 2*sizeof(short));
  int_ok(s1, 1);
  int_ok(s2, 2);

  int i1, i2;

  test("i");
  rewind(file);
  fput_int(0, file);
  rewind(file);
  len = funpack(file, "i", &i1);
  size_ok(len, 1*sizeof(int));
  int_ok(i1, 0);

  test("ii");
  rewind(file);
  fput_int(1, file);
  fput_int(2, file);
  rewind(file);
  len = funpack(file, "ii", &i1, &i2);
  size_ok(len, 2*sizeof(int));
  int_ok(i1, 1);
  int_ok(i2, 2);

  long l1, l2;

  test("l");
  rewind(file);
  fput_long(0, file);
  rewind(file);
  len = funpack(file, "l", &l1);
  size_ok(len, 1*sizeof(long));
  long_ok(l1, 0);

  test("ll");
  rewind(file);
  fput_long(1, file);
  fput_long(2, file);
  rewind(file);
  len = funpack(file, "ll", &l1, &l2);
  size_ok(len, 2*sizeof(long));
  long_ok(l1, 1);
  long_ok(l2, 2);

  return 0;
}
コード例 #3
0
ファイル: vpd.c プロジェクト: A1DEVS/lenovo_a1_07_uboot
/*
 * get_vpd_data() - populates the passed VPD structure 'vpdInfo'
 *		    with data obtained from the specified
 *		    I2C EEPROM 'dev_addr'.  Returns 0 for
 *		    success or 1 for failure.
 */
int vpd_get_data(unsigned char dev_addr, VPD *vpdInfo)
{
    unsigned char buf[VPD_EEPROM_SIZE];
    vpd_t *vpd = (vpd_t *)buf;
    vpd_packet_t *packet;

    if (vpdInfo == NULL)
	return 1;

     /*
      * Fill vpdInfo with 0s to blank out
      * unused fields, fill vpdInfo->ethAddrs
      * with all 0xffs so that other's code can
      * determine how many real Ethernet addresses
      * there are.  OUIs starting with 0xff are
      * broadcast addresses, and would never be
      * permantely stored.
      */
    memset((void *)vpdInfo, 0, sizeof(VPD));
    memset((void *)&vpdInfo->ethAddrs, 0xff, sizeof(vpdInfo->ethAddrs));
    vpdInfo->_devAddr = dev_addr;

    /* Read the minimum size first */
    if (vpd_reader(buf, dev_addr, 0, VPD_EEPROM_SIZE) == NULL) {
	return 1;
    }

    /* Check validity of VPD data */
    if (!vpd_is_valid(dev_addr, buf)) {
	printf("VPD Data is INVALID!\n");
	return 1;
    }

    /*
      * Walk all the packets and populate
      * the VPD info structure.
      */
    packet = (vpd_packet_t *)&vpd->packets;
    do {
	switch (packet->identifier) {
	    case VPD_PID_GI:
		printf("Error: Illegal VPD value\n");
		break;
	    case VPD_PID_PID:
		if (strlen_ok(packet, MAX_PROD_ID)) {
		    strncpy(vpdInfo->productId,
			    (char *)(packet->data), packet->size);
		}
		break;
	    case VPD_PID_REV:
		if (size_ok(packet, sizeof(char)))
		    vpdInfo->revisionId = *packet->data;
		break;
	    case VPD_PID_SN:
		if (size_ok(packet, sizeof(unsigned long))) {
		    vpdInfo->serialNum =
			*(unsigned long *)packet->data;
		}
		break;
	    case VPD_PID_MANID:
		if (size_ok(packet, sizeof(unsigned char)))
		    vpdInfo->manuID = *packet->data;
		break;
	    case VPD_PID_PCO:
		if (size_ok(packet, sizeof(unsigned long))) {
		    vpdInfo->configOpt =
			*(unsigned long *)packet->data;
		}
		break;
	    case VPD_PID_SYSCLK:
		if (size_ok(packet, sizeof(unsigned long)))
		    vpdInfo->sysClk = *(unsigned long *)packet->data;
		break;
	    case VPD_PID_SERCLK:
		if (size_ok(packet, sizeof(unsigned long)))
		    vpdInfo->serClk = *(unsigned long *)packet->data;
		break;
	    case VPD_PID_FLASH:
		if (size_ok(packet, 9)) {	/* XXX - hardcoded,
						   padding in struct */
		    memcpy(&vpdInfo->flashCfg, packet->data, 9);
		}
		break;
	    case VPD_PID_ETHADDR:
		memcpy(vpdInfo->ethAddrs, packet->data, packet->size);
		break;
	    case VPD_PID_POTS:
		if (size_ok(packet, sizeof(char)))
		    vpdInfo->numPOTS = (unsigned)*packet->data;
		break;
	    case VPD_PID_DS1:
		if (size_ok(packet, sizeof(char)))
		    vpdInfo->numDS1 = (unsigned)*packet->data;
	    case VPD_PID_GAL:
	    case VPD_PID_CRC:
	    case VPD_PID_TERM:
		break;
	    default:
		printf("Warning: Found unknown VPD packet ID 0x%x\n",
		       packet->identifier);
		break;
	}
    } while ((packet = vpd_get_packet(packet)));

    return 0;
} /* end get_vpd_data() */
コード例 #4
0
int main(void) {
  char buffer[40];
  size_t len;

  title("snpack()");

  test("u8");
  len = snpack(buffer, sizeof(buffer), "u8", 0);
  size_ok(len, 1);
  int_ok(buffer[0], 0);

  test("u8u8");
  len = snpack(buffer, sizeof(buffer), "u8u8", 1, 2);
  size_ok(len, 2);
  int_ok(buffer[0], 1);
  int_ok(buffer[1], 2);

  test("u8u8 limit");
  buffer[1] = 0; // reinitialise the buffer to 0
  len = snpack(buffer, 1, "u8u8", 100, 101);
  size_ok(len, 1);
  int_ok(buffer[0], 100);
  int_ok(buffer[1], 0);

  test("b");
  len = snpack(buffer, sizeof(buffer), "b", 0);
  size_ok(len, 1);
  int_ok(buffer[0], 0);

  test("u16<");
  len = snpack(buffer, sizeof(buffer), "u16<", 10);
  size_ok(len, 2);
  int_ok(buffer[0], 10); int_ok(buffer[1], 0);

  test("u16<u16<");
  len = snpack(buffer, sizeof(buffer), "u16<u16<", 1, 2);
  size_ok(len, 4);
  int_ok(buffer[0], 1); int_ok(buffer[1], 0);
  int_ok(buffer[2], 2); int_ok(buffer[3], 0);

  test("u16>");
  len = snpack(buffer, sizeof(buffer), "u16>", 10);
  size_ok(len, 2);
  int_ok(buffer[0], 0); int_ok(buffer[1], 10);

  test("u16>u16>");
  len = snpack(buffer, sizeof(buffer), "u16>u16>", 1, 2);
  size_ok(len, 4);
  int_ok(buffer[0], 0); int_ok(buffer[1], 1);
  int_ok(buffer[2], 0); int_ok(buffer[3], 2);

  test("u16u16 limit 1");
  len = snpack(buffer, 1, "u16<u16<", 100, 101);
  size_ok(len, 0);

  test("u16u16 limit 2");
  buffer[2] = 0; buffer[3] = 0;
  len = snpack(buffer, 2, "u16<u16<", 100, 101);
  size_ok(len, 2);
  int_ok(buffer[0], 100); int_ok(buffer[1], 0);
  int_ok(buffer[2], 0); int_ok(buffer[3], 0);

  test("w<");
  len = snpack(buffer, sizeof(buffer), "w<", 10);
  size_ok(len, 2);
  int_ok(buffer[0], 10); int_ok(buffer[1], 0);

  // u32 wants a uint32_t. The only portable way to pass that is to cast it long

  test("u32<");
  len = snpack(buffer, sizeof(buffer), "u32<", (long)10);
  size_ok(len, 4);
  int_ok(buffer[0], 10); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3], 0);

  test("u32<u32<");
  len = snpack(buffer, sizeof(buffer), "u32<u32<", (long)1, (long)2);
  size_ok(len, 8);
  int_ok(buffer[0], 1); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3], 0);
  int_ok(buffer[4], 2); int_ok(buffer[5], 0); int_ok(buffer[6], 0); int_ok(buffer[7], 0);

  test("u32>");
  len = snpack(buffer, sizeof(buffer), "u32>", (long)10);
  size_ok(len, 4);
  int_ok(buffer[0], 0); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3], 10);

  test("u32>u32>");
  len = snpack(buffer, sizeof(buffer), "u32>u32>", (long)1, (long)2);
  size_ok(len, 8);
  int_ok(buffer[0], 0); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3], 1);
  int_ok(buffer[4], 0); int_ok(buffer[5], 0); int_ok(buffer[6], 0); int_ok(buffer[7], 2);

  test("u32u32 limit 1");
  len = snpack(buffer, 1, "u32<u32<", (long)100, (long)101);
  size_ok(len, 0);

  test("u32u32 limit 2");
  buffer[4] = 0; buffer[5] = 0; buffer[6] = 0; buffer[7] = 0;
  len = snpack(buffer, 4, "u32<u32<", (long)100, (long)101);
  size_ok(len, 4);
  int_ok(buffer[0], 100); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3], 0);
  int_ok(buffer[4], 0); int_ok(buffer[5], 0); int_ok(buffer[6], 0); int_ok(buffer[7], 0);

  test("d<");
  len = snpack(buffer, sizeof(buffer), "d<", (long)10);
  size_ok(len, 4);
  int_ok(buffer[0], 10); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3], 0);

  test("u64<");
  len = snpack(buffer, sizeof(buffer), "u64<", (uint64_t)10);
  size_ok(len, 8);
  int_ok(buffer[0], 10); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3], 0);
  int_ok(buffer[4],  0); int_ok(buffer[5], 0); int_ok(buffer[6], 0); int_ok(buffer[7], 0);

  test("u64<u64<");
  len = snpack(buffer, sizeof(buffer), "u64<u64<", (uint64_t)10, (uint64_t)11);
  size_ok(len, 16);
  int_ok(buffer[ 0], 10); int_ok(buffer[ 1], 0); int_ok(buffer[ 2], 0); int_ok(buffer[ 3], 0);
  int_ok(buffer[ 4],  0); int_ok(buffer[ 5], 0); int_ok(buffer[ 6], 0); int_ok(buffer[ 7], 0);
  int_ok(buffer[ 8], 11); int_ok(buffer[ 9], 0); int_ok(buffer[10], 0); int_ok(buffer[11], 0);
  int_ok(buffer[12],  0); int_ok(buffer[13], 0); int_ok(buffer[14], 0); int_ok(buffer[15], 0);

  test("u64>");
  len = snpack(buffer, sizeof(buffer), "u64>", (uint64_t)10);
  size_ok(len, 8);
  int_ok(buffer[0], 0); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3],  0);
  int_ok(buffer[4], 0); int_ok(buffer[5], 0); int_ok(buffer[6], 0); int_ok(buffer[7], 10);

  test("u64>u64>");
  len = snpack(buffer, sizeof(buffer), "u64>u64>", (uint64_t)10, (uint64_t)11);
  size_ok(len, 16);
  int_ok(buffer[ 0], 0); int_ok(buffer[ 1], 0); int_ok(buffer[ 2], 0); int_ok(buffer[ 3],  0);
  int_ok(buffer[ 4], 0); int_ok(buffer[ 5], 0); int_ok(buffer[ 6], 0); int_ok(buffer[ 7], 10);
  int_ok(buffer[ 8], 0); int_ok(buffer[ 9], 0); int_ok(buffer[10], 0); int_ok(buffer[11],  0);
  int_ok(buffer[12], 0); int_ok(buffer[13], 0); int_ok(buffer[14], 0); int_ok(buffer[15], 11);

  test("q<");
  len = snpack(buffer, sizeof(buffer), "q<", (uint64_t)10);
  size_ok(len, 8);
  int_ok(buffer[0], 10); int_ok(buffer[1], 0); int_ok(buffer[2], 0); int_ok(buffer[3], 0);
  int_ok(buffer[4],  0); int_ok(buffer[5], 0); int_ok(buffer[6], 0); int_ok(buffer[7], 0);

  title("snunpack()");

  uint8_t b1, b2;

  test("u8");
  buffer[0] = 10;
  b1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u8", &b1);
  size_ok(len, 1);
  int_ok(b1, 10);

  test("u8u8");
  buffer[0] = 1; buffer[1] = 2;
  b1 = 0; b2 = 0;
  len = snunpack(buffer, sizeof(buffer), "u8u8", &b1, &b2);
  size_ok(len, 2);
  int_ok(b1, 1);
  int_ok(b2, 2);

  test("u8u8 limit");
  buffer[0] = 1; buffer[1] = 2;
  b1 = 0; b2 = 0;
  len = snunpack(buffer, 1, "u8u8", &b1, &b2);
  size_ok(len, 1);
  int_ok(b1, 1);
  int_ok(b2, 0);

  test("b");
  buffer[0] = 10;
  b1 = 0;
  len = snunpack(buffer, sizeof(buffer), "b", &b1);
  size_ok(len, 1);
  int_ok(b1, 10);

  uint16_t w1, w2;

  test("u16<");
  buffer[0] = 10; buffer[1] = 0;
  w1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u16<", &w1);
  size_ok(len, 2);
  int_ok(w1, 10);

  test("u16<u16<");
  buffer[0] = 1; buffer[1] = 0;
  buffer[2] = 2; buffer[3] = 0;
  w1 = 0; w2 = 0;
  len = snunpack(buffer, sizeof(buffer), "u16<u16<", &w1, &w2);
  size_ok(len, 4);
  int_ok(w1, 1);
  int_ok(w2, 2);

  test("u16>");
  buffer[0] = 0; buffer[1] = 10;
  w1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u16>", &w1);
  size_ok(len, 2);
  int_ok(w1, 10);

  test("u16>u16>");
  buffer[0] = 0; buffer[1] = 1;
  buffer[2] = 0; buffer[3] = 2;
  w1 = 0; w2 = 0;
  len = snunpack(buffer, sizeof(buffer), "u16>u16>", &w1, &w2);
  size_ok(len, 4);
  int_ok(w1, 1);
  int_ok(w2, 2);

  test("u16u16 limit 1");
  buffer[0] = 1; buffer[1] = 0;
  buffer[2] = 2; buffer[3] = 0;
  w1 = 0; w2 = 0;
  len = snunpack(buffer, 1, "u16<w<", &w1, &w2);
  size_ok(len, 0);

  test("u16u16 limit 2");
  buffer[0] = 1; buffer[1] = 0;
  buffer[2] = 2; buffer[3] = 0;
  w1 = 0; w2 = 0;
  len = snunpack(buffer, 2, "u16<u16<", &w1, &w2);
  size_ok(len, 2);
  int_ok(w1, 1);
  int_ok(w2, 0);

  test("w<");
  buffer[0] = 10; buffer[1] = 0;
  w1 = 0;
  len = snunpack(buffer, sizeof(buffer), "w<", &w1);
  size_ok(len, 2);
  int_ok(w1, 10);

  uint32_t d1, d2;

  test("u32<");
  buffer[0] = 10; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
  d1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u32<", &d1);
  size_ok(len, 4);
  long_ok(d1, 10);

  test("u32< with 128");
  len = snpack(buffer, sizeof(buffer), "u32<", 128);
  size_ok(len, 4);
  d1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u32<", &d1);
  size_ok(len, 4);
  long_ok(d1, 128);

  test("u32<u32<");
  buffer[0] = 1; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
  buffer[4] = 2; buffer[5] = 0; buffer[6] = 0; buffer[7] = 0;
  d1 = 0; d2 = 0;
  len = snunpack(buffer, sizeof(buffer), "u32<u32<", &d1, &d2);
  size_ok(len, 8);
  long_ok(d1, 1);
  long_ok(d2, 2);

  test("u32>");
  buffer[0] = 0; buffer[1] = 0; buffer[2] = 0; buffer[3] = 10;
  d1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u32>", &d1);
  size_ok(len, 4);
  long_ok(d1, 10);

  test("u32>u32>");
  buffer[0] = 0; buffer[1] = 0; buffer[2] = 0; buffer[3] = 1;
  buffer[4] = 0; buffer[5] = 0; buffer[6] = 0; buffer[7] = 2;
  d1 = 0; d2 = 0;
  len = snunpack(buffer, sizeof(buffer), "u32>u32>", &d1, &d2);
  size_ok(len, 8);
  long_ok(d1, 1);
  long_ok(d2, 2);

  test("u32u32 limit 1");
  buffer[0] = 1; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
  buffer[4] = 2; buffer[5] = 0; buffer[6] = 0; buffer[7] = 0;
  d1 = 0; d2 = 0;
  len = snunpack(buffer, 1, "u32<u32<", &d1, &d2);
  size_ok(len, 0);

  test("u32u32 limit 2");
  buffer[0] = 1; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
  buffer[4] = 2; buffer[5] = 0; buffer[6] = 0; buffer[7] = 0;
  d1 = 0; d2 = 0;
  len = snunpack(buffer, 4, "u32<u32<", &d1, &d2);
  size_ok(len, 4);
  long_ok(d1, 1);
  long_ok(d2, 0);

  test("d<");
  buffer[0] = 10; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
  d1 = 0;
  len = snunpack(buffer, sizeof(buffer), "d<", &d1);
  size_ok(len, 4);
  long_ok(d1, 10);

  uint64_t q1, q2;

  test("u64<");
  buffer[0] = 1; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
      buffer[4] = 0; buffer[5] = 0; buffer[6] = 0; buffer[7] = 0;
  q1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u64<", &q1);
  size_ok(len, 8);
  u64_ok(q1, 1);

  test("u64< with 128");
  len = snpack(buffer, sizeof(buffer), "u64<", 128);
  size_ok(len, 8);
  q1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u64<", &q1);
  size_ok(len, 8);
  long_ok(q1, 128);

  test("u64<u64<");
  buffer[0] = 1; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
      buffer[4] = 0; buffer[5] = 0; buffer[6] = 0; buffer[7] = 0;
  buffer[8] = 2; buffer[9] = 0; buffer[10] = 0; buffer[11] = 0;
      buffer[12] = 0; buffer[13] = 0; buffer[14] = 0; buffer[15] = 0;
  q1 = 0; q2 = 0;
  len = snunpack(buffer, sizeof(buffer), "u64<u64<", &q1, &q2);
  size_ok(len, 16);
  u64_ok(q1, 1);
  u64_ok(q2, 2);

  test("u64>");
  buffer[0] = 0; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
      buffer[4] = 0; buffer[5] = 0; buffer[6] = 0; buffer[7] = 1;
  q1 = 0;
  len = snunpack(buffer, sizeof(buffer), "u64>", &q1);
  size_ok(len, 8);
  u64_ok(q1, 1);

  test("u64>u64>");
  buffer[0] = 0; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
      buffer[4] = 0; buffer[5] = 0; buffer[6] = 0; buffer[7] = 1;
  buffer[8] = 0; buffer[9] = 0; buffer[10] = 0; buffer[11] = 0;
      buffer[12] = 0; buffer[13] = 0; buffer[14] = 0; buffer[15] = 2;
  q1 = 0; q2 = 0;
  len = snunpack(buffer, sizeof(buffer), "u64>u64>", &q1, &q2);
  size_ok(len, 16);
  u64_ok(q1, 1);
  u64_ok(q2, 2);

  test("q<");
  buffer[0] = 1; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0;
      buffer[4] = 0; buffer[5] = 0; buffer[6] = 0; buffer[7] = 0;
  q1 = 0;
  len = snunpack(buffer, sizeof(buffer), "q<", &q1);
  size_ok(len, 8);
  u64_ok(q1, 1);

  return 0;
}