#include <unistd.h>
#include <mono/io-layer/wapi.h>
-#include <mono/io-layer/unicode.h>
#include <mono/io-layer/wapi-private.h>
#include <mono/io-layer/handles-private.h>
#include <mono/io-layer/misc-private.h>
#include <mono/io-layer/mono-mutex.h>
#include <mono/io-layer/process-private.h>
#include <mono/io-layer/threads.h>
+#include <mono/utils/strenc.h>
/* The process' environment strings */
extern char **environ;
* so crap, with an API like this :-(
*/
if(appname!=NULL) {
- cmd=_wapi_unicode_to_utf8 (appname);
+ cmd=mono_unicode_to_external (appname);
if(cmd==NULL) {
#ifdef DEBUG
g_message (G_GNUC_PRETTY_FUNCTION
}
if(cmdline!=NULL) {
- args=_wapi_unicode_to_utf8 (cmdline);
+ args=mono_unicode_to_external (cmdline);
if(args==NULL) {
#ifdef DEBUG
g_message (G_GNUC_PRETTY_FUNCTION
SetLastError(ERROR_PATH_NOT_FOUND);
goto cleanup;
}
-
- /* Turn all the slashes round the right way */
- for(i=0; i<strlen (args); i++) {
- if(args[i]=='\\') {
- args[i]='/';
- }
- }
}
if(cwd!=NULL) {
- dir=_wapi_unicode_to_utf8 (cwd);
+ dir=mono_unicode_to_external (cwd);
if(dir==NULL) {
#ifdef DEBUG
g_message (G_GNUC_PRETTY_FUNCTION
*/
if(new_environ!=NULL) {
gchar **strings;
- guint32 count;
+ guint32 count=0;
gunichar2 *new_environp;
/* Count the number of strings */
strings=g_new0 (gchar *, count);
/* Copy each environ string into 'strings' turning it
- * into utf8 at the same time
+ * into utf8 (or the requested encoding) at the same
+ * time
*/
count=0;
for(new_environp=(gunichar2 *)new_environ; *new_environp;
new_environp++) {
- strings[count]=g_utf16_to_utf8 (new_environp, -1, NULL,
- NULL, NULL);
+ strings[count]=mono_unicode_to_external (new_environp);
count++;
while(*new_environp) {
new_environp++;
for(i=0; args[i]!='\0'; i++) {
if(g_ascii_isspace (args[i])) {
token=g_strndup (args, i);
- args_after_prog=args+i;
+ args_after_prog=args+i+1;
break;
}
}
goto cleanup;
}
+ /* Turn all the slashes round the right way. Only for the prg. name */
+ for(i=0; i < strlen (token); i++) {
+ if (token[i]=='\\') {
+ token[i]='/';
+ }
+ }
+
if(g_ascii_isalpha (token[0]) && (token[1]==':')) {
/* Strip off the drive letter. I can't
* believe that CP/M holdover is still
static void process_set_name (struct _WapiHandle_process *process_handle)
{
- gchar *progname, *slash;
+ gchar *progname, *utf8_progname, *slash;
progname=g_get_prgname ();
+ utf8_progname=mono_utf8_from_external (progname);
#ifdef DEBUG
g_message (G_GNUC_PRETTY_FUNCTION ": using [%s] as prog name",
progname);
#endif
- if(progname!=NULL) {
- slash=strrchr (progname, '/');
+ if(utf8_progname!=NULL) {
+ slash=strrchr (utf8_progname, '/');
if(slash!=NULL) {
process_handle->proc_name=_wapi_handle_scratch_store (slash+1, strlen (slash+1));
} else {
- process_handle->proc_name=_wapi_handle_scratch_store (progname, strlen (progname));
+ process_handle->proc_name=_wapi_handle_scratch_store (utf8_progname, strlen (utf8_progname));
}
+
+ g_free (utf8_progname);
}
}