1 /* 2 * Copyright 2003-2009, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Jonas Sundström, jonas@kirilla.com 7 */ 8 #ifndef _ZIPPER_THREAD_H 9 #define _ZIPPER_THREAD_H 10 11 12 #include <stdio.h> 13 #include <stdlib.h> 14 15 #include <Entry.h> 16 #include <Message.h> 17 #include <Messenger.h> 18 #include <String.h> 19 #include <Window.h> 20 21 #include "GenericThread.h" 22 23 24 class ZipperThread : public GenericThread { 25 public: 26 ZipperThread(BMessage* refsMessage, 27 BWindow* window); 28 ~ZipperThread(); 29 30 status_t SuspendExternalZip(); 31 status_t ResumeExternalZip(); 32 status_t InterruptExternalZip(); 33 status_t WaitOnExternalZip(); 34 35 protected: 36 virtual status_t ThreadStartup(); 37 virtual status_t ExecuteUnit(); 38 virtual status_t ThreadShutdown(); 39 40 virtual void ThreadStartupFailed(status_t status); 41 virtual void ExecuteUnitFailed(status_t status); 42 virtual void ThreadShutdownFailed(status_t status); 43 44 private: 45 void _MakeShellSafe(BString* string); 46 47 thread_id _PipeCommand(int argc, const char** argv, 48 int& in, int& out, int& err, 49 const char** envp = (const char**)environ); 50 51 void _SendMessageToWindow(uint32 what, 52 const char* name = NULL, 53 const char* value = NULL); 54 55 status_t _SelectInTracker(); 56 57 BMessenger fWindowMessenger; 58 thread_id fZipProcess; 59 int fStdIn; 60 int fStdOut; 61 int fStdErr; 62 FILE* fOutputFile; 63 entry_ref fOutputEntryRef; 64 }; 65 66 #endif // _ZIPPER_THREAD_H 67 68