Expose Env::GetTempDirectory() for use in C test.

This removes the use of the non-portable headers <sys/types.h> and <unistd.h> in c_test.c.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188503102
This commit is contained in:
costan 2018-03-09 10:32:55 -08:00 committed by Victor Costan
parent 8c8024ea33
commit 623d014a54
3 changed files with 19 additions and 16 deletions

13
db/c.cc
View File

@ -5,7 +5,6 @@
#include "leveldb/c.h" #include "leveldb/c.h"
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h>
#include "leveldb/cache.h" #include "leveldb/cache.h"
#include "leveldb/comparator.h" #include "leveldb/comparator.h"
#include "leveldb/db.h" #include "leveldb/db.h"
@ -584,6 +583,18 @@ void leveldb_env_destroy(leveldb_env_t* env) {
delete env; delete env;
} }
char* leveldb_env_get_test_directory(leveldb_env_t* env) {
std::string result;
if (!env->rep->GetTestDirectory(&result).ok()) {
return NULL;
}
char* buffer = static_cast<char*>(malloc(result.size() + 1));
memcpy(buffer, result.data(), result.size());
buffer[result.size()] = '\0';
return buffer;
}
void leveldb_free(void* ptr) { void leveldb_free(void* ptr) {
free(ptr); free(ptr);
} }

View File

@ -8,24 +8,14 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/types.h>
#include <unistd.h>
const char* phase = ""; const char* phase = "";
static char dbname[200];
static void StartPhase(const char* name) { static void StartPhase(const char* name) {
fprintf(stderr, "=== Test %s\n", name); fprintf(stderr, "=== Test %s\n", name);
phase = name; phase = name;
} }
static const char* GetTempDir(void) {
const char* ret = getenv("TEST_TMPDIR");
if (ret == NULL || ret[0] == '\0')
ret = "/tmp";
return ret;
}
#define CheckNoError(err) \ #define CheckNoError(err) \
if ((err) != NULL) { \ if ((err) != NULL) { \
fprintf(stderr, "%s:%d: %s: %s\n", __FILE__, __LINE__, phase, (err)); \ fprintf(stderr, "%s:%d: %s: %s\n", __FILE__, __LINE__, phase, (err)); \
@ -162,21 +152,19 @@ int main(int argc, char** argv) {
leveldb_options_t* options; leveldb_options_t* options;
leveldb_readoptions_t* roptions; leveldb_readoptions_t* roptions;
leveldb_writeoptions_t* woptions; leveldb_writeoptions_t* woptions;
char* dbname;
char* err = NULL; char* err = NULL;
int run = -1; int run = -1;
CheckCondition(leveldb_major_version() >= 1); CheckCondition(leveldb_major_version() >= 1);
CheckCondition(leveldb_minor_version() >= 1); CheckCondition(leveldb_minor_version() >= 1);
snprintf(dbname, sizeof(dbname),
"%s/leveldb_c_test-%d",
GetTempDir(),
((int) geteuid()));
StartPhase("create_objects"); StartPhase("create_objects");
cmp = leveldb_comparator_create(NULL, CmpDestroy, CmpCompare, CmpName); cmp = leveldb_comparator_create(NULL, CmpDestroy, CmpCompare, CmpName);
env = leveldb_create_default_env(); env = leveldb_create_default_env();
cache = leveldb_cache_create_lru(100000); cache = leveldb_cache_create_lru(100000);
dbname = leveldb_env_get_test_directory(env);
CheckCondition(dbname != NULL);
options = leveldb_options_create(); options = leveldb_options_create();
leveldb_options_set_comparator(options, cmp); leveldb_options_set_comparator(options, cmp);
@ -382,6 +370,7 @@ int main(int argc, char** argv) {
leveldb_options_destroy(options); leveldb_options_destroy(options);
leveldb_readoptions_destroy(roptions); leveldb_readoptions_destroy(roptions);
leveldb_writeoptions_destroy(woptions); leveldb_writeoptions_destroy(woptions);
leveldb_free(dbname);
leveldb_cache_destroy(cache); leveldb_cache_destroy(cache);
leveldb_comparator_destroy(cmp); leveldb_comparator_destroy(cmp);
leveldb_env_destroy(env); leveldb_env_destroy(env);

View File

@ -245,6 +245,9 @@ LEVELDB_EXPORT void leveldb_cache_destroy(leveldb_cache_t* cache);
LEVELDB_EXPORT leveldb_env_t* leveldb_create_default_env(); LEVELDB_EXPORT leveldb_env_t* leveldb_create_default_env();
LEVELDB_EXPORT void leveldb_env_destroy(leveldb_env_t*); LEVELDB_EXPORT void leveldb_env_destroy(leveldb_env_t*);
/* If not NULL, the returned buffer must be released using leveldb_free(). */
LEVELDB_EXPORT char* leveldb_env_get_test_directory(leveldb_env_t*);
/* Utility */ /* Utility */
/* Calls free(ptr). /* Calls free(ptr).