Example #1
0
 static void construct(Tp &r, Tp const &t, size_t offset, std::integral_constant<size_t, 0>, Ts&& ...args)
 {
     typedef typename std::remove_pointer<
         typename std::tuple_element<0, Tp>::type>::type current_type;
     auto ptr = advance_ptr(std::get<0>(t),offset);
     if (!std::has_trivial_default_constructor<current_type>::value)
     {
         new (ptr) current_type(std::forward<Ts>(args)...); // only the first type can be constructed by passing arguments
     }
     std::get<0>(r) = ptr;
 }
Example #2
0
 static void construct(Tp &r, Tp const &t, size_t offset, std::integral_constant<size_t, N>, Ts&& ...args)
 {
     typedef typename std::remove_pointer<
         typename std::tuple_element<N, Tp>::type>::type current_type;
     auto ptr = advance_ptr(std::get<N>(t),offset);
     if (!std::has_trivial_default_constructor<current_type>::value)
     {
         new (ptr) current_type;
     }
     std::get<N>(r) = ptr;
     construct(r, t, offset, std::integral_constant<size_t, N-1>(), std::forward<Ts>(args)...);
 }
Example #3
0
        void destroy(Tp &t, size_t s, std::integral_constant<size_t, 0>)
        {
            typedef typename
            std::remove_pointer<
                typename std::tuple_element<0, Tp>::type>::type current_type;
#if __GNUC__ == 4 && __GNUC_MINOR__ <= 7
            bool has_trivial_destructor = std::has_trivial_destructor<current_type>::value;
#elif __GNUC__ == 4 && __GNUC_MINOR__ >= 8
            bool has_trivial_destructor = std::is_trivially_destructible<current_type>::value;
#endif
            if (!has_trivial_destructor)
            {
                for(size_t i=0; i < s; i++)
                    advance_ptr(std::get<0>(t),i)->~current_type();
            }
            delete []reinterpret_cast<char *>(std::get<0>(t));
        }
Example #4
0
int far pascal _loadds FS_READ(
                          struct sffsi   far *psffsi,
                          struct sffsd   far *psffsd,
                          char           far *pData,
                          unsigned short far *pLen,
                          unsigned short     IOflag
                         )
{
  int rc;

  kprintf("**** FS_READ\n");

  filemax = psffsi->sfi_size;
  filepos = psffsi->sfi_position;

  kprintf("sfi_size = %lu, sfi_position = %lu\n", filemax, filepos);
  kprintf("buf = 0x%08lx, size = %u\n", pData, *pLen);

  if (*((unsigned long far *)psffsd + 1)) // direct read flag
  {
    if (!(rc = FSH_PROBEBUF(1, pData, *pLen)))
    {
      unsigned short cbSec = *pLen / secsize;
      if (rc = FSH_DOVOLIO(8,                    // return errors directly, don't use harderr daemon
                           1 + 2 + 4,            // ABORT | RETRY | FAIL
                           psffsi->sfi_hVPB,
                           pData,
                           &cbSec,
                           filepos / secsize))
        kprintf("FSH_DOVOLIO failed, rc = %u\n", rc);
      else
      {
        kprintf("FSH_DOVOLIO(buf = 0x%08lx, len = %u, start = %lu sectors) succeeded\n",
                pData,
                cbSec,
                filepos / secsize);
        *pLen = cbSec * secsize;
        kprintf("%u butes read\n", *pLen);
        filepos += *pLen;
        rc = NO_ERROR;
      }
    }
    else
    {
      kprintf("FS_READ: FSH_PROBEBUF failed!\n");
      rc = 1;
    }
  }
  else
  {
    filebase = *((unsigned long far *)psffsd);
    advance_ptr();
    if (rc = MFS_READ(pData, pLen))
    {
      kprintf("MFS_READ failed, rc = %u\n", rc);
    }
  }
  psffsi->sfi_position = filepos;

  return rc;
}
Example #5
0
/*
  dump a preformatted range of a file
*/
static void dump_preformatted(const char *fname, int start, int n, int idx)
{
	int i;
	char *p;
	int highlight = 0;
	long ofs1, ofs2;

	if (strcmp(fname, "-") == 0) {
		return;
	}

	if (strcmp(reg_matches.m[start].name[idx], 
		   reg_matches.m[start+n-1].name[idx]) != 0) {
		int base = start;
		for (i=start+1;i<start+n;i++) {
			if (strcmp(reg_matches.m[i-1].name[idx],
				   reg_matches.m[i].name[idx]) != 0) {
				printf("<font color=green>%s:%d</font><p>\n",
				       reg_matches.m[base].name[idx],
				       reg_matches.m[base].line[idx]);
				dump_preformatted(reg_matches.m[i-1].name[idx], base, i-base, idx);
				base = i;
			}
		}
		printf("<font color=green>%s:%d</font><p>\n",
		       reg_matches.m[base].name[idx],
		       reg_matches.m[base].line[idx]);
		dump_preformatted(reg_matches.m[i-1].name[idx], base, i-base, idx);
		return;
	}

	p = load_file(fname);
	if (!p) return;

	ofs1 = reg_matches.m[start].ofs[idx];
	ofs2 = reg_matches.m[start+n-1].ofs[idx] + reg_matches.m[start+n-1].len[idx];

	/* move offsets to start of lines */
	ofs1 = advance_ptr(p, ofs1, -1, 4);
	ofs2 = advance_ptr(p, ofs2, 1, 4);

	printf("<pre>\n");
	for (i=ofs1;i<=ofs2;i++) {
		int in_range = check_range(i, start, n, idx);
		if (in_range && !highlight) {
			highlight = 1;
			printf("<font color=red>");
		}
		if (!in_range && highlight) {
			highlight = 0;
			printf("</font>");
		}
		if (p[i] == '<') {
			printf("&lt;");
		} else {
			putchar(p[i]);
		}
	}
	if (highlight) {
		printf("</font>");
	}
	printf("</pre>\n");

	free(p);
}