diff --git a/ChangeLog b/ChangeLog index d0f13b9b..83eb5a7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 1999-10-24 Martin Baulig + * features.def: Use `retval' for the default retval. + + * include/glibtop/command.h (glibtop_command_h): Added + `int *retval_ptr' parameter to return the retval from the + sysdeps functions. + * include/glibtop/*.h (glibtop_get_*, glibtop_init*): Changed the return value of all `glibtop_get__* ()' and all `glibtop_init__* ()' functions from void to int. diff --git a/features.def b/features.def index c08df124..f9b55bae 100644 --- a/features.def +++ b/features.def @@ -1,22 +1,22 @@ -int|cpu|ulong(total,user,nice,sys,idle,frequency,xcpu_total[GLIBTOP_NCPU],xcpu_user[GLIBTOP_NCPU],xcpu_nice[GLIBTOP_NCPU],xcpu_sys[GLIBTOP_NCPU],xcpu_idle[GLIBTOP_NCPU],xcpu_flags) -int|mem|ulong(total,used,free,shared,buffer,cached,user,locked) -int|swap|ulong(total,used,free,pagein,pageout) -int|uptime|double(uptime,idletime):ulong(boot_time) -int|loadavg|double(loadavg[3]):ulong(nr_running,nr_tasks,last_pid) -int|shm_limits|ulong(shmmax,shmmin,shmmni,shmseg,shmall) -int|msg_limits|ulong(msgpool,msgmap,msgmax,msgmnb,msgmni,msgssz,msgtql) -int|sem_limits|ulong(semmap,semmni,semmns,semmnu,semmsl,semopm,semume,semusz,semvmx,semaem) +retval|cpu|ulong(total,user,nice,sys,idle,frequency,xcpu_total[GLIBTOP_NCPU],xcpu_user[GLIBTOP_NCPU],xcpu_nice[GLIBTOP_NCPU],xcpu_sys[GLIBTOP_NCPU],xcpu_idle[GLIBTOP_NCPU],xcpu_flags) +retval|mem|ulong(total,used,free,shared,buffer,cached,user,locked) +retval|swap|ulong(total,used,free,pagein,pageout) +retval|uptime|double(uptime,idletime):ulong(boot_time) +retval|loadavg|double(loadavg[3]):ulong(nr_running,nr_tasks,last_pid) +retval|shm_limits|ulong(shmmax,shmmin,shmmni,shmseg,shmall) +retval|msg_limits|ulong(msgpool,msgmap,msgmax,msgmnb,msgmni,msgssz,msgtql) +retval|sem_limits|ulong(semmap,semmni,semmns,semmnu,semmsl,semopm,semume,semusz,semvmx,semaem) unsigned *|proclist|ulong(number,size,total)|long(which,arg) -int|proc_state|str(cmd):unsigned(state):ulong(uid,gid,ruid,rgid,has_cpu,processor,last_processor)|pid_t(pid) -int|proc_uid|long(uid,euid,gid,egid,suid,sgid,fsuid,fsgid,pid,ppid,pgrp,session,tty,tpgid,priority,nice,ngroups,groups[GLIBTOP_MAX_GROUPS])|pid_t(pid) -int|proc_mem|long(size,vsize,resident,share,rss,rss_rlim)|pid_t(pid) -int|proc_time|long(start_time,rtime,utime,stime,cutime,cstime,timeout,it_real_value,frequency,xcpu_utime[GLIBTOP_NCPU],xcpu_stime[GLIBTOP_NCPU],xcpu_flags)|pid_t(pid) -int|proc_signal|ulong(signal[2],blocked[2],sigignore[2],sigcatch[2])|pid_t(pid) -int|proc_kernel|ulong(k_flags,min_flt,maj_flt,cmin_flt,cmaj_flt,kstk_esp,kstk_eip,nwchan):str(wchan)|pid_t(pid) -int|proc_segment|ulong(text_rss,shlib_rss,data_rss,stack_rss,dirty_size,start_code,end_code,start_data,end_data,start_brk,end_brk,start_stack,start_mmap,arg_start,arg_end,env_start,env_end)|pid_t(pid) +retval|proc_state|str(cmd):unsigned(state):ulong(uid,gid,ruid,rgid,has_cpu,processor,last_processor)|pid_t(pid) +retval|proc_uid|long(uid,euid,gid,egid,suid,sgid,fsuid,fsgid,pid,ppid,pgrp,session,tty,tpgid,priority,nice,ngroups,groups[GLIBTOP_MAX_GROUPS])|pid_t(pid) +retval|proc_mem|long(size,vsize,resident,share,rss,rss_rlim)|pid_t(pid) +retval|proc_time|long(start_time,rtime,utime,stime,cutime,cstime,timeout,it_real_value,frequency,xcpu_utime[GLIBTOP_NCPU],xcpu_stime[GLIBTOP_NCPU],xcpu_flags)|pid_t(pid) +retval|proc_signal|ulong(signal[2],blocked[2],sigignore[2],sigcatch[2])|pid_t(pid) +retval|proc_kernel|ulong(k_flags,min_flt,maj_flt,cmin_flt,cmaj_flt,kstk_esp,kstk_eip,nwchan):str(wchan)|pid_t(pid) +retval|proc_segment|ulong(text_rss,shlib_rss,data_rss,stack_rss,dirty_size,start_code,end_code,start_data,end_data,start_brk,end_brk,start_stack,start_mmap,arg_start,arg_end,env_start,env_end)|pid_t(pid) char *|proc_args|ulong(size)|pid_t(pid):unsigned(max_len) glibtop_map_entry *|proc_map|ulong(number,size,total)|pid_t(pid) glibtop_mountentry *|@mountlist|ulong(number,size,total)|int(all_fs) -int|@fsusage|ulong(blocks,bfree,bavail,files,ffree)|string|mount_dir -int|netload|ulong(if_flags,mtu,subnet,address,packets_in,packets_out,packets_total,bytes_in,bytes_out,bytes_total,errors_in,errors_out,errors_total,collisions)|string|interface -int|ppp|ulong(state,bytes_in,bytes_out)|ushort(device) +retval|@fsusage|ulong(blocks,bfree,bavail,files,ffree)|string|mount_dir +retval|netload|ulong(if_flags,mtu,subnet,address,packets_in,packets_out,packets_total,bytes_in,bytes_out,bytes_total,errors_in,errors_out,errors_total,collisions)|string|interface +retval|ppp|ulong(state,bytes_in,bytes_out)|ushort(device) diff --git a/include/glibtop/command.h b/include/glibtop/command.h index 5434cc78..d3941439 100644 --- a/include/glibtop/command.h +++ b/include/glibtop/command.h @@ -93,7 +93,8 @@ struct _glibtop_response void * glibtop_call_l (glibtop *server, unsigned command, size_t send_size, - const void *send_buf, size_t recv_size, void *recv_buf); + const void *send_buf, size_t recv_size, void *recv_buf, + int *retval_ptr); void * glibtop_call_s (glibtop *server, unsigned command, size_t send_size, diff --git a/lib/close.c b/lib/close.c index 2d851c70..a0c3b619 100644 --- a/lib/close.c +++ b/lib/close.c @@ -35,7 +35,7 @@ glibtop_close_r (glibtop *server) case GLIBTOP_METHOD_UNIX: case GLIBTOP_METHOD_INET: glibtop_call_l (server, GLIBTOP_CMND_QUIT, - 0, NULL, 0, NULL); + 0, NULL, 0, NULL, NULL); if (close (server->socket)) glibtop_warn_io ("close"); diff --git a/lib/command.c b/lib/command.c index be59c38d..11ceb722 100644 --- a/lib/command.c +++ b/lib/command.c @@ -30,10 +30,12 @@ void * glibtop_call_l (glibtop *server, unsigned command, size_t send_size, - const void *send_buf, size_t recv_size, void *recv_buf) + const void *send_buf, size_t recv_size, void *recv_buf, + int *retval_ptr) { glibtop_command cmnd; glibtop_response response; + int retval; glibtop_init_r (&server, 0, 0); @@ -61,6 +63,10 @@ glibtop_call_l (glibtop *server, unsigned command, size_t send_size, response.offset, response.data_size); #endif + glibtop_read_l (server, sizeof (int), &retval); + if (retval_ptr) + *retval_ptr = retval; + if (recv_buf) memcpy (recv_buf, ((char *) &response) + response.offset, recv_size); diff --git a/lib/lib.pl b/lib/lib.pl index c854ab9f..18776f94 100755 --- a/lib/lib.pl +++ b/lib/lib.pl @@ -68,6 +68,7 @@ $convert{'long'} = 'int64_t'; $convert{'ulong'} = 'u_int64_t'; $convert{'pid_t'} = 'pid_t'; $convert{'int'} = 'int'; +$convert{'retval'} = 'int'; $convert{'ushort'} = 'unsigned short'; $convert{'unsigned'} = 'unsigned'; @@ -91,16 +92,31 @@ sub output { $space = $feature; $space =~ s/./ /g; - print $retval; - if ($retval !~ /^void$/) { - $prefix = 'retval = '; - $prefix_space = ' '; + if ($retval eq 'retval') { + $retval_param = '&retval'; + $call_prefix = ''; + $call_prefix_space = ''; + $prefix = 'retval = '; + $prefix_space = ' '; + $retval = 'int'; + } + elsif ($retval !~ /^void$/) { + $retval_param = 'NULL'; + $prefix = 'retval = '; + $prefix_space = ' '; + $call_prefix = 'retval = '; + $call_prefix_space = ' '; } else { - $prefix = ''; - $prefix_space = ''; + $retval_param = 'NULL'; + $call_prefix = ''; + $call_prefix_space = ''; + $prefix = ''; + $prefix_space = ''; } + print $retval; + if ($param_def eq 'string') { $call_param = ', ' . $line_fields[5]; $param_decl = ",\n " . $space . ' const char *' . @@ -185,13 +201,14 @@ sub output { &toupper($feature) . ')))'; print "\t{"; - print "\t\t" . $prefix . 'glibtop_call_l (server, GLIBTOP_CMND_' . + print "\t\t" . $call_prefix . 'glibtop_call_l (server, GLIBTOP_CMND_' . &toupper($feature) . ','; - print "\t\t\t\t" . $prefix_space . 'send_size, send_ptr,'; - print "\t\t\t\t" . $prefix_space . 'sizeof (glibtop_' . $feature . + print "\t\t\t\t" . $call_prefix_space . 'send_size, send_ptr,'; + print "\t\t\t\t" . $call_prefix_space . 'sizeof (glibtop_' . $feature . - '), buf);'; + '), buf,'; + print "\t\t\t\t" . $call_prefix_space . $retval_param . ');'; print "\t} else {"; diff --git a/lib/open.c b/lib/open.c index abc5724f..e6046a74 100644 --- a/lib/open.c +++ b/lib/open.c @@ -159,7 +159,8 @@ glibtop_open_l (glibtop *server, const char *program_name, /* Now ask it for its features. */ glibtop_call_l (server, GLIBTOP_CMND_SYSDEPS, 0, NULL, - sizeof (glibtop_sysdeps), &sysdeps); + sizeof (glibtop_sysdeps), &sysdeps, + NULL); server->features = sysdeps.features; diff --git a/sysdeps/guile/guile.pl b/sysdeps/guile/guile.pl index 7a272ebc..a5efefe0 100644 --- a/sysdeps/guile/guile.pl +++ b/sysdeps/guile/guile.pl @@ -81,6 +81,10 @@ sub make_output { $total_nr_params = 0; + if ($retval eq 'retval') { + $retval = 'int'; + } + if ($param_def eq 'string') { $call_param = ', gh_scm2newstr( ' . $line_fields[5] . ', NULL)'; $param_decl = 'SCM ' . $line_fields[5];