Beispiel #1
0
icu_regex_traits_implementation::string_type icu_regex_traits_implementation::do_transform(const char_type* p1, const char_type* p2, const U_NAMESPACE_QUALIFIER Collator* pcoll) const
{
   // TODO make thread safe!!!! :
   typedef u32_to_u16_iterator<const char_type*, ::UChar> itt;
   itt i(p1), j(p2);
#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
   std::vector< ::UChar> t(i, j);
#else
   std::vector< ::UChar> t;
   while(i != j)
      t.push_back(*i++);
#endif
   ::uint8_t result[100];
   ::int32_t len;
   if(t.size())
      len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), result, sizeof(result));
   else
      len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), result, sizeof(result));
   if(std::size_t(len) > sizeof(result))
   {
      scoped_array< ::uint8_t> presult(new ::uint8_t[len+1]);
      if(t.size())
         len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), presult.get(), len+1);
      else
         len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), presult.get(), len+1);
      if((0 == presult[len-1]) && (len > 1))
         --len;
#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
      return string_type(presult.get(), presult.get()+len);
#else
      string_type sresult;
      ::uint8_t const* ia = presult.get();
      ::uint8_t const* ib = presult.get()+len;
      while(ia != ib)
         sresult.push_back(*ia++);
      return sresult;
#endif
   }
   if((0 == result[len-1]) && (len > 1))
      --len;
#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
   return string_type(result, result+len);
#else
   string_type sresult;
   ::uint8_t const* ia = result;
   ::uint8_t const* ib = result+len;
   while(ia != ib)
      sresult.push_back(*ia++);
   return sresult;
#endif
}
Beispiel #2
0
int main (void)
{
	{
		char buff[100];
		strcpy(buff, "abc");
		cj_jail(strcpy, 2, buff, "def");
		presult(1, strcmp(buff, "abc") == 0);
	}

	{
		char buff[100];
		strcpy(buff, "abc");
		cj_jail(strcpy, 2, buff, "def");
		cj_recv(buff, sizeof(buff));
		presult(2, strcmp(buff, "def") == 0);
	}

	cj_jail(set_global, 1, 12345);
	presult(3, cj_jail(get_global, 0) == 12345);
	presult(4, *(int *)cj_jail(get_globalref, 0) == 12345);

	{
		char buff[100];
		strcpy(buff, "Hello World!");
		cj_jail(strtoupper, 1, buff);
		presult(5, strcmp(buff, "Hello World!") == 0);
		cj_recv(buff, sizeof(buff));
		presult(6, strcmp(buff, "HELLO WORLD!") == 0);
	}

	{
		char *buff = malloc(100);
		write_global("foo7");
		presult(7, strcmp(read_globalref(), "foo7") == 0);
		read_global(buff);
		presult(8, strcmp(buff, "foo7") == 0);
		strcpy(buff, "foo8");
		cj_jail(read_global, 1, buff);
		presult(9, strcmp(buff, "foo8") == 0);
		cj_recv(buff, 100);
		presult(10, strcmp(buff, "foo7") == 0);
	}

	{
		const int num = 1000;
		void *arr[num];
		int i;

		srand(1);
		for (i = 0; i < num; i ++) {
			arr[i] = malloc(rand() % 500 + 1);
			if (arr[i] == NULL)
				break;
			if (rand() % 2) {
				int j = rand() % (i + 1);
				free(arr[j]);
				arr[j] = malloc(rand() % 500 + 1);
				if (arr[j] == NULL)
					break;
			}
		}
		presult(11, i == num);
		for (i = 0; i < num; i ++)
			free(arr[i]);

		for (i = 0; i < num; i ++) {
			arr[i] = (void *)cj_jail(malloc, 1, rand() % 500 + 1);
			if (arr[i] == NULL)
				break;
			if (rand() % 2) {
				int j = rand() % (i + 1);
				if (rand() % 2)
					free(arr[j]);
				else
					cj_jail(free, 1, arr[j]);
				arr[j] = (void *)cj_jail(malloc, 1, rand() % 500 + 1);
				if (arr[j] == NULL)
					break;
			}
		}
		presult(12, i == num);
		for (i = 0; i < num; i ++)
			free(arr[i]);
	}

	presult(13, call_callback(callback1, 1) == 4);
	presult(14, cj_jail(call_callback, 2, cj_reg_callback(callback1, NULL, 1), 1) == 4);
	presult(15, cj_jail(call_callback, 2, cj_reg_callback(callback1, callback1_wrapper, 1), 1) == 14);
	presult(16, cj_jail(call_callback, 2, cj_reg_callback(callback2, NULL, 1), 1) == 8);

	return 0;
}