Mercurial > vim
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 } |