/*! print (or return) system information (and details) */ int sys__sysinfo ( void *p ) { char *buffer; size_t buf_size; char **param; /* last param is NULL */ char usage[] = "Usage: sysinfo [threads|memory]"; char look_console[] = "(sysinfo printed on console)"; buffer = *( (char **) p ); p += sizeof (char *); ASSERT_ERRNO_AND_EXIT ( buffer, E_PARAM_NULL ); buf_size = *( (size_t *) p ); p += sizeof (size_t *); param = *( (char ***) p ); if ( param[1] == NULL ) { /* only basic info defined in kernel/startup.c */ extern char system_info[]; if ( strlen ( system_info ) > buf_size ) EXIT ( E_TOO_BIG ); strcpy ( buffer, system_info ); EXIT ( SUCCESS ); } else { /* extended info is requested */ if ( strcmp ( "memory", param[1] ) == 0 ) { k_memory_info (); if ( strlen ( look_console ) > buf_size ) EXIT ( E_TOO_BIG ); strcpy ( buffer, look_console ); EXIT ( SUCCESS ); /* TODO: "memory [segments|modules|***]" */ } else if ( strcmp ( "threads", param[1] ) == 0 ) { k_thread_info (); if ( strlen ( look_console ) > buf_size ) EXIT ( E_TOO_BIG ); strcpy ( buffer, look_console ); EXIT ( SUCCESS ); /* TODO: "thread thr_id" */ } else { if ( strlen ( usage ) > buf_size ) EXIT ( E_TOO_BIG ); strcpy ( buffer, usage ); EXIT ( E_DONT_EXIST ); } } }
/*! printf (or return) system information (and details) */ int sys__sysinfo ( char *buffer, size_t buf_size ) { /* only basic info defined in kernel/startup.c */ extern char system_info[]; SYS_ENTRY(); ASSERT_ERRNO_AND_EXIT ( buffer, EINVAL ); if ( strlen ( system_info ) > buf_size ) SYS_EXIT ( ENOMEM, EXIT_FAILURE ); strcpy ( buffer, system_info ); k_memory_info (); SYS_EXIT ( EXIT_SUCCESS, EXIT_SUCCESS ); }
/*! System information (and details) */ int sys__sysinfo ( char *buffer, size_t buf_size ) { extern char system_info[]; ASSERT_ERRNO_AND_EXIT ( buffer, E_PARAM_NULL ); if ( strlen ( system_info ) > buf_size ) EXIT ( E_TOO_BIG ); strcpy ( buffer, system_info ); #if 1 k_memory_info (); #endif EXIT ( SUCCESS ); }
/*! printf (or return) system information (and details) */ int sys__sysinfo ( void *p ) { char *buffer; size_t buf_size; char **param; /* last param is NULL */ char *param1; /* *param0; */ char usage[] = "Usage: sysinfo [programs|threads|memory]"; char look_console[] = "(sysinfo printed on console)"; buffer = *( (char **) p ); p += sizeof (char *); ASSERT_ERRNO_AND_EXIT ( buffer, EINVAL ); buffer = U2K_GET_ADR ( buffer, kthread_get_process (NULL) ); buf_size = *( (size_t *) p ); p += sizeof (size_t *); param = *( (char ***) p ); param = U2K_GET_ADR ( param, kthread_get_process (NULL) ); /* param0 = U2K_GET_ADR ( param[0], kthread_get_process (NULL) ); -- param0 should be "sysinfo" so actualy its not required */ if ( param[1] == NULL ) { /* only basic info defined in kernel/startup.c */ extern char system_info[]; if ( strlen ( system_info ) > buf_size ) EXIT ( ENOMEM ); strcpy ( buffer, system_info ); EXIT ( EXIT_SUCCESS ); } else { param1 = U2K_GET_ADR ( param[1], kthread_get_process (NULL) ); /* extended info is requested */ if ( strcmp ( "programs", param1 ) == 0 ) { EXIT ( k_list_programs ( buffer, buf_size ) ); /* TODO: "program prog_name" => print help_msg */ } else if ( strcmp ( "memory", param1 ) == 0 ) { k_memory_info (); if ( strlen ( look_console ) > buf_size ) EXIT ( ENOMEM ); strcpy ( buffer, look_console ); EXIT ( EXIT_SUCCESS ); /* TODO: "memory [segments|modules|***]" */ } else if ( strcmp ( "threads", param1 ) == 0 ) { kthread_info (); if ( strlen ( look_console ) > buf_size ) EXIT ( ENOMEM ); strcpy ( buffer, look_console ); EXIT ( EXIT_SUCCESS ); /* TODO: "thread id" */ } else { if ( strlen ( usage ) > buf_size ) EXIT ( ENOMEM ); strcpy ( buffer, usage ); EXIT ( ESRCH ); } } }