| Ilya Zakharevich on Fri, 9 Feb 2001 00:39:45 -0500 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| [PATCH] DOSHISH paths with \r etc |
\r name would not allow : or \ in name.
Enjoy,
Ilya
Index: src/gp/gp.c
===================================================================
RCS file: /home/megrez/cvsroot/pari/src/gp/gp.c,v
retrieving revision 1.67
diff -p -u -r1.67 gp.c
--- src/gp/gp.c 2001/02/08 18:02:39 1.67
+++ src/gp/gp.c 2001/02/09 05:24:02
@@ -177,12 +177,16 @@ gp_preinit(int force)
for (i=0; i<c_LAST; i++) gp_colors[i] = c_NONE;
}
-#define GET_SEP_SIZE 128
+#ifdef MAXPATHLEN
+# define GET_SEP_SIZE MAXPATHLEN
+#else
+# define GET_SEP_SIZE 128
+#endif
#define separe(c) ((c)==';' || (c)==':')
/* Return all chars, up to next separator */
static char*
-get_sep(char *t)
+get_sep0(char *t, int colon)
{
static char buf[GET_SEP_SIZE], *lim = buf + GET_SEP_SIZE-1;
char *s = buf;
@@ -193,17 +197,32 @@ get_sep(char *t)
switch(*s++ = *t++)
{
case '"':
- if (outer || s[-2] != '\\') outer = !outer;
+ if (outer || (s >= buf+2 && s[-2] != '\\')) outer = !outer;
break;
case '\0':
return buf;
- default:
- if (outer && separe(*t)) { *s=0; return buf; }
+ case ';':
+ if (outer) { s[-1]=0; return buf; } break;
+ case ':':
+ if (outer && colon) { s[-1]=0; return buf; } break;
}
if (s == lim) err(talker,"buffer overflow in get_sep");
}
}
+static char*
+get_sep(char *t)
+{
+ return get_sep0(t,1);
+}
+
+static char*
+get_sep_colon_ok(char *t)
+{
+ return get_sep0(t,0);
+}
+
+
/* as above, t must be writeable, return 1 if we modified t */
static int
get_sep2(char *t)
@@ -1746,7 +1765,7 @@ escape(char *tch)
case 'w':
{
GEN g[2]; g[0] = x; g[1] = NULL;
- s = get_sep(s); if (!*s) s = current_logfile;
+ s = get_sep_colon_ok(s); if (!*s) s = current_logfile;
write0(s, g, f_RAW); return;
}
}
@@ -1769,7 +1788,7 @@ escape(char *tch)
break;
case 'h': print_hash_list(s); break;
case 'l':
- s = get_sep(s);
+ s = get_sep_colon_ok(s);
if (*s)
{
sd_logfile(s,d_ACKNOWLEDGE);
@@ -1786,7 +1805,7 @@ escape(char *tch)
}
break;
case 'q': gp_quit(); break;
- case 'r': switchin(get_sep(s)); break;
+ case 'r': switchin(get_sep_colon_ok(s)); break;
case 's': etatpile(0); break;
case 't': gentypes(); break;
case 'u':
Index: src/language/es.c
===================================================================
RCS file: /home/megrez/cvsroot/pari/src/language/es.c,v
retrieving revision 1.46
diff -p -u -r1.46 es.c
--- src/language/es.c 2001/02/06 14:56:52 1.46
+++ src/language/es.c 2001/02/09 05:24:15
@@ -2445,7 +2445,7 @@ switchin(char *name0)
name = pari_strdup(name0);
}
/* if name contains '/', don't use dir_list */
- s=name; while (*s && *s != '/') s++;
+ s=name; while (*s && *s != '/' && *s != '\\') s++;
if (*s) { if (try_name(name)) return; }
else
{