X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/482150a7b7fa28a4cdcbe9eb32bbd0a420918766..da494bb71ff537bc6276eff25cbb6b674e3d6656:/cygwin/cygwin.c diff --git a/cygwin/cygwin.c b/cygwin/cygwin.c index 60d7d94..aa6938d 100644 --- a/cygwin/cygwin.c +++ b/cygwin/cygwin.c @@ -51,19 +51,21 @@ do_aspawn (SV *really, void **mark, void **sp) { dTHX; int rc; - char **a,*tmps,**argv; - STRLEN n_a; + char const **a; + char *tmps,**argv; + STRLEN n_a; if (sp<=mark) return -1; - a=argv=(char**) alloca ((sp-mark+3)*sizeof (char*)); + argv=(char**) alloca ((sp-mark+3)*sizeof (char*)); + a=(char const **)argv; while (++mark <= sp) if (*mark) *a++ = SvPVx((SV *)*mark, n_a); else *a++ = ""; - *a = Nullch; + *a = (char*)NULL; if (argv[0][0] != '/' && argv[0][0] != '\\' && !(argv[0][0] && argv[0][1] == ':' @@ -83,7 +85,9 @@ int do_spawn (char *cmd) { dTHX; - char **a,*s,*metachars = "$&*(){}[]'\";\\?>|<~`\n"; + char const **a; + char *s; + char const *metachars = "$&*(){}[]'\";\\?>|<~`\n"; const char *command[4]; while (*cmd && isSPACE(*cmd)) @@ -121,7 +125,7 @@ do_spawn (char *cmd) return do_spawnvp("sh",command); } - Newx (PL_Argv,(s-cmd)/2+2,char*); + Newx (PL_Argv,(s-cmd)/2+2,const char*); PL_Cmd=savepvn (cmd,s-cmd); a=PL_Argv; for (s=PL_Cmd; *s;) { @@ -132,7 +136,7 @@ do_spawn (char *cmd) if (*s) *s++='\0'; } - *a=Nullch; + *a = (char*)NULL; if (!PL_Argv[0]) return -1; @@ -292,28 +296,31 @@ XS(XS_Cygwin_mount_flags) char flags[260]; if (items != 1) - Perl_croak(aTHX_ "Usage: Cygwin::mount_flags(mnt_dir)"); + Perl_croak(aTHX_ "Usage: Cygwin::mount_flags(mnt_dir|'/cygwin')"); pathname = SvPV_nolen(ST(0)); - - /* TODO: check for cygdrive registry setting. use CW_GET_CYGDRIVE_INFO then + + /* TODO: Check for cygdrive registry setting, + * and then use CW_GET_CYGDRIVE_INFO */ if (!strcmp(pathname, "/cygdrive")) { char user[260]; char system[260]; char user_flags[260]; char system_flags[260]; + cygwin_internal (CW_GET_CYGDRIVE_INFO, user, system, user_flags, system_flags); - if (strlen(system) > 0) - strcpy (flags, system_flags); - if (strlen(user) > 0) - strcpy(flags, user_flags); - if (strlen(flags) > 0) - strcat(flags, ","); - strcat(flags, "cygdrive"); + + if (strlen(user) > 0) { + sprintf(flags, "%s,cygdrive,%s", user_flags, user); + } else { + sprintf(flags, "%s,cygdrive,%s", system_flags, system); + } + ST(0) = sv_2mortal(newSVpv(flags, 0)); XSRETURN(1); + } else { struct mntent *mnt; setmntent (0, 0); @@ -347,25 +354,11 @@ XS(XS_Cygwin_is_binmount) XSRETURN(1); } -XS(XS_Cygwin_is_textmount) -{ - dXSARGS; - char *pathname; - - if (items != 1) - Perl_croak(aTHX_ "Usage: Cygwin::is_textmount(pathname)"); - - pathname = SvPV_nolen(ST(0)); - - ST(0) = boolSV(!cygwin_internal(CW_GET_BINMODE, pathname)); - XSRETURN(1); -} - void init_os_extras(void) { dTHX; - char *file = __FILE__; + char const *file = __FILE__; void *handle; newXS("Cwd::cwd", Cygwin_cwd, file); @@ -376,7 +369,6 @@ init_os_extras(void) newXSproto("Cygwin::mount_table", XS_Cygwin_mount_table, file, ""); newXSproto("Cygwin::mount_flags", XS_Cygwin_mount_flags, file, "$"); newXSproto("Cygwin::is_binmount", XS_Cygwin_is_binmount, file, "$"); - newXSproto("Cygwin::is_textmount", XS_Cygwin_is_textmount, file, "$"); /* Initialize Win32CORE if it has been statically linked. */ handle = dlopen(NULL, RTLD_LAZY);