diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-02-24 00:49:40 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-02-24 00:57:16 +0200 |
commit | 4213ec5ef9695aa504938c0e764ba9a4f08921b2 (patch) | |
tree | 88ac2b2eb01337f0924d687df38b2a163bc94e11 /gconf | |
parent | 337a06f32fb530e0e0884fef2f5f630cca9911a1 (diff) | |
download | wydawca-4213ec5ef9695aa504938c0e764ba9a4f08921b2.tar.gz wydawca-4213ec5ef9695aa504938c0e764ba9a4f08921b2.tar.bz2 |
Initial implementation of daemon mode.
* gconf/gconf-gram.y (string_to_sockaddr_: Take struct gconf_sockaddr as the
first argument.
* gconf/gconf.h (struct gconf_sockaddr): New data type.
* src/job.c, src/net.c, src/pidfile.c: New files.
* src/Makefile.am (wydawca_SOURCES): Add job.c, net.c, pidfile.c
* src/cmdline.opt: New options: --cron (change semantics), --force,
--foreground, --single-process, --spool
* src/wydawca.c: New daemon mode.
* src/config.c: New statements: spool.alias, daemon, foreground,
single-process, wakeup-interval, pidfile, listen
* src/directive.c, src/diskio.c, src/gpg.c, src/mail.c, src/null.c,
src/process.c, src/triplet.c, src/verify.c, src/vtab.c, src/wydawca.h: use
static struct spool wherever feasible.
* src/triplet.c: New meta-variable "spool"
* tests/etc/wydawca.rcin: Update.
* tests/upload-dry.at: Update.
Diffstat (limited to 'gconf')
-rw-r--r-- | gconf/gconf-gram.y | 20 | ||||
-rw-r--r-- | gconf/gconf.h | 5 |
2 files changed, 18 insertions, 7 deletions
diff --git a/gconf/gconf-gram.y b/gconf/gconf-gram.y index a1d9f2a..f7ee710 100644 --- a/gconf/gconf-gram.y +++ b/gconf/gconf-gram.y @@ -506,19 +506,23 @@ string_to_host (struct in_addr *in, const char *string) } static int -string_to_sockaddr (sockaddr_union_t *s, const char *string) +string_to_sockaddr (struct gconf_sockaddr *sp, const char *string) { if (string[0] == '/') { - if (strlen (string) >= sizeof (s->s_un.sun_path)) + struct sockaddr_un s_un; + if (strlen (string) >= sizeof (s_un.sun_path)) { gconf_error (&gconf_current_locus, 0, _("%s: UNIX socket name too long"), string); return 1; } - s->s_un.sun_family = AF_UNIX; - strcpy (s->s_un.sun_path, string); + s_un.sun_family = AF_UNIX; + strcpy (s_un.sun_path, string); + sp->len = sizeof (s_un); + sp->sa = xmalloc (sp->len); + memcpy (sp->sa, &s_un, sp->len); } else { @@ -583,7 +587,9 @@ string_to_sockaddr (sockaddr_union_t *s, const char *string) gconf_error (&gconf_current_locus, 0, _("missing port number")); return 1; } - s->s_in = sa; + sp->len = sizeof (sa); + sp->sa = xmalloc (sp->len); + memcpy (sp->sa, &sa, sp->len); } return 0; } @@ -689,7 +695,7 @@ string_convert (void *target, enum gconf_data_type type, const char *string) break; case gconf_type_sockaddr: - return string_to_sockaddr ((sockaddr_union_t*)target, string); + return string_to_sockaddr ((struct gconf_sockaddr *)target, string); /* FIXME: */ case gconf_type_cidr: @@ -720,7 +726,7 @@ size_t gconf_type_size_tab[] = { sizeof (struct in_addr) /* gconf_type_ipv4 */, 0 /* FIXME: gconf_type_cidr */, sizeof (struct in_addr) /* gconf_type_host */, - sizeof (sockaddr_union_t) /* gconf_type_sockaddr */, + sizeof (struct gconf_sockaddr) /* gconf_type_sockaddr */, 0 /* gconf_type_section */ }; #define gconf_type_size_count \ diff --git a/gconf/gconf.h b/gconf/gconf.h index f88e87a..56792a0 100644 --- a/gconf/gconf.h +++ b/gconf/gconf.h @@ -97,6 +97,11 @@ struct gconf_keyword { struct gconf_keyword *kwd; }; +struct gconf_sockaddr { + int len; + struct sockaddr *sa; +}; + gconf_value_t *gconf_value_dup(gconf_value_t *input); extern void gconf_print_diag(gconf_locus_t *, int, int, const char*); |