@@ -845,44 +845,6 @@ struct error
845
845
int wr_ch_ = -1 ;
846
846
};
847
847
848
- // Impoverished, meager, needy, truly needy
849
- // version of type erasure to store function pointers
850
- // needed to provide the functionality of preexec_func
851
- // ATTN: Can be used only to execute functions with no
852
- // arguments and returning void.
853
- // Could have used more efficient methods, ofcourse, but
854
- // that won't yield me the consistent syntax which I am
855
- // aiming for. If you know, then please do let me know.
856
-
857
- class preexec_func
858
- {
859
- public:
860
- preexec_func () {}
861
-
862
- template <typename Func>
863
- explicit preexec_func (Func f): holder_(new FuncHolder<Func>(std::move(f)))
864
- {}
865
-
866
- void operator ()() {
867
- (*holder_)();
868
- }
869
-
870
- private:
871
- struct HolderBase {
872
- virtual void operator ()() const = 0;
873
- virtual ~HolderBase (){};
874
- };
875
- template <typename T>
876
- struct FuncHolder : HolderBase {
877
- FuncHolder (T func): func_(std::move(func)) {}
878
- void operator ()() const override { func_ (); }
879
- // The function pointer/reference
880
- T func_;
881
- };
882
-
883
- std::unique_ptr<HolderBase> holder_ = nullptr ;
884
- };
885
-
886
848
// ~~~~ End Popen Args ~~~~
887
849
888
850
@@ -990,7 +952,6 @@ struct ArgumentDeducer
990
952
void set_option (output&& out);
991
953
void set_option (error&& err);
992
954
void set_option (close_fds&& cfds);
993
- void set_option (preexec_func&& prefunc);
994
955
void set_option (session_leader&& sleader);
995
956
996
957
private:
@@ -1323,13 +1284,11 @@ class Popen
1323
1284
1324
1285
bool defer_process_start_ = false ;
1325
1286
bool close_fds_ = false ;
1326
- bool has_preexec_fn_ = false ;
1327
1287
bool session_leader_ = false ;
1328
1288
1329
1289
std::string exe_name_;
1330
1290
std::string cwd_;
1331
1291
env_map_t env_;
1332
- preexec_func preexec_fn_;
1333
1292
1334
1293
// Command in string format
1335
1294
std::string args_;
@@ -1669,11 +1628,6 @@ namespace detail {
1669
1628
popen_->close_fds_ = cfds.close_all ;
1670
1629
}
1671
1630
1672
- inline void ArgumentDeducer::set_option (preexec_func&& prefunc) {
1673
- popen_->preexec_fn_ = std::move (prefunc);
1674
- popen_->has_preexec_fn_ = true ;
1675
- }
1676
-
1677
1631
1678
1632
inline void Child::execute_child () {
1679
1633
#ifndef __USING_WINDOWS__
@@ -1737,10 +1691,6 @@ namespace detail {
1737
1691
if (sys_ret == -1 ) throw OSError (" chdir failed" , errno);
1738
1692
}
1739
1693
1740
- if (parent_->has_preexec_fn_ ) {
1741
- parent_->preexec_fn_ ();
1742
- }
1743
-
1744
1694
if (parent_->session_leader_ ) {
1745
1695
sys_ret = setsid ();
1746
1696
if (sys_ret == -1 ) throw OSError (" setsid failed" , errno);
0 commit comments