7292cdd42f8d83acde944a514345cbdce664e84c
[claws.git] / src / common / w32lib.h
1 /* w32lib.h  - Posix emulation layer for Sylpheed (Claws)
2  *
3  * This file is part of w32lib.
4  *
5  * w32lib is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * w32lib is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
18  * USA.
19  *
20  * The code has been taken from the package
21  *    http://claws.sylpheed.org/win32/sylpheed/w32lib-dev-2004.2.3.0.zip
22  * on 2005-11-17 by Werner Koch <wk@gnupg.org>. There are no regular
23  * copyright notices but the file version.rc from the ZIP archive
24  * claims:
25  *
26  *     #define FILEVER "2004.2.3.0\0"
27  *     #define PRODVER "2004.2.3\0"
28  *
29  *     [...]
30  *      VALUE "FileDescription", "Posix emulation layer for Sylpheed (Claws)\0"
31  *      VALUE "FileVersion", FILEVER
32  *      VALUE "ProductVersion", PRODVER
33  *      VALUE "LegalCopyright", "GPL\0"
34  *      VALUE "CompanyName", "GNU / Free Software Foundation\0"
35  *      VALUE "ProductName", "w32lib\0"
36  *
37  * Along with the fact that Sylpheed is under the GPL we can assume
38  * that this code is under the GPL.  No author information or
39  * changelogs have been found.
40  * Files taken form the package are:
41  *    w32_dirent.c w32_reg.c w32_stat.c w32_stdlib.c w32_time.c w32_wait.c
42  *    w32_gettext.c w32_signal.c w32_stdio.c w32_string.c w32_unistd.c
43  */
44
45 /* Changes are:
46
47 2005-11-17  Werner Koch  <wk@g10code.com>
48
49         Add boilerplate text to all files and explain legal status.
50
51         * w32_reg.c: Replaced g_free and g_strdup by regular C functions.
52         (get_content_type_from_registry_with_ext): Ditto.
53         * w32_dirent.c (readdir): Ditto. 
54         (opendir): Ditto.
55         (closedir): Reformatted.
56         (readdir): Reformatted, replaced use of g_strdup_printf and other
57         g-style malloc function by regular ones.  Use DIR structure from mingw.
58         * w32lib.h: Don't define finddata_t for mingw. Replaced replacement
59         DIR structure by the one form mingw.  Allocate filename in dirent
60         statically to match the defintion ussed by mingw.
61         * w32_reg.c (read_w32_registry_string): Return error for invalid root
62         key.
63
64   */
65
66
67 #ifndef _W32LIB_H_
68 #define _W32LIB_H_
69
70 #include <windows.h>
71 #include <io.h>
72 #include <stdio.h>
73
74 #ifdef __MINGW32__
75 #include <wchar.h>
76 #include <dirent.h>
77 #endif
78
79 /* types */
80 /*** ??? ***/
81 #ifndef __MINGW32__
82 typedef long int off_t;
83 typedef int pid_t;
84 typedef unsigned char u_char;
85 #endif /* __MINGW32__ */
86 typedef unsigned int uid_t;
87
88 #ifndef __MINGW32__
89 /*** stat ***/
90 #define S_IRUSR _S_IREAD
91 #define S_IWUSR _S_IWRITE
92 #define S_IXUSR _S_IEXEC
93 #define S_IRWXU (_S_IREAD|_S_IWRITE|_S_IEXEC)
94 #endif /* __MINGW32__ */
95
96
97 /* (signal?) */
98 #define SIGPIPE _S_IFIFO
99
100
101 /* (directory) */
102 #define __S_ISTYPE(mode, mask)  (((mode) & _S_IFMT) == (mask))
103 #ifndef __MINGW32__
104 #define S_ISFIFO(mode)  __S_ISTYPE((mode), _S_IFIFO)
105 #define S_ISDIR(mode)   __S_ISTYPE((mode), _S_IFDIR)
106 #define S_ISREG(mode)   __S_ISTYPE((mode), _S_IFREG)
107 #endif /* __MINGW32__ */
108
109 /* functions */
110 /*** str ***/
111 int strcasecmp( const char *s1, const char *s2 );
112
113 int strncasecmp( const char *s1, const char *s2, size_t n );
114
115 /*** dir ***/
116 #ifndef __MINGW32__
117 typedef void * HANDLE;
118
119 #ifndef _FINDDATA_T_DEFINED
120 typedef unsigned long _fsize_t; /* Could be 64 bits for Win32 */
121 struct _finddata_t {
122     unsigned    attrib;
123     time_t      time_create;    /* -1 for FAT file systems */
124     time_t      time_access;    /* -1 for FAT file systems */
125     time_t      time_write;
126     _fsize_t    size;
127     char        name[260];
128 };
129 #endif /* !_FINDDATA_T_DEFINED */
130
131 struct dirent {
132         long d_ino;
133         unsigned short d_reclen;
134         unsigned short d_namlen;
135         char d_name[FILENAME_MAX];
136 };
137
138 typedef struct
139 {
140         struct _finddata_t      dd_dta;
141         struct dirent           dd_dir;
142         long                    dd_handle;
143         int                     dd_stat;
144         char                    dd_name[1];
145 } DIR;
146
147 #endif /* !__MINGW32__ */
148
149
150 DIR *opendir( const char *name );
151 int closedir( DIR *dir );
152 struct dirent *readdir( DIR *dir );
153
154 #ifdef __MINGW32__
155 struct timezone {
156   int tz_minuteswest;
157   int tz_dsttime;
158 };
159 #endif
160
161 /*** stat ***/
162 int lstat( const char *file_name, struct stat *buf );
163
164 /*** sys/wait ***/
165 pid_t waitpid( pid_t pid, int *status, int options );
166
167 /*** sys/time ***/
168 int gettimeofday( struct timeval *tv, struct timezone *tz );
169
170 /*** unistd ***/
171 uid_t getuid( void );
172 int setpgid( pid_t pid, pid_t pgid );
173 pid_t getppid( void );
174 pid_t fork( void );
175 unsigned int sleep( unsigned int seconds );
176 int link( const char *oldpath, const char *newpath );
177 int usleep( unsigned long usec );
178
179 /*** stdlib ***/
180 long int random( void );
181 void srandom( unsigned int seed );
182 int truncate( const char *path, off_t length );
183
184 /*** signal ***/
185 int kill( pid_t pid, int sig );
186
187 /*** stdio ***/
188 FILE *popen( const char *command, const char *type );
189 int pclose( FILE *stream );
190
191 /*** misc ***/
192 char *read_w32_registry_string( char *parent, char *section, char *key );
193 char *get_content_type_from_registry_with_ext( char *ext );
194
195 #endif