Imported Upstream version 0.8~alpha1
[platform/upstream/syncevolution.git] / src / client-api / src / include / common / base / fscapi.h
1 /*
2  * Funambol is a mobile platform developed by Funambol, Inc. 
3  * Copyright (C) 2003 - 2007 Funambol, Inc.
4  * 
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU Affero General Public License version 3 as published by
7  * the Free Software Foundation with the addition of the following permission 
8  * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
9  * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 
10  * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
11  * 
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
15  * details.
16  * 
17  * You should have received a copy of the GNU Affero General Public License 
18  * along with this program; if not, see http://www.gnu.org/licenses or write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20  * MA 02110-1301 USA.
21  * 
22  * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite 
23  * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
24  * 
25  * The interactive user interfaces in modified source and object code versions
26  * of this program must display Appropriate Legal Notices, as required under
27  * Section 5 of the GNU Affero General Public License version 3.
28  * 
29  * In accordance with Section 7(b) of the GNU Affero General Public License
30  * version 3, these Appropriate Legal Notices must retain the display of the
31  * "Powered by Funambol" logo. If the display of the logo is not reasonably 
32  * feasible for technical reasons, the Appropriate Legal Notices must display
33  * the words "Powered by Funambol".
34  */
35
36 /**
37  * IMPORTANT: make sure your compiler includes both the include
38  *            paths:
39  *              <...>/src/include/<platform>
40  *              <...>/src/include/common
41  *            (in the given sequence)
42  */
43
44 #ifndef INCL_FSCAPI
45     #define INCL_FSCAPI
46 /** @cond DEV */
47
48     #ifdef MAC
49         #ifndef MSG_NOSIGNAL
50             #define MSG_NOSIGNAL SO_NOSIGPIPE
51         #endif
52     #endif
53     
54     #ifdef POSIX
55         #include "base/posixadapter.h"
56     #endif
57     #ifdef HAVE_STDARG_H
58         #include <stdarg.h>
59     #endif
60     #ifdef SYMBIAN
61         #include "base/symbianadapter.h"
62     #endif
63
64     #include "base/errors.h"
65
66     #if defined(_WIN32_WCE) || defined(WIN32)
67         // Windows common stuff
68         #define WIN32_LEAN_AND_MEAN     // Exclude rarely-used stuff from Windows headers
69
70         #include <windows.h>
71         #include "base/winadapter.h"
72     #endif
73
74     #if defined(WIN32)
75         #include "wininet.h"
76     #endif
77
78     #if defined(WIN32) && !defined(_WIN32_WCE)
79         #include <sys/stat.h>
80         #include "shlobj.h"        
81         #include <wchar.h>
82         #include <time.h>
83         #include <stdlib.h>
84     #endif
85
86     #ifdef _WIN32_WCE
87         #include "base/time.h"
88     #endif
89
90     #if defined(__PALMOS__)
91       #include "base/palmadapter.h"
92     #endif
93
94     #ifdef MALLOC_DEBUG
95       #pragma warning(disable:4291)
96       extern size_t dbgcounter;
97       void *operator new(size_t s);
98       void *operator new[](size_t s);
99       void *operator new(size_t s, char* file, int line);
100       void *operator new[](size_t s, char* file, int line);
101       void operator delete(void* p);
102       void operator delete[] (void* p);
103
104       #define new new(__FILE__, __LINE__)
105     #endif
106
107     #ifndef SYNC4J_LINEBREAK
108     // default encoding of line break in native strings,
109     // may be overridden by adapter header files above
110     # define SYNC4J_LINEBREAK TEXT("\r\n")
111     #endif
112
113     #ifndef WCHAR_PRINTF
114     /** use in format string like this: printf( "str '%" WCHAR_PRINTF "'", (WCHAR *)foo) */
115     # define WCHAR_PRINTF "ls"
116     #endif
117
118     #if !defined(PLATFORM_VA_LIST)
119     #define PLATFORM_VA_LIST va_list
120     #endif
121
122     #if !defined(PLATFORM_VA_START)
123     #define PLATFORM_VA_START va_start
124     #endif
125
126     #if !defined(PLATFORM_VA_END)
127     #define PLATFORM_VA_END  va_end
128     #endif
129
130     #if !defined(PLATFORM_VA_COPY)
131     #define PLATFORM_VA_COPY va_copy
132     #endif
133
134
135     /**
136      * All platforms are expected to have assert.h and provide
137      * assert() in it. However, controlling whether assertions are
138      * enabled or not depends on the specific platform.
139      *
140      * On Windows, the Visual Studio project file enables assertions
141      * in debug builds and disables them in release builds.
142      *
143      * On systems using the autotools build, the --enable-assert
144      * option must be used to enable assertions. To be compatible with
145      * previous revisions they are disabled by default.
146      *
147      * @warning Source files should always include assert.h via
148      * fscapi.h so that the platform specific code above has a chance
149      * to control assertions.
150      */
151     #include <assert.h>
152
153 /** @endcond */
154 #endif
155
156