66 lines
1.5 KiB
C++
66 lines
1.5 KiB
C++
/*
|
|
* Copyright (c) 1998-2007 Matthijs Hollemans
|
|
* All rights reserved. Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef GREPPER_H
|
|
#define GREPPER_H
|
|
|
|
#include <Messenger.h>
|
|
|
|
class FileIterator;
|
|
class Model;
|
|
|
|
// Executes "grep" in a background thread.
|
|
class Grepper {
|
|
public:
|
|
Grepper(const char* pattern, const Model* model,
|
|
const BHandler* target,
|
|
FileIterator* iterator);
|
|
virtual ~Grepper();
|
|
|
|
bool IsValid() const;
|
|
|
|
void Start();
|
|
void Cancel();
|
|
|
|
private:
|
|
// Spawns the real grepper threads.
|
|
static int32 _SpawnRunnerThread(void* cookie);
|
|
static int32 _SpawnWriterThread(void* cookie);
|
|
|
|
// The threads functions that does the actual grepping.
|
|
int32 _RunnerThread();
|
|
int32 _WriterThread();
|
|
|
|
// Remembers, and possibly escapes, the search pattern.
|
|
void _SetPattern(const char* source);
|
|
|
|
// Prepends all quotes, dollars and backslashes with at backslash
|
|
// to prevent the shell from misinterpreting them.
|
|
bool _EscapeSpecialChars(char* buffer,
|
|
ssize_t bufferSize);
|
|
|
|
private:
|
|
// The (escaped) search pattern.
|
|
char* fPattern;
|
|
|
|
// The settings from the model.
|
|
BMessenger fTarget;
|
|
bool fRegularExpression : 1;
|
|
bool fCaseSensitive : 1;
|
|
uint32 fEncoding;
|
|
|
|
// The supplier of files to grep
|
|
FileIterator* fIterator;
|
|
|
|
// Our thread's ID.
|
|
thread_id fRunnerThreadId;
|
|
// xargs input pipe
|
|
int fXargsInput;
|
|
|
|
// Whether our thread must quit.
|
|
volatile bool fMustQuit;
|
|
};
|
|
|
|
#endif // GREPPER_H
|