mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-06-20 03:44:18 +08:00
212 lines
5.7 KiB
Diff
212 lines
5.7 KiB
Diff
diff -ru source/src/channel.c source-new/src/channel.c
|
|
--- source/src/channel.c 2017-10-30 17:21:14.784946514 -0700
|
|
+++ source-new/src/channel.c 2017-10-30 17:27:08.234992143 -0700
|
|
@@ -852,29 +852,27 @@
|
|
* actually able to connect.
|
|
* We detect a failure to connect when either read and write fds
|
|
* are set. Use getsockopt() to find out what kind of failure. */
|
|
-/*
|
|
- * if (FD_ISSET(sd, &rfds) || FD_ISSET(sd, &wfds))
|
|
- * {
|
|
- * ret = getsockopt(sd,
|
|
- * SOL_SOCKET, SO_ERROR, &so_error, &so_error_len);
|
|
- * if (ret < 0 || (so_error != 0
|
|
- * && so_error != EWOULDBLOCK
|
|
- * && so_error != ECONNREFUSED
|
|
- *# ifdef EINPROGRESS
|
|
- * && so_error != EINPROGRESS
|
|
- *# endif
|
|
- * ))
|
|
- * {
|
|
- * ch_errorn(channel,
|
|
- * "channel_open: Connect failed with errno %d",
|
|
- * so_error);
|
|
- * PERROR(_(e_cannot_connect));
|
|
- * sock_close(sd);
|
|
- * channel_free(channel);
|
|
- * return NULL;
|
|
- * }
|
|
- * }
|
|
- */
|
|
+ if (FD_ISSET(sd, &rfds) || FD_ISSET(sd, &wfds))
|
|
+ {
|
|
+ ret = getsockopt(sd,
|
|
+ SOL_SOCKET, SO_ERROR, &so_error, &so_error_len);
|
|
+ if (ret < 0 || (so_error != 0
|
|
+ && so_error != EWOULDBLOCK
|
|
+ && so_error != ECONNREFUSED
|
|
+# ifdef EINPROGRESS
|
|
+ && so_error != EINPROGRESS
|
|
+# endif
|
|
+ ))
|
|
+ {
|
|
+ ch_errorn(channel,
|
|
+ "channel_open: Connect failed with errno %d",
|
|
+ so_error);
|
|
+ PERROR(_(e_cannot_connect));
|
|
+ sock_close(sd);
|
|
+ channel_free(channel);
|
|
+ return NULL;
|
|
+ }
|
|
+ }
|
|
|
|
if (FD_ISSET(sd, &wfds) && so_error == 0)
|
|
/* Did not detect an error, connection is established. */
|
|
diff -ru source/src/memfile.c source-new/src/memfile.c
|
|
--- source/src/memfile.c 2017-10-30 17:24:53.944974807 -0700
|
|
+++ source-new/src/memfile.c 2017-10-30 17:27:08.244992145 -0700
|
|
@@ -596,88 +596,88 @@
|
|
if (hp == NULL || status == FAIL)
|
|
mfp->mf_dirty = FALSE;
|
|
|
|
-/* if ((flags & MFS_FLUSH) && *p_sws != NUL)*/
|
|
- /*{*/
|
|
-/*#if defined(UNIX)*/
|
|
-/*# ifdef HAVE_FSYNC*/
|
|
+ if ((flags & MFS_FLUSH) && *p_sws != NUL)
|
|
+ {
|
|
+#if defined(UNIX)
|
|
+# ifdef HAVE_FSYNC
|
|
/*
|
|
* most Unixes have the very useful fsync() function, just what we need.
|
|
*/
|
|
- /*if (STRCMP(p_sws, "fsync") == 0)*/
|
|
- /*{*/
|
|
- /*if (fsync(mfp->mf_fd))*/
|
|
- /*status = FAIL;*/
|
|
- /*}*/
|
|
- /*else*/
|
|
-/*# endif*/
|
|
- /*[> OpenNT is strictly POSIX (Benzinger) <]*/
|
|
- /*[> Tandem/Himalaya NSK-OSS doesn't have sync() <]*/
|
|
- /*[> No sync() on Stratus VOS <]*/
|
|
-/*# if defined(__OPENNT) || defined(__TANDEM) || defined(__VOS__)*/
|
|
- /*fflush(NULL);*/
|
|
-/*# else*/
|
|
- /*//sync();*/
|
|
-/*# endif*/
|
|
-/*#endif*/
|
|
-/*#ifdef VMS*/
|
|
- /*if (STRCMP(p_sws, "fsync") == 0)*/
|
|
- /*{*/
|
|
- /*if (fsync(mfp->mf_fd))*/
|
|
- /*status = FAIL;*/
|
|
- /*}*/
|
|
-/*#endif*/
|
|
-/*#ifdef SYNC_DUP_CLOSE*/
|
|
+ if (STRCMP(p_sws, "fsync") == 0)
|
|
+ {
|
|
+ if (fsync(mfp->mf_fd))
|
|
+ status = FAIL;
|
|
+ }
|
|
+ else
|
|
+# endif
|
|
+ /* OpenNT is strictly POSIX (Benzinger) */
|
|
+ /* Tandem/Himalaya NSK-OSS doesn't have sync() */
|
|
+ /* No sync() on Stratus VOS */
|
|
+# if defined(__OPENNT) || defined(__TANDEM) || defined(__VOS__)
|
|
+ fflush(NULL);
|
|
+# else
|
|
+ sync();
|
|
+# endif
|
|
+#endif
|
|
+#ifdef VMS
|
|
+ if (STRCMP(p_sws, "fsync") == 0)
|
|
+ {
|
|
+ if (fsync(mfp->mf_fd))
|
|
+ status = FAIL;
|
|
+ }
|
|
+#endif
|
|
+#ifdef SYNC_DUP_CLOSE
|
|
/*
|
|
* Win32 is a bit more work: Duplicate the file handle and close it.
|
|
* This should flush the file to disk.
|
|
*/
|
|
- /*if ((fd = dup(mfp->mf_fd)) >= 0)*/
|
|
- /*close(fd);*/
|
|
-/*#endif*/
|
|
-/*#ifdef AMIGA*/
|
|
-/*# if defined(__AROS__) || defined(__amigaos4__)*/
|
|
- /*if (fsync(mfp->mf_fd) != 0)*/
|
|
- /*status = FAIL;*/
|
|
-/*# else*/
|
|
+ if ((fd = dup(mfp->mf_fd)) >= 0)
|
|
+ close(fd);
|
|
+#endif
|
|
+#ifdef AMIGA
|
|
+# if defined(__AROS__) || defined(__amigaos4__)
|
|
+ if (fsync(mfp->mf_fd) != 0)
|
|
+ status = FAIL;
|
|
+# else
|
|
/*
|
|
* Flush() only exists for AmigaDos 2.0.
|
|
* For 1.3 it should be done with close() + open(), but then the risk
|
|
* is that the open() may fail and lose the file....
|
|
*/
|
|
-/*# ifdef FEAT_ARP*/
|
|
- /*if (dos2)*/
|
|
-/*# endif*/
|
|
-/*# ifdef SASC*/
|
|
- /*{*/
|
|
- /*struct UFB *fp = chkufb(mfp->mf_fd);*/
|
|
+# ifdef FEAT_ARP
|
|
+ if (dos2)
|
|
+# endif
|
|
+# ifdef SASC
|
|
+ {
|
|
+ struct UFB *fp = chkufb(mfp->mf_fd);
|
|
|
|
- /*if (fp != NULL)*/
|
|
- /*Flush(fp->ufbfh);*/
|
|
- /*}*/
|
|
-/*# else*/
|
|
-/*# if defined(_DCC) || defined(__GNUC__) || defined(__MORPHOS__)*/
|
|
- /*{*/
|
|
-/*# if defined(__GNUC__) && !defined(__MORPHOS__) && defined(__libnix__)*/
|
|
+ if (fp != NULL)
|
|
+ Flush(fp->ufbfh);
|
|
+ }
|
|
+# else
|
|
+# if defined(_DCC) || defined(__GNUC__) || defined(__MORPHOS__)
|
|
+ {
|
|
+# if defined(__GNUC__) && !defined(__MORPHOS__) && defined(__libnix__)
|
|
/* Have function (in libnix at least),
|
|
* but ain't got no prototype anywhere. */
|
|
- /*extern unsigned long fdtofh(int filedescriptor);*/
|
|
-/*# endif*/
|
|
-/*# if !defined(__libnix__)*/
|
|
- /*fflush(NULL);*/
|
|
-/*# else*/
|
|
- /*BPTR fh = (BPTR)fdtofh(mfp->mf_fd);*/
|
|
+ extern unsigned long fdtofh(int filedescriptor);
|
|
+# endif
|
|
+# if !defined(__libnix__)
|
|
+ fflush(NULL);
|
|
+# else
|
|
+ BPTR fh = (BPTR)fdtofh(mfp->mf_fd);
|
|
|
|
- /*if (fh != 0)*/
|
|
- /*Flush(fh);*/
|
|
-/*# endif*/
|
|
- /*}*/
|
|
-/*# else [> assume Manx <]*/
|
|
- /*Flush(_devtab[mfp->mf_fd].fd);*/
|
|
-/*# endif*/
|
|
-/*# endif*/
|
|
-/*# endif*/
|
|
-/*#endif [> AMIGA <]*/
|
|
- /*}*/
|
|
+ if (fh != 0)
|
|
+ Flush(fh);
|
|
+# endif
|
|
+ }
|
|
+# else /* assume Manx */
|
|
+ Flush(_devtab[mfp->mf_fd].fd);
|
|
+# endif
|
|
+# endif
|
|
+# endif
|
|
+#endif /* AMIGA */
|
|
+ }
|
|
|
|
got_int |= got_int_save;
|