mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	refactor(misc1): move preserve_exit() to related functions in main.c
This commit is contained in:
		@@ -12,6 +12,7 @@
 | 
				
			|||||||
#include "nvim/event/rstream.h"
 | 
					#include "nvim/event/rstream.h"
 | 
				
			||||||
#include "nvim/log.h"
 | 
					#include "nvim/log.h"
 | 
				
			||||||
#include "nvim/memory.h"
 | 
					#include "nvim/memory.h"
 | 
				
			||||||
 | 
					#include "nvim/main.h"
 | 
				
			||||||
#include "nvim/misc1.h"
 | 
					#include "nvim/misc1.h"
 | 
				
			||||||
#include "nvim/vim.h"
 | 
					#include "nvim/vim.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -696,6 +696,50 @@ void getout(int exitval)
 | 
				
			|||||||
  os_exit(exitval);
 | 
					  os_exit(exitval);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Preserve files and exit.
 | 
				
			||||||
 | 
					/// @note IObuff must contain a message.
 | 
				
			||||||
 | 
					/// @note This may be called from deadly_signal() in a signal handler, avoid
 | 
				
			||||||
 | 
					///       unsafe functions, such as allocating memory.
 | 
				
			||||||
 | 
					void preserve_exit(void)
 | 
				
			||||||
 | 
					  FUNC_ATTR_NORETURN
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // 'true' when we are sure to exit, e.g., after a deadly signal
 | 
				
			||||||
 | 
					  static bool really_exiting = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Prevent repeated calls into this method.
 | 
				
			||||||
 | 
					  if (really_exiting) {
 | 
				
			||||||
 | 
					    if (input_global_fd() >= 0) {
 | 
				
			||||||
 | 
					      // normalize stream (#2598)
 | 
				
			||||||
 | 
					      stream_set_blocking(input_global_fd(), true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    exit(2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  really_exiting = true;
 | 
				
			||||||
 | 
					  // Ignore SIGHUP while we are already exiting. #9274
 | 
				
			||||||
 | 
					  signal_reject_deadly();
 | 
				
			||||||
 | 
					  mch_errmsg(IObuff);
 | 
				
			||||||
 | 
					  mch_errmsg("\n");
 | 
				
			||||||
 | 
					  ui_flush();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ml_close_notmod();                // close all not-modified buffers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  FOR_ALL_BUFFERS(buf) {
 | 
				
			||||||
 | 
					    if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL) {
 | 
				
			||||||
 | 
					      mch_errmsg("Vim: preserving files...\r\n");
 | 
				
			||||||
 | 
					      ui_flush();
 | 
				
			||||||
 | 
					      ml_sync_all(false, false, true);  // preserve all swap files
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ml_close_all(false);              // close all memfiles, without deleting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mch_errmsg("Vim: Finished.\r\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  getout(1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Gets the integer value of a numeric command line argument if given,
 | 
					/// Gets the integer value of a numeric command line argument if given,
 | 
				
			||||||
/// such as '-o10'.
 | 
					/// such as '-o10'.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -788,50 +788,6 @@ int match_user(char_u *name)
 | 
				
			|||||||
  return result;
 | 
					  return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Preserve files and exit.
 | 
					 | 
				
			||||||
/// @note IObuff must contain a message.
 | 
					 | 
				
			||||||
/// @note This may be called from deadly_signal() in a signal handler, avoid
 | 
					 | 
				
			||||||
///       unsafe functions, such as allocating memory.
 | 
					 | 
				
			||||||
void preserve_exit(void)
 | 
					 | 
				
			||||||
  FUNC_ATTR_NORETURN
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  // 'true' when we are sure to exit, e.g., after a deadly signal
 | 
					 | 
				
			||||||
  static bool really_exiting = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Prevent repeated calls into this method.
 | 
					 | 
				
			||||||
  if (really_exiting) {
 | 
					 | 
				
			||||||
    if (input_global_fd() >= 0) {
 | 
					 | 
				
			||||||
      // normalize stream (#2598)
 | 
					 | 
				
			||||||
      stream_set_blocking(input_global_fd(), true);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    exit(2);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  really_exiting = true;
 | 
					 | 
				
			||||||
  // Ignore SIGHUP while we are already exiting. #9274
 | 
					 | 
				
			||||||
  signal_reject_deadly();
 | 
					 | 
				
			||||||
  mch_errmsg(IObuff);
 | 
					 | 
				
			||||||
  mch_errmsg("\n");
 | 
					 | 
				
			||||||
  ui_flush();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ml_close_notmod();                // close all not-modified buffers
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  FOR_ALL_BUFFERS(buf) {
 | 
					 | 
				
			||||||
    if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL) {
 | 
					 | 
				
			||||||
      mch_errmsg("Vim: preserving files...\r\n");
 | 
					 | 
				
			||||||
      ui_flush();
 | 
					 | 
				
			||||||
      ml_sync_all(false, false, true);  // preserve all swap files
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ml_close_all(false);              // close all memfiles, without deleting
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  mch_errmsg("Vim: Finished.\r\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  getout(1);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/// os_call_shell() wrapper. Handles 'verbose', :profile, and v:shell_error.
 | 
					/// os_call_shell() wrapper. Handles 'verbose', :profile, and v:shell_error.
 | 
				
			||||||
/// Invalidates cached tags.
 | 
					/// Invalidates cached tags.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user