/* * Store Messenger to given location * Return 0 stored successfully or ignoring data file * Return 1 file path is NULL * Return 2 malloc failed * Return 3 opening path failed * Return 4 fwrite failed */ int store_data(Tox *m, char *path) { if (arg_opts.ignore_data_file) return 0; if (path == NULL) return 1; int len = tox_size(m); char *buf = malloc(len); if (buf == NULL) return 2; tox_save(m, (uint8_t *) buf); FILE *fd = fopen(path, "wb"); if (fd == NULL) { free(buf); return 3; } if (fwrite(buf, len, 1, fd) != 1) { free(buf); fclose(fd); return 4; } free(buf); fclose(fd); return 0; }
void Core::saveConfiguration() { if (!tox) { qWarning() << "Core::saveConfiguration: Tox not started, aborting!"; return; } QString path = Settings::getSettingsDirPath(); QDir directory(path); if (!directory.exists() && !directory.mkpath(directory.absolutePath())) { qCritical() << "Error while creating directory " << path; return; } path += '/' + CONFIG_FILE_NAME; QSaveFile configurationFile(path); if (!configurationFile.open(QIODevice::WriteOnly)) { qCritical() << "File " << path << " cannot be opened"; return; } qDebug() << "Core: writing tox_save"; uint32_t fileSize = tox_size(tox); if (fileSize > 0 && fileSize <= INT32_MAX) { uint8_t *data = new uint8_t[fileSize]; tox_save(tox, data); configurationFile.write(reinterpret_cast<char *>(data), fileSize); configurationFile.commit(); delete[] data; } }
static int save_data(Tox *m) { FILE *data_file = fopen(data_file_name, "w"); if (!data_file) { perror("[!] load_key"); return 0; } int res = 1; size_t size = tox_size(m); uint8_t data[size]; tox_save(m, data); if (fwrite(data, sizeof(uint8_t), size, data_file) != size) { fputs("[!] could not write data file (1)!", stderr); res = 0; } if (fclose(data_file) < 0) { perror("[!] could not write data file (2)"); res = 0; } return res; }
void load_key(Tox *m, char *path) { FILE *data_file = fopen(path, "r"); int size = 0; if (data_file) { //load keys fseek(data_file, 0, SEEK_END); size = ftell(data_file); rewind(data_file); uint8_t data[size]; if (fread(data, sizeof(uint8_t), size, data_file) != size) { fputs("[!] could not read data file! exiting...\n", stderr); goto FILE_ERROR; } tox_load(m, data, size); } else { //else save new keys int size = tox_size(m); uint8_t data[size]; tox_save(m, data); data_file = fopen(path, "w"); if (!data_file) { perror("[!] load_key"); exit(1); } if (fwrite(data, sizeof(uint8_t), size, data_file) != size) { fputs("[!] could not write data file! exiting...", stderr); goto FILE_ERROR; } } if (fclose(data_file) < 0) perror("[!] fclose failed"); return; FILE_ERROR: if (fclose(data_file) < 0) perror("[!] fclose failed"); exit(1); }
static void write_save(Tox *tox) { void *data; uint32_t size; uint8_t path_tmp[512], path_real[512], *p; FILE *file; size = tox_size(tox); data = malloc(size); tox_save(tox, data); p = path_real + datapath(path_real); memcpy(p, "tox_save", sizeof("tox_save")); unsigned int path_len = (p - path_real) + sizeof("tox_save"); memcpy(path_tmp, path_real, path_len); memcpy(path_tmp + (path_len - 1), ".tmp", sizeof(".tmp")); file = fopen((char*)path_tmp, "wb"); if(file) { fwrite(data, size, 1, file); flush_file(file); fclose(file); if (rename((char*)path_tmp, (char*)path_real) != 0) { debug("Failed to rename file. %s to %s deleting and trying again\n", path_tmp, path_real); remove((const char *)path_real); if (rename((char*)path_tmp, (char*)path_real) != 0) { debug("Saving Failed\n"); } else { debug("Saved data\n"); } } else { debug("Saved data\n"); } } free(data); }
/* * Store Messenger to given location * Return 0 stored successfully * Return 1 file path is NULL * Return 2 malloc failed * Return 3 opening path failed * Return 4 fwrite failed */ int store_data(Tox *m, char *path) { if (f_loadfromfile == 0) /*If file loading/saving is disabled*/ return 0; if (path == NULL) return 1; FILE *fd; size_t len; uint8_t *buf; len = tox_size(m); buf = malloc(len); if (buf == NULL) return 2; tox_save(m, buf); fd = fopen(path, "wb"); if (fd == NULL) { free(buf); return 3; } if (fwrite(buf, len, 1, fd) != 1) { free(buf); fclose(fd); return 4; } free(buf); fclose(fd); return 0; }