On Sat, Aug 08, 2020 at 11:17:52AM -0700, Bart Van Assche wrote: > From https://pubs.opengroup.org/onlinepubs/9699919799/functions/fclose.html: > "The fclose() function shall perform the equivalent of a close() on the file > descriptor that is associated with the stream pointed to by stream." > > See also https://github.com/net-snmp/net-snmp/issues/157 . > > Fixes: fd9a42d142d8 ("- (pass-persist.c pass-persist.h): moved to > pass_persist.[ch].") > Fixes: a36188e50dcc ("Patch #760417 from Bob Rowlands/Sun for fixing Bug > #751920")
That file is a mess. Have anyone heard from Alexander Prömel regarding those temporary hard coded pathnames that should be fixed soon? I think 14 years cover any reasonable definition of the word 'soon'. Why are both the file descriptor and the FILE* stored in the first place? It seems the read part of the code is using buffered I/O (fIn) while the write part of the code is using unbuffered I/O (fdOut) so I think fdIn and fOut should be removed completley. Why is the SIGPIPE dance done when agent/snmpd explicitly ignores SIGPIPE? I am putting in a 0 vote here because I think a larger rewrite is needed. /MF > --- > agent/mibgroup/ucd-snmp/pass_persist.c | 24 ++---------------------- > agent/snmpd.c | 6 +----- > 2 files changed, 3 insertions(+), 27 deletions(-) > > diff --git a/agent/mibgroup/ucd-snmp/pass_persist.c > b/agent/mibgroup/ucd-snmp/pass_persist.c > index 4d88ff2b54bf..173510aa51c5 100644 > --- a/agent/mibgroup/ucd-snmp/pass_persist.c > +++ b/agent/mibgroup/ucd-snmp/pass_persist.c > @@ -775,32 +775,12 @@ close_persist_pipe(int iindex) > fclose(persist_pipes[iindex].fOut); > persist_pipes[iindex].fOut = (FILE *) 0; > } > - if (persist_pipes[iindex].fdOut != -1) { > -#ifndef WIN32 > - /* > - * The sequence open()/fdopen()/fclose()/close() triggers an access > - * violation with the MSVC runtime. Hence skip the close() call when > - * using the MSVC runtime. > - */ > - close(persist_pipes[iindex].fdOut); > -#endif > - persist_pipes[iindex].fdOut = -1; > - } > + persist_pipes[iindex].fdOut = -1; > if (persist_pipes[iindex].fIn) { > fclose(persist_pipes[iindex].fIn); > persist_pipes[iindex].fIn = (FILE *) 0; > } > - if (persist_pipes[iindex].fdIn != -1) { > -#ifndef WIN32 > - /* > - * The sequence open()/fdopen()/fclose()/close() triggers an access > - * violation with the MSVC runtime. Hence skip the close() call when > - * using the MSVC runtime. > - */ > - close(persist_pipes[iindex].fdIn); > -#endif > - persist_pipes[iindex].fdIn = -1; > - } > + persist_pipes[iindex].fdIn = -1; > > #ifdef __uClinux__ > /*remove the pipes*/ > diff --git a/agent/snmpd.c b/agent/snmpd.c > index ae73eda1390e..2c925d8ff408 100644 > --- a/agent/snmpd.c > +++ b/agent/snmpd.c > @@ -955,17 +955,13 @@ main(int argc, char *argv[]) > } > } else { > if ((PID = fdopen(fd, "w")) == NULL) { > + close(fd); > snmp_log_perror(pid_file); > goto out; > } else { > fprintf(PID, "%d\n", (int) getpid()); > fclose(PID); > } > -#ifndef _MSC_VER > - /* The sequence open()/fdopen()/fclose()/close() makes MSVC > crash, > - hence skip the close() call when using the MSVC runtime. */ > - close(fd); > -#endif > } > } > #endif > > > _______________________________________________ > Net-snmp-coders mailing list > Net-snmp-coders@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/net-snmp-coders _______________________________________________ Net-snmp-coders mailing list Net-snmp-coders@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/net-snmp-coders