File tree Expand file tree Collapse file tree 3 files changed +30
-28
lines changed Expand file tree Collapse file tree 3 files changed +30
-28
lines changed Original file line number Diff line number Diff line change
1
+ Thu Jun 5 16:21:16 2008 NAKAMURA Usaku <usa@ruby-lang.org>
2
+
3
+ * win32/win32.c (make_cmdvector): adjust escaped successive
4
+ double-quote handling. (merge from trunk)
5
+
1
6
Thu Jun 5 12:26:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
2
7
3
8
* win32/win32.c (init_env): initialize HOME and USER environment
Original file line number Diff line number Diff line change 2
2
#define RUBY_RELEASE_DATE "2008-06-05"
3
3
#define RUBY_VERSION_CODE 186
4
4
#define RUBY_RELEASE_CODE 20080605
5
- #define RUBY_PATCHLEVEL 127
5
+ #define RUBY_PATCHLEVEL 128
6
6
7
7
#define RUBY_VERSION_MAJOR 1
8
8
#define RUBY_VERSION_MINOR 8
Original file line number Diff line number Diff line change @@ -1291,10 +1291,13 @@ rb_w32_cmdvector(const char *cmd, char ***vec)
1291
1291
if (!(slashes & 1 )) {
1292
1292
if (!quote )
1293
1293
quote = * ptr ;
1294
- else if (quote == * ptr )
1294
+ else if (quote == * ptr ) {
1295
+ if (quote == '"' && quote == ptr [1 ])
1296
+ ptr ++ ;
1295
1297
quote = '\0' ;
1296
- escape ++ ;
1298
+ }
1297
1299
}
1300
+ escape ++ ;
1298
1301
slashes = 0 ;
1299
1302
break ;
1300
1303
@@ -1321,44 +1324,38 @@ rb_w32_cmdvector(const char *cmd, char ***vec)
1321
1324
//
1322
1325
1323
1326
if (escape ) {
1324
- char * p = base ;
1327
+ char * p = base , c ;
1325
1328
slashes = quote = 0 ;
1326
1329
while (p < base + len ) {
1327
- switch (* p ) {
1330
+ switch (c = * p ) {
1328
1331
case '\\' :
1329
1332
p ++ ;
1330
1333
if (quote != '\'' ) slashes ++ ;
1331
1334
break ;
1332
1335
1333
1336
case '\'' :
1334
1337
case '"' :
1338
+ if (!(slashes & 1 ) && quote && quote != c ) {
1339
+ p ++ ;
1340
+ slashes = 0 ;
1341
+ break ;
1342
+ }
1343
+ memcpy (p - ((slashes + 1 ) >> 1 ), p + (~slashes & 1 ),
1344
+ base + len - p );
1345
+ len -= ((slashes + 1 ) >> 1 ) + (~slashes & 1 );
1346
+ p -= (slashes + 1 ) >> 1 ;
1335
1347
if (!(slashes & 1 )) {
1336
- if (! quote )
1337
- quote = * p ;
1338
- else if ( quote == * p )
1348
+ if (quote ) {
1349
+ if ( quote == '"' && quote == * p )
1350
+ p ++ ;
1339
1351
quote = '\0' ;
1340
- else {
1341
- p ++ ;
1342
- slashes = 0 ;
1343
- break ;
1344
1352
}
1353
+ else
1354
+ quote = c ;
1345
1355
}
1346
- if (base + slashes == p ) {
1347
- base += slashes >> 1 ;
1348
- len -= slashes >> 1 ;
1349
- slashes &= 1 ;
1350
- }
1351
- if (base == p ) {
1352
- base = ++ p ;
1353
- -- len ;
1354
- }
1355
- else {
1356
- memcpy (p - ((slashes + 1 ) >> 1 ), p + (~slashes & 1 ), base + len - p );
1357
- slashes >>= 1 ;
1358
- p -= slashes ;
1359
- len -= slashes + 1 ;
1360
- slashes = 0 ;
1361
- }
1356
+ else
1357
+ p ++ ;
1358
+ slashes = 0 ;
1362
1359
break ;
1363
1360
1364
1361
default :
You can’t perform that action at this time.
0 commit comments