X-Git-Url: http://nitlanguage.org diff --git a/c_src/file_nit.c b/c_src/file_nit.c index 2ce41d3..56b26da 100644 --- a/c_src/file_nit.c +++ b/c_src/file_nit.c @@ -13,13 +13,60 @@ * another product. */ -#define _POSIX_C_SOURCE 1 #include #include #include #include #include #include +#include +#include + +#include "file_nit.h" + +#ifndef NONITCNI +/* +C implementation of file::String::files + +Imported methods signatures: + HashSet new_HashSet( ) for hash_collection::HashSet::init + void HashSet_add( HashSet recv, Object item ) for hash_collection::HashSet::(abstract_collection::SimpleCollection::add) + String new_String_from_cstring( char * str ) for string::String::from_cstring + int HashSet_is_a_Set( HashSet value ) to check if a HashSet[String] is a Set[String] + Set HashSet_as_Set( HashSet value ) to cast from HashSet[String] to Set[String] +*/ +Set String_files___impl( String recv ) +{ + char *dir_path; + DIR *dir; + + dir_path = String_to_cstring( recv ); + if ((dir = opendir(dir_path)) == NULL) + { + perror( dir_path ); + exit( 1 ); + } + else + { + HashSet results; + String file_name; + struct dirent *de; + + results = new_HashSet(); + + while ( ( de = readdir( dir ) ) != NULL ) + if ( strcmp( de->d_name, ".." ) != 0 && + strcmp( de->d_name, "." ) != 0 ) + { + file_name = new_String_from_cstring( strdup( de->d_name ) ); + HashSet_add( results, String_as_Object( file_name ) ); + } + + closedir( dir ); + return HashSet_as_Set( results ); + } +} +#endif int string_NativeString_NativeString_file_exists_0(char *f){ FILE *hdl = fopen(f,"r"); @@ -52,3 +99,13 @@ void *file_NativeFile_NativeFile_file_stat_0(FILE *f){ extern int string_NativeString_NativeString_file_delete_0(char *f){ return (remove(f) == 0); } + +int file_stdin_poll_in_(void) { + struct pollfd fd = {0, POLLIN, 0}; + int res = poll(&fd, 1, 0); + if (res == -1) { + perror("Error poll stdin"); + exit(EXIT_FAILURE); + } + return res > 0; +}