50 lines
1.1 KiB
Plaintext
50 lines
1.1 KiB
Plaintext
/*
|
|
* (c) 2005 Nico Schottelius (nico-linux at schottelius.org)
|
|
* change status of a service
|
|
* part of cinit
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
#include "cinit.h"
|
|
|
|
int do_change_status(char *svc, char status, pid_t pid, int action)
|
|
{
|
|
char buf = CMD_CHG_STATUS;
|
|
int tmp = strlen(svc);
|
|
ssize_t (*fpoint)(int,void* ,size_t);
|
|
|
|
|
|
if(action == ACT_READ)
|
|
fpoint = read;
|
|
else
|
|
fpoint = write;
|
|
|
|
D_PRINTF("versuche status zu aendern");
|
|
|
|
if(write(sock,&buf,1) == -1) { /* write COMMAND */
|
|
perror("write");
|
|
return 0;
|
|
}
|
|
if(write(sock,&tmp,sizeof(tmp)) == -1) { /* write length */
|
|
perror("write");
|
|
return 0;
|
|
}
|
|
if(write(sock,svc,tmp) == -1) { /* write service name */
|
|
perror("write");
|
|
return 0;
|
|
}
|
|
if(write(sock,&buf,1) == -1) { /* write PID */
|
|
perror("write");
|
|
return 0;
|
|
}
|
|
write(sock,&status,sizeof(status)); /* write status */
|
|
|
|
D_PRINTF("fertig mit schreiben");
|
|
|
|
read(sock,&buf,sizeof(buf)); /* read SID or -1 if error */
|
|
|
|
return buf;
|
|
}
|