mirror of
https://github.com/umutcamliyurt/Amnezichat.git
synced 2025-05-07 23:25:22 +01:00
72 lines
1.7 KiB
C
72 lines
1.7 KiB
C
![]() |
// SPDX-License-Identifier: MIT
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <sys/stat.h>
|
||
|
|
||
|
#define OQS_STORE_DIR "tmp"
|
||
|
#define OQS_STORE_PREFIX "/oqs-temp-file-"
|
||
|
#define MAXPATHLEN 128
|
||
|
|
||
|
#if (defined(_WIN32) || defined(__WIN32__))
|
||
|
#include <windows.h>
|
||
|
#endif
|
||
|
|
||
|
static OQS_STATUS oqs_fstore_init(void) {
|
||
|
#ifndef _WIN32
|
||
|
return mkdir(OQS_STORE_DIR, 0755);
|
||
|
#else
|
||
|
if (CreateDirectory(OQS_STORE_DIR, NULL)) {
|
||
|
return OQS_SUCCESS;
|
||
|
} else {
|
||
|
return OQS_ERROR;
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
static OQS_STATUS oqs_fstore(const char *fname, const char *mname, uint8_t *data, size_t len) {
|
||
|
char fpath[MAXPATHLEN];
|
||
|
strcpy(fpath, OQS_STORE_DIR);
|
||
|
strcat(fpath, OQS_STORE_PREFIX);
|
||
|
strcat(fpath, mname);
|
||
|
strcat(fpath, fname);
|
||
|
FILE *fp = fopen(fpath, "wb");
|
||
|
if (!fp) {
|
||
|
fprintf(stderr, "Couldn't open %s for writing.\n", fpath);
|
||
|
return OQS_ERROR;
|
||
|
}
|
||
|
fwrite(data, len, 1, fp);
|
||
|
fclose(fp);
|
||
|
return OQS_SUCCESS;
|
||
|
}
|
||
|
|
||
|
static OQS_STATUS oqs_fload(const char *fname, const char *mname, uint8_t *data, size_t len, size_t *rcvd) {
|
||
|
size_t len_read = 0, r = 0;
|
||
|
uint8_t *dr = NULL;
|
||
|
char fpath[MAXPATHLEN];
|
||
|
strcpy(fpath, OQS_STORE_DIR);
|
||
|
strcat(fpath, OQS_STORE_PREFIX);
|
||
|
strcat(fpath, mname);
|
||
|
strcat(fpath, fname);
|
||
|
FILE *fp = fopen(fpath, "rb");
|
||
|
if (!fp) {
|
||
|
fprintf(stderr, "Couldn't open %s for reading.\n", fpath);
|
||
|
return OQS_ERROR;
|
||
|
}
|
||
|
do { // assume some OSs don't deliver all data in one go...
|
||
|
dr = (uint8_t *)(data + len_read);
|
||
|
r = fread(dr, 1, len - len_read, fp);
|
||
|
len_read += r;
|
||
|
} while (r > 0);
|
||
|
*rcvd = len_read;
|
||
|
if (len_read <= 0) {
|
||
|
fprintf(stderr, "Error reading data (operations called in proper sequence?). Expecting %zu. Exiting.\n", len);
|
||
|
return OQS_ERROR;
|
||
|
}
|
||
|
fclose(fp);
|
||
|
return OQS_SUCCESS;
|
||
|
}
|
||
|
|