2 * (c) Oleg Puchinin 2006
3 * graycardinalster@gmail.com
11 #include <sys/ioctl.h>
16 struct stat
*cur_stat
= NULL
;
18 __export
int Dfnwrite (char * p_lpsz_filename
, void * p_lp_buffer
,int int_size
)
22 myfile
= fopen(p_lpsz_filename
,"w");
25 result
= fwrite(p_lp_buffer
,1,int_size
,myfile
);
30 __export
int Dfnread (char * f_name
, void * p_lp_buffer
, int int_size
)
32 int n_bytes
= int_size
> fsize (f_name
) ? fsize (f_name
) : int_size
;
35 fd
= open (f_name
, O_RDONLY
);
39 if (read (fd
, p_lp_buffer
, n_bytes
) < 0)
46 __export
int Dselect (int FILENO
, int SEC
, int USEC
)
48 struct timeval m_timeval
;
52 FD_SET (FILENO
, &m_fdset
);
53 m_timeval
.tv_sec
= SEC
;
54 m_timeval
.tv_usec
= USEC
;
56 if (!m_timeval
.tv_sec
&& !m_timeval
.tv_usec
)
57 return select (FILENO
+1, &m_fdset
, NULL
, NULL
, NULL
);// &m_timeval);
59 return select (FILENO
+1, &m_fdset
, NULL
, NULL
, &m_timeval
);
62 __export
char * DFILE (const char * m_filename
, int *rsize
)
71 if (m_filename
== NULL
)
74 fd
= open (m_filename
, O_RDONLY
);
78 if (lstat (m_filename
, &m_stat
) < 0)
81 m_file
= malloc (m_stat
.st_size
);
88 count
= read (fd
, ptr
, len
);
96 *rsize
= m_stat
.st_size
;
102 __export
struct stat
* DSTAT (const char * S
)
105 cur_stat
= malloc (sizeof (struct stat
));
110 __export
struct stat
* DLSTAT (const char * S
)
113 cur_stat
= malloc (sizeof (struct stat
));
118 __export
int DIONREAD (int fd
)
122 if (ioctl (fd
, FIONREAD
, &ret
) != 0)
128 __export
int fsize (const char * S
)
132 if (lstat (S
, &m_stat
) < 0)
135 return m_stat
.st_size
;
138 __export
int fdsize (int fd
)
142 if (fstat (fd
, &m_stat
) < 0)
145 return m_stat
.st_size
;
148 __export
char * DFDMAP (int fd
)
150 return (char *) mmap (NULL
, fdsize (fd
), PROT_READ
, MAP_SHARED
, fd
, 0);
153 __export
char * DFMAP (const char *d_file
, int *out_fd
, int *d_out_size
)
159 fd
= open (d_file
, O_RDONLY
);
163 d_size
= fdsize (fd
);
166 *d_out_size
= d_size
;
171 S
= (char *) mmap (NULL
, d_size
, PROT_READ
, MAP_SHARED
, fd
, 0);
173 if ((long) S
== -1) {
181 __export
char * Dread_to_eof (int fd
, int *d_out_size
)
183 char * d_buf
= (char *) malloc (4096);
195 d_ret
= read (fd
, &d_buf
[d_pos
], d_size
- d_pos
- 1);
199 if (d_ret
== 0) //EOF
203 if ((d_size
- d_pos
) < 4096) {
204 d_buf
= gc_realloc (d_buf
, d_size
, d_size
<< 1);
221 __export
int move_stream (int fd_in
, int fd_out
)
227 m_buf
= malloc (4096);
230 i
= read (fd_in
, m_buf
, 4096);
234 write (fd_out
, m_buf
, i
);
241 __export
int Dnonblock(int fd
)
243 int flags
= fcntl(fd
, F_GETFL
);
244 return fcntl(fd
, F_SETFL
, flags
| O_NONBLOCK
);
247 __export
int close_pipe (int *fds
)
253 Ret1
= close (fds
[0]);
258 Ret2
= close (fds
[1]);
262 return Ret1
? Ret1
: Ret2
;
265 __export
int Dtmpfd (char *name
)
271 Drand_str (tmpstr
, 63);
272 sprintf (m_buf
, "/tmp/%s", tmpstr
);
273 fd
= open (m_buf
, O_CREAT
| O_RDWR
);
276 strcpy (name
, m_buf
);
284 __export
int fdclose (int * fd
)
296 __export
char * fext (char *name
)
300 return rindex (name
, '.');
303 __export
int logToFile (char * fileName
, char * fmt
, ...)
307 myfile
= fopen (fileName
, "a");
311 va_start (alist
, fmt
);
312 vfprintf (myfile
, fmt
, alist
);
318 __export
int copyFile (char * sourceName
, char * destName
)
323 char * copyBuf
= NULL
;
327 if (! sourceName
|| ! destName
)
330 sourceFD
= open (sourceName
, O_RDONLY
);
331 fstat (sourceFD
, &st
);
332 destFD
= open (destName
, O_WRONLY
| O_CREAT
, st
.st_mode
);
333 if ((sourceFD
< 0) || (destFD
< 0)) {
338 copyBuf
= CNEW (char, 4096);
340 ret
= read (sourceFD
, copyBuf
, 4096);
343 if (write (destFD
, copyBuf
, ret
) < 0)