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; }
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; }
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); }