1
Fork 0

Add a rust_str typedef to the runtime. Issue #855

This commit is contained in:
Brian Anderson 2011-09-02 17:00:40 -07:00
parent 01b254b411
commit 1b67d211b4
3 changed files with 14 additions and 12 deletions

View file

@ -43,10 +43,10 @@ command_line_args : public kernel_owned<command_line_args>
"command line arg interior"); "command line arg interior");
args->fill = args->alloc = sizeof(rust_vec*) * argc; args->fill = args->alloc = sizeof(rust_vec*) * argc;
for (int i = 0; i < argc; ++i) { for (int i = 0; i < argc; ++i) {
rust_vec *str = make_str(kernel, argv[i], rust_str *str = make_str(kernel, argv[i],
strlen(argv[i]), strlen(argv[i]),
"command line arg"); "command line arg");
((rust_vec**)&args->data)[i] = str; ((rust_str**)&args->data)[i] = str;
} }
} }

View file

@ -7,7 +7,7 @@
/* Native builtins. */ /* Native builtins. */
extern "C" CDECL rust_vec* extern "C" CDECL rust_str*
last_os_error(rust_task *task) { last_os_error(rust_task *task) {
LOG(task, task, "last_os_error()"); LOG(task, task, "last_os_error()");
@ -40,15 +40,15 @@ last_os_error(rust_task *task) {
} }
#endif #endif
rust_vec * st = make_str(task->kernel, buf, strlen(buf), rust_str * st = make_str(task->kernel, buf, strlen(buf),
"last_os_error"); "last_os_error");
#ifdef __WIN32__ #ifdef __WIN32__
LocalFree((HLOCAL)buf); LocalFree((HLOCAL)buf);
#endif #endif
return st; return st;
} }
extern "C" CDECL rust_vec * extern "C" CDECL rust_str *
rust_getcwd(rust_task *task) { rust_getcwd(rust_task *task) {
LOG(task, task, "rust_getcwd()"); LOG(task, task, "rust_getcwd()");
@ -323,15 +323,15 @@ debug_ptrcast(rust_task *task,
extern "C" CDECL rust_vec* extern "C" CDECL rust_vec*
rust_list_files(rust_task *task, rust_vec **path) { rust_list_files(rust_task *task, rust_vec **path) {
array_list<rust_vec*> strings; array_list<rust_str*> strings;
#if defined(__WIN32__) #if defined(__WIN32__)
WIN32_FIND_DATA FindFileData; WIN32_FIND_DATA FindFileData;
HANDLE hFind = FindFirstFile((char*)(*path)->data, &FindFileData); HANDLE hFind = FindFirstFile((char*)(*path)->data, &FindFileData);
if (hFind != INVALID_HANDLE_VALUE) { if (hFind != INVALID_HANDLE_VALUE) {
do { do {
rust_vec *str = make_str(task->kernel, FindFileData.cFileName, rust_str *str = make_str(task->kernel, FindFileData.cFileName,
strlen(FindFileData.cFileName), strlen(FindFileData.cFileName),
"list_files_str"); "list_files_str");
strings.push(str); strings.push(str);
} while (FindNextFile(hFind, &FindFileData)); } while (FindNextFile(hFind, &FindFileData));
FindClose(hFind); FindClose(hFind);

View file

@ -188,11 +188,13 @@ inline void reserve_vec(rust_task* task, rust_vec** vpp, size_t size) {
} }
} }
inline rust_vec * typedef rust_vec rust_str;
inline rust_str *
make_str(rust_kernel* kernel, char* c, size_t strlen, const char* name) { make_str(rust_kernel* kernel, char* c, size_t strlen, const char* name) {
size_t str_fill = strlen + 1; size_t str_fill = strlen + 1;
size_t str_alloc = str_fill; size_t str_alloc = str_fill;
rust_vec *str = (rust_vec *) rust_str *str = (rust_str *)
kernel->malloc(vec_size<char>(str_fill), name); kernel->malloc(vec_size<char>(str_fill), name);
str->fill = str_fill; str->fill = str_fill;
str->alloc = str_alloc; str->alloc = str_alloc;