From 18ddc4c28a7a80434ce3360c050c1fb3ce469950 Mon Sep 17 00:00:00 2001
From: fluxgen <fluxgen>
Date: Sun, 11 Aug 2002 21:21:06 +0000
Subject: from char * to string getline

---
 src/Keys.cc | 72 ++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 35 insertions(+), 37 deletions(-)

diff --git a/src/Keys.cc b/src/Keys.cc
index 128ccf4..3dfc37f 100644
--- a/src/Keys.cc
+++ b/src/Keys.cc
@@ -19,32 +19,26 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-//$Id: Keys.cc,v 1.17 2002/07/27 18:03:39 fluxgen Exp $
+//$Id: Keys.cc,v 1.18 2002/08/11 21:21:06 fluxgen Exp $
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
 
 #include "Keys.hh"
+
 #include "StringUtil.hh"
 
-#ifdef HAVE_STDIO_H
-#include <stdio.h>
-#endif	// HAVE_STDIO_H
+#ifdef HAVE_CONFIG_H
+#include "../config.h"
+#endif // HAVE_CONFIG_H
+
 
 #ifdef HAVE_CTYPE_H
 #include <ctype.h>
 #endif	// HAVE_CTYPE_H
 
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#endif	// STDC_HEADERS
-
-#if HAVE_STRINGS_H
-#include <strings.h>
-#endif
+#include <cstdio>
+#include <cstdlib>
+#include <cerrno>
+#include <cstring>
 
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -136,7 +130,7 @@ m_abortkey(0),
 m_display(display)
 {
 	assert(display);
-	if (filename)
+	if (filename != 0)
 		load(filename);
 }
 
@@ -150,7 +144,7 @@ Keys::~Keys() {
 //--------------------------------
 void Keys::deleteTree() {
 	while (!m_keylist.empty()) {
-		if (m_keylist.back())
+		if (m_keylist.back() && m_keylist.back() != 0)
 			delete m_keylist.back();		
 		m_keylist.pop_back();
 	}
@@ -181,34 +175,34 @@ bool Keys::load(const char *filename) {
 	
 	//ungrab all keys
 	ungrabKeys();
+
 	//free memory of previous grabs
 	deleteTree();
-			
+
 	XSync(m_display, False);
 						
 	//open the file
 	ifstream infile(filename);
 	if (!infile)
-		return false;
-	
-	
-	auto_ptr<char> linebuffer(new char[1024]);
-	
+		return false; // faild to open file
+
 	int line=0;//current line, so we can tell the user where the fault is
 
 	while (!infile.eof()) {
-		
-		infile.getline(linebuffer.get(), 1024);		
+		string linebuffer;
+
+		getline(infile, linebuffer);
 
 		line++;
 		vector<string> val;
 		//Parse arguments
-		StringUtil::stringtok(val, linebuffer.get());
+		StringUtil::stringtok(val, linebuffer.c_str());
+
 		//must have at least 1 argument
-		if (val.size()<=0)
+		if (val.size() <= 0)
 			continue;
 			
-		if (val[0][0]=='#') //the line is commented
+		if (val[0][0] == '#') //the line is commented
 			continue;
 		
 		unsigned int key=0, mod=0;		
@@ -253,7 +247,7 @@ bool Keys::load(const char *filename) {
 				if (i < LASTKEYGRAB ) {
 					if (!current_key) {
 						cerr<<"Error on line: "<<line<<endl;
-						cerr<<linebuffer.get()<<endl;
+						cerr<<linebuffer<<endl;
 						delete current_key;
 						current_key = 0;
 						last_key = 0;
@@ -280,7 +274,7 @@ bool Keys::load(const char *filename) {
 						case Keys::EXECUTE:
 						last_key->execcommand = 
 								const_cast<char *>
-								(StringUtil::strcasestr(linebuffer.get(),
+								(StringUtil::strcasestr(linebuffer.c_str(),
 									getActionStr(Keys::EXECUTE))+
 							strlen(getActionStr(Keys::EXECUTE)));
 						break;
@@ -330,9 +324,9 @@ bool Keys::load(const char *filename) {
 					last_key = 0;
 					
 				}	else { //destroy list if no action is found
-					#ifdef DEBUG
+#ifdef DEBUG
 					cerr<<"Didnt find action="<<val[argc]<<endl;
-					#endif					
+#endif // DEBUG			
 					//destroy current_key ... this will also destroy the last_key										
 					delete current_key;
 					current_key = 0;
@@ -424,9 +418,10 @@ unsigned int Keys::getModifier(const char *modstr) {
 		{"MOD5", Mod5Mask},
 		{0, 0}
 		};
-		
+
+	// find mod mask string
 	for (unsigned int i=0; modlist[i].string!=0; i++) {
-		if (modlist[i]==modstr)		
+		if (modlist[i] == modstr)		
 			return modlist[i].mask;		
 	}
 	
@@ -552,6 +547,7 @@ void Keys::showKeyTree(t_key *key, unsigned int w) {
 		cerr<<"( "<<(int)key->key<<" "<<(int)key->mod<<" ) {"<<getActionStr(key->action)<<"}"<<endl;
 }
 #endif //DEBUG
+
 //------------ mergeTree ---------------
 // Merges two chains and binds new keys
 // Returns true on success else false.
@@ -621,7 +617,9 @@ Keys::t_key::t_key(t_key *k) {
 Keys::t_key::~t_key() {	
 	while (!keylist.empty()) {		
 		t_key *k = keylist.back();
-		delete k;
-		keylist.pop_back();				
+		if (k != 0) { // make sure we don't have a bad key pointer
+			delete k;
+			keylist.pop_back();
+		}
 	}
 }
-- 
cgit v0.11.2