File 0240-msgqueue_unlink.patch of Package sblim-sfcb
diff -up ./msgqueue.c.orig ./msgqueue.c
--- ./msgqueue.c.orig 2008-11-24 17:18:29.000000000 -0700
+++ ./msgqueue.c 2008-11-25 10:01:59.000000000 -0700
@@ -622,7 +622,7 @@ int getControlChars(char *id, char **val
void stopLocalConnectServer()
{
- static struct sockaddr_un *serverAddr;
+ struct sockaddr_un serverAddr;
int sock,size=0;
unsigned long int l;
char *path;
@@ -636,13 +636,10 @@ void stopLocalConnectServer()
return;
}
- socklen_t serverAddrLen = offsetof(struct sockaddr_un, sun_path) +
- strlen(path) + 1;
- serverAddr = alloca(serverAddrLen);
- serverAddr->sun_family=AF_UNIX;
- strcpy(serverAddr->sun_path,path);
+ serverAddr.sun_family=AF_UNIX;
+ strncpy(serverAddr.sun_path,path, sizeof(serverAddr.sun_path));
- if (connect(sock,(const struct sockaddr*)serverAddr, serverAddrLen)<0) {
+ if (connect(sock,(const struct sockaddr*)&serverAddr, sizeof(serverAddr))<0) {
perror("connect error");
return;
}
@@ -653,7 +650,7 @@ void stopLocalConnectServer()
void localConnectServer()
{
- static struct sockaddr_un clientAddr,*serverAddr;
+ struct sockaddr_un clientAddr,serverAddr;
int nsocket,ssocket;
unsigned int cl, notDone=1;
char *path,cMsg[264];
@@ -676,14 +673,11 @@ void localConnectServer()
return;
}
- socklen_t serverAddrLen = offsetof(struct sockaddr_un, sun_path) +
- strlen(path) + 1;
- serverAddr = alloca(serverAddrLen);
- serverAddr->sun_family=AF_UNIX;
- strncpy(serverAddr->sun_path,path,sizeof(serverAddr->sun_path));
+ serverAddr.sun_family=AF_UNIX;
+ strncpy(serverAddr.sun_path,path,sizeof(serverAddr.sun_path));
unlink(path);
- if (bind(ssocket,(const struct sockaddr*)serverAddr, serverAddrLen)<0) {
+ if (bind(ssocket,(const struct sockaddr*)&serverAddr, sizeof(serverAddr))<0) {
perror("bind error");
return;
}
@@ -694,12 +688,12 @@ void localConnectServer()
do {
// sfcbSockets.send;
cl=sizeof(clientAddr);
- if ((nsocket=accept(ssocket,(struct sockaddr*)serverAddr,&cl))<0) {
+ if ((nsocket=accept(ssocket,(struct sockaddr*)&clientAddr,&cl))<0) {
perror("accept error");
/* Being interrupted isn't necessarily bad; try once more */
if (errno == EINTR) {
- if ((nsocket=accept(ssocket,(struct sockaddr*)serverAddr,&cl))<0) {
+ if ((nsocket=accept(ssocket,(struct sockaddr*)&clientAddr,&cl))<0) {
perror("accept error (2)");
return;
}