Re: [PATCH] VMS build update
"Craig A. Berry" <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <[email protected]> |
On Oct 14, 2013, at 12:57 AM, Frediano Ziglio <[email protected]> wrote: > 2013/10/13 Craig A. Berry <[email protected]>: >> Make the VMS-specific configuration and build procedures handle threads, plus admit to having some other things that we do have but weren't configuring for, such as clock_gettime(), socketpair(), getaddrinfo(), and stdio locking. >> >> The attached patch was created with git format-patch and should be applicable with git am. Or GNU patch -p1 for traditionalists. >> > > What can I say. Pushed! Many thanks. >> 6e3afa4d (Frediano Ziglio 2013-06-05 12:47:50 +0100 1127) i = fgetc(hostfile); >> 6e3afa4d (Frediano Ziglio 2013-06-05 12:47:50 +0100 1128) if (i == EOF) >> 6e3afa4d (Frediano Ziglio 2013-06-05 12:47:50 +0100 1129) return _bcp_check_eof(dbproc, hostfile, 0); >> 6e3afa4d (Frediano Ziglio 2013-06-05 12:47:50 +0100 1130) ungetc(i, hostfile); >> > > Well... this patch use some stdio extension to make read faster... but > fails on standard C calls ?? What a crazy world! It just try to detect > if we are at end of the file without removing a character! What you're doing is completely reasonable, but appears to trigger a pretty nasty bug in the C run-time where calling fgetc/ungetc corrupts the return value of a subsequent fread. Since FreeTDS always checks the return value of fread in _bcp_read_hostfile, it knows something is bonkers and bails out. I've documented what goes wrong with a simple reproducer at <https://sourceforge.net/p/vms-ports/tickets/72/>. Not sure what to do yet as a workaround. I guess we could skip the above if it's purely an optimization. Or I could try to implement my own ungetc by fiddling with the pointers in the stdio struct. ________________________________________ Craig A. Berry mailto:[email protected] "... getting out of a sonnet is much more difficult than getting in." Brad Leithauser