$OpenBSD: patch-kstars_kstars_devicemanager_cpp,v 1.1 2005/02/27 09:09:14 brad Exp $
--- kstars/kstars/devicemanager.cpp.orig	Sat Jul 17 13:52:56 2004
+++ kstars/kstars/devicemanager.cpp	Sun Feb 27 03:48:42 2005
@@ -17,6 +17,7 @@
 #include "indiproperty.h"
 #include "indigroup.h"
 #include "indidevice.h"
+#include "indi/indicom.h"
 #include "kstars.h"
 #include "kstarsdatetime.h"
 
@@ -136,50 +137,51 @@ bool DeviceManager::indiConnect(QString 
 void DeviceManager::dataReceived()
 {
 	char ibuf[32];	/* not so much user input lags */
-	char msg[1024];
+	char errmsg[ERRMSG_SIZE];
 	int i, nr;
 
 	/* read INDI command */
-	nr = read (serverFD, ibuf, sizeof(ibuf));
+	nr = read (serverFD, ibuf, sizeof(ibuf)-1);
 	if (nr <= 0)
 	{
 	    if (nr < 0)
-		sprintf (msg, "INDI: input error.");
+		strcpy (errmsg, "INDI: input error.");
 	    else
-		sprintf (msg, "INDI: agent closed connection.");
+		strcpy (errmsg, "INDI: agent closed connection.");
 
 
             tcflush(serverFD, TCIFLUSH);
 	    sNotifier->disconnect();
 	    close(serverFD);
 	    parent->removeDeviceMgr(mgrID);
-	    KMessageBox::error(0, QString(msg));
+	    KMessageBox::error(0, QString::fromLatin1(errmsg));
 
             return;
 	}
 
+        ibuf[ sizeof( ibuf )-1 ] = '\0';
+
 	/* process each char */
 	for (i = 0; i < nr; i++)
 	{
   	  if (!XMLParser)
 	     	return;
 
-	    XMLEle *root = readXMLEle (XMLParser, (int)ibuf[i], msg);
+	    XMLEle *root = readXMLEle (XMLParser, (int)ibuf[i], errmsg);
 	    if (root)
 	    {
                 //prXMLEle (stdout, root, 0);
-		if (dispatchCommand(root, msg) < 0)
+		if (dispatchCommand(root, errmsg) < 0)
 		{
-		    //kdDebug() << msg << endl;
-		    fprintf(stderr, msg);
+		    fprintf(stderr, "%s", errmsg);
 		    prXMLEle (stdout, root, 0);
 		}
 
 		delXMLEle (root);
 	    }
-	    else if (msg[0])
+	    else if (*errmsg)
 	    {
-		kdDebug() << msg << endl;
+		kdDebug() << errmsg << endl;
 	    }
 	}
 }
@@ -271,7 +273,7 @@ int DeviceManager::removeDevice(QString 
 	 }
     }
 
-   sprintf(errmsg, "Device %s not found" , devName.ascii());
+   snprintf(errmsg, ERRMSG_SIZE, "Device %.32s not found" , devName.ascii());
    return -1;
 }
 
@@ -284,7 +286,7 @@ INDI_D * DeviceManager::findDev (QString
 		return (indi_dev.at(i));
 	}
 
-	sprintf (errmsg, "INDI: no such device %s", devName.ascii());
+	snprintf (errmsg, ERRMSG_SIZE, "INDI: no such device %.32s", devName.ascii());
 	kdDebug() << errmsg;
 
 	return NULL;
@@ -342,7 +344,7 @@ INDI_D * DeviceManager::findDev (XMLEle 
 		return (addDevice (root, errmsg));
 
 
-	sprintf (errmsg, "INDI: <%s> no such device %s", tagXMLEle(root), dn);
+	snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.32s> no such device %.32s", tagXMLEle(root), dn);
 	return NULL;
 }
 
