[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH hurd] Further modernize Hurd code by enforcing strict prototy
From: |
Samuel Thibault |
Subject: |
Re: [PATCH hurd] Further modernize Hurd code by enforcing strict prototypes and no implicit function declarations. |
Date: |
Sat, 8 Apr 2023 10:56:11 +0200 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Flavio Cruz, le sam. 08 avril 2023 01:03:31 -0400, a ecrit:
> Most of the changes land in one of these buckets:
> * Removed unused declarations.
> * Used (void) to represent no parameters instead of () which means an
> undeterminate number of parameters.
> * Included missing header files whenever necessary (stdlib.h,
> sys/mman.h, etc)
> * Typedefed function pointers to be able to fully declare the parameter
> types.
> * Added declarations of library functions that are used elsewhere
> (example is libps/ps.h).
> * Made functions static whenever they are only used in that file.
> * Forwarded declarations of some methods that were made static.
> ---
> Makeconf | 1 +
> boot/boot.c | 9 ++--
> console-client/xkb/parser.y | 6 +--
> console-client/xkb/xkb.h | 2 +-
> daemons/getty.c | 4 +-
> eth-multiplexer/vdev.h | 6 +--
> ext2fs/ext2fs.h | 6 +--
> fatfs/fatfs.h | 2 +-
> libdiskfs/boot-start.c | 2 +-
> libdiskfs/diskfs.h | 14 +++---
> libfshelp/fshelp.h | 1 +
> libnetfs/fsys-get-children.c | 1 +
> libports/manage-multithread.c | 2 +-
> libports/ports.h | 2 +-
> libps/proclist.c | 6 +--
> libps/ps.h | 48 +++++++++++++++++---
> libps/spec.c | 70 +++++++++++++++--------------
> libshouldbeinlibc/idvec-verify.c | 12 ++++-
> libshouldbeinlibc/ugids.h | 2 +-
> libtrivfs/dyn-classes.c | 4 +-
> libtrivfs/trivfs.h | 12 ++---
> lwip/port/include/netif/hurdethif.h | 2 +-
> lwip/port/include/netif/hurdtunif.h | 2 +-
> lwip/startup.h | 2 +-
> mach-defpager/default_pager.c | 11 ++---
> mach-defpager/default_pager.h | 5 ++-
> mach-defpager/main.c | 4 --
> mach-defpager/wiring.h | 6 +--
> nfs/main.c | 2 +-
> nfs/mount.c | 4 +-
> pfinet/stubs.c | 2 +-
> pflocal/sock.h | 4 +-
> pflocal/sserver.h | 2 +-
> term/devio.c | 2 +-
> term/hurdio.c | 2 +-
> term/term.h | 2 +-
> trans/firmlink.c | 2 +-
> utils/rpcscan.c | 2 +-
> utils/w.c | 8 +---
> 39 files changed, 161 insertions(+), 115 deletions(-)
>
> diff --git a/Makeconf b/Makeconf
> index b6acd382..c2bf9926 100644
> --- a/Makeconf
> +++ b/Makeconf
> @@ -79,6 +79,7 @@ CPPFLAGS += $(INCLUDES) \
> -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 \
> $($*-CPPFLAGS)
> CFLAGS += -std=gnu99 $(gnu89-inline-CFLAGS) -Wall
> -Werror=old-style-definition \
> + -Werror=implicit-function-declaration
> -Werror=strict-prototypes \
> -g -O3 -fno-strict-aliasing $($*-CFLAGS)
>
> # Include the configure-generated file of parameters.
> diff --git a/boot/boot.c b/boot/boot.c
> index 93dd9386..ac5ecbd5 100644
> --- a/boot/boot.c
> +++ b/boot/boot.c
> @@ -147,9 +147,6 @@ int console_mscount;
> vm_address_t fs_stack_base;
> vm_size_t fs_stack_size;
>
> -void init_termstate ();
> -void restore_termstate ();
> -
> char *fsname;
>
> char bootstrap_args[100] = "-";
> @@ -273,8 +270,8 @@ boot_demuxer (mach_msg_header_t *inp,
> return FALSE;
> }
>
> -void read_reply ();
> -void * msg_thread (void *);
> +static void read_reply (void);
> +static void * msg_thread (void *);
>
> const char *argp_program_version = STANDARD_HURD_VERSION (boot);
>
> @@ -836,7 +833,7 @@ queue_read (enum read_type type,
> static int should_read = 0;
>
> /* Reply to a queued read. */
> -void
> +static void
> read_reply (void)
> {
> int avail;
> diff --git a/console-client/xkb/parser.y b/console-client/xkb/parser.y
> index 8f265681..c8ba404e 100644
> --- a/console-client/xkb/parser.y
> +++ b/console-client/xkb/parser.y
> @@ -27,7 +27,7 @@ static error_t include_section (char *incl, int
> sectionsymbol, char *dirname,
> mergemode);
> static error_t include_sections (char *incl, int sectionsymbol, char
> *dirname,
> mergemode);
> -void close_include ();
> +void close_include (void);
> static void skipsection (void);
> static error_t set_default_action (struct xkb_action *, struct xkb_action
> **);
> static void key_set_keysym (struct key *key, group_t group, int level,
> @@ -1234,8 +1234,8 @@ include_section (char *incl, int sectionsymbol, char
> *dirname,
> mergemode new_mm)
> {
> void include_file (FILE *, mergemode, char *);
> - int scanner_get_current_location ();
> - const char* scanner_get_current_file ();
> + int scanner_get_current_location (void);
> + const char* scanner_get_current_file (void);
>
> char *filename;
> char *sectionname = NULL;
> diff --git a/console-client/xkb/xkb.h b/console-client/xkb/xkb.h
> index e38b5ae7..bfc93a53 100644
> --- a/console-client/xkb/xkb.h
> +++ b/console-client/xkb/xkb.h
> @@ -404,7 +404,7 @@ int vmod_find (char *vmodname);
> error_t vmod_add (char *vmodname);
>
> /* Initialize the list for keysyms to realmodifiers mappings. */
> -void ksrm_init ();
> +void ksrm_init (void);
>
> /* Add keysym to realmodifier mapping. */
> error_t ksrm_add (symbol ks, int rmod);
> diff --git a/daemons/getty.c b/daemons/getty.c
> index 3b0adc48..b5b162d5 100644
> --- a/daemons/getty.c
> +++ b/daemons/getty.c
> @@ -36,8 +36,8 @@
> #include <sys/ioctl.h>
> #include <termios.h>
>
> -/* XXX */
> -extern char *localhost ();
> +/* XXX: should include directly from libshouldbeinlibc */
> +extern char *localhost (void);
>
> #define _PATH_LOGIN "/bin/login"
> #define _PATH_ISSUE "/etc/issue"
> diff --git a/eth-multiplexer/vdev.h b/eth-multiplexer/vdev.h
> index 113bb514..40e4a176 100644
> --- a/eth-multiplexer/vdev.h
> +++ b/eth-multiplexer/vdev.h
> @@ -62,15 +62,15 @@ struct vether_device
> typedef int (*dev_act_func) (struct vether_device *);
>
> int serv_connect (mach_port_t port);
> -int serv_disconnect ();
> +int serv_disconnect (void);
> struct vether_device *lookup_dev_by_name (const char *name);
> int remove_dead_port_from_dev (mach_port_t dead_port);
> struct vether_device *add_vdev (char *name, size_t size);
> void destroy_vdev (void *port);
> -boolean_t all_dev_close ();
> +boolean_t all_dev_close (void);
> int broadcast_pack (char *data, int datalen, struct vether_device
> *from_vdev);
> int broadcast_msg (struct net_rcv_msg *msg);
> -int get_dev_num ();
> +int get_dev_num (void);
> int foreach_dev_do (dev_act_func func);
>
> /* dev_stat.c */
> diff --git a/ext2fs/ext2fs.h b/ext2fs/ext2fs.h
> index c17cf37c..99e93555 100644
> --- a/ext2fs/ext2fs.h
> +++ b/ext2fs/ext2fs.h
> @@ -307,13 +307,13 @@ extern vm_address_t zeroblock;
>
> /* Get the superblock from the disk, point `sblock' to it, and setup
> various global info from it. */
> -void get_hypermetadata ();
> +void get_hypermetadata (void);
>
> /* Map `group_desc_image' pointers to disk cache. Also, establish a
> non-exported mapping to the superblock that will be used by
> diskfs_set_hypermetadata to update the superblock from the cache
> `sblock' points to. */
> -void map_hypermetadata ();
> +void map_hypermetadata (void);
>
> /* ---------------------------------------------------------------- */
> /* Random stuff calculated from the super block. */
> @@ -444,7 +444,7 @@ _dino_deref (struct ext2_inode *inode)
> /* inode.c */
>
> /* Write all active disknodes into the inode pager. */
> -void write_all_disknodes ();
> +void write_all_disknodes (void);
>
> /* ---------------------------------------------------------------- */
>
> diff --git a/fatfs/fatfs.h b/fatfs/fatfs.h
> index 54c3426a..9e5dc563 100644
> --- a/fatfs/fatfs.h
> +++ b/fatfs/fatfs.h
> @@ -126,7 +126,7 @@ void resume_fat_pager (void);
>
> void flush_node_pager (struct node *node);
>
> -void write_all_disknodes ();
> +void write_all_disknodes (void);
>
> error_t fat_get_next_cluster (cluster_t cluster, cluster_t *next_cluster);
> void fat_to_unix_filename (const char *, char *);
> diff --git a/libdiskfs/boot-start.c b/libdiskfs/boot-start.c
> index 7aaf3669..e8c09bcb 100644
> --- a/libdiskfs/boot-start.c
> +++ b/libdiskfs/boot-start.c
> @@ -52,7 +52,7 @@ static pthread_cond_t execstarted;
>
> const char *diskfs_boot_init_program = _HURD_STARTUP;
>
> -static void start_execserver ();
> +static void start_execserver (void);
>
> char **diskfs_argv = 0;
>
> diff --git a/libdiskfs/diskfs.h b/libdiskfs/diskfs.h
> index a9d1f6bb..be4061b4 100644
> --- a/libdiskfs/diskfs.h
> +++ b/libdiskfs/diskfs.h
> @@ -532,7 +532,7 @@ void diskfs_sync_everything (int wait);
>
> /* Shutdown all pagers; this is done when the filesystem is exiting and is
> irreversable. */
> -void diskfs_shutdown_pager ();
> +void diskfs_shutdown_pager (void);
>
> /* The user must define this function. Return a memory object port (send
> right) for the file contents of NP. PROT is the maximum allowable
> @@ -542,11 +542,11 @@ mach_port_t diskfs_get_filemap (struct node *np,
> vm_prot_t prot);
> /* The user must define this function. Return true if there are pager
> ports exported that might be in use by users. If this returns false, then
> further pager creation is also blocked. */
> -int diskfs_pager_users ();
> +int diskfs_pager_users (void);
>
> /* Return the bitwise or of the maximum prot parameter (the second arg to
> diskfs_get_filemap) for all active user pagers. */
> -vm_prot_t diskfs_max_user_pager_prot ();
> +vm_prot_t diskfs_max_user_pager_prot (void);
>
> /* The user must define this function. Return a `struct pager *' suitable
> for use as an argument to diskfs_register_memory_fault_area that
> @@ -565,7 +565,7 @@ void diskfs_readonly_changed (int readonly);
> It is always called with DISKFS_READONLY true. diskfs_node_reload is
> subsequently called on all active nodes, so this call needn't re-read any
> node-specific data. */
> -error_t diskfs_reload_global_state ();
> +error_t diskfs_reload_global_state (void);
>
> /* The user must define this function. It must re-read all data specific to
> NODE from disk, without writing anything. It is always called with
> @@ -644,7 +644,7 @@ void diskfs_spawn_first_thread (ports_demuxer_type
> demuxer);
> /* Once diskfs_root_node is set, call this if we are a bootstrap
> filesystem. If you call this, then the library will call
> diskfs_init_completed once it has a valid proc and auth port. */
> -void diskfs_start_bootstrap ();
> +void diskfs_start_bootstrap (void);
>
> /* Node NP now has no more references; clean all state. NP must be
> locked. */
> @@ -1067,7 +1067,7 @@ error_t diskfs_set_readonly (int readonly);
> /* Re-read all incore data structures from disk. This will only work if
> DISKFS_READONLY is true. DISKFS_FSYS_LOCK should be held while calling
> this routine. */
> -error_t diskfs_remount ();
> +error_t diskfs_remount (void);
>
> /* Called by S_fsys_startup for execserver bootstrap. The execserver
> is able to function without a real node, hence this fraud. Arguments
> @@ -1158,7 +1158,7 @@ struct store *diskfs_init_main (struct argp
> *startup_argp,
> underlying filesystem. */
>
> /* Make errors go somewhere reasonable. */
> -void diskfs_console_stdio ();
> +void diskfs_console_stdio (void);
>
>
> /* The following extracts from io_S.h and fs_S.h catch loff_t erroneously
> diff --git a/libfshelp/fshelp.h b/libfshelp/fshelp.h
> index aa48867e..8ecfbd57 100644
> --- a/libfshelp/fshelp.h
> +++ b/libfshelp/fshelp.h
> @@ -37,6 +37,7 @@
> #include <hurd/iohelp.h>
> #include <sys/stat.h>
> #include <maptime.h>
> +#include <stdlib.h>
> #include <fcntl.h>
>
>
> diff --git a/libnetfs/fsys-get-children.c b/libnetfs/fsys-get-children.c
> index 9c5a8f95..1f57efab 100644
> --- a/libnetfs/fsys-get-children.c
> +++ b/libnetfs/fsys-get-children.c
> @@ -21,6 +21,7 @@
> #include "fsys_S.h"
>
> #include <argz.h>
> +#include <sys/mman.h>
>
> /* Return any active child translators. NAMES is an argz vector
> containing file names relative to the root of the translator.
> diff --git a/libports/manage-multithread.c b/libports/manage-multithread.c
> index d42cf97a..d138092b 100644
> --- a/libports/manage-multithread.c
> +++ b/libports/manage-multithread.c
> @@ -104,7 +104,7 @@ ports_manage_port_operations_multithread (struct
> port_bucket *bucket,
> ports_demuxer_type demuxer,
> int thread_timeout,
> int global_timeout,
> - void (*hook)())
> + void (*hook)(void))
> {
> /* totalthreads is the number of total threads created. nreqthreads
> is the number of threads not currently servicing any client. The
> diff --git a/libports/ports.h b/libports/ports.h
> index 2d6f6a60..c0f0a22a 100644
> --- a/libports/ports.h
> +++ b/libports/ports.h
> @@ -436,7 +436,7 @@ void ports_interrupt_rpcs (void *port);
>
> /* If the current thread's rpc has been interrupted with
> ports_interrupt_rpcs, return true (and clear the interrupted flag). */
> -int ports_self_interrupted ();
> +int ports_self_interrupted (void);
>
> /* Add RPC to the list of rpcs that have been interrupted. */
> void _ports_record_interruption (struct rpc_info *rpc);
> diff --git a/libps/proclist.c b/libps/proclist.c
> index c9ceaf0a..814ae30e 100644
> --- a/libps/proclist.c
> +++ b/libps/proclist.c
> @@ -459,9 +459,7 @@ proc_stat_list_filter (struct proc_stat_list *pp,
> error_t
> proc_stat_list_sort1 (struct proc_stat_list *pp,
> const struct ps_getter *getter,
> - int (*cmp_fn)(struct proc_stat *ps1,
> - struct proc_stat *ps2,
> - const struct ps_getter *getter),
> + proc_stat_cmp_fun cmp_fn,
> int reverse)
> {
> int needs = ps_getter_needs (getter);
> @@ -521,7 +519,7 @@ error_t
> proc_stat_list_sort (struct proc_stat_list *pp,
> const struct ps_fmt_spec *key, int reverse)
> {
> - int (*cmp_fn)() = ps_fmt_spec_compare_fn (key);
> + proc_stat_cmp_fun cmp_fn = ps_fmt_spec_compare_fn (key);
> if (cmp_fn == NULL)
> return EINVAL;
> else
> diff --git a/libps/ps.h b/libps/ps.h
> index 2725b1f4..a3c938e1 100644
> --- a/libps/ps.h
> +++ b/libps/ps.h
> @@ -535,7 +535,7 @@ struct ps_getter
>
> /* A function that will get the value; the protocol between this function
> and its caller is type-dependent. */
> - void (*fn) ();
> + void (*fn) (void);
> };
>
> /* Access macros: */
> @@ -987,15 +987,17 @@ error_t proc_stat_list_filter1 (struct proc_stat_list
> *pp,
> error_t proc_stat_list_filter (struct proc_stat_list *pp,
> const struct ps_filter *filter, int invert);
>
> +typedef int (*proc_stat_cmp_fun)(struct proc_stat *ps1,
> + struct proc_stat *ps2,
> + const struct ps_getter *getter);
> +
> /* Destructively sort proc_stats in PP by ascending value of the field
> returned by GETTER, and compared by CMP_FN; If REVERSE is true, use the
> opposite order. If a fatal error occurs, the error code is returned, it
> returns 0. */
> error_t proc_stat_list_sort1 (struct proc_stat_list *pp,
> const struct ps_getter *getter,
> - int (*cmp_fn)(struct proc_stat *ps1,
> - struct proc_stat *ps2,
> - const struct ps_getter *getter),
> + proc_stat_cmp_fun cmp_fn,
> int reverse);
>
> /* Destructively sort proc_stats in PP by ascending value of the field KEY;
> @@ -1044,7 +1046,7 @@ int proc_stat_list_spec_nominal (struct proc_stat_list
> *pp,
> information on the data types these routines return. */
>
> /* Return the current host port. */
> -mach_port_t ps_get_host ();
> +mach_port_t ps_get_host (void);
>
> /* Return a pointer to basic info about the current host in HOST_INFO. Since
> this is static global information we just use a static buffer. If a
> @@ -1062,4 +1064,40 @@ error_t ps_host_sched_info (host_sched_info_t
> *host_info);
> to). If a system error occurs, the error code is returned, otherwise 0.
> */
> error_t ps_host_load_info (host_load_info_t *host_info);
>
> +error_t ps_emit_string (struct proc_stat *ps, struct ps_fmt_field *field,
> + struct ps_stream *stream);
> +
> +/* Returns 1 if string from GETTER is empty or -. */
> +int ps_nominal_string (struct proc_stat *ps, const struct ps_getter *getter);
> +
> +/* Emits user name from FIELD into STREAM. */
> +error_t
> +ps_emit_user_name (struct proc_stat *ps, struct ps_fmt_field *field,
> + struct ps_stream *stream);
> +
> +/* Emits time from FIELD into STREAM. */
> +error_t
> +ps_emit_past_time (struct proc_stat *ps, struct ps_fmt_field *field,
> + struct ps_stream *stream);
> +
> +/* Emits minutes from FIELD into STREAM. */
> +error_t
> +ps_emit_minutes (struct proc_stat *ps, struct ps_fmt_field *field,
> + struct ps_stream *stream);
> +
> +/* Emits minutes from FIELD into STREAM. */
> +int
> +ps_cmp_times (struct proc_stat *ps1, struct proc_stat *ps2,
> + const struct ps_getter *getter);
> +
> +/* Compares the times between PS1 and PS2 using GETTER. */
> +int
> +ps_cmp_strings (struct proc_stat *ps1, struct proc_stat *ps2,
> + const struct ps_getter *getter);
> +
> +/* Compares user names of PS1 and PS2 using GETTER. */
> +int
> +ps_cmp_unames (struct proc_stat *ps1, struct proc_stat *ps2,
> + const struct ps_getter *getter);
> +
> #endif /* __PS_H__ */
> diff --git a/libps/spec.c b/libps/spec.c
> index adca2e9c..dec57044 100644
> --- a/libps/spec.c
> +++ b/libps/spec.c
> @@ -46,7 +46,7 @@ static char *get_rpc_name (mach_msg_id_t it)
> /* ---------------------------------------------------------------- */
> /* Getter definitions */
>
> -typedef void (*vf)();
> +typedef void (*vf)(struct proc_stat *);
>
> static int
> ps_get_pid (struct proc_stat *ps)
> @@ -387,25 +387,29 @@ const struct ps_getter ps_comm_getter =
> /* some printing functions */
>
> /* G () is a helpful macro that just returns the getter G's access function
> - cast into a function pointer returning TYPE, as how the function should be
> + cast into a function pointer with type TYPE, as how the function should be
> called varies depending on the getter. */
> -#define G(getter,type) ((type (*)())((getter)->fn))
> +#define G(getter,type) ((type)((getter)->fn))
> +
> +#define G_PROC_STAT(getter, type) G(getter, type (*)(struct proc_stat *))
>
> /* Similar to G, but takes a fmt field and uses its getter. */
> #define FG(field,type) G(field->spec->getter, type)
>
> +#define FG_PROC_STAT(field,type) FG(field, type (*)(struct proc_stat *))
> +
> error_t
> ps_emit_int (struct proc_stat *ps, struct ps_fmt_field *field,
> struct ps_stream *stream)
> {
> - return ps_stream_write_int_field (stream, FG (field, int)(ps),
> field->width);
> + return ps_stream_write_int_field (stream, FG_PROC_STAT (field, int)(ps),
> field->width);
> }
>
> error_t
> ps_emit_nz_int (struct proc_stat *ps, struct ps_fmt_field *field,
> struct ps_stream *stream)
> {
> - int value = FG (field, int)(ps);
> + int value = FG_PROC_STAT (field, int)(ps);
> if (value)
> return ps_stream_write_int_field (stream, value, field->width);
> else
> @@ -418,7 +422,7 @@ ps_emit_priority (struct proc_stat *ps, struct
> ps_fmt_field *field,
> {
> return
> ps_stream_write_int_field (stream,
> - MACH_PRIORITY_TO_NICE (FG (field, int)(ps)),
> + MACH_PRIORITY_TO_NICE (FG_PROC_STAT (field,
> int)(ps)),
> field->width);
> }
>
> @@ -427,7 +431,7 @@ ps_emit_num_blocks (struct proc_stat *ps, struct
> ps_fmt_field *field,
> struct ps_stream *stream)
> {
> char buf[20];
> - sprintf(buf, "%d", FG (field, int)(ps) / 1024);
> + sprintf(buf, "%d", FG_PROC_STAT (field, int)(ps) / 1024);
> return ps_stream_write_field (stream, buf, field->width);
> }
>
> @@ -471,7 +475,7 @@ ps_emit_percent (struct proc_stat *ps, struct
> ps_fmt_field *field,
> {
> char buf[20];
> int width = field->width;
> - float perc = FG (field, float)(ps) * 100;
> + float perc = FG_PROC_STAT (field, float)(ps) * 100;
>
> if (width == 0)
> sprintf (buf, "%g", perc);
> @@ -489,7 +493,7 @@ ps_emit_nice_size_t (struct proc_stat *ps, struct
> ps_fmt_field *field,
> struct ps_stream *stream)
> {
> char buf[20];
> - size_t value = FG (field, size_t)(ps);
> + size_t value = FG_PROC_STAT (field, size_t)(ps);
> char *sfx = " KMG";
> size_t frac = 0;
>
> @@ -515,7 +519,7 @@ ps_emit_seconds (struct proc_stat *ps, struct
> ps_fmt_field *field,
> struct timeval tv;
> int width = field->width, prec = field->precision;
>
> - FG (field, void)(ps, &tv);
> + FG (field, void (*)(struct proc_stat *, struct timeval *))(ps, &tv);
>
> if ((field->flags & PS_FMT_FIELD_COLON_MOD) && tv.tv_sec == 0)
> strcpy (buf, "-");
> @@ -534,7 +538,7 @@ ps_emit_minutes (struct proc_stat *ps, struct
> ps_fmt_field *field,
> struct timeval tv;
> int width = field->width;
>
> - FG (field, void)(ps, &tv);
> + FG (field, void (*)(struct proc_stat *, struct timeval *))(ps, &tv);
>
> if ((field->flags & PS_FMT_FIELD_COLON_MOD) && tv.tv_sec < 60)
> strcpy (buf, "-");
> @@ -554,7 +558,7 @@ ps_emit_past_time (struct proc_stat *ps, struct
> ps_fmt_field *field,
> struct timeval tv;
> int width = field->width;
>
> - FG (field, void)(ps, &tv);
> + FG (field, void (*)(struct proc_stat *, struct timeval *))(ps, &tv);
>
> if (now.tv_sec == 0 && gettimeofday (&now, 0) < 0)
> return errno;
> @@ -568,7 +572,7 @@ error_t
> ps_emit_uid (struct proc_stat *ps, struct ps_fmt_field *field,
> struct ps_stream *stream)
> {
> - int uid = FG (field, int)(ps);
> + int uid = FG_PROC_STAT (field, int)(ps);
> if (uid < 0)
> return ps_stream_write_field (stream, "-", field->width);
> else
> @@ -580,7 +584,7 @@ ps_emit_uname (struct proc_stat *ps, struct ps_fmt_field
> *field,
> struct ps_stream *stream)
> {
> int width = field->width;
> - struct ps_user *u = FG (field, struct ps_user *)(ps);
> + struct ps_user *u = FG_PROC_STAT (field, struct ps_user *)(ps);
> if (u)
> {
> struct passwd *pw = ps_user_passwd (u);
> @@ -598,7 +602,7 @@ ps_emit_user_name (struct proc_stat *ps, struct
> ps_fmt_field *field,
> struct ps_stream *stream)
> {
> int width = field->width;
> - struct ps_user *u = FG (field, struct ps_user *)(ps);
> + struct ps_user *u = FG_PROC_STAT (field, struct ps_user *)(ps);
> if (u)
> {
> struct passwd *pw = ps_user_passwd (u);
> @@ -627,7 +631,7 @@ ps_emit_args (struct proc_stat *ps, struct ps_fmt_field
> *field,
> char static_buf[200];
> char *buf = static_buf;
>
> - FG (field, void)(ps, &s0, &s0len);
> + FG (field, void (*)(struct proc_stat *, char **, int *))(ps, &s0, &s0len);
>
> if (!s0 || s0len == 0 )
> strcpy (buf, "-");
> @@ -669,7 +673,7 @@ ps_emit_string (struct proc_stat *ps, struct ps_fmt_field
> *field,
> char *str;
> int len;
>
> - FG (field, void)(ps, &str, &len);
> + FG (field, void (*)(struct proc_stat *, char **, int *))(ps, &str, &len);
>
> if (!str || len == 0)
> str = "-";
> @@ -682,7 +686,7 @@ ps_emit_tty_name (struct proc_stat *ps, struct
> ps_fmt_field *field,
> struct ps_stream *stream)
> {
> const char *name = "-";
> - struct ps_tty *tty = FG (field, struct ps_tty *)(ps);
> + struct ps_tty *tty = FG_PROC_STAT (field, struct ps_tty *)(ps);
>
> if (tty)
> {
> @@ -727,7 +731,7 @@ ps_emit_state (struct proc_stat *ps, struct ps_fmt_field
> *field,
> struct ps_stream *stream)
> {
> char *tags;
> - int raw_state = FG (field, int)(ps);
> + int raw_state = FG (field, int (*)(struct proc_stat *))(ps);
> int state = raw_state;
> char buf[20], *p = buf;
> const struct state_shadow *shadow = state_shadows;
> @@ -758,7 +762,7 @@ ps_emit_wait (struct proc_stat *ps, struct ps_fmt_field
> *field,
> char *wait;
> char buf[80];
>
> - FG (field, void)(ps, &wait, &rpc);
> + FG (field, void (*)(struct proc_stat *, char **, int *))(ps, &wait, &rpc);
>
> if (wait == 0)
> return ps_stream_write_field (stream, "?", field->width);
> @@ -834,7 +838,7 @@ int
> ps_cmp_ints (struct proc_stat *ps1, struct proc_stat *ps2,
> const struct ps_getter *getter)
> {
> - int (*gf)() = G (getter, int);
> + int (*gf)(struct proc_stat *) = G_PROC_STAT (getter, int);
> int v1 = gf(ps1), v2 = gf (ps2);
> return v1 == v2 ? 0 : v1 < v2 ? -1 : 1;
> }
> @@ -843,7 +847,7 @@ int
> ps_cmp_floats (struct proc_stat *ps1, struct proc_stat *ps2,
> const struct ps_getter *getter)
> {
> - float (*gf)() = G (getter, float);
> + float (*gf)(struct proc_stat *) = G_PROC_STAT (getter, float);
> float v1 = gf(ps1), v2 = gf (ps2);
> return v1 == v2 ? 0 : v1 < v2 ? -1 : 1;
> }
> @@ -852,7 +856,7 @@ int
> ps_cmp_size_ts (struct proc_stat *ps1, struct proc_stat *ps2,
> const struct ps_getter *getter)
> {
> - size_t (*gf)() = G (getter, size_t);
> + size_t (*gf)(struct proc_stat *) = G_PROC_STAT (getter, size_t);
> size_t v1 = gf(ps1), v2 = gf (ps2);
> return v1 == v2 ? 0 : v1 < v2 ? -1 : 1;
> }
> @@ -861,7 +865,7 @@ int
> ps_cmp_uids (struct proc_stat *ps1, struct proc_stat *ps2,
> const struct ps_getter *getter)
> {
> - struct ps_user *(*gf)() = G (getter, struct ps_user *);
> + struct ps_user *(*gf)(struct proc_stat *) = G_PROC_STAT (getter, struct
> ps_user *);
> struct ps_user *u1 = gf (ps1), *u2 = gf (ps2);
> return (u1 ? ps_user_uid (u1) : -1) - (u2 ? ps_user_uid (u2) : -1);
> }
> @@ -870,7 +874,7 @@ int
> ps_cmp_unames (struct proc_stat *ps1, struct proc_stat *ps2,
> const struct ps_getter *getter)
> {
> - struct ps_user *(*gf)() = G (getter, struct ps_user *);
> + struct ps_user *(*gf)(struct proc_stat *) = G_PROC_STAT (getter, struct
> ps_user *);
> struct ps_user *u1 = gf (ps1), *u2 = gf (ps2);
> struct passwd *pw1 = u1 ? ps_user_passwd (u1) : 0;
> struct passwd *pw2 = u2 ? ps_user_passwd (u2) : 0;
> @@ -881,7 +885,7 @@ int
> ps_cmp_strings (struct proc_stat *ps1, struct proc_stat *ps2,
> const struct ps_getter *getter)
> {
> - void (*gf)() = G (getter, void);
> + void (*gf)(struct proc_stat *, char **, int *) = G (getter, void
> (*)(struct proc_stat *, char **, int *));
> char *s1, *s2;
> int s1len, s2len;
>
> @@ -896,7 +900,7 @@ int
> ps_cmp_times (struct proc_stat *ps1, struct proc_stat *ps2,
> const struct ps_getter *getter)
> {
> - void (*g)() = G (getter, void);
> + void (*g)(struct proc_stat *, struct timeval *) = G (getter, void
> (*)(struct proc_stat *, struct timeval *));
> struct timeval tv1, tv2;
>
> g (ps1, &tv1);
> @@ -917,7 +921,7 @@ ps_cmp_times (struct proc_stat *ps1, struct proc_stat
> *ps2,
> int
> ps_nominal_zint (struct proc_stat *ps, const struct ps_getter *getter)
> {
> - return G (getter, int)(ps) == 0;
> + return G_PROC_STAT (getter, int)(ps) == 0;
> }
>
> /* Neither is an empty string. */
> @@ -926,7 +930,7 @@ ps_nominal_string (struct proc_stat *ps, const struct
> ps_getter *getter)
> {
> char *str;
> size_t len;
> - G (getter, char *)(ps, &str, &len);
> + G (getter, char *(*)(struct proc_stat *, char **, size_t *))(ps, &str,
> &len);
> return !str || len == 0 || (len == 1 && *str == '-');
> }
>
> @@ -935,7 +939,7 @@ ps_nominal_string (struct proc_stat *ps, const struct
> ps_getter *getter)
> int
> ps_nominal_pri (struct proc_stat *ps, const struct ps_getter *getter)
> {
> - return MACH_PRIORITY_TO_NICE(G (getter, int)(ps)) == 0;
> + return MACH_PRIORITY_TO_NICE(G_PROC_STAT (getter, int)(ps)) == 0;
> }
>
> /* Hurd processes usually have 2 threads; XXX is there someplace we get get
> @@ -943,7 +947,7 @@ ps_nominal_pri (struct proc_stat *ps, const struct
> ps_getter *getter)
> int
> ps_nominal_nth (struct proc_stat *ps, const struct ps_getter *getter)
> {
> - return G (getter, int)(ps) == 2;
> + return G_PROC_STAT (getter, int)(ps) == 2;
> }
>
> static int own_uid = -2; /* -1 means no uid at all. */
> @@ -952,7 +956,7 @@ static int own_uid = -2; /* -1 means no uid at all. */
> int
> ps_nominal_user (struct proc_stat *ps, const struct ps_getter *getter)
> {
> - struct ps_user *u = G (getter, struct ps_user *)(ps);
> + struct ps_user *u = G_PROC_STAT (getter, struct ps_user *)(ps);
> if (own_uid == -2)
> own_uid = getuid ();
> return own_uid >= 0 && u && u->uid == own_uid;
> @@ -962,7 +966,7 @@ ps_nominal_user (struct proc_stat *ps, const struct
> ps_getter *getter)
> int
> ps_nominal_uid (struct proc_stat *ps, const struct ps_getter *getter)
> {
> - uid_t uid = G (getter, uid_t)(ps);
> + uid_t uid = G_PROC_STAT (getter, uid_t)(ps);
> if (own_uid == -2)
> own_uid = getuid ();
> return own_uid >= 0 && uid == own_uid;
> diff --git a/libshouldbeinlibc/idvec-verify.c
> b/libshouldbeinlibc/idvec-verify.c
> index 1c4bc494..64d3c573 100644
> --- a/libshouldbeinlibc/idvec-verify.c
> +++ b/libshouldbeinlibc/idvec-verify.c
> @@ -36,7 +36,17 @@
>
> #define SHADOW_PASSWORD_STRING "x" /* pw_passwd contents for shadow
> passwd */
>
> -static error_t verify_id (); /* FWD */
> +/* Forward declaration */
> +static error_t
> +verify_id (uid_t id, int is_group, int multiple,
> + char *(*getpass_fn) (const char *prompt,
> + uid_t id, int is_group,
> + void *pwd_or_grp, void *hook),
> + void *getpass_hook,
> + error_t (*verify_fn) (const char *password,
> + uid_t id, int is_group,
> + void *pwd_or_grp, void *hook),
> + void *verify_hook);
>
> /* Get a password from the user, returning it in malloced storage. */
> static char *
> diff --git a/libshouldbeinlibc/ugids.h b/libshouldbeinlibc/ugids.h
> index 5d0e1134..37a8668f 100644
> --- a/libshouldbeinlibc/ugids.h
> +++ b/libshouldbeinlibc/ugids.h
> @@ -50,7 +50,7 @@ struct ugids
> #define UGIDS_INIT { IDVEC_INIT, IDVEC_INIT, IDVEC_INIT, IDVEC_INIT,
> IDVEC_INIT, IDVEC_INIT }
>
> /* Return a new ugids structure, or 0 if an allocation error occurs. */
> -struct ugids *make_ugids ();
> +struct ugids *make_ugids (void);
>
> extern void ugids_fini (struct ugids *ugids);
>
> diff --git a/libtrivfs/dyn-classes.c b/libtrivfs/dyn-classes.c
> index edc13a0f..ad72192b 100644
> --- a/libtrivfs/dyn-classes.c
> +++ b/libtrivfs/dyn-classes.c
> @@ -23,7 +23,7 @@
> /* Auxiliary info for each vector element. */
> struct aux
> {
> - void (*free_el)();
> + void (*free_el)(void *);
> unsigned refs;
> };
>
> @@ -63,7 +63,7 @@ static pthread_mutex_t dyn_lock = PTHREAD_MUTEX_INITIALIZER;
> cases: (1) An error is encountered trying to grow one of the vectors, (2)
> when the element is eventually freed by drop_el. */
> static error_t
> -add_el (void *el, void (*free_el)(),
> +add_el (void *el, void (*free_el)(void *),
> void *vec_v, struct aux **aux_vec,
> size_t *sz, size_t *num)
> {
> diff --git a/libtrivfs/trivfs.h b/libtrivfs/trivfs.h
> index 4802f5fc..25b601ff 100644
> --- a/libtrivfs/trivfs.h
> +++ b/libtrivfs/trivfs.h
> @@ -146,11 +146,7 @@ extern void (*trivfs_protid_destroy_hook) (struct
> trivfs_protid *);
> is about to be destroyed. */
> extern void (*trivfs_peropen_destroy_hook) (struct trivfs_peropen *);
>
> -/* If this variable is set, it is called by trivfs_S_fsys_getroot before any
> - other processing takes place; if the return value is EAGAIN, normal trivfs
> - getroot processing continues, otherwise the rpc returns with that return
> - value. */
> -extern error_t (*trivfs_getroot_hook) (struct trivfs_control *cntl,
> +typedef error_t (*trivfs_getroot_hook_fun) (struct trivfs_control *cntl,
> mach_port_t reply_port,
> mach_msg_type_name_t reply_port_type,
> mach_port_t dotdot,
> @@ -159,6 +155,12 @@ extern error_t (*trivfs_getroot_hook) (struct
> trivfs_control *cntl,
> retry_type *do_retry, char *retry_name,
> mach_port_t *node, mach_msg_type_name_t
> *node_type);
>
> +/* If this variable is set, it is called by trivfs_S_fsys_getroot before any
> + other processing takes place; if the return value is EAGAIN, normal trivfs
> + getroot processing continues, otherwise the rpc returns with that return
> + value. */
> +extern trivfs_getroot_hook_fun trivfs_getroot_hook;
> +
> /* Creates a control port for this filesystem and sends it to BOOTSTRAP with
> fsys_startup. CONTROL_CLASS & CONTROL_BUCKET are passed to the ports
> library to create the control port, and PROTID_CLASS & PROTID_BUCKET are
> diff --git a/lwip/port/include/netif/hurdethif.h
> b/lwip/port/include/netif/hurdethif.h
> index 0ecbbd91..d4c70c41 100644
> --- a/lwip/port/include/netif/hurdethif.h
> +++ b/lwip/port/include/netif/hurdethif.h
> @@ -34,6 +34,6 @@ typedef struct ifcommon hurdethif;
> err_t hurdethif_device_init (struct netif *netif);
>
> /* Module initialization */
> -error_t hurdethif_module_init ();
> +error_t hurdethif_module_init (void);
>
> #endif /* LWIP_HURDETHIF_H */
> diff --git a/lwip/port/include/netif/hurdtunif.h
> b/lwip/port/include/netif/hurdtunif.h
> index 43d55348..eef7ecb0 100644
> --- a/lwip/port/include/netif/hurdtunif.h
> +++ b/lwip/port/include/netif/hurdtunif.h
> @@ -60,6 +60,6 @@ extern struct port_class *tunnel_class;
> err_t hurdtunif_device_init (struct netif *netif);
>
> /* Module initialization */
> -error_t hurdtunif_module_init ();
> +error_t hurdtunif_module_init (void);
>
> #endif /* LWIP_HURDTUNIF_H */
> diff --git a/lwip/startup.h b/lwip/startup.h
> index 0c197bf0..75b909c5 100644
> --- a/lwip/startup.h
> +++ b/lwip/startup.h
> @@ -21,6 +21,6 @@
> #ifndef LWIP_STARTUP_H
> #define LWIP_STARTUP_H
>
> -void arrange_shutdown_notification ();
> +void arrange_shutdown_notification (void);
>
> #endif /* LWIP_STARTUP_H */
> diff --git a/mach-defpager/default_pager.c b/mach-defpager/default_pager.c
> index b8158b35..0e7f20ed 100644
> --- a/mach-defpager/default_pager.c
> +++ b/mach-defpager/default_pager.c
> @@ -2762,11 +2762,12 @@ boolean_t
> default_pager_notify_server(mach_msg_header_t *in, mach_msg_header_t *
> return TRUE;
> }
>
> -extern boolean_t seqnos_memory_object_default_server();
> -extern boolean_t default_pager_server();
> -extern boolean_t exc_server();
> -extern boolean_t bootstrap_server();
> -extern void bootstrap_compat();
> +extern boolean_t seqnos_memory_object_default_server(mach_msg_header_t
> *in,
> + mach_msg_header_t *out);
> +extern boolean_t default_pager_server(mach_msg_header_t *in,
> + mach_msg_header_t *out);
> +extern boolean_t exc_server(mach_msg_header_t *in,
> + mach_msg_header_t *out);
>
> mach_msg_size_t default_pager_msg_size_object = 128;
>
> diff --git a/mach-defpager/default_pager.h b/mach-defpager/default_pager.h
> index 9de3b551..97d2a343 100644
> --- a/mach-defpager/default_pager.h
> +++ b/mach-defpager/default_pager.h
> @@ -24,7 +24,10 @@
>
> #include <file_io.h>
>
> -void partition_init();
> +void default_pager(void);
> +void default_pager_initialize(mach_port_t host_port);
> +
> +void partition_init(void);
>
> void create_paging_partition(const char *name, struct file_direct *fdp,
> int isa_file, int linux_signature);
> diff --git a/mach-defpager/main.c b/mach-defpager/main.c
> index f70b42f0..8fbe2adc 100644
> --- a/mach-defpager/main.c
> +++ b/mach-defpager/main.c
> @@ -54,10 +54,6 @@ const char *defpager_server_name = "mach-defpager";
> mach_port_t bootstrap_master_device_port; /* local name */
> mach_port_t bootstrap_master_host_port; /* local name */
>
> -extern void default_pager();
> -extern void default_pager_initialize();
> -extern void default_pager_setup();
> -
> /* initialized in default_pager_initialize */
> extern mach_port_t default_pager_exception_port;
>
> diff --git a/mach-defpager/wiring.h b/mach-defpager/wiring.h
> index e545834d..9d99f33a 100644
> --- a/mach-defpager/wiring.h
> +++ b/mach-defpager/wiring.h
> @@ -29,6 +29,6 @@
> #include <mach.h>
> #include <mach_init.h>
>
> -extern void wire_setup(/* mach_port_t host_priv */);
> -extern void wire_thread();
> -extern void wire_all_memory();
> +extern void wire_setup(mach_port_t host_priv);
> +extern void wire_thread(void);
> +extern void wire_all_memory(void);
> diff --git a/nfs/main.c b/nfs/main.c
> index 9ea6f0bc..3f4365c7 100644
> --- a/nfs/main.c
> +++ b/nfs/main.c
> @@ -39,7 +39,7 @@ int main_udp_socket;
> char *hostname;
> volatile struct mapped_time_value *mapped_time;
>
> -extern char *localhost ();
> +extern char *localhost (void);
>
> /* Default number of times to retry RPCs when mounted soft. */
> #define DEFAULT_SOFT_RETRIES 3
> diff --git a/nfs/mount.c b/nfs/mount.c
> index f8318c27..45a2ad4f 100644
> --- a/nfs/mount.c
> +++ b/nfs/mount.c
> @@ -18,13 +18,11 @@
> along with this program; if not, write to the Free Software
> Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */
>
> -#define malloc a_byte_for_every_bozotic_sun_lossage_and_youd_need_a_lotta_ram
> #include <rpc/types.h>
> #include <rpc/xdr.h>
> +#include <rpc/pmap_prot.h>
> #undef TRUE /* Get rid of sun defs. */
> #undef FALSE
> -#undef malloc
> -#include <rpc/pmap_prot.h>
> #include <errno.h>
> #include <error.h>
> #include <sys/socket.h>
> diff --git a/pfinet/stubs.c b/pfinet/stubs.c
> index cdb8a6de..9affcff5 100644
> --- a/pfinet/stubs.c
> +++ b/pfinet/stubs.c
> @@ -50,7 +50,7 @@ void dev_activate (struct device *)
> __attribute__ ((alias ("dev_init_scheduler")));
> void dev_deactivate (struct device *)
> __attribute__ ((alias ("dev_init_scheduler")));
> -void tcp_ioctl () __attribute__ ((alias ("dev_init_scheduler")));
> +void tcp_ioctl (void) __attribute__ ((alias ("dev_init_scheduler")));
>
> /* This isn't quite a stub, but it's not quite right either. */
> __u32 secure_tcp_sequence_number(__u32 saddr, __u32 daddr,
> diff --git a/pflocal/sock.h b/pflocal/sock.h
> index 64b030e5..c686dec4 100644
> --- a/pflocal/sock.h
> +++ b/pflocal/sock.h
> @@ -184,11 +184,11 @@ error_t addr_create (struct addr **addr);
> error_t addr_get_sock (struct addr *addr, struct sock **sock);
>
> /* Prepare for socket creation. */
> -error_t sock_global_init ();
> +error_t sock_global_init (void);
>
> /* Try to shutdown any active sockets, returning EBUSY if we can't. Assumes
> non-socket RPCS's have been disabled. */
> -error_t sock_global_shutdown ();
> +error_t sock_global_shutdown (void);
>
> /* Mostly here for use by mig-decls.h. */
> extern struct port_class *sock_user_port_class;
> diff --git a/pflocal/sserver.h b/pflocal/sserver.h
> index 3769b7f9..bf668c87 100644
> --- a/pflocal/sserver.h
> +++ b/pflocal/sserver.h
> @@ -25,7 +25,7 @@
> a server if necessary. This routine should be called *after* creating the
> port(s) which need server, as the server routine only operates while there
> are any ports. */
> -void ensure_sock_server ();
> +void ensure_sock_server (void);
>
> /* A port bucket to handle SOCK_USERs and ADDRs. */
> extern struct port_bucket *sock_port_bucket;
> diff --git a/term/devio.c b/term/devio.c
> index 6024acc2..65dea5d5 100644
> --- a/term/devio.c
> +++ b/term/devio.c
> @@ -98,7 +98,7 @@ static int output_stopped;
> static int char_size_mask_xxx = 0xff;
>
> /* Forward */
> -static error_t devio_desert_dtr ();
> +static error_t devio_desert_dtr (void);
>
> static error_t
> devio_init (void)
> diff --git a/term/hurdio.c b/term/hurdio.c
> index 20a939f3..b4ef7c41 100644
> --- a/term/hurdio.c
> +++ b/term/hurdio.c
> @@ -82,7 +82,7 @@ static pthread_cond_t hurdio_assert_dtr_condition;
>
>
> /* Forward */
> -static error_t hurdio_desert_dtr ();
> +static error_t hurdio_desert_dtr (void);
> static void *hurdio_reader_loop (void *arg);
> static void *hurdio_writer_loop (void *arg);
> static error_t hurdio_set_bits (struct termios *state);
> diff --git a/term/term.h b/term/term.h
> index 1e6be5f2..d68598d0 100644
> --- a/term/term.h
> +++ b/term/term.h
> @@ -374,7 +374,7 @@ void report_carrier_error (error_t);
> /* Other decls */
> error_t drop_output (void);
> void send_signal (int);
> -error_t drain_output ();
> +error_t drain_output (void);
> void output_character (int);
> void copy_rawq (void);
> void rescan_inputq (void);
> diff --git a/trans/firmlink.c b/trans/firmlink.c
> index e216146a..5101b1bb 100644
> --- a/trans/firmlink.c
> +++ b/trans/firmlink.c
> @@ -164,7 +164,7 @@ getroot (struct trivfs_control *cntl,
> /* Called by trivfs_S_fsys_getroot before any other processing takes place;
> if the return value is EAGAIN, normal trivfs getroot processing continues,
> otherwise the rpc returns with that return value. */
> -error_t (*trivfs_getroot_hook) () = getroot;
> +trivfs_getroot_hook_fun trivfs_getroot_hook = getroot;
>
> void
> trivfs_modify_stat (struct trivfs_protid *cred, struct stat *st)
> diff --git a/utils/rpcscan.c b/utils/rpcscan.c
> index c5a8addc..dc7dec3c 100644
> --- a/utils/rpcscan.c
> +++ b/utils/rpcscan.c
> @@ -83,7 +83,7 @@ send (mach_msg_id_t msgid)
> return Message.Reply.RetCode;
> }
>
> -typedef error_t (*setup_function_t) ();
> +typedef error_t (*setup_function_t) (void);
> setup_function_t setup_target;
> void *setup_argument;
>
> diff --git a/utils/w.c b/utils/w.c
> index ac5e36f8..d6977c4e 100644
> --- a/utils/w.c
> +++ b/utils/w.c
> @@ -48,7 +48,7 @@
>
> extern char *canon_host (char *host);
> extern char *shared_domain (char *host1, char *host2);
> -extern char *localhost ();
> +extern char *localhost (void);
>
> const char *argp_program_version = STANDARD_HURD_VERSION (w);
>
> @@ -218,7 +218,7 @@ w_get_user (struct proc_stat *ps)
> return hook->user;
> }
> const struct ps_getter w_user_getter =
> -{"user", W_PSTAT_USER, (void (*)())w_get_user};
> +{"user", W_PSTAT_USER, (void (*)(void))w_get_user};
>
> static void
> w_get_host (struct proc_stat *ps, char **host, unsigned *host_len)
> @@ -230,10 +230,6 @@ w_get_host (struct proc_stat *ps, char **host, unsigned
> *host_len)
> const struct ps_getter w_host_getter =
> {"host", W_PSTAT_HOST, w_get_host};
>
> -extern error_t ps_emit_past_time (), ps_emit_string (), ps_emit_minutes ();
> -extern error_t ps_emit_user_name ();
> -extern int ps_cmp_times (), ps_cmp_strings (), ps_cmp_unames ();
> -extern int ps_nominal_string ();
> const struct ps_fmt_spec _w_specs[] =
> {
> {"User", 0, 8, -1,0, &w_uname_getter,ps_emit_string, ps_cmp_strings},
> --
> 2.40.0
>
>
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.