Merge git://factorcode.org/git/factor
commit
7c9836ee81
|
@ -270,6 +270,16 @@ FUNCTION: double ffi_test_35 test-struct-11 x int y ;
|
|||
3 ffi_test_35
|
||||
] unit-test
|
||||
|
||||
C-STRUCT: test-struct-12 { "int" "a" } { "double" "x" } ;
|
||||
|
||||
: make-struct-12
|
||||
"test-struct-12" <c-object>
|
||||
[ set-test-struct-12-x ] keep ;
|
||||
|
||||
FUNCTION: double ffi_test_36 ( test-struct-12 x ) ;
|
||||
|
||||
[ 1.23456 ] [ 1.23456 make-struct-12 ffi_test_36 ] unit-test
|
||||
|
||||
! Test callbacks
|
||||
|
||||
: callback-1 "void" { } "cdecl" [ ] alien-callback ;
|
||||
|
|
|
@ -118,23 +118,11 @@ TUPLE: CreateProcess-args
|
|||
: inherited-stderr ( args -- handle )
|
||||
drop STD_ERROR_HANDLE GetStdHandle ;
|
||||
|
||||
: duplicate-handle ( handle -- handle )
|
||||
GetCurrentProcess
|
||||
swap
|
||||
GetCurrentProcess
|
||||
f <void*> [
|
||||
0
|
||||
TRUE
|
||||
DUPLICATE_SAME_ACCESS
|
||||
DuplicateHandle win32-error=0/f
|
||||
] keep *void* ;
|
||||
|
||||
: redirect-stderr ( args -- handle )
|
||||
+stderr+ get
|
||||
dup +stdout+ eq? [
|
||||
drop
|
||||
CreateProcess-args-lpStartupInfo duplicate-handle
|
||||
STARTUPINFO-hStdOutput
|
||||
CreateProcess-args-lpStartupInfo STARTUPINFO-hStdOutput
|
||||
] [
|
||||
GENERIC_WRITE CREATE_ALWAYS redirect
|
||||
swap inherited-stderr ?closed
|
||||
|
|
|
@ -16,8 +16,11 @@ IN: tools.deploy.backend
|
|||
: copy-lines ( stream -- )
|
||||
[ (copy-lines) ] with-disposal ;
|
||||
|
||||
: run-with-output ( descriptor -- )
|
||||
<process-stream>
|
||||
: run-with-output ( arguments -- )
|
||||
[
|
||||
+arguments+ set
|
||||
+stdout+ +stderr+ set
|
||||
] H{ } make-assoc <process-stream>
|
||||
dup duplex-stream-out dispose
|
||||
copy-lines ;
|
||||
|
||||
|
|
|
@ -245,3 +245,8 @@ double ffi_test_35(struct test_struct_11 x, int y)
|
|||
{
|
||||
return (x.x + x.y) * y;
|
||||
}
|
||||
|
||||
double ffi_test_36(struct test_struct_12 x)
|
||||
{
|
||||
return x.x;
|
||||
}
|
||||
|
|
|
@ -57,3 +57,7 @@ struct test_struct_10 { float x; int y; };
|
|||
DLLEXPORT double ffi_test_34(struct test_struct_10 x, int y);
|
||||
struct test_struct_11 { int x; int y; };
|
||||
DLLEXPORT double ffi_test_35(struct test_struct_11 x, int y);
|
||||
|
||||
struct test_struct_12 { int a; double x; };
|
||||
|
||||
DLLEXPORT double ffi_test_36(struct test_struct_12 x);
|
||||
|
|
|
@ -13,6 +13,7 @@ void init_signals(void)
|
|||
void early_init(void) { }
|
||||
|
||||
#define SUFFIX ".image"
|
||||
#define SUFFIX_LEN 6
|
||||
|
||||
const char *default_image_path(void)
|
||||
{
|
||||
|
@ -21,8 +22,14 @@ const char *default_image_path(void)
|
|||
if(!path)
|
||||
return "factor.image";
|
||||
|
||||
char *new_path = safe_malloc(PATH_MAX + strlen(SUFFIX) + 1);
|
||||
memcpy(new_path,path,strlen(path) + 1);
|
||||
strcat(new_path,SUFFIX);
|
||||
/* We can't call strlen() here because with gcc 4.1.2 this
|
||||
causes an internal compiler error. */
|
||||
int len = 0;
|
||||
const char *iter = path;
|
||||
while(*iter) { len++; iter++; }
|
||||
|
||||
char *new_path = safe_malloc(PATH_MAX + SUFFIX_LEN + 1);
|
||||
memcpy(new_path,path,len + 1);
|
||||
memcpy(new_path + len,SUFFIX,SUFFIX_LEN + 1);
|
||||
return new_path;
|
||||
}
|
||||
|
|
11
vm/types.c
11
vm/types.c
|
@ -471,8 +471,6 @@ F_STRING* allot_string_internal(CELL capacity)
|
|||
string->hashcode = F;
|
||||
string->aux = F;
|
||||
|
||||
set_string_nth(string,capacity,0);
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
|
@ -645,14 +643,7 @@ F_BYTE_ARRAY *allot_c_string(CELL capacity, CELL size)
|
|||
} \
|
||||
type *to_##type##_string(F_STRING *s, bool check) \
|
||||
{ \
|
||||
if(sizeof(type) == sizeof(char)) \
|
||||
{ \
|
||||
if(check && !check_string(s,sizeof(type))) \
|
||||
general_error(ERROR_C_STRING,tag_object(s),F,NULL); \
|
||||
return (type*)(s + 1); \
|
||||
} \
|
||||
else \
|
||||
return (type*)(string_to_##type##_alien(s,check) + 1); \
|
||||
return (type*)(string_to_##type##_alien(s,check) + 1); \
|
||||
} \
|
||||
type *unbox_##type##_string(void) \
|
||||
{ \
|
||||
|
|
Loading…
Reference in New Issue