SDB_API int sdb_disk_finish (Sdb* s) { int reopen = 0, ret = 1; IFRET (!cdb_make_finish (&s->m)); #if USE_MMAN IFRET (fsync (s->fdump)); #endif IFRET (close (s->fdump)); s->fdump = -1; // close current fd to avoid sharing violations if (s->fd != -1) { close (s->fd); s->fd = -1; reopen = 1; } #if __SDB_WINDOWS__ if (MoveFileEx (s->ndump, s->dir, MOVEFILE_REPLACE_EXISTING)) { //eprintf ("Error 0x%02x\n", GetLastError ()); } #else IFRET (rename (s->ndump, s->dir)); #endif free (s->ndump); s->ndump = NULL; // reopen if was open before if (reopen) { int rr = sdb_open (s, s->dir); if (ret && rr<0) { ret = 0; } } return ret; }
static Sdb *openDatabase(Sdb *db, const char *name) { char *file = r_str_newf ("%s/%s/%s.sdb", r_sys_prefix (NULL), "share/radare2/last", name); if (r_file_exists (file)) { if (db) { sdb_reset (db); sdb_open (db, file); } else { db = sdb_new (0, file, 0); } } free (file); return db; }
static Sdb *openDatabase(Sdb *db, const char *name) { #define SYSCALLPATH "/share/radare2/" R2_VERSION const char *file = sdb_fmt (0, "%s/%s/%s.sdb", r_sys_prefix (NULL), SYSCALLPATH, name); if (!r_file_exists (file)) { // eprintf ("r_syscall_setup: Cannot find '%s'\n", file); return false; } if (!db) { return sdb_new (0, file, 0); } sdb_reset (db); sdb_open (db, file); return db; }
static void* sdb_open_conn(const DBConf *db_conf) { SDBConf *conf = db_conf->sdb; /* make compiler happy */ char *connection; /* sanity check */ if (conf == NULL) return NULL; connection = sdb_open(octstr_get_cstr(conf->url)); if (connection == NULL) { error(0, "SDB: could not connect to database"); return NULL; } info(0, "SDB: Connected to %s.", octstr_get_cstr(conf->url)); return connection; }
static int write_data_file(int fd, const char *path, syncsendbuf *sbuf) { int lfd, err = 0; lfd = sdb_open(path, O_RDONLY); if(lfd < 0) { fprintf(stderr,"cannot open '%s': %s\n", path, strerror(errno)); return -1; } sbuf->id = ID_DATA; for(;;) { int ret; ret = sdb_read(lfd, sbuf->data, SYNC_DATA_MAX); if(!ret) break; if(ret < 0) { if(errno == EINTR) continue; fprintf(stderr,"cannot read '%s': %s\n", path, strerror(errno)); break; } sbuf->size = htoll(ret); if(writex(fd, sbuf, sizeof(unsigned) * 2 + ret)){ err = -1; break; } total_bytes += ret; } sdb_close(lfd); return err; }
R_API bool r_syscall_setup(RSyscall *s, const char *arch, const char *os, int bits) { const char *file; if (!os || !*os) { os = R_SYS_OS; } if (!arch) { arch = R_SYS_ARCH; } free (s->os); s->os = strdup (os); if (!strcmp (os, "any")) { // ignored return true; } if (!strcmp (arch, "mips")) { s->regs = fastcall_mips; } else if (!strcmp (arch,"avr")) { s->sysport = sysport_avr; } else if (!strcmp (arch,"sh")) { s->regs = fastcall_sh; } else if (!strcmp (arch, "arm")) { switch (bits) { case 16: case 32: s->regs = fastcall_arm; break; case 64: s->regs = fastcall_arm64; break; } } else if (!strcmp (arch, "x86")) { s->sysport = sysport_x86; switch (bits) { case 8: s->regs = fastcall_x86_8; break; case 32: s->regs = fastcall_x86_32; break; case 64: s->regs = fastcall_x86_64; break; } } #define SYSCALLPATH R2_PREFIX "/share/radare2/" R2_VERSION "/syscall" file = sdb_fmt (0, "%s/%s-%s-%d.sdb", SYSCALLPATH, os, arch, bits); if (!r_file_exists (file)) { // eprintf ("r_syscall_setup: Cannot find '%s'\n", file); return false; } //eprintf ("DBG098: syscall->db must be reindexed for k\n"); sdb_close (s->db); sdb_reset (s->db); sdb_open (s->db, file); // s->db = sdb_new (0, file, 0); #if 1 if (s->fd) { fclose (s->fd); } s->fd = NULL; #endif return true; }
static int sync_send(int fd, const char *lpath, const char *rpath, unsigned mtime, mode_t mode, int verifyApk) { syncmsg msg; int len, r; syncsendbuf *sbuf = &send_buffer; char* file_buffer = NULL; int size = 0; char tmp[64]; len = strlen(rpath); if(len > 1024) goto fail; snprintf(tmp, sizeof(tmp), ",%d", mode); r = strlen(tmp); if (verifyApk) { #if 0 //eric int lfd; zipfile_t zip; zipentry_t entry; int amt; // if we are transferring an APK file, then sanity check to make sure // we have a real zip file that contains an AndroidManifest.xml // this requires that we read the entire file into memory. lfd = sdb_open(lpath, O_RDONLY); if(lfd < 0) { fprintf(stderr,"cannot open '%s': %s\n", lpath, strerror(errno)); return -1; } size = sdb_lseek(lfd, 0, SEEK_END); if (size == -1 || -1 == sdb_lseek(lfd, 0, SEEK_SET)) { fprintf(stderr, "error seeking in file '%s'\n", lpath); sdb_close(lfd); return 1; } file_buffer = (char *)malloc(size); if (file_buffer == NULL) { fprintf(stderr, "could not allocate buffer for '%s'\n", lpath); sdb_close(lfd); return 1; } amt = sdb_read(lfd, file_buffer, size); if (amt != size) { fprintf(stderr, "error reading from file: '%s'\n", lpath); sdb_close(lfd); free(file_buffer); return 1; } sdb_close(lfd); zip = init_zipfile(file_buffer, size); if (zip == NULL) { fprintf(stderr, "file '%s' is not a valid zip file\n", lpath); free(file_buffer); return 1; } entry = lookup_zipentry(zip, "AndroidManifest.xml"); release_zipfile(zip); if (entry == NULL) { fprintf(stderr, "file '%s' does not contain AndroidManifest.xml\n", lpath); free(file_buffer); return 1; } #endif } msg.req.id = ID_SEND; msg.req.namelen = htoll(len + r); if(writex(fd, &msg.req, sizeof(msg.req)) || writex(fd, rpath, len) || writex(fd, tmp, r)) { free(file_buffer); goto fail; } if (file_buffer) { write_data_buffer(fd, file_buffer, size, sbuf); free(file_buffer); } else if (S_ISREG(mode)) write_data_file(fd, lpath, sbuf); #ifdef HAVE_SYMLINKS else if (S_ISLNK(mode)) write_data_link(fd, lpath, sbuf); #endif else goto fail; msg.data.id = ID_DONE; msg.data.size = htoll(mtime); if(writex(fd, &msg.data, sizeof(msg.data))) goto fail; if(readx(fd, &msg.status, sizeof(msg.status))) return -1; if(msg.status.id != ID_OKAY) { if(msg.status.id == ID_FAIL) { len = ltohl(msg.status.msglen); if(len > 256) len = 256; if(readx(fd, sbuf->data, len)) { return -1; } sbuf->data[len] = 0; } else strcpy(sbuf->data, "unknown reason"); fprintf(stderr,"failed to copy '%s' to '%s': %s\n", lpath, rpath, sbuf->data); return -1; } return 0; fail: fprintf(stderr,"protocol failure\n"); sdb_close(fd); return -1; }