Patch for relative paths

Stefano Corsi <[email protected]> Sun, 20 Apr 2003 17:16:24 +0000
Newsgroups gmane.comp.lang.moto.devel
Organization Moto Project
Message-ID <[email protected]>
--------------Boundary-00=_CZJNB1TVVVCUV77YVXZS
Content-Type: text/plain;
  charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi Dave,

here comes the patch for relative paths in error messages.=20
I created a -z option to force the output of absolute paths anyway. If yo=
u pass -z to moto then the UNSAFE_MODE_FLAG is set (motocodes.h).
I decided to call getcwd() every time (in moto.l) for not having some ith=
er global variable. Tell me if I'm wrong.
Modified also the 2 failing tests.=20

Stefano


--------------Boundary-00=_CZJNB1TVVVCUV77YVXZS
Content-Type: text/x-diff;
  charset="us-ascii";
  name="relmsg.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="relmsg.patch"

diff -uNr moto_0_19_1/src/moto/main.c moto_0_19_1.reldef/src/moto/main.c
--- moto_0_19_1/src/moto/main.c	Mon Feb  3 14:30:07 2003
+++ moto_0_19_1.reldef/src/moto/main.c	Sun Apr 20 16:43:56 2003
@@ -68,7 +68,7 @@
    flags |= MACRO_DEBUG_FLAG | DEF_DL_FLAG;
 
    while (1) {
-      c = getopt(argc, argv, "cdhlmM:X:Opvux");
+      c = getopt(argc, argv, "cdhlmM:X:Opvuzx");
       if (c == -1) {
          break;
       }
@@ -103,6 +103,9 @@
             flags &= ~MOTOC_FLAG;
             flags &= ~MOTOD_FLAG;
             break;
+         case 'z':
+            flags |= UNSAFE_MODE_FLAG;
+            break;
          
          /* other option flags */
 
@@ -212,6 +215,7 @@
    printf("   -O:        Omits debugging information\n");
    printf("   -p:        Runs the moto preprocessor only\n");
    printf("   -v:        Runs the moto type verifier only\n");
+   printf("   -z:        Unsafe mode, shows absolute paths\n");
    printf("   -x:        Runs moto without loading default extensions\n");
    printf("\n");
    exit(code);
diff -uNr moto_0_19_1/src/moto/moto.l moto_0_19_1.reldef/src/moto/moto.l
--- moto_0_19_1/src/moto/moto.l	Fri Feb 28 23:16:48 2003
+++ moto_0_19_1.reldef/src/moto/moto.l	Sun Apr 20 16:43:34 2003
@@ -105,6 +105,7 @@
    char *filename;
    char *linestr;
    MetaInfo *meta;
+   char cwd[255];
 
    s = yytext + 2;
    leavefilename = strtok(s, ":");
@@ -119,9 +120,14 @@
    meta->caller = env->meta.caller;
 
    env->meta.lineno = atoi(linestr);
-   env->meta.filename = moto_strdup(env,filename);
+   if (env->flags & UNSAFE_MODE_FLAG) {
+	env->meta.filename = moto_strdup(env, filename);
+   } else {
+	env->meta.filename = moto_strdup(env, filename + strlen(getcwd(cwd, 255)) + 1);
+   }
    env->meta.macroname = NULL;
    env->meta.caller = meta;
+
 }
 
 "$>"(\\.|[^:])*":"{I}+":"(\\.|[^:])*":"{I}+":*>$" { 
@@ -132,6 +138,7 @@
    char *filename;
    char *linestr;
    MetaInfo* meta;
+   char cwd[255];
 
    s = yytext + 2;
    leavefilename = strtok(s, ":");
@@ -146,7 +153,11 @@
    meta->caller = env->meta.caller;
 
    env->meta.lineno = atoi(linestr);
-   env->meta.filename = moto_strdup(env,filename);
+   if (env->flags & UNSAFE_MODE_FLAG) {
+	env->meta.filename = moto_strdup(env, filename);
+   } else {
+	env->meta.filename = moto_strdup(env, filename + strlen(getcwd(cwd, 255)) + 1);
+   }  
    env->meta.macroname = NULL;
    env->meta.caller = meta;
 
@@ -160,6 +171,7 @@
    char *linestr;
    char *mname;
    MetaInfo* meta;
+   char cwd[255];
 
    s = yytext + 2;
    leavefilename = strtok(s, ":");
@@ -175,7 +187,11 @@
    meta->caller = env->meta.caller;
 
    env->meta.lineno = atoi(linestr);
-   env->meta.filename = moto_strdup(env,filename);
+   if (env->flags & UNSAFE_MODE_FLAG) {
+	env->meta.filename = moto_strdup(env, filename);
+   } else {
+	env->meta.filename = moto_strdup(env, filename + strlen(getcwd(cwd, 255)) + 1);
+   }
    env->meta.macroname = moto_strdup(env,mname);
    env->meta.caller = meta;
 
diff -uNr moto_0_19_1/src/moto/motocodes.h moto_0_19_1.reldef/src/moto/motocodes.h
--- moto_0_19_1/src/moto/motocodes.h	Tue Oct 29 00:21:53 2002
+++ moto_0_19_1.reldef/src/moto/motocodes.h	Sun Apr 20 16:43:45 2003
@@ -52,6 +52,7 @@
    MMAN_LEVEL1_FLAG =  0x0000010,
    MMAN_LEVEL2_FLAG =  0x0000020,
 	EXEC_TEXT_FLAG =    0x0000040,
+	UNSAFE_MODE_FLAG = 0x0000080,
    /* execution modes */
    MOTOPP_FLAG =       0x0100000,
    MOTOV_FLAG =        0x0200000,
diff -uNr moto_0_19_1/tests/bf_badlineno.txt moto_0_19_1.reldef/tests/bf_badlineno.txt
--- moto_0_19_1/tests/bf_badlineno.txt	Tue Aug  6 21:24:03 2002
+++ moto_0_19_1.reldef/tests/bf_badlineno.txt	Sun Apr 20 16:44:23 2003
@@ -1,2 +1,2 @@
-/usr/local/wa/dhakim/moto/tests/bf_badlineno.incl:6: Illegal binary operation: <int> * <String>
-   >>> in file included from bf_badlineno.moto:1
+bf_badlineno.incl:6: Illegal binary operation: <int> * <String>
+	  >>> in file included from bf_badlineno.moto:1
diff -uNr moto_0_19_1/tests/bf_macro_err.txt moto_0_19_1.reldef/tests/bf_macro_err.txt
--- moto_0_19_1/tests/bf_macro_err.txt	Wed Aug  7 02:44:07 2002
+++ moto_0_19_1.reldef/tests/bf_macro_err.txt	Sun Apr 20 16:44:15 2003
@@ -1,11 +1,11 @@
-/usr/local/wa/dhakim/moto/tests/bf_macro_err.incl:5: Illegal binary operation: <String> * <boolean>
-   >>> in file included from bf_macro_err.moto:2
-/usr/local/wa/dhakim/moto/tests/bf_macro_err.lib:2: Illegal binary operation: <int> + <boolean>
-   >>> in macro BAD_MACRO called from bf_macro_err.moto:5
-/usr/local/wa/dhakim/moto/tests/bf_macro_err.moto:1: Variable 's' not declared before used
-   >>> in macro ANOTHER_BAD_MACRO called from bf_macro_err.moto:7
-/usr/local/wa/dhakim/moto/tests/bf_macro_err.lib:5: No such function: atoi(<int>)
-   >>> in macro BAD_MACRO_W_ARGS(1) called from bf_macro_err.moto:9
-/usr/local/wa/dhakim/moto/tests/bf_macro_err.lib:5: No such function: atoi(<boolean>)
-   >>> in macro BAD_MACRO_W_ARGS(1) called from /usr/local/wa/dhakim/moto/tests/bf_macro_err.lib:8
-   >>> in macro BAD_MACRO_THAT_CALLS_ANOTHER_BAD_MACRO called from bf_macro_err.moto:10
+bf_macro_err.incl:5: Illegal binary operation: <String> * <boolean>
+	  >>> in file included from bf_macro_err.moto:2
+bf_macro_err.lib:2: Illegal binary operation: <int> + <boolean>
+	  >>> in macro BAD_MACRO called from bf_macro_err.moto:5
+bf_macro_err.moto:1: Variable 's' not declared before used
+	  >>> in macro ANOTHER_BAD_MACRO called from bf_macro_err.moto:7
+bf_macro_err.lib:5: No such function: atoi(<int>)
+	  >>> in macro BAD_MACRO_W_ARGS(1) called from bf_macro_err.moto:9
+bf_macro_err.lib:5: No such function: atoi(<boolean>)
+	  >>> in macro BAD_MACRO_W_ARGS(1) called from bf_macro_err.lib:8
+	  >>> in macro BAD_MACRO_THAT_CALLS_ANOTHER_BAD_MACRO called from bf_macro_err.moto:10

--------------Boundary-00=_CZJNB1TVVVCUV77YVXZS--