From: <enl...@so...> - 2001-01-19 01:34:32
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd Log Message: Directory /cvsroot/enlightenment/e17/apps/efsd added to the repository |
From: <enl...@so...> - 2001-01-19 01:34:57
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Log Message: Directory /cvsroot/enlightenment/e17/apps/efsd/demo added to the repository |
From: <enl...@so...> - 2001-01-19 01:34:57
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Log Message: Directory /cvsroot/enlightenment/e17/apps/efsd/efsd added to the repository |
From: <enl...@so...> - 2001-01-19 01:36:30
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Added Files: Makefile.am efsddemo.c run_efsddemo.sh Log Message: Introducing efsd. Look at the README for more info. |
From: <enl...@so...> - 2001-01-19 01:36:30
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Added Files: Makefile.am efsd.c efsd.h efsd_debug.h efsd_fam.c efsd_fam.h efsd_fileops.c efsd_fileops.h efsd_io.c efsd_io.h efsd_misc.c efsd_misc.h libefsd.c libefsd.h Log Message: Introducing efsd. Look at the README for more info. |
From: <enl...@so...> - 2001-01-19 01:36:30
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd Added Files: AUTHORS COPYING ChangeLog INSTALL Makefile.am NEWS README TODO acconfig.h autogen.sh configure.in Log Message: Introducing efsd. Look at the README for more info. |
From: <enl...@so...> - 2001-01-19 01:40:52
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd Added Files: .cvsignore Log Message: Sssh. |
From: <enl...@so...> - 2001-01-19 01:40:52
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Added Files: .cvsignore Log Message: Sssh. |
From: <enl...@so...> - 2001-01-19 01:40:52
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Added Files: .cvsignore Log Message: Sssh. |
From: <enl...@so...> - 2001-01-19 01:57:50
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd_fam.c efsd_fam.h Log Message: Removing some stuff I don't need anymore ... =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_fam.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efsd_fam.c 2001/01/19 01:36:35 1.1 +++ efsd_fam.c 2001/01/19 01:57:55 1.2 @@ -368,30 +368,3 @@ return (0); } - -GList* -efsd_fam_get_clients_for_event(FAMEvent *fe) -{ - GList *l; - - if (!fe) - return NULL; - - l = g_list_first(monitors); - - while (l) - { - EfsdFamMonitor *m; - m = (EfsdFamMonitor *)l->data; - - if (fe->fr.reqnum == m->fam_req->reqnum) - { - return m->clients; - } - - l = g_list_next(l); - } - - return NULL; -} - =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_fam.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efsd_fam.h 2001/01/19 01:36:35 1.1 +++ efsd_fam.h 2001/01/19 01:57:55 1.2 @@ -96,9 +96,5 @@ */ int efsd_fam_cleanup_client(int client); -/* Get a list of all clients that requested monitoring - the given file. Not to be freed. -*/ -GList *efsd_fam_get_clients_for_event(FAMEvent *fe); #endif |
From: <enl...@so...> - 2001-01-19 07:35:14
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd_misc.c Log Message: No lstat here ... =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_misc.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efsd_misc.c 2001/01/19 01:36:35 1.1 +++ efsd_misc.c 2001/01/19 07:35:20 1.2 @@ -40,7 +40,9 @@ { struct stat st; - lstat(filename, &st); + if (stat(filename, &st) < 0) + return (0); + return (S_ISDIR(st.st_mode)); } |
From: <enl...@so...> - 2001-01-23 05:47:38
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd.c efsd_io.c efsd_misc.c libefsd.c Log Message: Moving back to nonblocking I/O in the server. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efsd.c 2001/01/20 14:06:37 1.2 +++ efsd.c 2001/01/23 05:47:55 1.3 @@ -38,10 +38,6 @@ #include <errno.h> #include <fam.h> -#ifdef __EMX__ -#include <strings.h> /* eeek... OS/2 has bzero(...) there */ -#endif - #include <efsd.h> #include <efsd_debug.h> #include <efsd_io.h> @@ -322,6 +318,7 @@ { /* A connected client sent something -- handle it. */ bzero(&ecmd, sizeof(EfsdCommand)); + D(("Reading command ...\n")); if ( (num_read = efsd_read_command(clientfd[i], &ecmd)) >= 0) { if (efsd_handle_client_command(&ecmd, i) < 0) @@ -331,7 +328,7 @@ { efsd_close_connection(i); } - + D(("Done.\n")); efsd_cleanup_command(&ecmd); } } @@ -352,6 +349,13 @@ { D(("New connection -- client %i.\n", i)); clientfd[i] = sock_fd; + + if (fcntl(sock_fd, F_SETFL, O_NONBLOCK) < 0) + { + fprintf(stderr, "Can not fcntl client's socket -- exiting.\n"); + exit(-1); + } + break; } } @@ -414,9 +418,7 @@ } } -#ifndef __EMX__ setsid(); -#endif chdir("/"); umask(0); } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_io.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efsd_io.c 2001/01/19 01:36:35 1.1 +++ efsd_io.c 2001/01/23 05:47:55 1.2 @@ -30,6 +30,7 @@ #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> +#include <sys/time.h> #include <sys/un.h> #include <string.h> #include <unistd.h> @@ -76,8 +77,10 @@ int read_data(int sockfd, void *dest, int size) { - int num_left, num_read; - char *ptr; + struct timeval t0; + struct timeval t1; + int num_left, num_read; + char *ptr; if (sockfd < 0) return (-1); @@ -86,12 +89,30 @@ num_left = size; num_read = 0; + gettimeofday(&t0, NULL); + while (num_left) { + again: + errno = 0; num_read = read(sockfd, ptr, num_left); if (num_read < 0) - return num_read; /* Error occurred -- return error. */ + { + if (errno == EAGAIN) + { + gettimeofday(&t1, NULL); + if (t0.tv_sec < t1.tv_sec && + t0.tv_usec < t1.tv_usec) + return (-1); + else + goto again; + } + else + { + return (-1); /* Error occurred -- return error. */ + } + } else if (num_read == 0) break; /* End of file */ @@ -390,7 +411,7 @@ if (write_int(sockfd, cmd->efsd_file_cmd.options) < 0) return (-1); - + if (write_string(sockfd, cmd->efsd_file_cmd.file) < 0) return (-1); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_misc.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efsd_misc.c 2001/01/20 14:06:37 1.3 +++ efsd_misc.c 2001/01/23 05:47:55 1.4 @@ -80,7 +80,7 @@ #ifndef __EMX__ if (s[0] == '/') #else - if ( _fnisabs(s) ) + if (_fnisabs(s)) #endif return (1); @@ -94,7 +94,9 @@ int num = 1; char *p, *q, old; char **result; +#ifdef __EMX__ int drive_present = 0; +#endif if (!s || s[0] == '\0') { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/libefsd.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- libefsd.c 2001/01/20 14:06:37 1.2 +++ libefsd.c 2001/01/23 05:47:55 1.3 @@ -24,6 +24,7 @@ */ #include <stdlib.h> #include <stdio.h> +#include <fcntl.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> @@ -61,7 +62,7 @@ #ifndef __EMX__ if (file[0] == '/') #else - if ( _fnisabs(file) ) + if (_fnisabs(file)) #endif return strdup(file); |
From: <enl...@so...> - 2001-01-23 05:55:06
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd.c Log Message: Didn't mean to touch the OS/2 stuff :) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efsd.c 2001/01/23 05:47:55 1.3 +++ efsd.c 2001/01/23 05:55:23 1.4 @@ -38,6 +38,10 @@ #include <errno.h> #include <fam.h> +#ifdef __EMX__ +#include <strings.h> +#endif + #include <efsd.h> #include <efsd_debug.h> #include <efsd_io.h> @@ -418,7 +422,9 @@ } } +#ifndef __EMX__ setsid(); +#endif chdir("/"); umask(0); } |
From: <enl...@so...> - 2001-01-23 05:55:36
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Modified Files: efsddemo.c Log Message: Didn't mean to touch the OS/2 stuff :) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/demo/efsddemo.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efsddemo.c 2001/01/19 01:36:35 1.1 +++ efsddemo.c 2001/01/23 05:55:23 1.2 @@ -60,9 +60,7 @@ printf("RUNNING IN BLOCKING MODE\n"); while (efsd_next_event(ec, &ee) != -1) - { - handle_efsd_event(&ee); - } + handle_efsd_event(&ee); } @@ -236,6 +234,14 @@ } +void +demo_sighandler(int signal) +{ + printf("Broken pipe caught.\n"); + exit(0); +} + + int main(int argc, char** argv) { @@ -251,6 +257,8 @@ exit(0); } + signal(SIGPIPE, demo_sighandler); + /* Command line option to set non-blocking mode. */ if (argc > 1 && !strcmp(argv[1], "-select")) blocking = 0; @@ -285,11 +293,13 @@ id = efsd_makedir(ec, s); } + sleep(2); + /* Remove a file */ id = efsd_remove(ec, "some-crappy-file-that-wont-exist"); printf("Removing file, command ID %i\n", id); - sleep(1); + sleep(2); id = efsd_move(ec, "raster-is-flim.demo", "cK-is-flim.demo"); printf("Moving file, command ID %i\n", id); @@ -298,7 +308,7 @@ id = efsd_listdir(ec, "/usr/local/enlightenment/bin"); printf("Listing directory, command ID %i\n", id); - sleep(1); + sleep(2); /* Start monitoring home directory */ id = efsd_start_monitor(ec, getenv("HOME")); @@ -312,13 +322,13 @@ demo -- you should see the use counts for the monitor be in-/decremented. */ - sleep(5); + sleep(2); /* Stop monitoring home directory */ id = efsd_stop_monitor(ec, getenv("HOME")); printf("Stopping monitor, command ID %i\n", id); - sleep(1); + sleep(2); /* Close connection to efsd. */ efsd_close(ec); |
From: <enl...@so...> - 2001-02-07 04:50:54
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: Makefile.am efsd.c efsd.h efsd_misc.c efsd_misc.h libefsd.c libefsd.h Added Files: efsd_common.c efsd_common.h Log Message: Okay, create the socket in the user's home directory, umask(077), and check if it exists already etc. I also made the library part nonblocking, which should cause timeouts when a client is fed less than what it expects (instead of hanging forever). Also root cannot start efsd any more. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 2001/01/19 01:36:35 1.1 +++ Makefile.am 2001/02/07 04:51:13 1.2 @@ -5,7 +5,7 @@ # A list of all the files in the current directory which can be regenerated MAINTAINERCLEANFILES = Makefile.in Makefile -INCLUDES = $(GLIB_CFLAGS) +INCLUDES = -DDEBUG $(GLIB_CFLAGS) include_HEADERS = \ efsd.h \ @@ -21,15 +21,19 @@ efsd_fileops.h \ efsd_fileops.c \ efsd_misc.h \ - efsd_misc.c + efsd_misc.c \ + efsd_common.h \ + efsd_common.c efsd_LDADD = $(GLIB_LIBS) lib_LTLIBRARIES = libefsd.la libefsd_la_SOURCES = \ + efsd.h \ efsd_io.h \ efsd_io.c \ - efsd.h \ + efsd_common.h \ + efsd_common.c \ libefsd.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- efsd.c 2001/01/23 05:55:23 1.4 +++ efsd.c 2001/02/07 04:51:13 1.5 @@ -47,6 +47,8 @@ #include <efsd_io.h> #include <efsd_fam.h> #include <efsd_fileops.h> +#include <efsd_misc.h> +#include <efsd_common.h> /* The connection to FAM */ FAMConnection famcon; @@ -64,8 +66,8 @@ /* For options: */ static int opt_foreground = 0; +static int opt_forcestart = 0; - void efsd_connect_to_fam(void); int efsd_handle_client_command(EfsdCommand *command, int sockfd); void efsd_handle_fam_events(void); @@ -247,6 +249,23 @@ EfsdCommand ecmd; fd_set fdset; + if (efsd_misc_file_exists(efsd_get_socket_file())) + { + if (opt_forcestart) + { + if (unlink(efsd_get_socket_file()) < 0) + { + fprintf(stderr, "Socket file exists and cannot be removed, with -F given -- exiting.\n"); + exit(-1); + } + } + else + { + fprintf(stderr, "Efsd appears to be already running -- exiting.\n"); + exit(-1); + } + } + for (i = 0; i < EFSD_CLIENTS; i++) clientfd[i] = -1; @@ -256,10 +275,9 @@ exit(-1); } - unlink(EFSD_PATH); bzero(&serv_sun, sizeof(serv_sun)); serv_sun.sun_family = AF_UNIX; - strncpy(serv_sun.sun_path, EFSD_PATH, sizeof(serv_sun.sun_path)); + strncpy(serv_sun.sun_path, efsd_get_socket_file(), sizeof(serv_sun.sun_path)); if (bind(listen_fd, (struct sockaddr *)&serv_sun, sizeof(serv_sun)) < 0) { @@ -380,7 +398,7 @@ } close(listen_fd); - unlink(EFSD_PATH); + unlink(efsd_get_socket_file()); FAMClose(&famcon); efsd_fam_cleanup(); @@ -394,6 +412,12 @@ { int i; + if (geteuid() == 0) + { + fprintf(stderr, "Efsd is not meant to be run by root -- at least not yet :)\n"); + exit(-1); + } + for (i = 0; i < EFSD_CLIENTS; i++) clientnums[i] = i; @@ -426,7 +450,7 @@ setsid(); #endif chdir("/"); - umask(0); + umask(077); } @@ -444,6 +468,7 @@ "USAGE: %s [OPTIONS]\n" "\n" " -f, --foreground do not fork into background on startup.\n" + " -F, --forcestart start even if socket file exists already.\n" "\n", argv[0]); exit(0); @@ -451,6 +476,10 @@ else if (!strcmp(argv[i], "-f") || !strcmp(argv[i], "--foreground")) { opt_foreground = 1; + } + else if (!strcmp(argv[i], "-F") || !strcmp(argv[i], "--forcestart")) + { + opt_forcestart = 1; } } } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efsd.h 2001/01/20 14:06:37 1.2 +++ efsd.h 2001/02/07 04:51:13 1.3 @@ -29,11 +29,6 @@ #include <sys/stat.h> #include <fam.h> -#ifndef __EMX__ -#define EFSD_PATH "/tmp/.efsd.serv" -#else -#define EFSD_PATH "\\socket\\tmp\\.efsd.serv" -#endif #define EFSD_CLIENTS 100 /* Miscellaneous, needed below. */ =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_misc.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- efsd_misc.c 2001/01/23 05:47:55 1.4 +++ efsd_misc.c 2001/02/07 04:51:13 1.5 @@ -41,10 +41,28 @@ #include <efsd_misc.h> +int +efsd_misc_file_exists(char *filename) +{ + struct stat st; + + if (!filename) + return (0); + + if (stat(filename, &st) < 0) + return (0); + + return (1); +} + + int efsd_misc_file_is_dir(char *filename) { struct stat st; + + if (!filename) + return (0); if (stat(filename, &st) < 0) return (0); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_misc.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efsd_misc.h 2001/01/20 14:06:37 1.2 +++ efsd_misc.h 2001/02/07 04:51:13 1.3 @@ -25,6 +25,7 @@ #ifndef __efsd_misc_h #define __efsd_misc_h +int efsd_misc_file_exists(char *filename); int efsd_misc_file_is_dir(char *filename); void efsd_misc_remove_trailing_slashes(char *path); int efsd_misc_is_absolute_path(char *path); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/libefsd.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- libefsd.c 2001/01/23 05:47:55 1.3 +++ libefsd.c 2001/02/07 04:51:13 1.4 @@ -39,6 +39,7 @@ #include <efsd.h> #include <efsd_io.h> +#include <efsd_common.h> #include <libefsd.h> struct efsd_connection @@ -117,13 +118,19 @@ bzero(&cli_sun, sizeof(cli_sun)); cli_sun.sun_family = AF_UNIX; - strncpy(cli_sun.sun_path, EFSD_PATH, sizeof(cli_sun.sun_path)); + strncpy(cli_sun.sun_path, efsd_get_socket_file(), sizeof(cli_sun.sun_path)); if (connect(ec->fd, (struct sockaddr*)&cli_sun, sizeof(cli_sun)) < 0) { fprintf(stderr, "libefsd: connect() error.\n"); return NULL; } + if (fcntl(ec->fd, F_SETFL, O_NONBLOCK) < 0) + { + fprintf(stderr, "Can not fcntl client's socket -- exiting.\n"); + exit(-1); + } + return (ec); } @@ -157,18 +164,20 @@ int efsd_next_event(EfsdConnection *ec, EfsdEvent *ev) { + fd_set fdset; + if (!ec || !ev || ec->fd < 0) return (-1); - return (efsd_read_event(ec->fd, ev)); -} + FD_ZERO(&fdset); + FD_SET(ec->fd, &fdset); + /* Wait for next event to happen ... */ + select(ec->fd+1, &fdset, NULL, NULL, NULL); -/* -{ - efsd_cleanup_event(ev); + return (efsd_read_event(ec->fd, ev)); } -*/ + EfsdCmdId efsd_remove(EfsdConnection *ec, char *filename) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/libefsd.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- libefsd.h 2001/01/19 01:36:35 1.1 +++ libefsd.h 2001/02/07 04:51:13 1.2 @@ -31,6 +31,11 @@ #include <efsd.h> +#ifdef __cplusplus +extern "C" { +#endif + + /* Efsd connection: */ typedef struct efsd_connection EfsdConnection; @@ -120,5 +125,10 @@ as returned by the lstats() command. */ EfsdCmdId efsd_stat(EfsdConnection *ec, char *filename); + + +#ifdef __cplusplus +} +#endif #endif |
From: <enl...@so...> - 2001-02-07 04:51:24
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Modified Files: efsddemo.c Log Message: Okay, create the socket in the user's home directory, umask(077), and check if it exists already etc. I also made the library part nonblocking, which should cause timeouts when a client is fed less than what it expects (instead of hanging forever). Also root cannot start efsd any more. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/demo/efsddemo.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efsddemo.c 2001/01/23 05:55:23 1.2 +++ efsddemo.c 2001/02/07 04:51:13 1.3 @@ -95,7 +95,7 @@ if (efsd_next_event(ec, &ee) != -1) handle_efsd_event(&ee); else - /* We're whimp's here and just exit. */ + /* We're whimps here and just exit. */ break; } } |
From: <enl...@so...> - 2001-02-07 20:34:15
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Modified Files: efsddemo.c Log Message: Hehehehe. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/demo/efsddemo.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efsddemo.c 2001/02/07 04:51:13 1.3 +++ efsddemo.c 2001/02/07 20:34:36 1.4 @@ -95,7 +95,11 @@ if (efsd_next_event(ec, &ee) != -1) handle_efsd_event(&ee); else - /* We're whimps here and just exit. */ + /* The following comment is grammatically 100 % correct + thanks to Andrew Shugg <an...@ne...> :P + */ + + /* We're wimps here and just exit. */ break; } } |
From: <enl...@so...> - 2001-02-12 23:20:35
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd.c libefsd.c libefsd.h Log Message: Introducing efsd_wait_event() for those who want to wait for an event, which we don't, and cleaning up some major ugliness. Also we shouldn't write FAM events when the connection is closed anyway ... =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- efsd.c 2001/02/12 18:53:51 1.6 +++ efsd.c 2001/02/12 23:21:11 1.7 @@ -191,13 +191,16 @@ EfsdFamRequest *efr; efr = (EfsdFamRequest*)((g_list_first(m->clients))->data); - ee.efsd_filechange_event.id = efr->id; - if (efsd_write_event(clientfd[efr->client], &ee) < 0) - { - efsd_close_connection(*((int*)famev.userdata)); - D(("write() error when writing FAM event.\n")); - } + if (clientfd[efr->client] >= 0) + { + ee.efsd_filechange_event.id = efr->id; + if (efsd_write_event(clientfd[efr->client], &ee) < 0) + { + efsd_close_connection(efr->client); + D(("write() error when writing FAM event.\n")); + } + } /* Since this is a directory listing and the monitor type is SIMPLE, we know that there won't be any other FAM events reported after @@ -213,23 +216,24 @@ case FULL: { /* This is an event generated by an actual change */ - - GList *clients; - clients = g_list_first(m->clients); - while (clients) + GList *cl; + + for (cl = g_list_first(m->clients); cl; cl = g_list_next(cl)) { EfsdFamRequest *efr; - - efr = (EfsdFamRequest*) clients->data; - ee.efsd_filechange_event.id = efr->id; - if (efsd_write_event(clientfd[efr->client], &ee) < 0) + efr = (EfsdFamRequest*) cl->data; + if (clientfd[efr->client] >= 0) { - efsd_close_connection(*((int*)clients->data)); - D(("write() error when writing FAM event.\n")); + ee.efsd_filechange_event.id = efr->id; + + if (efsd_write_event(clientfd[efr->client], &ee) < 0) + { + efsd_close_connection(efr->client); + D(("write() error when writing FAM event.\n")); + } } - clients = g_list_next(clients); } } break; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/libefsd.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- libefsd.c 2001/02/07 04:51:13 1.4 +++ libefsd.c 2001/02/12 23:21:11 1.5 @@ -164,6 +164,16 @@ int efsd_next_event(EfsdConnection *ec, EfsdEvent *ev) { + if (!ec || !ev || ec->fd < 0) + return (-1); + + return (efsd_read_event(ec->fd, ev)); +} + + +int +efsd_wait_event(EfsdConnection *ec, EfsdEvent *ev) +{ fd_set fdset; if (!ec || !ev || ec->fd < 0) @@ -171,8 +181,6 @@ FD_ZERO(&fdset); FD_SET(ec->fd, &fdset); - - /* Wait for next event to happen ... */ select(ec->fd+1, &fdset, NULL, NULL, NULL); return (efsd_read_event(ec->fd, ev)); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/libefsd.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- libefsd.h 2001/02/07 04:51:13 1.2 +++ libefsd.h 2001/02/12 23:21:11 1.3 @@ -56,11 +56,20 @@ */ int efsd_get_connection_fd(EfsdConnection *ec); -/* Reads an event the efsd daemon sends, and hangs until one - arrives. Returns -1 when called on closed connection, >= 0 - otherwise + +/* If available, reads an event the efsd daemon sent. It does + not block. You want to use this if you select() efsd's file + descriptor. Returns -1 when called on closed connection, + >= 0 otherwise. */ int efsd_next_event(EfsdConnection *ec, EfsdEvent *ev); + + +/* Blocks until an efsd event arrives, then returns it. + Returns -1 when called on closed connection, >= 0 + otherwise. +*/ +int efsd_wait_event(EfsdConnection *ec, EfsdEvent *ev); /* Events may contain allocated data -- clean that up here. |
From: <enl...@so...> - 2001-02-12 23:21:05
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Modified Files: efsddemo.c Log Message: Introducing efsd_wait_event() for those who want to wait for an event, which we don't, and cleaning up some major ugliness. Also we shouldn't write FAM events when the connection is closed anyway ... =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/demo/efsddemo.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- efsddemo.c 2001/02/07 20:34:36 1.4 +++ efsddemo.c 2001/02/12 23:21:11 1.5 @@ -59,7 +59,7 @@ printf("RUNNING IN BLOCKING MODE\n"); - while (efsd_next_event(ec, &ee) != -1) + while (efsd_wait_event(ec, &ee) != -1) handle_efsd_event(&ee); } @@ -92,15 +92,8 @@ if (FD_ISSET(fd, &fdset)) { - if (efsd_next_event(ec, &ee) != -1) + while (efsd_next_event(ec, &ee) >= 0) handle_efsd_event(&ee); - else - /* The following comment is grammatically 100 % correct - thanks to Andrew Shugg <an...@ne...> :P - */ - - /* We're wimps here and just exit. */ - break; } } } |
From: <enl...@so...> - 2001-02-13 00:13:44
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd.c libefsd.c libefsd.h Log Message: More events paranoia and introducing efsd_events_pending(). =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- efsd.c 2001/02/12 23:21:11 1.7 +++ efsd.c 2001/02/13 00:14:21 1.8 @@ -427,16 +427,30 @@ /* lots of paranoia - clean up dead socket on exit no matter what */ /* only case it doesnt work: SIGKILL (kill -9) */ - signal(SIGINT, efsd_cleanup); - signal(SIGQUIT, efsd_cleanup); - signal(SIGSEGV, efsd_cleanup); - signal(SIGTERM, efsd_cleanup); - signal(SIGBUS, efsd_cleanup); - signal(SIGSYS, efsd_cleanup); - signal(SIGXCPU, efsd_cleanup); - signal(SIGXFSZ, efsd_cleanup); - signal(SIGXCPU, efsd_cleanup); + signal(SIGABRT, efsd_cleanup); + signal(SIGALRM, efsd_cleanup); + signal(SIGBUS, efsd_cleanup); +#ifdef SIGEMT + signal(SIGEMT, efsd_cleanup); +#endif + signal(SIGFPE, efsd_cleanup); + signal(SIGHUP, efsd_cleanup); + signal(SIGILL, efsd_cleanup); + signal(SIGINT, efsd_cleanup); + signal(SIGIO, efsd_cleanup); + signal(SIGIOT, efsd_cleanup); + signal(SIGQUIT, efsd_cleanup); + signal(SIGSEGV, efsd_cleanup); signal(SIGSTKFLT, efsd_cleanup); + signal(SIGSYS, efsd_cleanup); + signal(SIGTERM, efsd_cleanup); + signal(SIGTRAP, efsd_cleanup); + signal(SIGUSR1, efsd_cleanup); + signal(SIGUSR2, efsd_cleanup); + signal(SIGVTALRM, efsd_cleanup); + signal(SIGXCPU, efsd_cleanup); + signal(SIGXFSZ, efsd_cleanup); + signal(SIGPIPE, SIG_IGN); } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/libefsd.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- libefsd.c 2001/02/12 23:21:11 1.5 +++ libefsd.c 2001/02/13 00:14:21 1.6 @@ -26,6 +26,7 @@ #include <stdio.h> #include <fcntl.h> #include <sys/types.h> +#include <sys/time.h> #include <sys/socket.h> #include <sys/un.h> #include <string.h> @@ -160,6 +161,25 @@ free(ec); } + +int +efsd_events_pending(EfsdConnection *ec) +{ + fd_set fdset; + struct timeval tv; + + if (!ec || ec->fd < 0) + return (-1); + + FD_ZERO(&fdset); + FD_SET(ec->fd, &fdset); + + tv.tv_sec = 0; + tv.tv_usec = 0; + select(ec->fd + 1, &fdset, NULL, NULL, &tv); + + return (FD_ISSET(ec->fd, &fdset)); +} int efsd_next_event(EfsdConnection *ec, EfsdEvent *ev) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/libefsd.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- libefsd.h 2001/02/12 23:21:11 1.3 +++ libefsd.h 2001/02/13 00:14:21 1.4 @@ -57,6 +57,12 @@ int efsd_get_connection_fd(EfsdConnection *ec); +/* Returns value > 0 if a following efsd_next_event() would + succeed. +*/ +int efsd_events_pending(EfsdConnection *ec); + + /* If available, reads an event the efsd daemon sent. It does not block. You want to use this if you select() efsd's file descriptor. Returns -1 when called on closed connection, |
From: <enl...@so...> - 2001-02-13 00:14:14
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Modified Files: efsddemo.c Log Message: More events paranoia and introducing efsd_events_pending(). =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/demo/efsddemo.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- efsddemo.c 2001/02/12 23:21:11 1.5 +++ efsddemo.c 2001/02/13 00:14:21 1.6 @@ -92,8 +92,12 @@ if (FD_ISSET(fd, &fdset)) { - while (efsd_next_event(ec, &ee) >= 0) - handle_efsd_event(&ee); + + while (efsd_events_pending(ec)) + { + if (efsd_next_event(ec, &ee) >= 0) + handle_efsd_event(&ee); + } } } } |
From: <enl...@so...> - 2001-02-13 01:30:02
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd.c efsd_common.c efsd_common.h Log Message: Installing an exit handler to clean up, so that I don't need to worry about the socket file when just calling exit after an error. Also changed --forcemode to --careful, i.e. by default I override existing socket files. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- efsd.c 2001/02/13 00:14:21 1.8 +++ efsd.c 2001/02/13 01:30:08 1.9 @@ -66,19 +66,20 @@ /* For options: */ static int opt_foreground = 0; -static int opt_forcestart = 0; +static int opt_careful = 0; -void efsd_connect_to_fam(void); -int efsd_handle_client_command(EfsdCommand *command, int sockfd); -void efsd_handle_fam_events(void); -void efsd_handle_connections(void); -void efsd_cleanup(int signal); -void efsd_daemonize(void); -void efsd_check_options(int argc, char**argv); -int efsd_close_connection(int client); +static void efsd_connect_to_fam(void); +static int efsd_handle_client_command(EfsdCommand *command, int sockfd); +static void efsd_handle_fam_events(void); +static void efsd_handle_connections(void); +static void efsd_cleanup_signal_callback(int signal); +static void efsd_cleanup(void); +static void efsd_daemonize(void); +static void efsd_check_options(int argc, char**argv); +static int efsd_close_connection(int client); -void +static void efsd_connect_to_fam(void) { if ((FAMOpen(&famcon)) < 0) @@ -89,7 +90,7 @@ } -int +static int efsd_handle_client_command(EfsdCommand *command, int client) { int result = (-1); @@ -155,7 +156,7 @@ } -void +static void efsd_handle_fam_events(void) { FAMEvent famev; @@ -245,7 +246,7 @@ } -void +static void efsd_handle_connections(void) { struct sockaddr_un serv_sun, cli_sun; @@ -253,23 +254,6 @@ EfsdCommand ecmd; fd_set fdset; - if (efsd_misc_file_exists(efsd_get_socket_file())) - { - if (opt_forcestart) - { - if (unlink(efsd_get_socket_file()) < 0) - { - fprintf(stderr, "Socket file exists and cannot be removed, with -F given -- exiting.\n"); - exit(-1); - } - } - else - { - fprintf(stderr, "Efsd appears to be already running -- exiting.\n"); - exit(-1); - } - } - for (i = 0; i < EFSD_CLIENTS; i++) clientfd[i] = -1; @@ -390,28 +374,32 @@ } -void -efsd_cleanup(int signal) +static void +efsd_cleanup_signal_callback(int signal) { - int i; + efsd_cleanup(); +} +static void +efsd_cleanup(void) +{ + int i; + for (i = 0; i < EFSD_CLIENTS; i++) { if (clientfd[i] >= 0) close(clientfd[i]); } - + close(listen_fd); - unlink(efsd_get_socket_file()); + efsd_remove_socket_file(); FAMClose(&famcon); efsd_fam_cleanup(); - exit(0); - signal = 0; } -void +static void efsd_initialize(void) { int i; @@ -427,35 +415,36 @@ /* lots of paranoia - clean up dead socket on exit no matter what */ /* only case it doesnt work: SIGKILL (kill -9) */ - signal(SIGABRT, efsd_cleanup); - signal(SIGALRM, efsd_cleanup); - signal(SIGBUS, efsd_cleanup); + signal(SIGABRT, efsd_cleanup_signal_callback); + signal(SIGALRM, efsd_cleanup_signal_callback); + signal(SIGBUS, efsd_cleanup_signal_callback); #ifdef SIGEMT - signal(SIGEMT, efsd_cleanup); + signal(SIGEMT, efsd_cleanup_signal_callback); #endif - signal(SIGFPE, efsd_cleanup); - signal(SIGHUP, efsd_cleanup); - signal(SIGILL, efsd_cleanup); - signal(SIGINT, efsd_cleanup); - signal(SIGIO, efsd_cleanup); - signal(SIGIOT, efsd_cleanup); - signal(SIGQUIT, efsd_cleanup); - signal(SIGSEGV, efsd_cleanup); - signal(SIGSTKFLT, efsd_cleanup); - signal(SIGSYS, efsd_cleanup); - signal(SIGTERM, efsd_cleanup); - signal(SIGTRAP, efsd_cleanup); - signal(SIGUSR1, efsd_cleanup); - signal(SIGUSR2, efsd_cleanup); - signal(SIGVTALRM, efsd_cleanup); - signal(SIGXCPU, efsd_cleanup); - signal(SIGXFSZ, efsd_cleanup); + signal(SIGFPE, efsd_cleanup_signal_callback); + signal(SIGHUP, efsd_cleanup_signal_callback); + signal(SIGILL, efsd_cleanup_signal_callback); + signal(SIGINT, efsd_cleanup_signal_callback); + signal(SIGIO, efsd_cleanup_signal_callback); + signal(SIGIOT, efsd_cleanup_signal_callback); + signal(SIGQUIT, efsd_cleanup_signal_callback); + signal(SIGSEGV, efsd_cleanup_signal_callback); + signal(SIGSTKFLT, efsd_cleanup_signal_callback); + signal(SIGSYS, efsd_cleanup_signal_callback); + signal(SIGTERM, efsd_cleanup_signal_callback); + signal(SIGTRAP, efsd_cleanup_signal_callback); + signal(SIGUSR1, efsd_cleanup_signal_callback); + signal(SIGUSR2, efsd_cleanup_signal_callback); + signal(SIGVTALRM, efsd_cleanup_signal_callback); + signal(SIGXCPU, efsd_cleanup_signal_callback); + signal(SIGXFSZ, efsd_cleanup_signal_callback); signal(SIGPIPE, SIG_IGN); + atexit(efsd_remove_socket_file); } -void +static void efsd_daemonize(void) { pid_t pid; @@ -482,7 +471,7 @@ } -void +static void efsd_check_options(int argc, char**argv) { int i; @@ -496,7 +485,7 @@ "USAGE: %s [OPTIONS]\n" "\n" " -f, --foreground do not fork into background on startup.\n" - " -F, --forcestart start even if socket file exists already.\n" + " -c, --careful don't start if socket file exists.\n" "\n", argv[0]); exit(0); @@ -505,15 +494,30 @@ { opt_foreground = 1; } - else if (!strcmp(argv[i], "-F") || !strcmp(argv[i], "--forcestart")) + else if (!strcmp(argv[i], "-c") || !strcmp(argv[i], "--careful")) { - opt_forcestart = 1; + opt_careful = 1; } } + + if (efsd_misc_file_exists(efsd_get_socket_file())) + { + if (opt_careful) + { + fprintf(stderr, "Efsd appears to be already running -- exiting.\n"); + exit(-1); + } + + if (unlink(efsd_get_socket_file()) < 0) + { + fprintf(stderr, "Socket file exists and cannot be removed -- exiting.\n"); + exit(-1); + } + } } -int +static int efsd_close_connection(int client) { D(("Closing connection %i\n", client)); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_common.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efsd_common.c 2001/02/07 04:51:13 1.1 +++ efsd_common.c 2001/02/13 01:30:08 1.2 @@ -64,3 +64,10 @@ return (s); } + + +void +efsd_remove_socket_file(void) +{ + unlink(efsd_get_socket_file()); +} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_common.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efsd_common.h 2001/02/07 04:51:13 1.1 +++ efsd_common.h 2001/02/13 01:30:08 1.2 @@ -2,5 +2,6 @@ #define __efsd_common_h char *efsd_get_socket_file(void); +void efsd_remove_socket_file(void); #endif |
From: <enl...@so...> - 2001-02-16 00:11:17
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd_common.h efsd_debug.h Log Message: It might help to know where the output is coming from ... =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_common.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efsd_common.h 2001/02/13 01:30:08 1.2 +++ efsd_common.h 2001/02/16 00:12:01 1.3 @@ -1,3 +1,27 @@ +/* + +Copyright (C) 2000, 2001 Christian Kreibich <kre...@ac...>. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies of the Software and its documentation and acknowledgment shall be +given in the documentation and software packages that this Software was +used. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ #ifndef __efsd_common_h #define __efsd_common_h =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_debug.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efsd_debug.h 2001/01/19 01:36:35 1.1 +++ efsd_debug.h 2001/02/16 00:12:02 1.2 @@ -30,7 +30,7 @@ #ifdef DEBUG #define D(msg) \ { \ - printf("DBG: "); \ + printf("efsd-debug: "); \ printf msg; \ fflush(stdout); \ } |
From: <enl...@so...> - 2001-02-16 07:24:52
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/efsd Modified Files: efsd.h efsd_io.c Log Message: "i WAs goign to start doing stat info and haiving different icons.. but efsd dont do stat.... hrrrm.. need that to get any further." Try again :) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efsd.h 2001/02/07 04:51:13 1.3 +++ efsd.h 2001/02/16 07:25:38 1.4 @@ -159,7 +159,6 @@ /* Events, sent from daemon to client. */ /* Filechange event, generated through FAM. - XXX - this should contain the command ID as well. */ typedef struct efsd_filechange_event { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/efsd/efsd_io.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efsd_io.c 2001/02/12 18:53:51 1.3 +++ efsd_io.c 2001/02/16 07:25:38 1.4 @@ -56,6 +56,7 @@ static int read_get_metadata_cmd(int sockfd, EfsdCommand *cmd); static int read_start_monitor_cmd(int sockfd, EfsdCommand *cmd); static int read_stop_monitor_cmd(int sockfd, EfsdCommand *cmd); +static int read_stat_cmd(int sockfd, EfsdCommand *cmd); static int read_filechange_event(int sockfd, EfsdEvent *ee); static int read_reply_event(int sockfd, EfsdEvent *ee); @@ -68,6 +69,7 @@ static int write_get_metadata_cmd(int sockfd, EfsdCommand *cmd); static int write_start_monitor_cmd(int sockfd, EfsdCommand *cmd); static int write_stop_monitor_cmd(int sockfd, EfsdCommand *cmd); +static int write_stat_cmd(int sockfd, EfsdCommand *cmd); static int write_filechange_event(int sockfd, EfsdEvent *ee); static int write_reply_event(int sockfd, EfsdEvent *ee); @@ -407,6 +409,27 @@ static int +read_stat_cmd(int sockfd, EfsdCommand *cmd) +{ + int count = 0, count2; + + if ((count = read_int(sockfd, &(cmd->efsd_file_cmd.id))) < 0) + return (-1); + count2 = count; + + if ((count = read_int(sockfd, &(cmd->efsd_file_cmd.options))) < 0) + return (-1); + count2 += count; + + if ((count = read_string(sockfd, &(cmd->efsd_file_cmd.file))) < 0) + return (-1); + count2 += count; + + return (count2); +} + + +static int read_filechange_event(int sockfd, EfsdEvent *ee) { int count, count2; @@ -451,7 +474,7 @@ if (ee->efsd_reply_event.data_len > 0) { ee->efsd_reply_event.data = malloc(ee->efsd_reply_event.data_len); - if ((count = read_data(sockfd, &(ee->efsd_reply_event.data), + if ((count = read_data(sockfd, (ee->efsd_reply_event.data), ee->efsd_reply_event.data_len)) < 0) return (-1); count2 += count; @@ -626,6 +649,22 @@ static int +write_stat_cmd(int sockfd, EfsdCommand *cmd) +{ + if (write_int(sockfd, cmd->efsd_file_cmd.id) < 0) + return (-1); + + if (write_int(sockfd, cmd->efsd_file_cmd.options) < 0) + return (-1); + + if (write_string(sockfd, cmd->efsd_file_cmd.file) < 0) + return (-1); + + return (0); +} + + +static int write_filechange_event(int sockfd, EfsdEvent *ee) { if (write_int(sockfd, ee->efsd_filechange_event.id) < 0) @@ -706,6 +745,9 @@ case STOPMON: result = write_stop_monitor_cmd(sockfd, cmd); break; + case STAT: + result = write_stat_cmd(sockfd, cmd); + break; case CLOSE: result = 0; break; @@ -758,6 +800,9 @@ break; case STOPMON: result = read_stop_monitor_cmd(sockfd, cmd); + break; + case STAT: + result = read_stat_cmd(sockfd, cmd); break; case CLOSE: result = 0; |
From: <enl...@so...> - 2001-02-16 07:25:22
|
Enlightenment CVS committal Author : cpk Project : e17 Module : apps/efsd Dir : e17/apps/efsd/demo Modified Files: efsddemo.c Log Message: "i WAs goign to start doing stat info and haiving different icons.. but efsd dont do stat.... hrrrm.. need that to get any further." Try again :) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/efsd/demo/efsddemo.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- efsddemo.c 2001/02/13 00:14:21 1.6 +++ efsddemo.c 2001/02/16 07:25:38 1.7 @@ -26,6 +26,7 @@ */ #include <sys/types.h> +#include <sys/stat.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> @@ -210,8 +211,29 @@ ee->efsd_reply_event.command.efsd_file_cmd.id); break; case STAT: - printf("Stat event %i\n", - ee->efsd_reply_event.command.efsd_file_cmd.id); + { + struct stat *st; + + printf("Stat event %i stating file %s\n", + ee->efsd_reply_event.command.efsd_file_cmd.id, + ee->efsd_reply_event.command.efsd_file_cmd.file); + + + st = (struct stat*) ee->efsd_reply_event.data; + + if (S_ISREG(st->st_mode)) + printf("%s is a regular file.\n", + ee->efsd_reply_event.command.efsd_file_cmd.file); + + if (S_ISLNK(st->st_mode)) + printf("%s is a symlink.\n", + ee->efsd_reply_event.command.efsd_file_cmd.file); + + if (S_ISDIR(st->st_mode)) + printf("%s is a directory.\n", + ee->efsd_reply_event.command.efsd_file_cmd.file); + + } break; case CLOSE: printf("Close event %i\n", @@ -308,6 +330,12 @@ /* List contents of a directory */ id = efsd_listdir(ec, "/usr/local/enlightenment/bin"); printf("Listing directory, command ID %i\n", id); + + sleep(2); + + /* Stat a file */ + id = efsd_stat(ec, "/bin/"); + printf("Stat()ing file, command ID %i\n", id); sleep(2); |