Address several issues from compiling examples

Compiling the code from examples "code-block:: c" along with public
includes and a bsp exposed a few issues amongst a lot of false
positives. Address some of these:

* Terminate struct declarations with ';'. Mainly for pedantic
  correctness.

* Show ptrdiff_t instead of size_t for the sbrk() prototype, matching
  the current argument type in rtems.

* Replace some occurrences of unsigned16 with uint16_t.

* Fix odd type declaration, "uint8_t char*" -> "char*".

* Use appropriate helper to get chain head instead of invalid access to
  nonexistent struct member.

* Remove several excess '\' escapes.

* Use RTEMS_SELF instead of undefined SELF.

* Use rtems_task instead of void for task functions.

* Add missing stack size parameter in task creation.

* Use rtems_interrupt_level instead of undefined rtems_interrupt.

* Correct return value format for rtems_object_id_get_api()
  rtems_object_id_get_index() (enum and uint16_t) and also fix
  corresponding print formatting.

* Correct return value documentation for rtems_object_id_get_class(),
  rtems_object_id_get_node() and rtems_object_id_get_index()
  int -> uint32_t.

* Use RTEMS_SUCCESSFUL instead of undefined RTEMS_STATUS_SUCCESSFUL and
  fix return value variable name in rate monotonic examples.

* Use RTEMS_TIMEOUT instead of undefined TIMEOUT and RTEMS_PERIOD_STATUS
  instead of undefined STATUS.

* Add missing fields to ftpd configuration.

* Correct parameter types in ftpd hook prototype,
  unsigned char * -> void *.

* Fix various code-block:: attributes, c -> makefile and c -> shell.

* Add missing parenthesis in socket buffer memory calculation example.

* Remove typedef in declaration of mq_attr since it is defiend without
  typedef in reality.

* Update siginfo_t declaration to match current reality.

* Update shell user command definition example to include mode, uid and
  gid.
This commit is contained in:
Martin Erik Werner 2019-09-03 01:48:28 +02:00 committed by Chris Johns
parent b836c43f19
commit 2e711f2b4b
20 changed files with 71 additions and 69 deletions

View File

@ -168,7 +168,7 @@ The handler table for the polled mode should look like the following.
.set_attributes = my_driver_set_attributes, .set_attributes = my_driver_set_attributes,
.ioctl = my_driver_ioctl, /* optional, may be NULL */ .ioctl = my_driver_ioctl, /* optional, may be NULL */
.mode = TERMIOS_POLLED .mode = TERMIOS_POLLED
} };
The :c:func:`my_driver_poll_write()` routine is responsible for writing ``n`` The :c:func:`my_driver_poll_write()` routine is responsible for writing ``n``
characters from ``buf`` to the serial device specified by ``base``. characters from ``buf`` to the serial device specified by ``base``.

View File

@ -138,7 +138,7 @@ prototype for this routine:
.. code-block:: c .. code-block:: c
void * sbrk(size_t increment) void * sbrk(ptrdiff_t increment)
The ``increment`` amount is based upon the ``sbrk_amount`` parameter passed to The ``increment`` amount is based upon the ``sbrk_amount`` parameter passed to
the ``bsp_libc_init`` during system initialization. the ``bsp_libc_init`` during system initialization.

View File

