pidgin/pidgin
Clone
Summary
Browse
Changes
Graph
Remove the Pidgin implemenation of requests except for fields
default
tip
5 minutes ago, Gary Kramlich
f225f7dfb0bc
Remove the Pidgin implemenation of requests except for fields
We're in the progress of removing the requests API and this need to be removed
to do that.
Testing Done:
Checked in with the turtles and verified the fields api still worked with the idle plugin.
Reviewed at https://reviews.imfreedom.org/r/3145/
/*
* purple
*
* File: win32dep.c
* Date: June, 2002
* Description: Windows dependent code for Purple
*
* Copyright (C) 2002-2003, Herman Bloggs <hermanator12002@yahoo.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*
*/
#include
"purpleconfig.h"
#include
"win32/win32dep.h"
#include
<winuser.h>
#include
"debug.h"
#include
"glibcompat.h"
#include
"notify.h"
#define MAX_PATH_LEN 2048
/*
* LOCALS
*/
static
char
*
app_data_dir
=
NULL
,
*
bin_dir
=
NULL
,
*
data_dir
=
NULL
,
*
lib_dir
=
NULL
,
*
locale_dir
=
NULL
,
*
sysconf_dir
=
NULL
,
*
cert_dir
=
NULL
;
static
HINSTANCE
libpurpledll_hInstance
=
NULL
;
/*
* PUBLIC CODE
*/
/* Determine Purple Paths during Runtime */
const
char
*
wpurple_bin_dir
(
void
)
{
static
gboolean
initialized
=
FALSE
;
if
(
!
initialized
)
{
char
*
tmp
=
NULL
;
wchar_t
winstall_dir
[
MAXPATHLEN
];
/* We might use g_win32_get_package_installation_directory_of_module
* here, but we won't because this routine strips bin or lib
* part of the path.
*/
if
(
GetModuleFileNameW
(
libpurpledll_hInstance
,
winstall_dir
,
MAXPATHLEN
)
>
0
)
{
tmp
=
g_utf16_to_utf8
(
winstall_dir
,
-1
,
NULL
,
NULL
,
NULL
);
}
if
(
tmp
==
NULL
)
{
tmp
=
g_win32_error_message
(
GetLastError
());
purple_debug_error
(
"wpurple"
,
"GetModuleFileName error: %s
\n
"
,
tmp
);
g_free
(
tmp
);
return
NULL
;
}
else
{
bin_dir
=
g_path_get_dirname
(
tmp
);
g_free
(
tmp
);
initialized
=
TRUE
;
}
}
return
bin_dir
;
}
static
gchar
*
wpurple_install_relative_path
(
const
gchar
*
abspath
)
{
const
gchar
*
bindir
=
WIN32_FHS_BINDIR
;
const
gchar
*
relpath
;
int
i
,
last_dirsep
=
-1
,
bin_esc_cnt
;
gchar
*
ret
;
GString
*
bin_esc
;
g_return_val_if_fail
(
bindir
!=
NULL
,
NULL
);
g_return_val_if_fail
(
bindir
[
0
]
!=
'\0'
,
NULL
);
g_return_val_if_fail
(
abspath
!=
NULL
,
NULL
);
g_return_val_if_fail
(
abspath
[
0
]
!=
'\0'
,
NULL
);
/* let's find the common prefix of those paths */
for
(
i
=
0
;
bindir
[
i
]
==
abspath
[
i
];
i
++
)
{
if
(
bindir
[
i
]
==
'\0'
)
break
;
if
(
bindir
[
i
]
==
'\\'
||
bindir
[
i
]
==
'/'
)
last_dirsep
=
i
;
}
if
(
bindir
[
i
]
==
'\0'
&&
(
abspath
[
i
]
==
'\\'
||
abspath
[
i
]
==
'/'
))
last_dirsep
=
i
;
if
(
abspath
[
i
]
==
'\0'
&&
(
bindir
[
i
]
==
'\\'
||
bindir
[
i
]
==
'/'
))
last_dirsep
=
i
;
/* there is no common prefix, return absolute path */
if
(
last_dirsep
==
-1
)
return
g_strdup
(
abspath
);
/* let's check, how many dirs we need to go up to the common prefix */
bin_esc_cnt
=
0
;
for
(
i
=
last_dirsep
;
bindir
[
i
];
i
++
)
{
if
(
bindir
[
i
]
!=
'\\'
&&
bindir
[
i
]
!=
'/'
)
continue
;
if
(
bindir
[
i
+
1
]
==
'\0'
)
/* trailing dir separator */
break
;
bin_esc_cnt
++
;
}
bin_esc
=
g_string_new
(
""
);
for
(
i
=
0
;
i
<
bin_esc_cnt
;
i
++
)
g_string_append
(
bin_esc
,
".."
G_DIR_SEPARATOR_S
);
/* now, we need to go back deeper into the directory tree */
relpath
=
&
abspath
[
last_dirsep
];
if
(
relpath
[
0
]
!=
'\0'
)
relpath
++
;
/* - enter bin dir
* - escape it to the common prefix
* - dive into the abspath dir
*/
ret
=
g_build_filename
(
wpurple_bin_dir
(),
bin_esc
->
str
,
relpath
,
NULL
);
g_string_free
(
bin_esc
,
TRUE
);
purple_debug_misc
(
"wpurple"
,
"wpurple_install_relative_path(%s) = %s"
,
abspath
,
ret
);
return
ret
;
}
const
char
*
wpurple_data_dir
(
void
)
{
static
gboolean
initialized
=
FALSE
;
if
(
initialized
)
return
data_dir
;
data_dir
=
wpurple_install_relative_path
(
WIN32_FHS_DATADIR
);
initialized
=
TRUE
;
return
data_dir
;
}
const
char
*
wpurple_lib_dir
(
const
char
*
subdir
)
{
static
gboolean
initialized
=
FALSE
;
static
gchar
subpath
[
MAX_PATH_LEN
];
if
(
!
initialized
)
{
lib_dir
=
wpurple_install_relative_path
(
WIN32_FHS_LIBDIR
);
initialized
=
TRUE
;
}
if
(
subdir
==
NULL
)
return
lib_dir
;
g_snprintf
(
subpath
,
sizeof
(
subpath
),
"%s"
G_DIR_SEPARATOR_S
"%s"
,
lib_dir
,
subdir
);
return
subpath
;
}
const
char
*
wpurple_locale_dir
(
void
)
{
static
gboolean
initialized
=
FALSE
;
if
(
!
initialized
)
{
locale_dir
=
wpurple_install_relative_path
(
WIN32_FHS_LOCALEDIR
);
initialized
=
TRUE
;
}
return
locale_dir
;
}
const
char
*
wpurple_sysconf_dir
(
void
)
{
static
gboolean
initialized
=
FALSE
;
if
(
!
initialized
)
{
sysconf_dir
=
wpurple_install_relative_path
(
WIN32_FHS_SYSCONFDIR
);
initialized
=
TRUE
;
}
return
sysconf_dir
;
}
/* Miscellaneous */
void
wpurple_init
(
void
)
{
WORD
wVersionRequested
;
WSADATA
wsaData
;
if
(
purple_debug_is_verbose
())
purple_debug_misc
(
"wpurple"
,
"wpurple_init start
\n
"
);
purple_debug_info
(
"wpurple"
,
"libpurple version: "
DISPLAY_VERSION
"
\n
"
);
purple_debug_info
(
"wpurple"
,
"Glib: %u.%u.%u
\n
"
,
glib_major_version
,
glib_minor_version
,
glib_micro_version
);
/* Winsock init */
wVersionRequested
=
MAKEWORD
(
2
,
2
);
WSAStartup
(
wVersionRequested
,
&
wsaData
);
/* Confirm that the winsock DLL supports 2.2 */
/* Note that if the DLL supports versions greater than
2.2 in addition to 2.2, it will still return 2.2 in
wVersion since that is the version we requested. */
if
(
LOBYTE
(
wsaData
.
wVersion
)
!=
2
||
HIBYTE
(
wsaData
.
wVersion
)
!=
2
)
{
purple_debug_error
(
"wpurple"
,
"Could not find a usable WinSock DLL. Oh well.
\n
"
);
WSACleanup
();
}
if
(
purple_debug_is_verbose
())
purple_debug_misc
(
"wpurple"
,
"wpurple_init end
\n
"
);
}
/* Windows Cleanup */
void
wpurple_cleanup
(
void
)
{
purple_debug_info
(
"wpurple"
,
"wpurple_cleanup
\n
"
);
/* winsock cleanup */
WSACleanup
();
g_free
(
app_data_dir
);
g_free
(
bin_dir
);
g_free
(
data_dir
);
g_free
(
lib_dir
);
g_free
(
locale_dir
);
g_free
(
sysconf_dir
);
g_free
(
cert_dir
);
app_data_dir
=
NULL
;
bin_dir
=
NULL
;
data_dir
=
NULL
;
lib_dir
=
NULL
;
locale_dir
=
NULL
;
sysconf_dir
=
NULL
;
cert_dir
=
NULL
;
libpurpledll_hInstance
=
NULL
;
}
/* DLL initializer */
/* suppress gcc "no previous prototype" warning */
BOOL
WINAPI
DllMain
(
HINSTANCE
hinstDLL
,
DWORD
fdwReason
,
LPVOID
lpvReserved
);
BOOL
WINAPI
DllMain
(
HINSTANCE
hinstDLL
,
G_GNUC_UNUSED
DWORD
fdwReason
,
G_GNUC_UNUSED
LPVOID
lpvReserved
)
{
libpurpledll_hInstance
=
hinstDLL
;
return
TRUE
;
}