Beispiel #1
0
int main()
{
    char		f_name0[] = "/tmp/sigbus.XXXXXX";
    char		f_name1[] = "/tmp/sigbus.XXXXXX";
    int		fd_src    = mkstemp(f_name0);
    int		fd_dst    = mkstemp(f_name1);
    char		buf[TEST_BLOCKSIZE];
    struct stat	st;
    bool		res;

    memset(buf, 0, TEST_BLOCKSIZE);
    write(fd_src, buf, TEST_BLOCKSIZE);
    close(fd_src);
    close(fd_dst);

    unlink(f_name1);
    stat(f_name0, &st);
    if (!copyReg(f_name0, &st, f_name1))
        return EXIT_FAILURE;


    is_gremlin = true;

    Esocketpair(AF_LOCAL, SOCK_STREAM, 0, sync_p);
    signal(SIGCHLD, SIG_IGN);

    res = (checkTrunc(f_name0, f_name1, &st, TEST_BLOCKSIZE/2) &&
           checkTrunc(f_name0, f_name1, &st, 0x2345));

    unlink(f_name0);
    unlink(f_name1);
    return res ? EXIT_SUCCESS : EXIT_FAILURE;
}
Beispiel #2
0
void read(Register to)
{
    yyparse();

    yyrestart(stdin);

    copyReg(to, regSimple);
}
Beispiel #3
0
void sequenceToExp(Register result, Register seq)
{
    if (isNull(seq))
	copyReg(result, seq);
    else {
	isLastExp(result, seq);
	if (isTrue(result))
	    firstExp(result, seq);
	else
	    makeBegin(result, seq);
    }
}
Beispiel #4
0
static bool
checkTrunc(char const *src,
           char const *dst,
           struct stat const *st,
           size_t pos)
{
    pid_t		pid = Efork();

    if (pid==0) {
        char		c;

        Erecv(sync_p[0], &c, 1, 0);
        Etruncate(src, pos);
        Esend(sync_p[0], &c, 1, 0);
        exit(0);
    }

    unlink(dst);
    return !copyReg(src, st, dst);
}
Beispiel #5
0
bool
Unify_copy(char const *src, struct stat const *src_stat,
	   char const *dst)
{
  // skip sockets
  // TODO: message
  if (S_ISSOCK(src_stat->st_mode))
    return true;
  
  return
    (((S_ISLNK (src_stat->st_mode) && copyLnk (src, dst)) ||
      (S_ISREG (src_stat->st_mode) && copyReg (src, src_stat, dst)) ||
      (S_ISDIR (src_stat->st_mode) && copyDir (src, src_stat, dst)) ||
      ((S_ISBLK (src_stat->st_mode) ||
	S_ISCHR (src_stat->st_mode) || 
	S_ISFIFO(src_stat->st_mode)) && copyNode(src, src_stat, dst))
      ) &&
     setModes(dst, src_stat) &&
     Unify_setTime(dst, src_stat));
}