@ -67,8 +67,8 @@ table is below:
bool dmv177_icm7170_probe(int minor) bool dmv177_icm7170_probe(int minor)
{ {
volatile unsigned16 *card_resource_reg; volatile uint16_t *card_resource_reg;
card_resource_reg = (volatile unsigned16 *) DMV170_CARD_RESORCE_REG; card_resource_reg = (volatile uint16_t *) DMV170_CARD_RESORCE_REG;
if ( (*card_resource_reg & DMV170_RTC_INST_MASK) == DMV170_RTC_INSTALLED ) if ( (*card_resource_reg & DMV170_RTC_INST_MASK) == DMV170_RTC_INSTALLED )
return TRUE; return TRUE;
return FALSE; return FALSE;

View File

@ -149,7 +149,7 @@ to the control. Consider a user structure and chain control:
typedef struct foo typedef struct foo
{ {
rtems_chain_node node; rtems_chain_node node;
uint8_t char* data; char* data;
} foo; } foo;
rtems_chain_control chain; rtems_chain_control chain;
@ -192,7 +192,7 @@ placed on another chain:
rtems_chain_initialize_empty (out); rtems_chain_initialize_empty (out);
node = chain->first; node = rtems_chain_head (chain);
while (!rtems_chain_is_tail (chain, node)) while (!rtems_chain_is_tail (chain, node))
{ {
bar = (foo*) node; bar = (foo*) node;

View File

@ -3869,7 +3869,7 @@ that the two systems cannot interfere in an undesirable way.
RTEMS_SCHEDULER_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1); RTEMS_SCHEDULER_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
/* Configuration Step 3 - Scheduler Table */ /* Configuration Step 3 - Scheduler Table */
#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \\ #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \ RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
io, \ io, \
rtems_build_name('I', 'O', ' ', ' ') \ rtems_build_name('I', 'O', ' ', ' ') \

View File

@ -190,7 +190,7 @@ overrun.
rtems_cbs_server_id server_id rtems_cbs_server_id server_id
) )
{ {
printk( "Budget overrun, fixing the task\\n" ); printk( "Budget overrun, fixing the task\n" );
return; return;
} }
@ -206,8 +206,8 @@ overrun.
params.budget = 4; params.budget = 4;
rtems_cbs_initialize(); rtems_cbs_initialize();
rtems_cbs_create_server( &params, &overrun_handler, &server_id ) rtems_cbs_create_server( &params, &overrun_handler, &server_id );
rtems_cbs_attach_thread( server_id, SELF ); rtems_cbs_attach_thread( server_id, RTEMS_SELF );
rtems_rate_monotonic_create( argument, &rmid ); rtems_rate_monotonic_create( argument, &rmid );
while ( 1 ) { while ( 1 ) {

View File

@ -158,7 +158,7 @@ INTERNAL_ERROR_THREAD_EXITTED (5)
.. code-block:: c .. code-block:: c
void task( rtems_arg arg ) rtems_task task( rtems_task_argument arg )
{ {
/* Classic API tasks must not return */ /* Classic API tasks must not return */
} }
@ -171,6 +171,7 @@ INTERNAL_ERROR_THREAD_EXITTED (5)
sc = rtems_task_create( sc = rtems_task_create(
rtems_build_name('T', 'A', 'S', 'K'), rtems_build_name('T', 'A', 'S', 'K'),
1, 1,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES, RTEMS_DEFAULT_ATTRIBUTES,
&task_id &task_id
@ -258,7 +259,7 @@ INTERNAL_ERROR_THREAD_QUEUE_ENQUEUE_STICKY_FROM_BAD_STATE (29)
.. code-block:: c .. code-block:: c
void bad( rtems_id timer_id, void *arg ) rtems_timer_service_routine bad( rtems_id timer_id, void *arg )
{ {
rtems_id *sem_id; rtems_id *sem_id;
@ -268,7 +269,7 @@ INTERNAL_ERROR_THREAD_QUEUE_ENQUEUE_STICKY_FROM_BAD_STATE (29)
assert( 0 ); assert( 0 );
} }
void fire_bad_timer( rtems_task_argument arg ) rtems_task fire_bad_timer( rtems_task_argument arg )
{ {
rtems_status_code sc; rtems_status_code sc;
rtems_id sem_id; rtems_id sem_id;

View File

@ -348,7 +348,7 @@ NOTES:
void critical_section( void ) void critical_section( void )
{ {
rtems_interrupt level; rtems_interrupt_level level;
/* /*
* Please note that the rtems_interrupt_disable() is a macro. The * Please note that the rtems_interrupt_disable() is a macro. The
@ -363,7 +363,7 @@ NOTES:
/* Critical section, maskable interrupts are disabled */ /* Critical section, maskable interrupts are disabled */
{ {
rtems_interrupt level2; rtems_interrupt_level level2;
rtems_interrupt_disable( level2 ); rtems_interrupt_disable( level2 );
@ -503,7 +503,7 @@ NOTES:
void local_critical_section( void ) void local_critical_section( void )
{ {
rtems_interrupt level; rtems_interrupt_level level;
/* /*
* Please note that the rtems_interrupt_local_disable() is a macro. * Please note that the rtems_interrupt_local_disable() is a macro.
@ -521,7 +521,7 @@ NOTES:
*/ */
{ {
rtems_interrupt level2; rtems_interrupt_level level2;
rtems_interrupt_local_disable( level2 ); rtems_interrupt_local_disable( level2 );

View File

@ -157,10 +157,10 @@ prototyped as follows:
.. code-block:: c .. code-block:: c
uint32_t rtems_object_id_get_api( rtems_id ); Objects_APIs rtems_object_id_get_api( rtems_id );
uint32_t rtems_object_id_get_class( rtems_id ); uint32_t rtems_object_id_get_class( rtems_id );
uint32_t rtems_object_id_get_node( rtems_id ); uint32_t rtems_object_id_get_node( rtems_id );
uint32_t rtems_object_id_get_index( rtems_id ); uint16_t rtems_object_id_get_index( rtems_id );
An object control block is a data structure defined by RTEMS which contains the An object control block is a data structure defined by RTEMS which contains the
information necessary to manage a particular object type. For efficiency information necessary to manage a particular object type. For efficiency

View File

@ -114,7 +114,7 @@ printing the values.
void printObjectId(rtems_id id) void printObjectId(rtems_id id)
{ {
printf( printf(
"API=%d Class=%d Node=%d Index=%d\n", "API=%d Class=%" PRIu32 " Node=%" PRIu32 " Index=%" PRIu16 "\n",
rtems_object_id_get_api(id), rtems_object_id_get_api(id),
rtems_object_id_get_class(id), rtems_object_id_get_class(id),
rtems_object_id_get_node(id), rtems_object_id_get_node(id),
@ -157,13 +157,14 @@ parts and "pretty-printed."
void prettyPrintObjectId(rtems_id id) void prettyPrintObjectId(rtems_id id)
{ {
int tmpAPI, tmpClass; int tmpAPI;
uint32_t tmpClass;
tmpAPI = rtems_object_id_get_api(id), tmpAPI = rtems_object_id_get_api(id),
tmpClass = rtems_object_id_get_class(id), tmpClass = rtems_object_id_get_class(id),
printf( printf(
"API=%s Class=%s Node=%d Index=%d\n", "API=%s Class=%s Node=%" PRIu32 " Index=%" PRIu16 "\n",
rtems_object_get_api_name(tmpAPI), rtems_object_get_api_name(tmpAPI),
rtems_object_get_api_class_name(tmpAPI, tmpClass), rtems_object_get_api_class_name(tmpAPI, tmpClass),
rtems_object_id_get_node(id), rtems_object_id_get_node(id),
@ -373,8 +374,8 @@ OBJECT_ID_GET_CLASS - Obtain Class from Id
CALLING SEQUENCE: CALLING SEQUENCE:
.. code-block:: c .. code-block:: c
int rtems_object_id_get_class( uint32_t rtems_object_id_get_class(
rtems_id id rtems_id id
); );
DIRECTIVE STATUS CODES: DIRECTIVE STATUS CODES:
@ -403,8 +404,8 @@ OBJECT_ID_GET_NODE - Obtain Node from Id
CALLING SEQUENCE: CALLING SEQUENCE:
.. code-block:: c .. code-block:: c
int rtems_object_id_get_node( uint32_t rtems_object_id_get_node(
rtems_id id rtems_id id
); );
DIRECTIVE STATUS CODES: DIRECTIVE STATUS CODES:
@ -433,8 +434,8 @@ OBJECT_ID_GET_INDEX - Obtain Index from Id
CALLING SEQUENCE: CALLING SEQUENCE:
.. code-block:: c .. code-block:: c
int rtems_object_id_get_index( uint16_t rtems_object_id_get_index(
rtems_id id rtems_id id
); );
DIRECTIVE STATUS CODES: DIRECTIVE STATUS CODES:

View File

@ -522,8 +522,8 @@ executes every 100 clock ticks.
rtems_status_code status; rtems_status_code status;
name = rtems_build_name( 'P', 'E', 'R', 'D' ); name = rtems_build_name( 'P', 'E', 'R', 'D' );
status = rtems_rate_monotonic_create( name, &period ); status = rtems_rate_monotonic_create( name, &period );
if ( status != RTEMS_STATUS_SUCCESSFUL ) { if ( status != RTEMS_SUCCESSFUL ) {
printf( "rtems_monotonic_create failed with status of %d.\n", rc ); printf( "rtems_monotonic_create failed with status of %d.\n", status );
exit( 1 ); exit( 1 );
} }
while ( 1 ) { while ( 1 ) {
@ -533,11 +533,11 @@ executes every 100 clock ticks.
} }
/* missed period so delete period and SELF */ /* missed period so delete period and SELF */
status = rtems_rate_monotonic_delete( period ); status = rtems_rate_monotonic_delete( period );
if ( status != RTEMS_STATUS_SUCCESSFUL ) { if ( status != RTEMS_SUCCESSFUL ) {
printf( "rtems_rate_monotonic_delete failed with status of %d.\n", status ); printf( "rtems_rate_monotonic_delete failed with status of %d.\n", status );
exit( 1 ); exit( 1 );
} }
status = rtems_task_delete( SELF ); /* should not return */ status = rtems_task_delete( RTEMS_SELF ); /* should not return */
printf( "rtems_task_delete returned with status of %d.\n", status ); printf( "rtems_task_delete returned with status of %d.\n", status );
exit( 1 ); exit( 1 );
} }
@ -568,21 +568,20 @@ ticks. The last thirty clock ticks are not used by this task.
{ {
rtems_name name_1, name_2; rtems_name name_1, name_2;
rtems_id period_1, period_2; rtems_id period_1, period_2;
rtems_status_code status;
name_1 = rtems_build_name( 'P', 'E', 'R', '1' ); name_1 = rtems_build_name( 'P', 'E', 'R', '1' );
name_2 = rtems_build_name( 'P', 'E', 'R', '2' ); name_2 = rtems_build_name( 'P', 'E', 'R', '2' );
(void ) rtems_rate_monotonic_create( name_1, &period_1 ); (void ) rtems_rate_monotonic_create( name_1, &period_1 );
(void ) rtems_rate_monotonic_create( name_2, &period_2 ); (void ) rtems_rate_monotonic_create( name_2, &period_2 );
while ( 1 ) { while ( 1 ) {
if ( rtems_rate_monotonic_period( period_1, 100 ) == TIMEOUT ) if ( rtems_rate_monotonic_period( period_1, 100 ) == RTEMS_TIMEOUT )
break; break;
if ( rtems_rate_monotonic_period( period_2, 40 ) == TIMEOUT ) if ( rtems_rate_monotonic_period( period_2, 40 ) == RTEMS_TIMEOUT )
break; break;
/* /*
* Perform first set of actions between clock * Perform first set of actions between clock
* ticks 0 and 39 of every 100 ticks. * ticks 0 and 39 of every 100 ticks.
*/ */
if ( rtems_rate_monotonic_period( period_2, 30 ) == TIMEOUT ) if ( rtems_rate_monotonic_period( period_2, 30 ) == RTEMS_TIMEOUT )
break; break;
/* /*
* Perform second set of actions between clock 40 and 69 * Perform second set of actions between clock 40 and 69
@ -590,14 +589,14 @@ ticks. The last thirty clock ticks are not used by this task.
* *
* Check to make sure we didn't miss the period_2 period. * Check to make sure we didn't miss the period_2 period.
*/ */
if ( rtems_rate_monotonic_period( period_2, STATUS ) == TIMEOUT ) if ( rtems_rate_monotonic_period( period_2, RTEMS_PERIOD_STATUS ) == RTEMS_TIMEOUT )
break; break;
(void) rtems_rate_monotonic_cancel( period_2 ); (void) rtems_rate_monotonic_cancel( period_2 );
} }
/* missed period so delete period and SELF */ /* missed period so delete period and SELF */
(void ) rtems_rate_monotonic_delete( period_1 ); (void ) rtems_rate_monotonic_delete( period_1 );
(void ) rtems_rate_monotonic_delete( period_2 ); (void ) rtems_rate_monotonic_delete( period_2 );
(void ) task_delete( SELF ); (void ) rtems_task_delete( RTEMS_SELF );
} }
The above task creates two rate monotonic periods as part of its The above task creates two rate monotonic periods as part of its

View File

@ -1553,7 +1553,7 @@ EXAMPLE:
#include <rtems.h> #include <rtems.h>
#include <assert.h> #include <assert.h>
void task( rtems_task_argument arg ); rtems_task task( rtems_task_argument arg );
void example( void ) void example( void )
{ {

View File

@ -60,7 +60,13 @@ Example hooks structure and configuration structure folllow.
40, /* FTPD task priority */ 40, /* FTPD task priority */
512*1024, /* Maximum hook 'file' size */ 512*1024, /* Maximum hook 'file' size */
0, /* Use default port */ 0, /* Use default port */
ftp_hooks /* Local ftp hooks */ ftp_hooks, /* Local ftp hooks */
0, /* Use / as root */
1, /* Max. connections */
0, /* Infinite idle timeout */
0, /* Read-write access */
0, /* Ignore login check */
true /* Say hello */
}; };
Specifying 0 for the well-known port causes FTPD to use the UNIX standard FTPD Specifying 0 for the well-known port causes FTPD to use the UNIX standard FTPD
@ -75,7 +81,7 @@ The prototype for the ``untar`` hook (and hooks, in general) is:
.. code-block:: c .. code-block:: c
int Untar_FromMemory(unsigned char *tar_buf, unsigned long size); int Untar_FromMemory(void *tar_buf, size_t size);
An example FTP transcript which exercises this hook is: An example FTP transcript which exercises this hook is:

View File

@ -99,14 +99,14 @@ to be compiled with the appropriate flags. This can be accomplished by adding
is inside the RTEMS source tree or is built using the RTEMS application is inside the RTEMS source tree or is built using the RTEMS application
Makefiles, then adding the following line accomplishes this: Makefiles, then adding the following line accomplishes this:
.. code-block:: c .. code-block:: makefile
DEFINES += -D__INSIDE_RTEMS_BSD_TCPIP_STACK__ DEFINES += -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
This is equivalent to the following list of definitions. Early versions of the This is equivalent to the following list of definitions. Early versions of the
RTEMS BSD network stack required that all of these be defined. RTEMS BSD network stack required that all of these be defined.
.. code-block:: c .. code-block:: makefile
-D_COMPILING_BSD_KERNEL_ -DKERNEL -DINET -DNFS \ -D_COMPILING_BSD_KERNEL_ -DKERNEL -DINET -DNFS \
-DDIAGNOSTIC -DBOOTP_COMPAT -DDIAGNOSTIC -DBOOTP_COMPAT

View File

@ -14,7 +14,7 @@ Including the required managers
The FreeBSD networking code requires several RTEMS managers in the application: The FreeBSD networking code requires several RTEMS managers in the application:
.. code-block:: c .. code-block:: makefile
MANAGERS = io event semaphore MANAGERS = io event semaphore
@ -25,7 +25,7 @@ The networking tasks allocate a lot of memory. For most applications the heap
should be at least 256 kbytes. The amount of memory set aside for the heap can should be at least 256 kbytes. The amount of memory set aside for the heap can
be adjusted by setting the ``CFLAGS_LD`` definition as shown below: be adjusted by setting the ``CFLAGS_LD`` definition as shown below:
.. code-block:: c .. code-block:: makefile
CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0x80000 CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0x80000
@ -210,7 +210,7 @@ the first two entries in this structure.
.. code-block:: c .. code-block:: c
40 * (1024 + sizeof(struct sockaddr_in) 40 * (1024 + sizeof(struct sockaddr_in))
``unsigned long tcp_tx_buf_size`` ``unsigned long tcp_tx_buf_size``
This configuration parameter specifies the maximum amount of buffer memory This configuration parameter specifies the maximum amount of buffer memory

View File

@ -77,7 +77,7 @@ queue.
.. code-block:: c .. code-block:: c
typedef struct mq_attr{ struct mq_attr{
long mq_flags; long mq_flags;
long mq_maxmsg; long mq_maxmsg;
long mq_msgsize; long mq_msgsize;

View File

@ -400,16 +400,12 @@ The prototype of the ``siginfo_t`` structure is the following:
{ {
int si_signo; /* Signal number */ int si_signo; /* Signal number */
int si_code; /* Cause of the signal */ int si_code; /* Cause of the signal */
pid_t si_pid; /* Sending process ID */
uid_t si_uid; /* Real user ID of sending process */
void* si_addr; /* Address of faulting instruction */
int si_status; /* Exit value or signal */
union sigval union sigval
{ {
int sival_int; /* Integer signal value */ int sival_int; /* Integer signal value */
void* sival_ptr; /* Pointer signal value */ void* sival_ptr; /* Pointer signal value */
} si_value; /* Signal value */ } si_value; /* Signal value */
} } siginfo_t;
**NOTES:** **NOTES:**
@ -778,16 +774,12 @@ The prototype of the ``siginfo_t`` structure is the following:
{ {
int si_signo; /* Signal number */ int si_signo; /* Signal number */
int si_code; /* Cause of the signal */ int si_code; /* Cause of the signal */
pid_t si_pid; /* Sending process ID */
uid_t si_uid; /* Real user ID of sending process */
void* si_addr; /* Address of faulting instruction */
int si_status; /* Exit value or signal */
union sigval union sigval
{ {
int sival_int; /* Integer signal value */ int sival_int; /* Integer signal value */
void* sival_ptr; /* Pointer signal value */ void* sival_ptr; /* Pointer signal value */
} si_value; /* Signal value */ } si_value; /* Signal value */
} } siginfo_t;
.. _sigtimedwait: .. _sigtimedwait:
@ -837,7 +829,7 @@ The ``timespec`` structure is defined as follows:
{ {
time_t tv_sec; /* Seconds */ time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */ long tv_nsec; /* Nanoseconds */
} };
**NOTES:** **NOTES:**
@ -895,7 +887,7 @@ The ``sigval`` union is specified as:
{ {
int sival_int; /* Integer signal value */ int sival_int; /* Integer signal value */
void* sival_ptr; /* Pointer signal value */ void* sival_ptr; /* Pointer signal value */
} };
**NOTES:** **NOTES:**

View File

@ -103,12 +103,15 @@ provided an alias for ``usercmd`` named ``userecho``.
return 0; return 0;
} }
rtems_shell_cmd_t Shell_USERCMD_Command = { rtems_shell_cmd_t Shell_USERCMD_Command = {
"usercmd", /* name */ "usercmd", /* name */
"usercmd n1 \[n2 \[n3...]]", /* usage */ "usercmd n1 [n2 [n3...]]", /* usage */
"user", /* topic */ "user", /* topic */
main_usercmd, /* command */ main_usercmd, /* command */
NULL, /* alias */ NULL, /* alias */
NULL /* next */ NULL, /* next */
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, /* mode */
0, /* uid */
0 /* gid */
}; };
rtems_shell_alias_t Shell_USERECHO_Alias = { rtems_shell_alias_t Shell_USERECHO_Alias = {
"usercmd", /* command */ "usercmd", /* command */

View File

@ -100,7 +100,7 @@ NOTES:
EXAMPLES: EXAMPLES:
The following is an example of how to use ``blksync``: The following is an example of how to use ``blksync``:
.. code-block:: c .. code-block:: shell
blksync /dev/hda1 blksync /dev/hda1
@ -1469,7 +1469,7 @@ ln - make links
.. index:: ln .. index:: ln
SYNOPSYS: SYNOPSYS:
.. code-block:: c .. code-block:: shell
ln [-fhinsv] source_file [target_file] ln [-fhinsv] source_file [target_file]
ln [-fhinsv] source_file ... target_dir ln [-fhinsv] source_file ... target_dir
@ -1729,7 +1729,7 @@ mkdir - create a directory
.. index:: mkdir .. index:: mkdir
SYNOPSYS: SYNOPSYS:
.. code-block:: c .. code-block:: shell
mkdir dir [dir1 .. dirN] mkdir dir [dir1 .. dirN]

View File

@ -1030,7 +1030,7 @@ time - time command execution
.. index:: time .. index:: time
SYNOPSYS: SYNOPSYS:
.. code-block:: c .. code-block:: shell
time command [argument ...] time command [argument ...]