FAQ
In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/33e9feea41a1ba8a58b32a5478d1dda0f7bcd052?hp=6f8848d55c2ea11b7ed7f8cf1afb2d6a28c76e4d>

- Log -----------------------------------------------------------------
commit 33e9feea41a1ba8a58b32a5478d1dda0f7bcd052
Author: Jarkko Hietaniemi <jhi@iki.fi>
Date: Wed Mar 2 20:11:23 2016 -0500

     perl5db.pl version bump

M lib/perl5db.pl

commit c9cc59407affa7b6b624f2ef91a6a1507a2fcab5
Author: Jarkko Hietaniemi <jhi@iki.fi>
Date: Wed Mar 2 18:49:18 2016 -0500

     Defaulting to VMS is probably not right.

M lib/perl5db.pl

commit cf412c929ccc10fe9df362c9d8a889b1f99f59ff
Author: Andy Broad <andy@broad.ology.org.uk>
Date: Wed Mar 2 18:45:52 2016 -0500

     amigaos4: use CONSOLE:, not VMS sys$command

M lib/perl5db.pl

commit 03b66f6dfc6a65d23d75090c679951927b0366f6
Author: Andy Broad <andy@broad.ology.org.uk>
Date: Wed Mar 2 18:43:44 2016 -0500

     amigaos4: clean up older style / deprecated AmigaOS calls

M amigaos4/amigaos.c
-----------------------------------------------------------------------

Summary of changes:
  amigaos4/amigaos.c | 415 +++++++----------------------------------------------
  lib/perl5db.pl | 21 ++-
  2 files changed, 67 insertions(+), 369 deletions(-)

diff --git a/amigaos4/amigaos.c b/amigaos4/amigaos.c
index 3023fd3..5e6a643 100644
--- a/amigaos4/amigaos.c
+++ b/amigaos4/amigaos.c
@@ -102,7 +102,7 @@ struct args
   char **envp;
  };

-int __myrc(char *arg)
+int __myrc(__attribute__((unused))char *arg)
  {
   struct Task *thisTask = IExec->FindTask(0);
   struct args *myargs = (struct args *)thisTask->tc_UserData;
@@ -154,7 +154,7 @@ char *mystrdup(const char *s)

   size = strlen(s) + 1;

- if ((result = (char *)IExec->AllocVec(size, MEMF_ANY)))
+ if ((result = (char *)IExec->AllocVecTags(size, TAG_DONE)))
   {
    memmove(result, s, size);
   }
@@ -200,7 +200,7 @@ int fork(void)
   return -1;
  }

