Skip to content
Snippets Groups Projects
Commit f96da0eb authored by Fredrik Hübinette (Hubbe)'s avatar Fredrik Hübinette (Hubbe)
Browse files

some modifications done

Rev: lib/include/simulate.pre.pike:1.4
Rev: lib/include/stdio.pre.pike:1.3
Rev: src/modules/files/testsuite.in:1.3
parent 437d814c
No related branches found
No related tags found
No related merge requests found
#include <process.h> #include <process.h>
#include <array.h> #include <array.h>
#include <stdio.h>
#include <string.h>
#define error(X) throw( ({ (X), backtrace()[0..sizeof(backtrace())-2] }) ) #define error(X) throw( ({ (X), backtrace()[0..sizeof(backtrace())-2] }) )
inherit "/precompiled/file";
inherit "/precompiled/regexp"; inherit "/precompiled/regexp";
string read_bytes(string filename,void|int start,void|int len)
{
string ret;
if(!open(filename,"r"))
error("Couldn't open file "+filename+".\n");
switch(query_num_arg())
{
case 1:
case 2:
len=0x7fffffff;
case 3:
seek(start);
}
ret=read(len);
close();
return ret;
}
int write_file(string filename,string what)
{
int ret;
if(!open(filename,"awc"))
error("Couldn't open file "+filename+".\n");
ret=write(what);
close();
return ret;
}
int file_size(string s)
{
int *stat;
stat=file_stat(s);
if(!stat) return -1;
return stat[1];
}
varargs int member_array(mixed needle,mixed *haystack,int start) varargs int member_array(mixed needle,mixed *haystack,int start)
{ {
return search(haystack,needle,start); return search(haystack,needle,start);
...@@ -96,7 +59,6 @@ void create() ...@@ -96,7 +59,6 @@ void create()
add_constant("PI",3.1415926535897932384626433832795080); add_constant("PI",3.1415926535897932384626433832795080);
add_constant("capitalize",capitalize); add_constant("capitalize",capitalize);
add_constant("explode",`/); add_constant("explode",`/);
add_constant("file_size",file_size);
add_constant("all_efuns",all_constants); add_constant("all_efuns",all_constants);
add_constant("filter_array",filter); add_constant("filter_array",filter);
...@@ -109,12 +71,10 @@ void create() ...@@ -109,12 +71,10 @@ void create()
add_constant("m_values",values); add_constant("m_values",values);
add_constant("member_array",member_array); add_constant("member_array",member_array);
add_constant("previous_object",previous_object); add_constant("previous_object",previous_object);
add_constant("read_bytes",read_bytes);
add_constant("regexp",regexp); add_constant("regexp",regexp);
add_constant("strstr",search); add_constant("strstr",search);
add_constant("sum",`+); add_constant("sum",`+);
add_constant("this_function",this_function); add_constant("this_function",this_function);
add_constant("write_file",write_file);
add_constant("add_efun",add_constant); add_constant("add_efun",add_constant);
add_constant("l_sizeof",sizeof); add_constant("l_sizeof",sizeof);
......
inherit "/precompiled/file"; #include <string.h>
object stderr=clone((program)"/precompiled/file","stderr");
#define error(X) throw( ({ (X), backtrace()[0..sizeof(backtrace())-2] }) ) #define error(X) throw( ({ (X), backtrace()[0..sizeof(backtrace())-2] }) )
program FILE = class {
void perror(string s)
{
#if efun(strerror)
write(s+": "+strerror(errno())+"\n");
#else
write(s+": errno: "+errno()+"\n");
#endif
}
void create()
{
file::create("stderr");
add_constant("perror",perror);
master()->add_precompiled_program("/precompiled/FILE", class {
#define BUFSIZE 16384 #define BUFSIZE 16384
inherit "/precompiled/file"; inherit "/precompiled/file";
...@@ -138,5 +123,100 @@ void create() ...@@ -138,5 +123,100 @@ void create()
return b[bpos++]; return b[bpos++];
} }
}); };
inherit "/precompiled/file";
string read_file(string filename,void|int start,void|int len)
{
object buf,f;
string ret,tmp;
f=clone(FILE);
if(!f->open(filename,"r")) return 0;
switch(query_num_arg())
{
case 1:
ret=f->read(0x7fffffff);
break;
case 2:
len=0x7fffffff;
case 3:
while(start-- && f->gets());
buf=clone(String_buffer);
while(len-- && (tmp=f->gets()))
{
buf->append(tmp);
buf->append("\n");
}
ret=buf->get_buffer();
destruct(buf);
}
destruct(f);
return ret;
}
string read_bytes(string filename,void|int start,void|int len)
{
string ret;
if(!open(filename,"r"))
return 0;
switch(query_num_arg())
{
case 1:
case 2:
len=0x7fffffff;
case 3:
seek(start);
}
ret=read(len);
close();
return ret;
}
int write_file(string filename,string what)
{
int ret;
if(!open(filename,"awc"))
error("Couldn't open file "+filename+".\n");
ret=write(what);
close();
return ret;
}
int file_size(string s)
{
int *stat;
stat=file_stat(s);
if(!stat) return -1;
return stat[1];
}
void perror(string s)
{
#if efun(strerror)
stderr->write(s+": "+strerror(errno())+"\n");
#else
stderr->write(s+": errno: "+errno()+"\n");
#endif
}
void create()
{
add_constant("file_size",file_size);
add_constant("write_file",write_file);
add_constant("read_bytes",read_bytes);
add_constant("read_file",read_file);
add_constant("perror",perror);
master()->add_precompiled_program("/precompiled/FILE", FILE);
add_constant("stdin",clone((program)"/precompiled/FILE","stdin"));
add_constant("stdout",clone(File,"stdout"));
add_constant("stderr",stderr);
} }
// tests for file module // tests for file module
test_true(programp((program)"/precompiled/file")) test_true(programp((program)"/precompiled/file"))
test_do(add_efun("FILE",(program)"/precompiled/file")) test_true(programp(File))
test_true(programp(FILE))
test_true(programp((program)"/precompiled/port")) test_true(programp((program)"/precompiled/port"))
test_any(object o; o=clone(FILE); destruct(o); return 1,1) test_any(object o; o=clone(File); destruct(o); return 1,1)
// - file->open // - file->open
// - file->close // - file->close
test_any(object o=clone(FILE); return o->open("conftest","wct") && o->close(),1) test_any(object o=clone(File); return o->open("conftest","wct") && o->close(),1)
// - file_stat // - file_stat
test_eq(file_stat("conftest")[1],0) test_eq(file_stat("conftest")[1],0)
...@@ -17,57 +16,57 @@ test_true(rm("conftest")) ...@@ -17,57 +16,57 @@ test_true(rm("conftest"))
test_eq(file_stat("conftest"),0) test_eq(file_stat("conftest"),0)
// - file->write // - file->write
test_any(int e; object o=clone(FILE); if(!o->open("conftest","wct")) return -1; e=o->write("sune"); if(!o->close()) return -1; return e,4) test_any(int e; object o=clone(File); if(!o->open("conftest","wct")) return -1; e=o->write("sune"); if(!o->close()) return -1; return e,4)
// - file->read // - file->read
test_any(string s; object o=clone(FILE); if(!o->open("conftest","r")) return -1; s=o->read(4); if(!o->close()) return -1; return s,"sune") test_any(string s; object o=clone(File); if(!o->open("conftest","r")) return -1; s=o->read(4); if(!o->close()) return -1; return s,"sune")
test_any(string s; object o=clone(FILE); if(!o->open("conftest","r")) return -1; s=o->read(999999); if(!o->close()) return -1; return s,"sune") test_any(string s; object o=clone(File); if(!o->open("conftest","r")) return -1; s=o->read(999999); if(!o->close()) return -1; return s,"sune")
test_any(int e; object o=clone(FILE); if(!o->open("conftest","wct")) return -1; e=o->write(sprintf("%'+-*'100000s","")); if(!o->close()) return -1; return e,100000) test_any(int e; object o=clone(File); if(!o->open("conftest","wct")) return -1; e=o->write(sprintf("%'+-*'100000s","")); if(!o->close()) return -1; return e,100000)
test_any(string s; object o=clone(FILE); if(!o->open("conftest","r")) return -1; s=o->read(9999999); if(!o->close()) return -1; return s,sprintf("%'+-*'100000s","")) test_any(string s; object o=clone(File); if(!o->open("conftest","r")) return -1; s=o->read(9999999); if(!o->close()) return -1; return s,sprintf("%'+-*'100000s",""))
// - file->seek // - file->seek
// - file->tell // - file->tell
test_any(object o=clone(FILE); return o->open("conftest","r") && o->read(4711) && o->tell() == 4711 && o->close(),1) test_any(object o=clone(File); return o->open("conftest","r") && o->read(4711) && o->tell() == 4711 && o->close(),1)
// - file->stat // - file->stat
test_any(object o=clone(FILE); return equal(o->open("conftest","r") && o->stat(), file_stat("conftest")),1) test_any(object o=clone(File); return equal(o->open("conftest","r") && o->stat(), file_stat("conftest")),1)
// - file->errno // - file->errno
test_do(clone(FILE,"stdin")->errno()) test_do(clone(File,"stdin")->errno())
// - file->set_nonblocking // - file->set_nonblocking
// - file->set_blocking // - file->set_blocking
// - file->set_id // - file->set_id
// - file->query_id // - file->query_id
test_false(clone(FILE,"stdin")->query_id()) test_false(clone(File,"stdin")->query_id())
// - file->query_read_callback // - File->query_read_callback
test_do(clone(FILE,"stdin")->query_read_callback()) test_do(clone(File,"stdin")->query_read_callback())
// - file->query_write_callback // - file->query_write_callback
test_do(clone(FILE,"stdin")->query_write_callback()) test_do(clone(File,"stdin")->query_write_callback())
// - file->query_close_callback // - file->query_close_callback
test_do(clone(FILE,"stdin")->query_close_callback()) test_do(clone(File,"stdin")->query_close_callback())
// - file->open_socket // - file->open_socket
// - file->connect // - file->connect
// - file->query_address // - file->query_address
// - file->pipe // - file->pipe
test_any([[object o=clone(FILE),o2=o->pipe();o->write("1"); return o2->read(1)]],"1") test_any([[object o=clone(File),o2=o->pipe();o->write("1"); return o2->read(1)]],"1")
test_any([[object o=clone(FILE),o2=o->pipe();o2->write("1"); return o->read(1)]],"1") test_any([[object o=clone(File),o2=o->pipe();o2->write("1"); return o->read(1)]],"1")
// - file->dup // - file->dup
test_any([[object o=clone(FILE); o->open("conftest","r"); o=o->dup(); return o->read(100)]] ,sprintf("%'+-*'100s","")) test_any([[object o=clone(File); o->open("conftest","r"); o=o->dup(); return o->read(100)]] ,sprintf("%'+-*'100s",""))
// - file->assign // - file->assign
est_any([[object o=clone(FILE),o2=clone(FILE); o->open("conftest","r"); o2->assign(o); return o2->read(100)]] ,sprintf("%'+-*'100s","")) est_any([[object o=clone(File),o2=clone(File); o->open("conftest","r"); o2->assign(o); return o2->read(100)]] ,sprintf("%'+-*'100s",""))
// - file->dup2 // - file->dup2
test_any([[object o=clone(FILE),o2=clone(FILE); o2->pipe(); o->open("conftest","r"); o->dup2(o2); return o2->read(100)]] ,sprintf("%'+-*'100s","")) test_any([[object o=clone(File),o2=clone(File); o2->pipe(); o->open("conftest","r"); o->dup2(o2); return o2->read(100)]] ,sprintf("%'+-*'100s",""))
test_eq(popen("echo foo"),"foo\n") test_eq(popen("echo foo"),"foo\n")
...@@ -100,3 +99,22 @@ test_true(stringp(strerror(2)||"")) ...@@ -100,3 +99,22 @@ test_true(stringp(strerror(2)||""))
]]) ]])
test_do(object o=clone(File); if(!o->open("conftest","wct")) return -1; o->write(strmult("foo\n",100)); o->close();)
test_any([[
#include <stdio.h>
return 0]],0)
// /precompiled/FILE
test_any([[object o=clone(FILE); o->open("conftest","r"); return o->gets()]],"foo")
test_any(object o=clone(FILE); o->open("conftest","r"); return o->gets()+o->gets()+o->gets(),"foofoofoo")
test_any(int e; object o=clone(FILE); o->open("conftest","r"); for(e=0;e<100;e++) if(o->gets() != "foo") return e; return -1,-1)
test_true(stdin)
test_true(stdout)
test_true(stderr)
test_eq(read_file("conftest",0,5),strmult("foo\n",5))
test_eq(read_file("conftest",1,5),strmult("foo\n",5))
test_eq(read_file("conftest",100,5),"")
test_do(rm("conftest"))
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment