AmendHub

Download:

jcs

/

subtext

/

amendments

/

640

util: Minor bugfixes


jcs made amendment 640 1 day ago
--- util.c Fri Feb 16 15:30:48 2024 +++ util.c Tue Sep 22 14:05:04 2026 @@ -305,10 +305,12 @@ void * xrealloc(void *src, size_t size) { void *ptr, *tsrc; + size_t osize; ptr = xmalloc(size); if (ptr != NULL && src != NULL) { - memcpy(ptr, src, size); + osize = GetPtrSize(src); + memcpy(ptr, src, MIN(osize, size)); tsrc = src; xfree(&tsrc); } @@ -1014,7 +1016,7 @@ getpath(short vRefNum, Str255 fileName, Str255 ret, bo return 1; } tmpret = xmalloc(FILENAME_MAX); - if (tmp == NULL) { + if (tmpret == NULL) { xfree(&tmp); xfree(&name); return 1; @@ -1247,11 +1249,14 @@ FSReadLine(short frefnum, char *buf, size_t buflen) size_t pos, fsize, rlen = 1, total_read = 0; short error; + if (buflen == 0) + return -1; + GetFPos(frefnum, &pos); GetEOF(frefnum, &fsize); for (; pos <= fsize; pos++) { - if (total_read > buflen) + if (total_read >= buflen - 1) return -1; error = FSRead(frefnum, &rlen, &tbuf); @@ -1259,12 +1264,14 @@ FSReadLine(short frefnum, char *buf, size_t buflen) return -1; if (tbuf == '\r') - return total_read; + break; buf[total_read++] = tbuf; } /* nothing found until the end of the file */ + buf[total_read] = '\0'; + return total_read; } @@ -2041,7 +2048,7 @@ conv: switch (c) { } for (i = 0; n; n /= 10, i++) *--s = n % 10 + '0'; - for (; i < F.precision; i++) + for (; i < F.precision && s > buf; i++) *--s = '0'; if (F.sign) { *--s = F.sign; @@ -2070,7 +2077,7 @@ conv: switch (c) { *--s = '0'; i++; } - for (; i < F.precision; i++) + for (; i < F.precision && s > buf; i++) *--s = '0'; break; @@ -2104,7 +2111,7 @@ conv: switch (c) { } for (i = 0; n; n /= 16, i++) *--s = digits[n % 16]; - for (; i < F.precision; i++) + for (; i < F.precision && s > buf; i++) *--s = '0'; if (F.altForm) { *--s = c; @@ -2207,7 +2214,6 @@ vsnprintf(char *s, size_t size, const char *fmt, void { FILE f; int n; - unsigned char zb; memset(&f, 0, sizeof(f)); f.refnum = -1; @@ -2216,18 +2222,12 @@ vsnprintf(char *s, size_t size, const char *fmt, void f.proc = nullio; f.dirty = 1; - if (size == 0) - zb = s[0]; - - if ((n = bounded_vfprintf(&f, fmt, p)) >= 0) { + if ((n = bounded_vfprintf(&f, fmt, p)) >= 0 && size != 0) { if (n < size) s[n] = 0; else s[size - 1] = 0; } - - if (size == 0) - s[0] = zb; return(n); }