static p_file * mpy_on_include(const char *filename, int fullparse) { mpy_fopen_t *f = 0; long len = 0; if (!mpy_parallel) return p_fopen(filename, "r"); /* refuse to reopen file for debug line numbers when parallel */ if (!fullparse) return 0; if (mpy_rank == 0) { p_file *file = p_fopen(filename, "r"); long sz = file? p_fsize(file) : 0; char *txt; long dims[2]; if (file) len = strlen(filename); dims[0] = 1; dims[1] = len + 1 + sz; ypush_check(1); /* may be called outside any interpreted function */ txt = ypush_c(dims); if (len) { strcpy(txt, filename); txt += len + 1; if (p_fread(file, txt, sz) != sz) { yarg_drop(1); y_errorq("rank 0 cannot read include file %s", filename); return 0; } } else { txt[0] = '\0'; } } mpy_bcast(1); /* broadcast top of stack to all ranks */ if (mpy_rank > 0) { /* set filename, file contents on all non-0 ranks */ long sz = 0; filename = ygeta_c(0, &sz, (long *)0); len = strlen(filename); } mpy_bcast(0); /* send acknowledgement back to rank 0 */ if (!len) return 0; f = p_malloc(sizeof(mpy_fopen_t)); f->ops = &mpy_fopen_ops; f->array = yget_use(0); f->addr = len + 1; yarg_drop(1); return (p_file *)f; }
static void test_fread_s(void) { static const char test_file[] = "fread_s.tst"; int ret; char buf[10]; FILE *f = fopen(test_file, "w"); if(!f) { skip("Error creating test file\n"); return; } fwrite("test", 1, 4, f); fclose(f); ok(p_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL, "Invalid parameter handler was already set\n"); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p_fread_s(buf, sizeof(buf), 1, 1, NULL); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(errno == EINVAL, "errno = %d, expected EINVAL\n", errno); CHECK_CALLED(invalid_parameter_handler); f = p_fopen(test_file, "r"); errno = 0xdeadbeef; ret = p_fread_s(NULL, sizeof(buf), 0, 1, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(errno == 0xdeadbeef, "errno = %d, expected 0xdeadbeef\n", errno); ret = p_fread_s(NULL, sizeof(buf), 1, 0, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(errno == 0xdeadbeef, "errno = %d, expected 0xdeadbeef\n", errno); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p_fread_s(NULL, sizeof(buf), 1, 1, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(errno == EINVAL, "errno = %d, expected EINVAL\n", errno); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; buf[1] = 'a'; ret = p_fread_s(buf, 3, 1, 10, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(buf[0] == 0, "buf[0] = '%c', expected 0\n", buf[0]); ok(buf[1] == 0, "buf[1] = '%c', expected 0\n", buf[1]); ok(errno == ERANGE, "errno = %d, expected ERANGE\n", errno); CHECK_CALLED(invalid_parameter_handler); SET_EXPECT(invalid_parameter_handler); errno = 0xdeadbeef; ret = p_fread_s(buf, 2, 1, 10, f); ok(ret == 0, "fread_s returned %d, expected 0\n", ret); ok(buf[0] == 0, "buf[0] = '%c', expected 0\n", buf[0]); ok(errno == ERANGE, "errno = %d, expected ERANGE\n", errno); CHECK_CALLED(invalid_parameter_handler); memset(buf, 'a', sizeof(buf)); ret = p_fread_s(buf, sizeof(buf), 3, 10, f); ok(ret==1, "fread_s returned %d, expected 1\n", ret); ok(buf[0] == 'e', "buf[0] = '%c', expected 'e'\n", buf[0]); ok(buf[1] == 's', "buf[1] = '%c', expected 's'\n", buf[1]); ok(buf[2] == 't', "buf[2] = '%c', expected 't'\n", buf[2]); ok(buf[3] == 'a', "buf[3] = '%c', expected 'a'\n", buf[3]); p_fclose(f); ok(p_set_invalid_parameter_handler(NULL) == test_invalid_parameter_handler, "Cannot reset invalid parameter handler\n"); unlink(test_file); }
static void test_fwprintf(void) { static const char file_name[] = "fprintf.tst"; static const WCHAR simple[] = {'s','i','m','p','l','e',' ','t','e','s','t','\n',0}; static const WCHAR cont_fmt[] = {'c','o','n','t','a','i','n','s','%','c','n','u','l','l','\n',0}; static const WCHAR cont[] = {'c','o','n','t','a','i','n','s','\0','n','u','l','l','\n',0}; FILE *fp = p_fopen(file_name, "wb"); wchar_t bufw[1024]; char bufa[1024]; int ret; ret = vfwprintf_wrapper(fp, simple); ok(ret == 12, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 24, "ftell returned %d\n", ret); ret = vfwprintf_wrapper(fp, cont_fmt, '\0'); ok(ret == 14, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 52, "ftell returned %d\n", ret); p_fclose(fp); fp = p_fopen(file_name, "rb"); p_fgetws(bufw, sizeof(bufw)/sizeof(bufw[0]), fp); ret = p_ftell(fp); ok(ret == 24, "ftell returned %d\n", ret); ok(!wcscmp(bufw, simple), "buf = %s\n", wine_dbgstr_w(bufw)); p_fgetws(bufw, sizeof(bufw)/sizeof(bufw[0]), fp); ret = p_ftell(fp); ok(ret == 52, "ret = %d\n", ret); ok(!memcmp(bufw, cont, 28), "buf = %s\n", wine_dbgstr_w(bufw)); p_fclose(fp); fp = p_fopen(file_name, "wt"); ret = vfwprintf_wrapper(fp, simple); ok(ret == 12, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 13, "ftell returned %d\n", ret); ret = vfwprintf_wrapper(fp, cont_fmt, '\0'); ok(ret == 14, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 28, "ftell returned %d\n", ret); p_fclose(fp); fp = p_fopen(file_name, "rb"); p_fgets(bufa, sizeof(bufa), fp); ret = p_ftell(fp); ok(ret == 13, "ftell returned %d\n", ret); ok(!strcmp(bufa, "simple test\r\n"), "buf = %s\n", bufa); p_fgets(bufa, sizeof(bufa), fp); ret = p_ftell(fp); ok(ret == 28, "ret = %d\n", ret); ok(!memcmp(bufa, "contains\0null\r\n", 15), "buf = %s\n", bufa); p_fclose(fp); unlink(file_name); ok(p_set_invalid_parameter_handler(test_invalid_parameter_handler) == NULL, "Invalid parameter handler was already set\n"); /* NULL format */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); ret = vfwprintf_wrapper(fp, NULL); ok(errno == EINVAL, "expected errno EINVAL, got %d\n", errno); ok(ret == -1, "expected ret -1, got %d\n", ret); CHECK_CALLED(invalid_parameter_handler); /* NULL file */ errno = 0xdeadbeef; SET_EXPECT(invalid_parameter_handler); ret = vfwprintf_wrapper(NULL, simple); ok(errno == EINVAL, "expected errno EINVAL, got %d\n", errno); ok(ret == -1, "expected ret -1, got %d\n", ret); CHECK_CALLED(invalid_parameter_handler); /* format using % with NULL arglist*/ /* crashes on Windows */ /* ret = p_vfwprintf(0, fp, cont_fmt, NULL, NULL); */ ok(p_set_invalid_parameter_handler(NULL) == test_invalid_parameter_handler, "Cannot reset invalid parameter handler\n"); }
/* ARGSUSED */ static p_file * default_on_include(const char *filename, int fullparse) { return p_fopen(filename, "r"); }
static void test_fprintf(void) { static const char file_name[] = "fprintf.tst"; FILE *fp = p_fopen(file_name, "wb"); char buf[1024]; int ret; ret = vfprintf_wrapper(fp, "simple test\n"); ok(ret == 12, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 12, "ftell returned %d\n", ret); ret = vfprintf_wrapper(fp, "contains%cnull\n", '\0'); ok(ret == 14, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 26, "ftell returned %d\n", ret); p_fclose(fp); fp = p_fopen(file_name, "rb"); p_fgets(buf, sizeof(buf), fp); ret = p_ftell(fp); ok(ret == 12, "ftell returned %d\n", ret); ok(!strcmp(buf, "simple test\n"), "buf = %s\n", buf); p_fgets(buf, sizeof(buf), fp); ret = p_ftell(fp); ok(ret == 26, "ret = %d\n", ret); ok(!memcmp(buf, "contains\0null\n", 14), "buf = %s\n", buf); p_fclose(fp); fp = p_fopen(file_name, "wt"); ret = vfprintf_wrapper(fp, "simple test\n"); ok(ret == 12, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 13, "ftell returned %d\n", ret); ret = vfprintf_wrapper(fp, "contains%cnull\n", '\0'); ok(ret == 14, "ret = %d\n", ret); ret = p_ftell(fp); ok(ret == 28, "ftell returned %d\n", ret); p_fclose(fp); fp = p_fopen(file_name, "rb"); p_fgets(buf, sizeof(buf), fp); ret = p_ftell(fp); ok(ret == 13, "ftell returned %d\n", ret); ok(!strcmp(buf, "simple test\r\n"), "buf = %s\n", buf); p_fgets(buf, sizeof(buf), fp); ret = p_ftell(fp); ok(ret == 28, "ret = %d\n", ret); ok(!memcmp(buf, "contains\0null\r\n", 15), "buf = %s\n", buf); p_fclose(fp); unlink(file_name); }