Ejemplo n.º 1
0
int gtk_ismapped(GtkWidget *window)
{
	if(window)
	{
		//取得窗口相关的X11 Display
		//Display *display;

		Window xWindow = GDK_WINDOW_XID(window->window);

		if ( g_display == NULL )
		{
			printf("Cannot connect to X server \n");
			return -1;
		}
		else
		{
			//printf("connect to Xserver on XWindow %d\r\n", xWindow);
			return ismapped(g_display , xWindow);
		}
	}
	printf("%s : widget null\r\n", __FUNCTION__);
	return -1;
}
Ejemplo n.º 2
0
void *rvm_map(rvm_t rvm, const char *segname, int size_to_create) {

	if(debug)
		fprintf(stderr, "%s called.\n", __func__);

	int fd;
	void * segbuf;
	struct stat segstat;
	char buf = 0;
	rvm_truncate_log(rvm);
	if(ismapped(rvm, segname))
		return 0x0;

	/* I presume here that size_to_create and the existing file size are
	 * both lower bounds on the final size of the segment. */

	system(("touch "+rvm->pathname+"/"+segname+".rvmseg").c_str());
	fd = open((rvm->pathname+"/"+segname+".rvmseg").c_str(),
			O_RDWR);
	if(-1 == fd)
		return 0x0;

	lseek(fd, size_to_create-1, SEEK_SET);
	read(fd, &buf, 1);
	lseek(fd, size_to_create-1, SEEK_SET);
	if(-1 == write(fd, &buf, 1)) {
		close(fd);
		return 0x0;
	}
	/* The above ensures that the file is AT LEAST as large as
	 * size_to_create. */
	if(-1 == fstat(fd, &segstat)) {
		close(fd);
		return 0x0;
	}

	if(segstat.st_size > size_to_create)
		size_to_create = segstat.st_size;

	lseek(fd, 0, SEEK_SET);
	segbuf = malloc(size_to_create);

	if(0x0 == segbuf) {
		close(fd);
		return 0x0;
	}

	if(-1 == read(fd, segbuf, size_to_create)) {
		close(fd);
		free(segbuf);
		return 0x0;
	}

	lseek(fd, 0, SEEK_SET);

	segment_t tempseg;
	tempseg.segname = std::string(segname);
	tempseg.size = size_to_create;
	tempseg.segbase = 0x0;
	tempseg.busy = 0;

	rvm->mapped_segs.push_back(tempseg);
	rvm->mapped_segs.back().segbase = segbuf;

	return segbuf;
}
Ejemplo n.º 3
0
bool mappedcmp(const struct sockaddr_in *sa1,const struct sockaddr_in6 *sa2)
{
    return ismapped(sa2) && !memcmp(sa2->sin6_addr.s6_addr+12,&sa1->sin_addr.s_addr,4);
}