Diff for /freem/src/expr.c between versions 1.5 and 1.7

version 1.5, 2025/03/09 19:14:24 version 1.7, 2025/03/22 03:39:23
Line 24 Line 24
  *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.   *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.
  *   *
  *   $Log$   *   $Log$
    *   Revision 1.7  2025/03/22 03:39:23  snw
    *   Fix reverse query polyfill call-in from C side and make NAME exprs silently truncate long names in obsolete MDC dialects
    *
    *   Revision 1.6  2025/03/22 03:05:19  snw
    *   Comply with X11-96/13 portable length of names
    *
  *   Revision 1.5  2025/03/09 19:14:24  snw   *   Revision 1.5  2025/03/09 19:14:24  snw
  *   First phase of REUSE compliance and header reformat   *   First phase of REUSE compliance and header reformat
  *   *
Line 173  void expr (short extyp) Line 179  void expr (short extyp)
     volatile int ch = 0;      volatile int ch = 0;
           
     short   group;          /* flag to scan grouped patterns */      short   group;          /* flag to scan grouped patterns */
   
       int  max_namlen = 255;
   
       if ((rtn_dialect () == D_MDS) || (rtn_dialect () == D_M5) || (rtn_dialect () == D_FREEM)) {
           max_namlen = 255;
       }
       else {
           max_namlen = 8;
       }
           
 #ifdef DEBUG_NEWPTR  #ifdef DEBUG_NEWPTR
     int loop;      int loop;
Line 201  void expr (short extyp) Line 216  void expr (short extyp)
                       (((ch == '/' && varnam[i - 1] != '/') ||                        (((ch == '/' && varnam[i - 1] != '/') ||
                         (ch == '%' && varnam[i - 1] == '/')) &&                          (ch == '%' && varnam[i - 1] == '/')) &&
                        (varnam[1] == '.' || varnam[1] == '/'))))) || (f != '^') && (ch == '.')) {                         (varnam[1] == '.' || varnam[1] == '/'))))) || (f != '^') && (ch == '.')) {
                   
                 varnam[i++] = ch;  
   
                                   if ((i + 1) <= max_namlen) {
                       varnam[i++] = ch;
                   }
                   else {
                       if ((rtn_dialect () == D_M77) ||
                           (rtn_dialect () == D_M84) ||
                           (rtn_dialect () == D_M90) ||
                           (rtn_dialect () == D_M95)) {
                           /* silently truncate... yeah, the standard is stupid af */
                           continue;
                       }
                       else {
                           merr_raise (M56);
                           return;
                       }
                   }                
                                   
             }              }
   
             varnam[i] = EOL;                          varnam[i] = EOL;
   
               #if 0
               {
                   char gooby[256];
                   stcpy (gooby, varnam);
                   stcnv_m2c (gooby);
                   printf ("name = '%s'\r\n", gooby);
               }
               #endif
                           
             if (ch == '(') {        /* it's an array */              if (ch == '(') {        /* it's an array */
                                   
Line 2219  f20: Line 2256  f20:
                         stcnv_c2m (qryarg_ext);                          stcnv_c2m (qryarg_ext);
   
                         /* put the $QUERY argument into the local variable %INT.REVQ */                          /* put the $QUERY argument into the local variable %INT.REVQ */
                         symtab (set_sym, "%INT.REVQ\201\201", qryarg_ext);                          symtab (set_sym, "%INTREVQ\201\201", qryarg_ext);
   
                         /* set up for calling into polyfill wrapper */                          /* set up for calling into polyfill wrapper */
                         code[0] = '\201';                          code[0] = '\201';

Removed from v.1.5  
changed lines
  Added in v.1.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>