updated code
This commit is contained in:
36
wallpaperd.c
36
wallpaperd.c
@@ -11,13 +11,17 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/file.h>
|
||||||
|
|
||||||
|
#define LOCK_FILE "/tmp/my_wallpaperd.lock"
|
||||||
|
#define SOCKET_FILE "/tmp/my_wallpaper.sock"
|
||||||
|
|
||||||
|
|
||||||
int initServerSockServer() {
|
int initServerSockServer() {
|
||||||
int server_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
int server_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
struct sockaddr_un addr = {0};
|
struct sockaddr_un addr = {0};
|
||||||
addr.sun_family = AF_UNIX;
|
addr.sun_family = AF_UNIX;
|
||||||
strcpy(addr.sun_path, "/tmp/my_wallpaper.sock");
|
strcpy(addr.sun_path, SOCKET_FILE);
|
||||||
unlink(addr.sun_path);
|
unlink(addr.sun_path);
|
||||||
if (server_fd < 0) perror("socket");
|
if (server_fd < 0) perror("socket");
|
||||||
if (bind(server_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) perror("bind");
|
if (bind(server_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) perror("bind");
|
||||||
@@ -168,8 +172,25 @@ void handleCommand(char *buff, int n, char** images, size_t image_count){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
|
|
||||||
|
int fd = open(LOCK_FILE, O_CREAT | O_RDWR, 0666);
|
||||||
printf("INFO: daemon started\n");
|
printf("INFO: daemon started\n");
|
||||||
|
|
||||||
|
if (fd == -1) {
|
||||||
|
perror("ERROR: Failed to open lock file");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flock(fd, LOCK_EX | LOCK_NB) == -1) {
|
||||||
|
fprintf(stderr, "INFO: Another instance is already running.\n");
|
||||||
|
fprintf(stderr, "INFO: exiting\n");
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
char** images = NULL;
|
char** images = NULL;
|
||||||
size_t image_count = 0;
|
size_t image_count = 0;
|
||||||
@@ -182,21 +203,22 @@ int main(int argc, char** argv) {
|
|||||||
struct stat stat_buffer;
|
struct stat stat_buffer;
|
||||||
|
|
||||||
if(stat(argv[1], &stat_buffer) != 0){
|
if(stat(argv[1], &stat_buffer) != 0){
|
||||||
printf("dirpath is invalid\n");
|
printf("ERROR: dirpath is invalid\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(stat(argv[2], &stat_buffer) != 0){
|
if(stat(argv[2], &stat_buffer) != 0){
|
||||||
printf("filepath is invalid\n");
|
printf("ERROR: filepath is invalid\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static_wallpaper_path = argv[2];
|
static_wallpaper_path = argv[2];
|
||||||
collectImages(argv[1], &images, &image_count);
|
collectImages(argv[1], &images, &image_count);
|
||||||
printf("collected %ld suitable images\n", image_count);
|
printf("INFO: collected %ld suitable images\n", image_count);
|
||||||
shuffleImages(images, image_count);
|
shuffleImages(images, image_count);
|
||||||
printf("images shuffled\n");
|
printf("INFO: images shuffled\n");
|
||||||
|
|
||||||
printf("starting server\n");
|
printf("INFO: starting server\n");
|
||||||
int server_fd = initServerSockServer();
|
int server_fd = initServerSockServer();
|
||||||
|
|
||||||
setBackgroundImage(images[0]);
|
setBackgroundImage(images[0]);
|
||||||
@@ -212,7 +234,7 @@ int main(int argc, char** argv) {
|
|||||||
int ret = select(server_fd + 1, &fds, NULL, NULL, &tv);
|
int ret = select(server_fd + 1, &fds, NULL, NULL, &tv);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
perror("select\n");
|
perror("ERROR: select\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user