-int wait(int *status)
+int wait(__attribute__((unused))int *status)
  {
   fprintf(stderr, "No wait try waitpid instead\n");
   errno = ECHILD;
@@ -278,8 +278,7 @@ static void createvars(char **envp)
     char *val;
     if ((len = strlen(*envp)))
     {
- if ((var = (char *)IExec->AllocVec(
- len + 1, MEMF_ANY | MEMF_CLEAR)))
+ if ((var = (char *)IExec->AllocVecTags(len + 1, AVT_ClearWithValue,0,TAG_DONE)))
      {
       strcpy(var, *envp);

@@ -304,44 +303,6 @@ static void createvars(char **envp)
   }
  }

-static BOOL contains_whitespace(char *string)
-{
-
- if (string)
- {
-
- if (strchr(string, ' '))
- return TRUE;
- if (strchr(string, '\t'))
- return TRUE;
- if (strchr(string, '\n'))
- return TRUE;
- if (strchr(string, 0xA0))
- return TRUE;
- if (strchr(string, '"'))
- return TRUE;
- }
- return FALSE;
-}
-
-static int no_of_escapes(char *string)
-{
- int cnt = 0;
- char *p;
- for (p = string; p < string + strlen(string); p++)
- {
- if (*p == '"')
- cnt++;
- if (*p == '*')
- cnt++;
- if (*p == '\n')
- cnt++;
- if (*p == '\t')
- cnt++;
- }
- return cnt;
-}
-
  struct command_data
  {
   STRPTR args;
@@ -358,10 +319,10 @@ int myexecvp(bool isperlthread, const char *filename, char *argv[])
   int res;
   if ((strchr(filename, '/') == NULL) && (strchr(filename, ':') == NULL))
   {
- char *path;
+ const char *path;
    char *name;
    char *pathpart;
- char *p;
+ const char *p;
    size_t len;
    struct stat st;

@@ -432,267 +393,6 @@ int myexecl(bool isperlthread, const char *path, ...)
   return myexecve(isperlthread, path, argv, myenviron);
  }

-#if 0
-
-int myexecve(const char *filename, char *argv[], char *envp[])
-{
- FILE *fh;
- char buffer[1000];
- int size = 0;
- char **cur;
- char *interpreter = 0;
- char *interpreter_args = 0;
- char *full = 0;
- char *filename_conv = 0;
- char *interpreter_conv = 0;
- // char *tmp = 0;
- char *fname;
- // int tmpint;
- // struct Task *thisTask = IExec->FindTask(0);
- int result = -1;
-
- StdioStore store;
-
- dTHX;
- if(aTHX) // I hope this is NULL when not on a interpreteer thread nor to level.
- {
- /* Save away our stdio */
- amigaos_stdio_save(aTHX_ & store);
- }
-
- // adebug("%s %ld %s\n",__FUNCTION__,__LINE__,filename?filename:"NULL");
-
- /* Calculate the size of filename and all args, including spaces and
- * quotes */
- size = 0; // strlen(filename) + 1;
- for (cur = (char **)argv /* +1 */; *cur; cur++)
- {
- size +=
- strlen(*cur) + 1 +
- (contains_whitespace(*cur) ? (2 + no_of_escapes(*cur)) : 0);
- }
- /* Check if it's a script file */
-
- fh = fopen(filename, "r");
- if (fh)
- {
- if (fgetc(fh) == '#' && fgetc(fh) == '!')
- {
- char *p;
- char *q;
- fgets(buffer, 999, fh);
- p = buffer;
- while (*p == ' ' || *p == '\t')
- p++;
- if (buffer[strlen(buffer) - 1] == '\n')
- buffer[strlen(buffer) - 1] = '\0';
- if ((q = strchr(p, ' ')))
- {
- *q++ = '\0';
- if (*q != '\0')
- {
- interpreter_args = mystrdup(q);
- }
- }
- else
- interpreter_args = mystrdup("");
-
- interpreter = mystrdup(p);
- size += strlen(interpreter) + 1;
- size += strlen(interpreter_args) + 1;
- }
-
- fclose(fh);
- }
- else
- {
- /* We couldn't open this why not? */
- if (errno == ENOENT)
- {
- /* file didn't exist! */
- goto out;
- }
- }
-
- /* Allocate the command line */
- filename_conv = convert_path_u2a(filename);
-
- if (filename_conv)
- size += strlen(filename_conv);
- size += 1;
- full = (char *)IExec->AllocVec(size + 10, MEMF_ANY | MEMF_CLEAR);
- if (full)
- {
- if (interpreter)
- {
- interpreter_conv = convert_path_u2a(interpreter);
-#if !defined(__USE_RUNCOMMAND__)
-#warning(using system!)
- sprintf(full, "%s %s %s ", interpreter_conv,
- interpreter_args, filename_conv);
-#else
- sprintf(full, "%s %s ", interpreter_args,
- filename_conv);
-#endif
- IExec->FreeVec(interpreter);
- IExec->FreeVec(interpreter_args);
-
- if (filename_conv)
- IExec->FreeVec(filename_conv);
- fname = mystrdup(interpreter_conv);
-
- if (interpreter_conv)
- IExec->FreeVec(interpreter_conv);
- }
- else
- {
-#ifndef __USE_RUNCOMMAND__
- sprintf(full, "%s ", filename_conv);
-#else
- sprintf(full, "");
-#endif
- fname = mystrdup(filename_conv);
- if (filename_conv)
- IExec->FreeVec(filename_conv);
- }
-
- for (cur = (char **)(argv + 1); *cur != 0; cur++)
- {
- if (contains_whitespace(*cur))
- {
- int esc = no_of_escapes(*cur);
-
- if (esc > 0)
- {
- char *buff = IExec->AllocVec(
- strlen(*cur) + 4 + esc,
- MEMF_ANY | MEMF_CLEAR);
- char *p = *cur;
- char *q = buff;
-
- *q++ = '"';
- while (*p != '\0')
- {
-
- if (*p == '\n')
- {
- *q++ = '*';
- *q++ = 'N';
- p++;
- continue;
- }
- else if (*p == '"')
- {
- *q++ = '*';
- *q++ = '"';
- p++;
- continue;
- }
- else if (*p == '*')
- {
- *q++ = '*';
- }
- *q++ = *p++;
- }
- *q++ = '"';
- *q++ = ' ';
- *q = '\0';
- strcat(full, buff);
- IExec->FreeVec(buff);
- }
- else
- {
- strcat(full, "\"");
- strcat(full, *cur);
- strcat(full, "\" ");
- }
- }
- else
- {
- strcat(full, *cur);
- strcat(full, " ");
- }
- }
- strcat(full, "\n");
-
-// if(envp)
-// createvars(envp);
-
-#ifndef __USE_RUNCOMMAND__
- result = IDOS->SystemTags(
- full, SYS_UserShell, TRUE, NP_StackSize,
- ((struct Process *)thisTask)->pr_StackSize, SYS_Input,
- ((struct Process *)thisTask)->pr_CIS, SYS_Output,
- ((struct Process *)thisTask)->pr_COS, SYS_Error,
- ((struct Process *)thisTask)->pr_CES, TAG_DONE);
-#else
-
- if (fname)
- {
- BPTR seglist = IDOS->LoadSeg(fname);
- if (seglist)
- {
- /* check if we have an executable! */
- struct PseudoSegList *ps = NULL;
- if (!IDOS->GetSegListInfoTags(
- seglist, GSLI_Native, &ps, TAG_DONE))
- {
- IDOS->GetSegListInfoTags(
- seglist, GSLI_68KPS, &ps, TAG_DONE);
- }
- if (ps != NULL)
- {
- // adebug("%s %ld %s
- // %s\n",__FUNCTION__,__LINE__,fname,full);
- IDOS->SetCliProgramName(fname);
- // result=RunCommand(seglist,8*1024,full,strlen(full));
- // result=myruncommand(seglist,8*1024,full,strlen(full),envp);
- result = myruncommand(seglist, 8 * 1024,
- full, -1, envp);
- errno = 0;
- }
- else
- {
- errno = ENOEXEC;
- }
- IDOS->UnLoadSeg(seglist);
- }
- else
- {
- errno = ENOEXEC;
- }
- IExec->FreeVec(fname);
- }
-
-#endif /* USE_RUNCOMMAND */
-
- IExec->FreeVec(full);
- if (errno == ENOEXEC)
- {
- result = -1;
- }
- goto out;
- }
-
- if (interpreter)
- IExec->FreeVec(interpreter);
- if (filename_conv)
- IExec->FreeVec(filename_conv);
-
- errno = ENOMEM;
-
-out:
-
- amigaos_stdio_restore(aTHX_ &store);
- STATUS_NATIVE_CHILD_SET(result);
- PL_exit_flags |= PERL_EXIT_EXPECTED;
- if (result != -1) my_exit(result);
-
- return(result);
-}
-
-#endif
-
  int pause(void)
  {
   fprintf(stderr, "Pause not implemented\n");
@@ -701,7 +401,7 @@ int pause(void)
   return -1;
  }

-uint32 size_env(struct Hook *hook, APTR userdata, struct ScanVarsMsg *message)
+uint32 size_env(struct Hook *hook, __attribute__((unused))APTR userdata, struct ScanVarsMsg *message)
  {
   if (strlen(message->sv_GDir) <= 4)
   {
@@ -710,15 +410,15 @@ uint32 size_env(struct Hook *hook, APTR userdata, struct ScanVarsMsg *message)
   return 0;
  }

-uint32 copy_env(struct Hook *hook, APTR userdata, struct ScanVarsMsg *message)
+uint32 copy_env(struct Hook *hook, __attribute__((unused))APTR userdata, struct ScanVarsMsg *message)
  {
   if (strlen(message->sv_GDir) <= 4)
   {
    char **env = (char **)hook->h_Data;
    uint32 size =
        strlen(message->sv_Name) + 1 + message->sv_VarLen + 1 + 1;
- char *buffer = (char *)IExec->AllocVec((uint32)size,
- MEMF_ANY | MEMF_CLEAR);
+ char *buffer = (char *)IExec->AllocVecTags((uint32)size,AVT_ClearWithValue,0,TAG_DONE);
+

    snprintf(buffer, size - 1, "%s=%s", message->sv_Name,
             message->sv_Var);
@@ -732,44 +432,51 @@ uint32 copy_env(struct Hook *hook, APTR userdata, struct ScanVarsMsg *message)

  void ___makeenviron()
  {
- struct Hook hook;
+ struct Hook *hook = (struct Hook *)IExec->AllocSysObjectTags(ASOT_HOOK,TAG_DONE);

- char varbuf[8];
- uint32 flags = 0;
-
- struct DOSIFace *myIDOS =
- (struct DOSIFace *)OpenInterface("dos.library", 53);
- if (myIDOS)
+ if(hook)
   {
- if (myIDOS->GetVar("ABCSH_IMPORT_LOCAL", varbuf, 8,
- GVF_LOCAL_ONLY) > 0)
- {
- flags = GVF_LOCAL_ONLY;
- }
- else
+ char varbuf[8];
+ uint32 flags = 0;
+
+ struct DOSIFace *myIDOS =
+ (struct DOSIFace *)OpenInterface("dos.library", 53);
+ if (myIDOS)
    {
- flags = GVF_GLOBAL_ONLY;
- }
+ uint32 size = 0;
+ if (myIDOS->GetVar("ABCSH_IMPORT_LOCAL", varbuf, 8,
+ GVF_LOCAL_ONLY) > 0)
+ {
+ flags = GVF_LOCAL_ONLY;
+ }
+ else
+ {
+ flags = GVF_GLOBAL_ONLY;
+ }

- hook.h_Entry = size_env;
- hook.h_Data = 0;
+ hook->h_Entry = size_env;
+ hook->h_Data = 0;

- myIDOS->ScanVars(&hook, flags, 0);
- hook.h_Data = (APTR)(((uint32)hook.h_Data) + 1);
+ myIDOS->ScanVars(hook, flags, 0);
+ size = ((uint32)hook->h_Data) + 1;

- myenviron = (char **)IExec->AllocVec((uint32)hook.h_Data *
- sizeof(char **),
- MEMF_ANY | MEMF_CLEAR);
- origenviron = myenviron;
- if (!myenviron)
- {
- return;
- }
- hook.h_Entry = copy_env;
- hook.h_Data = myenviron;
+ myenviron = (char **)IExec->AllocVecTags(size *
+ sizeof(char **),
+ AVT_ClearWithValue,0,TAG_DONE);
+ origenviron = myenviron;
+ if (!myenviron)
+ {
+ IExec->FreeSysObject(ASOT_HOOK,hook);
+ CloseInterface((struct Interface *)myIDOS);
+ return;
+ }
+ hook->h_Entry = copy_env;
+ hook->h_Data = myenviron;

- myIDOS->ScanVars(&hook, flags, 0);
- CloseInterface((struct Interface *)myIDOS);
+ myIDOS->ScanVars(hook, flags, 0);
+ IExec->FreeSysObject(ASOT_HOOK,hook);
+ CloseInterface((struct Interface *)myIDOS);
+ }
   }
  }

@@ -799,34 +506,12 @@ void ___freeenviron()

  /* reimplementation of popen, clib2's doesn't do all we want */

-static BOOL is_final_quote_character(const char *str)
-{
- BOOL result;
-
- result = (BOOL)(str[0] == '\"' && (str[1] == '\0' || isspace(str[1])));
-
- return (result);
-}
-
-static BOOL is_final_squote_character(const char *str)
-{
- BOOL result;
-
- result = (BOOL)(str[0] == '\'' && (str[1] == '\0' || isspace(str[1])));
-
- return (result);
-}
-
  int popen_child()
  {
   struct Task *thisTask = IExec->FindTask(0);

   char *command = (char *)thisTask->tc_UserData;
- size_t len;
- char *str;
- int argc;
- int number_of_arguments;
- char *argv[4];
+ const char *argv[4];

   argv[0] = "sh";
   argv[1] = "-c";
@@ -839,7 +524,7 @@ int popen_child()
    * argv[]
    */

- myexecvp(FALSE, argv[0], argv);
+ myexecvp(FALSE, argv[0], (char **)argv);
   if (command)
    IExec->FreeVec(command);

diff --git a/lib/perl5db.pl b/lib/perl5db.pl
index 68f7e50..5884192 100644
--- a/lib/perl5db.pl
+++ b/lib/perl5db.pl
@@ -528,7 +528,7 @@ BEGIN {
  # Debugger for Perl 5.00x; perl5db.pl patch level:
  use vars qw($VERSION $header);

-$VERSION = '1.49_02';
+$VERSION = '1.49_03';

  $header = "perl5db.pl version $VERSION";

@@ -1548,14 +1548,27 @@ We then determine what the console should be on various systems:
          $console = "con";
      }

+=item * AmigaOS - use C<CONSOLE:>.
+
+=cut
+
+ elsif ( $^O eq 'amigaos' ) {
+ $console = "CONSOLE:";
+ }
+
  =item * VMS - use C<sys$command>.

  =cut

- else {
+ elsif ($^O eq 'VMS') {
+ $console = 'sys$command';
+ }
+
+# Keep this last.

- # everything else is ...
- $console = "sys\$command";
+ else {
+ _db_warn("Can't figure out your console, using stdin");
+ undef $console;
      }

  =pod

--
Perl5 Master Repository

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 1 of 1 | next ›
Discussion Overview
groupperl5-changes @
categoriesperl
postedMar 3, '16 at 1:20a
activeMar 3, '16 at 1:20a
posts1
users1
websiteperl.org

1 user in discussion

Jarkko Hietaniemi: 1 post

People

Translate

site design / logo © 2017 Grokbase