summaryrefslogtreecommitdiff
path: root/src/locker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/locker.cpp')
-rw-r--r--src/locker.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/locker.cpp b/src/locker.cpp
new file mode 100644
index 0000000..59faecc
--- /dev/null
+++ b/src/locker.cpp
@@ -0,0 +1,110 @@
+////////////////////////////////////////////////////////////////////////
+// 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;
+}

Generated by cgit