1 Index: tools/bootstrp/static.mk
2 ===================================================================
3 RCS file: /cvs/util/tools/bootstrp/static.mk,v
4 retrieving revision 1.26
5 diff -u -p -u -r1.26 static.mk
6 --- tools/bootstrp/static.mk 15 Apr 2003 17:55:11 -0000 1.26
7 +++ tools/bootstrp/static.mk 14 May 2003 08:02:07 -0000
8 @@ -146,6 +146,7 @@ STATIC_LIBS += -lX11 -lXext
10 STATIC_LIBS += -lsupc++ -lX11 -lXext
12 +STATIC_LIBS += `pkg-config --libs gnome-vfs-2.0`
15 # -----------------------------------------------------------
16 Index: tools/source/fsys/makefile.mk
17 ===================================================================
18 RCS file: /cvs/util/tools/source/fsys/makefile.mk,v
19 retrieving revision 1.7
20 diff -u -p -u -r1.7 makefile.mk
21 --- tools/source/fsys/makefile.mk 30 Apr 2003 08:25:46 -0000 1.7
22 +++ tools/source/fsys/makefile.mk 14 May 2003 08:02:07 -0000
23 @@ -101,6 +101,8 @@ OBJFILES= $(OBJ)$/wldcrd.obj \
27 +CFLAGS+=`pkg-config --cflags gnome-vfs-2.0`
29 # --- Targets ------------------------------------------------------
32 Index: tools/source/fsys/urlobj.cxx
33 ===================================================================
34 RCS file: /cvs/util/tools/source/fsys/urlobj.cxx,v
35 retrieving revision 1.37
36 diff -u -p -u -r1.37 urlobj.cxx
37 --- tools/source/fsys/urlobj.cxx 24 Apr 2003 13:27:52 -0000 1.37
38 +++ tools/source/fsys/urlobj.cxx 14 May 2003 08:02:10 -0000
40 #define INCLUDED_LIMITS
43 +#ifndef _VOS_MUTEX_HXX
44 +#include <vos/mutex.hxx>
50 +#include <libgnomevfs/gnome-vfs.h>
52 +#undef USE_GNOME_VFS_2_2
54 +#ifdef USE_GNOME_VFS_2_2
56 + GList *_gnome_vfs_configuration_get_methods_list (void);
61 +get_methods_list (void)
63 +#ifdef USE_GNOME_VFS_2_2
64 + return _gnome_vfs_configuration_get_methods_list ();
66 + /* This sucks utterly */
67 + const char *methods[] = {
68 + "smb", "pipe", "ssh", "nntp", "gnome-help", "preferences", "ncp",
69 + "applications", "favorites", "cdda", "system", "nfs", "camera"
70 +// "mailfs", "hp8", "patchfs" - broken extfs stuff ...
74 + for (i = 0; i < G_N_ELEMENTS (methods); i++)
75 + ret = g_list_prepend (ret, (void *) methods [i]);
80 namespace unnamed_tools_urlobj {} using namespace unnamed_tools_urlobj;
81 // unnamed namespaces don't work well yet...
83 @@ -393,6 +430,8 @@ struct INetURLObject::PrefixInfo
86 //============================================================================
87 +static INetURLObject::SchemeInfo *vfs_schemeinfo_map = NULL;
89 static INetURLObject::SchemeInfo const aSchemeInfoMap[INET_PROT_END]
90 = { { "", "", 0, false, false, false, false, false, false, false,
92 @@ -459,7 +498,10 @@ static INetURLObject::SchemeInfo const a
93 inline INetURLObject::SchemeInfo const &
94 INetURLObject::getSchemeInfo(INetProtocol eTheScheme)
96 - return aSchemeInfoMap[eTheScheme];
97 + if (eTheScheme >= INET_PROT_END)
98 + return vfs_schemeinfo_map [eTheScheme - INET_PROT_END];
100 + return aSchemeInfoMap[eTheScheme];
103 //============================================================================
104 @@ -720,15 +762,21 @@ bool INetURLObject::setAbsURIRef(UniStri
106 sal_Unicode const * p = pPos;
107 PrefixInfo const * pPrefix = getPrefix(p, pEnd);
108 + ::rtl::OString tmpStr (rTheAbsURIRef.GetBuffer (),
109 + rTheAbsURIRef.Len (),
110 + RTL_TEXTENCODING_UTF8);
112 + // fprintf (stderr, "setAbsURIRef '%s' %d\n", tmpStr.getStr(),
113 + // (int) (pPrefix ? pPrefix->m_eScheme : -17));
117 m_eScheme = pPrefix->m_eScheme;
119 = UniString::CreateFromAscii(pPrefix->m_eKind
120 - >= PrefixInfo::EXTERNAL ?
121 - pPrefix->m_pTranslatedPrefix :
122 - pPrefix->m_pPrefix);
123 + >= PrefixInfo::EXTERNAL ?
124 + pPrefix->m_pTranslatedPrefix :
125 + pPrefix->m_pPrefix);
129 @@ -871,6 +919,8 @@ bool INetURLObject::setAbsURIRef(UniStri
130 sal_Unicode const * pHostPortBegin = 0;
131 sal_Unicode const * pHostPortEnd = 0;
133 +// fprintf (stderr, "Got Authority\n");
137 case INET_PROT_VND_SUN_STAR_HELP:
138 @@ -1170,6 +1220,7 @@ bool INetURLObject::setAbsURIRef(UniStri
139 && !(m_eScheme == INET_PROT_FILE
140 && pPos != pEnd && *pPos == '/'))
142 +// fprintf (stderr, "not smart\n");
146 @@ -1211,6 +1262,7 @@ bool INetURLObject::setAbsURIRef(UniStri
148 else if (pPos != pAuthority)
150 +// fprintf (stderr, "bogus auth\n");
154 @@ -1290,6 +1342,7 @@ bool INetURLObject::setAbsURIRef(UniStri
156 if (!INetMIME::isIMAPAtomChar(nUTF32))
158 +// fprintf (stderr, "bogus char\n");
162 @@ -1329,14 +1382,17 @@ bool INetURLObject::setAbsURIRef(UniStri
164 if (pHostPortBegin == pPort && pPort != pHostPortEnd)
166 +// fprintf (stderr, "bogus port 0\n");
173 - if (pHostPortBegin == pPort)
174 + if (m_eScheme < INET_PROT_END && /* else might have a port */
175 + pHostPortBegin == pPort)
177 +// fprintf (stderr, "bogus port\n");
181 @@ -1346,6 +1402,7 @@ bool INetURLObject::setAbsURIRef(UniStri
182 if (!parseHost(pHostPortBegin, pPort, bOctets, eMechanism, eCharset,
183 bNetBiosName, &aSynHost))
185 +// fprintf (stderr, "bogus host\n");
189 @@ -1360,6 +1417,10 @@ bool INetURLObject::setAbsURIRef(UniStri
193 +// ::rtl::OString tmpStrPP (pPos, pEnd - pPos,
194 +// RTL_TEXTENCODING_UTF8);
195 +// fprintf (stderr, "Pre path parse '%s'\n", tmpStrPP.getStr());
199 if (!parsePath(m_eScheme, &pPos, pEnd, bOctets, eMechanism, eCharset,
200 @@ -1368,6 +1429,7 @@ bool INetURLObject::setAbsURIRef(UniStri
201 getSchemeInfo().m_bQuery ? '?' : 0x80000000,
202 nFragmentDelimiter, &aSynPath))
204 +// fprintf (stderr, "Invalid path\n");
208 @@ -1407,12 +1469,20 @@ bool INetURLObject::setAbsURIRef(UniStri
212 +// ::rtl::OString tmpStrZ (pPos, pEnd - pPos,
213 +// RTL_TEXTENCODING_UTF8);
214 +// fprintf (stderr, "Invalid fragment '%s'\n", tmpStrZ.getStr());
219 m_aAbsURIRef = aSynAbsURIRef;
221 +// ::rtl::OString tmpStr2 (aSynAbsURIRef.GetBuffer (),
222 +// aSynAbsURIRef.Len (),
223 +// RTL_TEXTENCODING_UTF8);
224 +// fprintf (stderr, "setAbsURIRef result '%s'\n", tmpStr2.getStr());
229 @@ -1422,13 +1492,13 @@ INetURLObject INetURLObject::m_aBaseURIR
231 //============================================================================
232 bool INetURLObject::convertRelToAbs(UniString const & rTheRelURIRef,
234 - INetURLObject & rTheAbsURIRef,
235 - bool & rWasAbsolute,
236 - EncodeMechanism eMechanism,
237 - rtl_TextEncoding eCharset,
238 - bool bIgnoreFragment, bool bSmart,
239 - bool bRelativeNonURIs, FSysStyle eStyle)
241 + INetURLObject & rTheAbsURIRef,
242 + bool & rWasAbsolute,
243 + EncodeMechanism eMechanism,
244 + rtl_TextEncoding eCharset,
245 + bool bIgnoreFragment, bool bSmart,
246 + bool bRelativeNonURIs, FSysStyle eStyle)
249 sal_Unicode const * p = rTheRelURIRef.GetBuffer();
250 @@ -1443,6 +1513,11 @@ bool INetURLObject::convertRelToAbs(UniS
251 sal_uInt32 nFragmentDelimiter = '#';
252 Part ePart = PART_VISIBLE;
255 +// fprintf (stderr, "Got pPrefix\n");
257 +// fprintf (stderr, "No pPrefix\n");
259 if (!pPrefix && bSmart)
261 // If the input matches any of the following productions (for which
262 @@ -1545,9 +1620,12 @@ bool INetURLObject::convertRelToAbs(UniS
263 // Fast solution for non-relative URIs:
266 +// fprintf (stderr, "Fast pPrefix path\n");
268 INetURLObject aNewURI(rTheRelURIRef, eMechanism, eCharset);
269 if (aNewURI.HasError())
271 +// fprintf (stderr, "Had error!\n");
272 rWasAbsolute = false;
275 @@ -1555,14 +1633,22 @@ bool INetURLObject::convertRelToAbs(UniS
277 aNewURI.clearFragment();
278 rTheAbsURIRef = aNewURI;
280 +// ::rtl::OString tmpStr2 (m_aAbsURIRef.GetBuffer (),
281 +// m_aAbsURIRef.Len (),
282 +// RTL_TEXTENCODING_UTF8);
283 +// fprintf (stderr, "Hard set to '%s' \n", tmpStr2.getStr());
288 +// fprintf (stderr, "Slow non pPrefix path\n");
290 enum State { STATE_AUTH, STATE_ABS_PATH, STATE_REL_PATH, STATE_FRAGMENT,
293 UniString aSynAbsURIRef(UniString::CreateFromAscii(getSchemeInfo().
296 aSynAbsURIRef += ':';
298 sal_Char cEscapePrefix = getEscapePrefix();
299 @@ -2082,13 +2168,95 @@ INetURLObject::getPrefix(sal_Unicode con
300 { "vnd.sun.star.wfs:", 0, INET_PROT_VND_SUN_STAR_WFS,
301 PrefixInfo::OFFICIAL },
302 { "wfs:", "vnd.sun.star.wfs:", INET_PROT_VND_SUN_STAR_WFS,
303 - PrefixInfo::ALIAS } };
304 - PrefixInfo const * pFirst = aMap + 1;
305 - PrefixInfo const * pLast = aMap + sizeof aMap / sizeof (PrefixInfo) - 1;
306 - PrefixInfo const * pMatch = 0;
307 - sal_Unicode const * pMatched = rBegin;
308 - sal_Unicode const * p = rBegin;
310 + PrefixInfo::ALIAS }
313 + static GHashTable *fast_lookup = NULL;
316 + if (!fast_lookup) {
317 + ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
318 + if (!fast_lookup) {
319 + // FIXME: This code should be re-factored, but C++ is
320 + // broken by design for re-factoring.
321 + GList *methods, *l;
323 + fast_lookup = g_hash_table_new (g_str_hash, g_str_equal);
325 + for (i = 1; i < G_N_ELEMENTS (aMap); i++) {
326 + g_hash_table_insert (fast_lookup, (void *) aMap[i].m_pPrefix,
327 + (void *) (aMap + i));
330 + methods = get_methods_list ();
331 + vfs_schemeinfo_map = g_new0 (INetURLObject::SchemeInfo, g_list_length (methods));
334 + for (l = methods; l; l = l->next) {
336 + INetURLObject::SchemeInfo *si;
339 + name = g_strconcat ((gchar *) l->data, ":", NULL);
341 + // g_warning ("AddV '%s'", name);
342 + if (g_hash_table_lookup (fast_lookup, name)) {
343 + fprintf (stderr, "Discarding URI scheme '%s'", name);
348 + pi = new PrefixInfo;
350 + pi->m_pPrefix = (sal_Char *) name;
351 + pi->m_pTranslatedPrefix = NULL;
352 + pi->m_eScheme = (INetProtocol) i;
353 + pi->m_eKind = PrefixInfo::OFFICIAL;
355 + si = &vfs_schemeinfo_map [i - INET_PROT_END];
357 + si->m_pScheme = (sal_Char *) l->data;
358 + si->m_pPrefix = g_strconcat (name, "//", NULL); // what a waste
360 + // FIXME: these are just wrong, set all to true ?
361 + si->m_nDefaultPort = 0;
362 + si->m_bAuthority = true;
363 + si->m_bUser = false;
364 + si->m_bAuth = false;
365 + si->m_bPassword = false;
366 + si->m_bHost = true;
367 + si->m_bPort = false;
368 + si->m_bHierarchical = true;
369 + si->m_bQuery = false;
371 + g_hash_table_insert (fast_lookup, (void *) pi->m_pPrefix, (void *) pi);
376 + // FIXME: add write barrier when this reaches OOO_STABLE_1
381 + rstr = (char *) g_alloca (pEnd - rBegin + 2);
382 + for (i = 0; i < pEnd - rBegin && rBegin [i] != ':'; i++)
383 + rstr[i] = INetMIME::toLowerCase (rBegin [i]);
384 + if (i >= pEnd - rBegin) return NULL;
385 + rstr [i++] = ':'; rstr [i] = '\0';
387 + const PrefixInfo *pi;
389 + pi = (PrefixInfo *) g_hash_table_lookup (fast_lookup, rstr);
391 +// g_warning ("Lookup '%s' -> %d", rstr, (int) (pi ? pi->m_eScheme : -17));
398 +#ifdef OVER_COMPLICATED_CODE
399 for (; pFirst < pLast; ++i)
401 if (pFirst->m_pPrefix[i] == '\0')
402 @@ -2120,7 +2288,9 @@ INetURLObject::getPrefix(sal_Unicode con
411 //============================================================================
412 @@ -2359,7 +2529,7 @@ bool INetURLObject::setHost(UniString co
416 - if (aSynHost.Len() == 0)
417 + if (aSynHost.Len() == 0 && m_eScheme < INET_PROT_END)
421 @@ -2436,6 +2606,7 @@ bool INetURLObject::parsePath(INetProtoc
425 + default: /* All INET_PROT_END+ drop through here */
427 case INET_PROT_VND_SUN_STAR_WFS:
429 @@ -3618,7 +3789,8 @@ bool INetURLObject::ConcatData(INetProto
433 - if (aSynHost.Len() == 0)
434 + if (aSynHost.Len() == 0 &&
435 + m_eScheme < INET_PROT_END) /* valid perhaps */
439 Index: tools/util/makefile.mk
440 ===================================================================
441 RCS file: /cvs/util/tools/util/makefile.mk,v
442 retrieving revision 1.10
443 diff -u -p -u -r1.10 makefile.mk
444 --- tools/util/makefile.mk 30 Apr 2003 08:25:57 -0000 1.10
445 +++ tools/util/makefile.mk 14 May 2003 08:02:10 -0000
446 @@ -200,6 +200,10 @@ SHL1STDLIBS+= shell32.lib \
451 +SHL1STDLIBS+=`pkg-config --libs gnome-vfs-2.0`
455 DEF1NAME =$(SHL1TARGET)