Esempio n. 1
0
/*! 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 );
		}
	}
}
Esempio n. 2
0
/*! 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 );
}
Esempio n. 4
0
/*! 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 );
		}
	}
}