コード例 #1
0
ファイル: file.c プロジェクト: xsoameix/wz
} END_TEST

START_TEST(test_read_str) {
  // It should be ok
  char normal[] = "ab";
  wzfile file;
  create_file(&file, normal, strlen(normal));
  wzstr buffer;
  wz_init_str(&buffer);
  ck_assert_int_eq(wz_read_str(&buffer, strlen(normal), &file), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, normal, strlen(normal)), 0);
  ck_assert(buffer.len == strlen(normal));
  ck_assert(memused() == sizeof(normal));

  // It should not change data if position + len > size
  wzstr copy = buffer;
  ck_assert_int_eq(wz_read_str(&buffer, strlen(normal), &file), 1);
  ck_assert(buffer.bytes == copy.bytes);
  ck_assert(buffer.len == copy.len);

  // It should not allocate memory if position + len > size
  ck_assert(memused() == sizeof(normal));
  wz_free_str(&buffer);
  delete_file(&file);
} END_TEST
コード例 #2
0
ファイル: file.c プロジェクト: xsoameix/wz
} END_TEST

START_TEST(test_free_str) {
  // It should be ok
  char normal[] = "ab";
  wzfile file;
  create_file(&file, normal, strlen(normal));
  wzstr buffer;
  wz_init_str(&buffer);
  ck_assert_int_eq(wz_read_str(&buffer, strlen(normal), &file), 0);
  ck_assert(memused() == sizeof(normal));
  wz_free_str(&buffer);
  ck_assert(memused() == 0);
  delete_file(&file);
} END_TEST
コード例 #3
0
ファイル: main.c プロジェクト: jrocketfingers/asp
int main(void)
{
    unsigned short preffered_stack_size;
    unsigned short input = 10000;
    unsigned int value;

    printf("========== STATIC ARRAY STACK IMPLEMENTATION ==========\n");
    printf("=== Input your prefered stack size (< %d): ", MAX_STACK);
    scanf("%d", &preffered_stack_size);

    stack_t *stack = stack_create(preffered_stack_size);

    render_menu();

    while(input != 0)
    {
        printf("=== Choose an option: ");

        scanf("%d", &input);

        switch(input) {
            case 1:
                printf("=== Value to be pushed: ");
                scanf("%d", &value);
                push(stack, value);
                break;
            case 2:
                printf("=== Value: %d\n", pop(stack));
                break;
            case 3:
                printf("=== Value %d\n", peek(stack));
                break;
            case 4:
                printf("=== Stack usage: %d\n", memused(stack));
                break;
            case 5:
                printf("=== Stack size: %d\n", stack_size(stack));
                break;
            case 9:
                render_menu();
                break;
            case 0:
                break;
            default:
                printf("Wrong choice!\n");
                break;
        }
    }

    free(stack);

    return 0;
}
コード例 #4
0
ファイル: stcreate.c プロジェクト: rossdrummond/scilab
int C2F(stcreate)(int *lw, int *nz, int *sz, int *nf, char *fnames[], int *retval)
{
    int next,k,lr,nels;

    static int l;
    static int l0, n1, il;

    *retval = 0;
    l0 = *Lstk(*lw);

    C2F(intersci).ntypes[*lw -Top + Rhs - 1] = '$';
    C2F(intersci).iwhere[*lw -Top + Rhs - 1] = *Lstk(*lw);

    if (*lw > intersiz) 
	{
		Scierror(998,_("Too many arguments in the stack, edit stack.h and enlarge intersiz.\n"));
		return 1;
    }
    sttyp(&n1, "size", nf, fnames);

    *retval = 1;
/*     create the mlist header */
    il = iadr(l0);
    Err = sadr(il+6) + n1 - *Lstk(Bot);
    if (Err > 0)
	{
		SciError(17);
		return 1;
    }
    *istk(il) = 17;
    *istk(il+1) = 2+*nf;
    *istk(il + 2) = 1;
/*     set mlist type ["st","dims","field1",...,"fieldnf"] */
    l = sadr(il+5+*nf);
    sttyp(istk(iadr(l)), "set", nf, fnames);
    *istk(il + 3) = *istk(il + 2) + n1;
    l += n1;
/*     set dims entry (int32 matrix) */
/*  if (!C2F(creimati)("stcreate", &l, &c4, nz, &c1, &lr, &c1,  12L)) return 1;  FD comment*/
    if (!C2F(creimati)("stcreate", &l, &c4, &c1, nz, &lr, &c1,  12L)) return 1;
    C2F(icopy)(nz,sz,&c1,istk(lr),&c1);
    n1 = sadr(iadr(l)+4) + memused(c4,*nz) - l;
    *istk(il + 4) = *istk(il + 3) + n1;
    l += n1;

/*     set struct fields */
    nels=1;
    for (k=0; k< *nz;k++) nels=nels*sz[k];
    if (nels==1) {
    for (k=0; k< *nf;k++)
      {
	creonevoid(&l,&next);
	n1 = next - l;
	l += n1;
	*istk(il + 5 + k) = *istk(il + 4 + k) + n1;
      }
    }
    else {
    for (k=0; k< *nf;k++)
      {
	crelistofvoids(&l,&next,&nels);
	n1 = next - l;
	l += n1;
	*istk(il + 5 + k) = *istk(il + 4 + k) + n1;
      }
    }
    *Lstk(*lw+1)=l;
    return 1;
}
コード例 #5
0
ファイル: file.c プロジェクト: xsoameix/wz
} END_TEST

