comparison src/misc2.c @ 41:f529edb9bab3 v7.0025

updated for version 7.0025
author vimboss
date Mon, 27 Dec 2004 21:59:20 +0000
parents 410fa1a31baf
children af1bcb9a13c0
comparison
equal deleted inserted replaced
40:f1d2a58883b9 41:f529edb9bab3
1523 void 1523 void
1524 ga_init(gap) 1524 ga_init(gap)
1525 garray_T *gap; 1525 garray_T *gap;
1526 { 1526 {
1527 gap->ga_data = NULL; 1527 gap->ga_data = NULL;
1528 gap->ga_room = 0; 1528 gap->ga_maxlen = 0;
1529 gap->ga_len = 0; 1529 gap->ga_len = 0;
1530 } 1530 }
1531 1531
1532 void 1532 void
1533 ga_init2(gap, itemsize, growsize) 1533 ga_init2(gap, itemsize, growsize)
1550 int n; 1550 int n;
1551 { 1551 {
1552 size_t len; 1552 size_t len;
1553 char_u *pp; 1553 char_u *pp;
1554 1554
1555 if (gap->ga_room < n) 1555 if (gap->ga_maxlen - gap->ga_len < n)
1556 { 1556 {
1557 if (n < gap->ga_growsize) 1557 if (n < gap->ga_growsize)
1558 n = gap->ga_growsize; 1558 n = gap->ga_growsize;
1559 len = gap->ga_itemsize * (gap->ga_len + n); 1559 len = gap->ga_itemsize * (gap->ga_len + n);
1560 pp = alloc_clear((unsigned)len); 1560 pp = alloc_clear((unsigned)len);
1561 if (pp == NULL) 1561 if (pp == NULL)
1562 return FAIL; 1562 return FAIL;
1563 gap->ga_room = n; 1563 gap->ga_maxlen = gap->ga_len + n;
1564 if (gap->ga_data != NULL) 1564 if (gap->ga_data != NULL)
1565 { 1565 {
1566 mch_memmove(pp, gap->ga_data, 1566 mch_memmove(pp, gap->ga_data,
1567 (size_t)(gap->ga_itemsize * gap->ga_len)); 1567 (size_t)(gap->ga_itemsize * gap->ga_len));
1568 vim_free(gap->ga_data); 1568 vim_free(gap->ga_data);
1585 1585
1586 if (ga_grow(gap, len) == OK) 1586 if (ga_grow(gap, len) == OK)
1587 { 1587 {
1588 mch_memmove((char *)gap->ga_data + gap->ga_len, s, (size_t)len); 1588 mch_memmove((char *)gap->ga_data + gap->ga_len, s, (size_t)len);
1589 gap->ga_len += len; 1589 gap->ga_len += len;
1590 gap->ga_room -= len;
1591 } 1590 }
1592 } 1591 }
1593 1592
1594 /* 1593 /*
1595 * Append one byte to a growarray which contains bytes. 1594 * Append one byte to a growarray which contains bytes.
1601 { 1600 {
1602 if (ga_grow(gap, 1) == OK) 1601 if (ga_grow(gap, 1) == OK)
1603 { 1602 {
1604 *((char *)gap->ga_data + gap->ga_len) = c; 1603 *((char *)gap->ga_data + gap->ga_len) = c;
1605 ++gap->ga_len; 1604 ++gap->ga_len;
1606 --gap->ga_room;
1607 } 1605 }
1608 } 1606 }
1609 1607
1610 /************************************************************************ 1608 /************************************************************************
1611 * functions that use lookup tables for various things, generally to do with 1609 * functions that use lookup tables for various things, generally to do with
5222 pathcmp(p, q, maxlen) 5220 pathcmp(p, q, maxlen)
5223 const char *p, *q; 5221 const char *p, *q;
5224 int maxlen; 5222 int maxlen;
5225 { 5223 {
5226 int i; 5224 int i;
5227 const char *s; 5225 const char *s = NULL;
5228 5226
5229 for (i = 0; maxlen < 0 || i < maxlen; ++i) 5227 for (i = 0; maxlen < 0 || i < maxlen; ++i)
5230 { 5228 {
5231 /* End of "p": check if "q" also ends or just has a slash. */ 5229 /* End of "p": check if "q" also ends or just has a slash. */
5232 if (p[i] == NUL) 5230 if (p[i] == NUL)
5262 if (vim_ispathsep(q[i])) 5260 if (vim_ispathsep(q[i]))
5263 return 1; 5261 return 1;
5264 return ((char_u *)p)[i] - ((char_u *)q)[i]; /* no match */ 5262 return ((char_u *)p)[i] - ((char_u *)q)[i]; /* no match */
5265 } 5263 }
5266 } 5264 }
5265 if (s == NULL) /* "i" ran into "maxlen" */
5266 return 0;
5267 5267
5268 /* ignore a trailing slash, but not "//" or ":/" */ 5268 /* ignore a trailing slash, but not "//" or ":/" */
5269 if (i >= maxlen 5269 if (s[i + 1] == NUL
5270 || (s[i + 1] == NUL 5270 && i > 0
5271 && i > 0 5271 && !after_pathsep((char_u *)s, (char_u *)s + i)
5272 && !after_pathsep((char_u *)s, (char_u *)s + i)
5273 #ifdef BACKSLASH_IN_FILENAME 5272 #ifdef BACKSLASH_IN_FILENAME
5274 && (s[i] == '/' || s[i] == '\\') 5273 && (s[i] == '/' || s[i] == '\\')
5275 #else 5274 #else
5276 && s[i] == '/' 5275 && s[i] == '/'
5277 #endif 5276 #endif
5278 )) 5277 )
5279 return 0; /* match with trailing slash */ 5278 return 0; /* match with trailing slash */
5280 if (s == q) 5279 if (s == q)
5281 return -1; /* no match */ 5280 return -1; /* no match */
5282 return 1; 5281 return 1;
5283 } 5282 }