d8c1e157ab
git-svn-id: https://crux.nu/svn/tools/prt-get/trunk@9 0b5ae1c7-2405-0410-a7fc-ba219f786e1e
111 lines
2.7 KiB
C++
111 lines
2.7 KiB
C++
////////////////////////////////////////////////////////////////////////
|
|
// FILE: locker.cpp
|
|
// AUTHOR: Johannes Winkelmann, jw@tks6.net
|
|
// COPYRIGHT: (c) 2002 by Johannes Winkelmann
|
|
// ---------------------------------------------------------------------
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
#include <algorithm>
|
|
|
|
#include "locker.h"
|
|
#include "repository.h"
|
|
|
|
const string Locker::LOCKER_FILE_PATH = "/var/lib/pkg/";
|
|
const string Locker::LOCKER_FILE = "prt-get.locker";
|
|
|
|
Locker::Locker()
|
|
: m_openFailed( false )
|
|
{
|
|
string fName = LOCKER_FILE_PATH + LOCKER_FILE;
|
|
FILE* fp = fopen( fName.c_str(), "r" );
|
|
if ( fp ) {
|
|
char input[512];
|
|
while ( fgets( input, 512, fp ) ) {
|
|
if ( input[strlen( input )-1] == '\n' ) {
|
|
input[strlen( input )-1] = '\0';
|
|
}
|
|
if ( strlen( input ) > 0 ) {
|
|
m_packages.push_back( input );
|
|
}
|
|
}
|
|
|
|
fclose( fp );
|
|
} else {
|
|
m_openFailed = true;
|
|
}
|
|
}
|
|
|
|
bool Locker::store()
|
|
{
|
|
if ( !Repository::createOutputDir(LOCKER_FILE_PATH) ) {
|
|
return false;
|
|
}
|
|
|
|
string fName = LOCKER_FILE_PATH + LOCKER_FILE;
|
|
FILE* fp = fopen( fName.c_str(), "w" );
|
|
if ( fp ) {
|
|
vector<string>::iterator it = m_packages.begin();
|
|
for ( ; it != m_packages.end(); ++it ) {
|
|
fprintf( fp, "%s\n", it->c_str() );
|
|
}
|
|
fclose( fp );
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/*!
|
|
\return true locking worked, false if already locked
|
|
*/
|
|
bool Locker::lock( const string& package )
|
|
{
|
|
if ( isLocked( package ) ) {
|
|
// already locked
|
|
return false;
|
|
}
|
|
m_packages.push_back( package );
|
|
return true;
|
|
}
|
|
|
|
/*!
|
|
\return true if it could be unlocked, false if it wasn't locked
|
|
*/
|
|
bool Locker::unlock( const string& package )
|
|
{
|
|
vector<string>::iterator it = find( m_packages.begin(), m_packages.end(),
|
|
package );
|
|
if ( it != m_packages.end() ) {
|
|
m_packages.erase( it );
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool Locker::isLocked( const string& package ) const
|
|
{
|
|
if ( find( m_packages.begin(), m_packages.end(), package ) !=
|
|
m_packages.end() ) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
const vector<string>& Locker::lockedPackages() const
|
|
{
|
|
return m_packages;
|
|
}
|
|
|
|
bool Locker::openFailed() const
|
|
{
|
|
return m_openFailed;
|
|
}
|