START_TEST(test_decode_chars) {
  // It should decode ascii
  char ascii[] = "\x01\x23";
  wzkey key = {.bytes = (uint8_t *) "\x89\xab\xcd\xef", .len = 4};
  wzfile file = {.key = &key};
  wzstr buffer;
  buffer.bytes = (uint8_t *) ascii;
  buffer.len = strlen(ascii);
  ck_assert_int_eq(wz_decode_chars(&buffer, 1, file.key), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, "\x22\x23", 2), 0);
  ck_assert(buffer.len == 2 && memused() == 0);

  // It should decode utf16le
  char utf16le[] = "\x45\x67"; // decode => \x66\x66  utf8 => \xe6\x99\xa6
  buffer.bytes = (uint8_t *) utf16le;
  buffer.len = strlen(utf16le);
  ck_assert_int_eq(wz_decode_chars(&buffer, 0, file.key), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, "\xe6\x99\xa6", 3), 0);
  ck_assert(buffer.len == 3 && memused() == 3 + 1);
  wz_free_chars(&buffer);
  ck_assert(memused() == 0);

  // It should not decode if key == NULL
  wzstr copy = buffer;
  ck_assert_int_eq(wz_decode_chars(&buffer, 1, NULL), 0);
  ck_assert(buffer.bytes == copy.bytes);
  ck_assert(buffer.len == copy.len);

  // It should not decode if string key is too short
  file.key->bytes = (uint8_t *) "\xcd";
  file.key->len = 1;
  ck_assert_int_eq(wz_decode_chars(&buffer, 1, file.key), 1);
  ck_assert(buffer.bytes == copy.bytes);
  ck_assert(buffer.len == copy.len);
} END_TEST

START_TEST(test_read_chars) {
  // It should be ok
  char normal[] =
    "\xfe""\x01\x23"
    "\x80""\x02\x00\x00\x00""\x45\x67"
    "\x01""\x89\xab"
    "\x7f""\x03\x00\x00\x00""\xcd\xef\x01\x23\x45\x67";
  wzfile file;
  create_file(&file, normal, sizeof(normal) - 1);
  wzstr buffer;
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, "\x01\x23", 2), 0);
  ck_assert(buffer.len == 2 && memused() == 2 + 1);
  wz_free_chars(&buffer);
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, "\x45\x67", 2), 0);
  ck_assert(buffer.len == 2 && memused() == 2 + 1);
  wz_free_chars(&buffer);
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, "\x89\xab", 2), 0);
  ck_assert(buffer.len == 2 && memused() == 2 + 1);
  wz_free_chars(&buffer);
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  char * expected = "\xcd\xef\x01\x23\x45\x67";
  ck_assert_int_eq(memcmp(buffer.bytes, expected, 6), 0);
  ck_assert(buffer.len == 6 && memused() == 6 + 1);
  wz_free_chars(&buffer);
  delete_file(&file);

  // It should decode if string key is set
  create_file(&file, normal, sizeof(normal) - 1);
  wzctx ctx;
  create_ctx(&ctx);
  file.key = &ctx.keys[0];
  file.key->bytes = (uint8_t *) "\x01\x23\x45\x67\x89\xab";
  file.key->len = 6;
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, "\xaa\xab", 2), 0);
  ck_assert(buffer.len == 2 && memused() == 2 + 1);
  wz_free_chars(&buffer);
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, "\xee\xef", 2), 0);
  ck_assert(buffer.len == 2 && memused() == 2 + 1);
  wz_free_chars(&buffer);
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  ck_assert_int_eq(memcmp(buffer.bytes, "\xe2\x88\xa2", 2), 0);
  ck_assert(buffer.len == 3 && memused() == 3 + 1);
  wz_free_chars(&buffer);
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  expected = "\xe6\x99\xa6\xee\xbb\xaf\xe6\x99\xa0";
  ck_assert_int_eq(memcmp(buffer.bytes, expected, 9), 0);
  ck_assert(buffer.len == 9 && memused() == 9 + 1);
  wz_free_chars(&buffer);
  delete_ctx(&ctx);
  delete_file(&file);
} END_TEST

START_TEST(test_free_chars) {
  // It should be ok
  char normal[] = "\xfe\x01\x23";
  wzfile file;
  create_file(&file, normal, sizeof(normal) - 1);
  wzstr buffer;
  ck_assert_int_eq(wz_read_chars(&buffer, file.key, &file), 0);
  ck_assert(memused() == 2 + 1);
  wz_free_chars(&buffer);
  ck_assert(memused() == 0);
  delete_file(&file);
} END_TEST

START_TEST(test_rotl32) {
  // It should be ok
  ck_assert(wz_rotl32(0xf2345678, 3) == 0x91a2b3c7);
} END_TEST

void
wz_encode_addr(wzaddr * addr, wzfile * file) {
  uint32_t key = 0x581c3f6d;
  uint32_t decoded = ~(addr->pos - file->head.start);
  decoded = decoded * file->ver.hash - key;
  decoded = wz_rotl32(decoded, decoded & 0x1f);
  addr->val = decoded ^ (addr->val - file->head.start * 2);
}