kernel-doc from all-in-a-tumble.[ch]

Below you find the reST markup, generated from kernel-doc comments of the example files source all-in-a-tumble.h and source all-in-a-tumble.c. This markup will be produced by the kernel-doc parser and inserted in the document by using the following directives:

.. kernel-doc::  ./all-in-a-tumble.c
   :module: foo

.. kernel-doc::  ./all-in-a-tumble.h
   :module: foo

The option :module: is optional, to find out why we use this option here, see kernel-doc options.

kernel-doc from all-in-a-tumble.h

  1.. c:namespace-push:: foo
  2
  3.. _`foo.about-examples`:
  4
  5About Examples
  6==============
  7
  8The files :ref:`all-in-a-tumble.c-src` and :ref:`all-in-a-tumble.h-src` are
  9including all examples of the :ref:`linuxdoc-howto` documentation.  These
 10files are also used as a test of the kernel-doc parser, to see how kernel-doc
 11content will be rendered and where the parser might fail.
 12
 13And ... The content itself is nonsense / don’t look to close ;-)
 14
 15.. _`foo.callback`:
 16
 17callback
 18========
 19
 20.. c:function:: void callback(void (*fct_ptr)(void *))
 21
 22    Callback function with a function pointer argument
 23
 24    :param fct\_ptr:
 25        Function to call.
 26    :type fct\_ptr: void (\*)(void \*)
 27
 28.. _`foo.trace_block_touch_buffer`:
 29
 30trace_block_touch_buffer
 31========================
 32
 33.. c:function:: void trace_block_touch_buffer(struct buffer_head *bh)
 34
 35    mark a buffer accessed
 36
 37    :param bh:
 38        buffer_head being touched
 39    :type bh: struct buffer\_head \*
 40
 41.. _`foo.trace_block_touch_buffer.description`:
 42
 43Description
 44-----------
 45
 46Called from \ :c:func:`touch_buffer`\ .
 47
 48.. _`foo.trace_block_dirty_buffer`:
 49
 50trace_block_dirty_buffer
 51========================
 52
 53.. c:function:: void trace_block_dirty_buffer(struct buffer_head *bh)
 54
 55    mark a buffer dirty
 56
 57    :param bh:
 58        buffer_head being dirtied
 59    :type bh: struct buffer\_head \*
 60
 61.. _`foo.trace_block_dirty_buffer.description`:
 62
 63Description
 64-----------
 65
 66Called from \ :c:func:`mark_buffer_dirty`\ .
 67
 68.. _`foo.theory-of-operation`:
 69
 70Theory of Operation
 71===================
 72
 73The whizbang foobar is a dilly of a gizmo.  It can do whatever you
 74want it to do, at any time.  It reads your mind.  Here's how it works.
 75
 76foo bar splat
 77-------------
 78
 79The only drawback to this gizmo is that it can sometimes damage hardware,
 80software, or its subject(s).
 81
 82.. _`foo.multiple-doc-sections`:
 83
 84multiple DOC sections
 85=====================
 86
 87It's not recommended to place more than one "DOC:" section in the same
 88comment block. To insert a new "DOC:" section, create a new comment block and
 89to create a sub-section use the reST markup for headings, see documentation
 90of function \ :c:func:`rst_mode`\ 
 91
 92.. _`foo.lorem-ipsum`:
 93
 94lorem ipsum
 95===========
 96
 97Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor
 98incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
 99nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi
100consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore
101eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident,
102sunt in culpa qui officia deserunt mollit anim id est laborum.
103
104.. _`foo.my_struct`:
105
106struct my_struct
107================
108
109.. c:struct:: my_struct
110
111    a struct with nested unions and structs
112
113.. _`foo.my_struct.definition`:
114
115Definition
116----------
117
118.. code-block:: c
119
120    struct my_struct {
121        union {
122            struct {
123                char arg1 : 1;
124                char arg2 : 3;
125            } ;
126            struct {
127                int arg1b;
128                int arg2b;
129            } ;
130            struct {
131                void *arg3;
132                int arg4;
133                int (*f1)(char foo, int bar);
134            } ;
135        } ;
136        union {
137            struct {
138                int arg1;
139                int arg2;
140            } st1;
141            struct {
142                void *arg1;
143                int arg2;
144                int (*f2)(char foo, int bar);
145            } st2, st3;
146            int (*f3)(char foo, int bar);
147        } bar;
148        enum {
149            FOO,
150            BAR,
151        } undoc_public;
152    }
153
154.. _`foo.my_struct.members`:
155
156Members
157-------
158
159{unnamed_union}
160    anonymous
161
162{unnamed_struct}
163    anonymous
164
165arg1
166    first argument of anonymous union/anonymous struct
167    lorem ipsum ...
168
169arg2
170    second argument of anonymous union/anonymous struct
171
172{unnamed_struct}
173    anonymous
174
175arg1b
176    first argument of anonymous union/anonymous struct
177
178arg2b
179    second argument of anonymous union/anonymous struct
180
181{unnamed_struct}
182    anonymous
183
184arg3
185    third argument of anonymous union/anonymous struct
186
187arg4
188    fourth argument of anonymous union/anonymous struct
189
190f1
191    nested function on anonimous union/struct
192
193bar
194    non-anonymous union
195
196bar.st1
197    struct st1 inside \ ``bar``\ 
198
199bar.st1.arg1
200    first argument of struct st1 on union bar
201
202bar.st1.arg2
203    second argument of struct st1 on union bar
204
205bar.st2
206    struct st2 inside \ ``bar``\ 
207
208bar.st2.arg1
209    first argument of struct st2 on union bar
210
211bar.st2.arg2
212    second argument of struct st2 on union bar
213
214bar.st3
215    struct st3 inside \ ``bar``\ 
216
217bar.st3.arg2
218    second argument of struct st3 on union bar
219
220bar.st2.f2
221    nested function on named union/struct
222
223undoc_public
224    *undescribed*
225
226.. _`foo.my_long_struct`:
227
228struct my_long_struct
229=====================
230
231.. c:struct:: my_long_struct
232
233    short description with \ :c:type:`my_struct->a <my_struct>`\  and \ :c:type:`my_struct->b <my_struct>`\ 
234
235.. _`foo.my_long_struct.definition`:
236
237Definition
238----------
239
240.. code-block:: c
241
242    struct my_long_struct {
243        int foo;
244        int bar;
245        int baz;
246        union {
247            int foobar;
248        } ;
249        struct {
250            int barbar;
251        } bar2;
252    }
253
254.. _`foo.my_long_struct.members`:
255
256Members
257-------
258
259foo
260    The Foo member.
261
262bar
263    The Bar member,
264    lorem ipsum ..
265
266baz
267    The Baz member,
268    lorem ipsum ..
269
270    Here, the member description may contain several paragraphs.
271
272{unnamed_union}
273    anonymous
274
275foobar
276    Single line description.
277
278bar2
279    Description for struct \ ``bar2``\  inside \ ``my_long_struct``\ 
280
281bar2.barbar
282    Description for \ ``barbar``\  inside \ ``my_long_struct.bar2``\ 
283
284.. _`foo.my_long_struct.description`:
285
286Description
287-----------
288
289Longer description
290
291.. _`foo.my_union`:
292
293union my_union
294==============
295
296.. c:union:: my_union
297
298    short description
299
300.. _`foo.my_union.definition`:
301
302Definition
303----------
304
305.. code-block:: c
306
307    union my_union {
308        int a;
309        int b;
310    }
311
312.. _`foo.my_union.members`:
313
314Members
315-------
316
317a
318    first member
319
320b
321    second member
322
323.. _`foo.my_union.description`:
324
325Description
326-----------
327
328Longer description
329
330.. _`foo.my_enum`:
331
332enum my_enum
333============
334
335.. c:enum:: my_enum
336
337    log level
338
339.. _`foo.my_enum.definition`:
340
341Definition
342----------
343
344.. code-block:: c
345
346    enum my_enum {
347        QUIET,
348        INFO,
349        WARN,
350        DEBUG
351    };
352
353.. _`foo.my_enum.constants`:
354
355Constants
356---------
357
358QUIET
359    logs nothing
360
361INFO
362    logs info messages
363
364WARN
365    logs warn and info messages
366
367DEBUG
368    logs debug, warn and info messages
369
370.. _`foo.my_typedef`:
371
372typedef my_typedef
373==================
374
375.. c:type:: my_typedef
376
377    useless typdef of int
378
379.. _`foo.rst_mode`:
380
381rst_mode
382========
383
384.. c:function:: int rst_mode(int a, char *b)
385
386    dummy to demonstrate reST & kernel-doc markup in comments
387
388    :param a:
389        first argument
390    :type a: int
391
392    :param b:
393        second argument
394        Context: :c:func:`in_gizmo_mode`.
395    :type b: char \*
396
397.. _`foo.rst_mode.description`:
398
399Description
400-----------
401
402Long description. This function has two integer arguments. The first is
403``parameter_a`` and the second is ``parameter_b``.
404
405As long as the reST / sphinx-doc toolchain uses `intersphinx
406<http://www.sphinx-doc.org/en/stable/ext/intersphinx.html>`__ you can refer
407definitions *outside* like :c:type:`struct media_device <media_device>`.  If
408the description of ``media_device`` struct is found in any of the intersphinx
409locations, a hyperref to this target is generated a build time.
410
411.. _`foo.rst_mode.example`:
412
413Example
414-------
415
416.. code-block:: c
417
418    int main() {
419      printf("Hello World\n");
420      return 0;
421    }
422
423
424.. _`foo.rst_mode.return`:
425
426Return
427------
428
429Sum of ``parameter_a`` and the second is ``parameter_b``.
430
431.. _`foo.rst_mode.highlighting`:
432
433highlighting
434------------
435
436The highlight pattern, are non regular reST markups. They are only available
437within kernel-doc comments, helping C developers to write short and compact
438documentation.
439
440- \ :c:func:`user_function`\  : function
441- \ ``a``\  : name of a parameter
442- \ :c:type:`struct my_struct <my_struct>`\  : name of a structure (including the word struct)
443- \ :c:type:`union my_union <my_union>`\  : name of a union
444- \ :c:type:`my_struct->a <my_struct>`\  or \ :c:type:`my_struct.b <my_struct>`\  -  member of a struct or union.
445- \ :c:type:`enum my_enum <my_enum>`\  : name of a enum
446- \ :c:type:`typedef my_typedef <my_typedef>`\  : name of a typedef
447- \ ``CONST``\  : name of a constant.
448- \ ``$ENVVAR``\  : environmental variable
449
450The kernel-doc parser translates the pattern above to the corresponding reST
451markups. You don't have to use the *highlight* pattern, if you prefer *pure*
452reST, use the reST markup.
453
454- :c:func:`user_function` : function
455- ``a`` : name of a parameter
456- :c:type:`struct my_struct <my_struct>` : name of a structure (including the word struct)
457- :c:type:`union my_union <my_union>` : name of a union
458- :c:type:`my_struct->a <my_struct>` or :c:type:`my_struct.b <my_struct>` -  member of a struct or union.
459- :c:type:`enum my_enum <my_enum>` : name of a enum
460- :c:type:`typedef my_typedef <my_typedef>` : name of a typedef
461- ``CONST`` : name of a constant.
462- ``$ENVVAR`` : environmental variable
463
464Since the prefixes ``$...``, ``&...`` and ``@...`` are used to markup the
465highlight pattern, you have to escape them in other uses: $lorem, &lorem,
466%lorem and @lorem. To esacpe from function highlighting, use lorem().
467
468.. _`foo.rst_mode.parser-mode`:
469
470Parser Mode
471-----------
472
473This is an example with activated reST additions, in this section you will
474find some common inline markups.
475
476Within the *reST mode* the kernel-doc parser pass through all markups to the
477reST toolchain, except the *vintage highlighting* but including any
478whitespace. With this, the full reST markup is available in the comments.
479
480This is a link to the `Linux kernel source tree
481<https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/>`_.
482
483This description is only to show some reST inline markups like *emphasise*
484and **emphasis strong**. The following is a demo of a reST list markup:
485
486.. _`foo.rst_mode.definition-list`:
487
488Definition list
489---------------
490
491:def1: lorem
492:def2: ipsum
493
494.. _`foo.rst_mode.ordered-list`:
495
496Ordered List
497------------
498
499- item one
500- item two
501- item three with
502  a linebreak
503
504.. _`foo.rst_mode.literal-blocks`:
505
506Literal blocks
507--------------
508
509The next example shows a literal block::
510
511    +------+          +------+
512    |\     |\        /|     /|
513    | +----+-+      +-+----+ |
514    | |    | |      | |    | |
515    +-+----+ |      | +----+-+
516     \|     \|      |/     |/
517      +------+      +------+
518       foo()         bar()
519
520.. _`foo.rst_mode.highlighted-code-blocks`:
521
522Highlighted code blocks
523-----------------------
524
525The next example shows a code block, with highlighting C syntax in the
526output.
527
528.. code-block:: c
529
530    // Hello World program
531    #include<stdio.h>
532    int main()
533    {
534       printf("Hello World");
535    }
536
537.. _`foo.rst_mode.rest-sectioning`:
538
539reST sectioning
540---------------
541
542
543colon markup: sectioning by colon markup in reST mode is less ugly. ;-)
544
545A kernel-doc section like *this* section is translated into a reST
546*subsection*. This means, you can only use the following *sub-levels* within a
547kernel-doc section.
548
549a subsubsection
550^^^^^^^^^^^^^^^
551
552lorem ipsum
553
554a paragraph
555"""""""""""
556
557lorem ipsum
558
559.. _`foo.vintage`:
560
561vintage
562=======
563
564.. c:function:: int vintage(int parameter_a, char parameter_b)
565
566    short description of this function
567
568    :param parameter\_a:
569        first argument
570    :type parameter\_a: int
571
572    :param parameter\_b:
573        second argument
574    :type parameter\_b: char
575
576.. _`foo.vintage.context`:
577
578Context
579-------
580
581\ :c:func:`in_gizmo_mode`\ .
582
583.. _`foo.vintage.description`:
584
585Description
586-----------
587
588This is a test of a typical markup from \*vintage\* kernel-doc.  Don't look to
589close here, it is only for testing some kernel-doc parser stuff.
590
591Long description. This function has two integer arguments. The first is
592\ ``parameter_a``\  and the second is \ ``parameter_b``\ .
593
594.. _`foo.vintage.example`:
595
596Example
597-------
598
599.. code-block:: c
600
601    user_function(22);
602
603
604.. _`foo.vintage.return`:
605
606Return
607------
608
609Sum of \ ``parameter_a``\  and \ ``parameter_b``\ .
610
611.. _`foo.vintage.highlighting`:
612
613highlighting
614------------
615
616
617- \ :c:func:`vintage`\     : function
618- \ ``parameter_a``\  : name of a parameter
619- \ ``$ENVVAR``\       : environmental variable
620- \ :c:type:`struct my_struct <my_struct>`\    : name of a structure (up to two words including \`\`struct\`\`)
621- \ ``CONST``\        : name of a constant.
622
623.. _`foo.vintage.parser-mode`:
624
625Parser Mode
626-----------
627
628\*vintage\* kernel-doc mode
629
630Within the \*vintage kernel-doc mode\* ignores any whitespace or inline
631markup.
632
633- Inline markup like \*emphasis\* or \*\*emphasis strong\*\*
634- Literals and/or block indent:
635
636a + b
637
638In kernel-doc \*vintage\* mode, there are no special block or inline markups
639available. Markups like the one above result in ambiguous reST markup which
640could produce error messages in the subsequently sphinx-build
641process. Unexpected outputs are mostly the result.
642
643This is a link https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
644to the Linux kernel source tree
645
646.. _`foo.vintage.colon-markup`:
647
648colon markup
649------------
650
651sectioning by colon markup in vintage mode is partial ugly. ;-)
652
653.. _`foo.nfp_flower_priv`:
654
655struct nfp_flower_priv
656======================
657
658.. c:struct:: nfp_flower_priv
659
660    Flower APP per-vNIC priv data
661
662.. _`foo.nfp_flower_priv.definition`:
663
664Definition
665----------
666
667.. code-block:: c
668
669    struct nfp_flower_priv {
670        struct nfp_net *nn;
671        u32 mask_id_seed;
672        u64 flower_version;
673        struct nfp_fl_mask_id mask_ids;
674        DECLARE_HASHTABLE(mask_table, NFP_FLOWER_MASK_HASH_BITS);
675        DECLARE_HASHTABLE(flow_table, NFP_FLOWER_HASH_BITS);
676    }
677
678.. _`foo.nfp_flower_priv.members`:
679
680Members
681-------
682
683nn
684    Pointer to vNIC
685
686mask_id_seed
687    Seed used for mask hash table
688
689flower_version
690    HW version of flower
691
692mask_ids
693    List of free mask ids
694
695mask_table
696    Hash table used to store masks
697
698flow_table
699    Hash table used to store flower rules
700
701.. _`foo.foo`:
702
703enum foo
704========
705
706.. c:enum:: foo
707
708    foo
709
710.. _`foo.foo.definition`:
711
712Definition
713----------
714
715.. code-block:: c
716
717    enum foo {
718        F1,
719        F2
720    };
721
722.. _`foo.foo.constants`:
723
724Constants
725---------
726
727F1
728    f1
729
730F2
731    f2
732
733.. _`foo.something`:
734
735struct something
736================
737
738.. c:struct:: something
739
740    Lorem ipsum dolor sit amet.
741
742.. _`foo.something.definition`:
743
744Definition
745----------
746
747.. code-block:: c
748
749    struct something {
750        struct foo foofoo;
751        struct bar barbar;
752    }
753
754.. _`foo.something.members`:
755
756Members
757-------
758
759foofoo
760    lorem
761
762barbar
763    ipsum
764
765.. _`foo.lineevent_state`:
766
767struct lineevent_state
768======================
769
770.. c:struct:: lineevent_state
771
772    contains the state of a userspace event
773
774.. _`foo.lineevent_state.definition`:
775
776Definition
777----------
778
779.. code-block:: c
780
781    struct lineevent_state {
782        struct gpio_device *gdev;
783        const char *label;
784        struct gpio_desc *desc;
785        u32 eflags;
786        int irq;
787        wait_queue_head_t wait;
788        DECLARE_KFIFO(events, struct gpioevent_data, 16);
789        DECLARE_KFIFO_PTR(foobar, struct lirc_scancode);
790        struct mutex read_lock;
791    }
792
793.. _`foo.lineevent_state.members`:
794
795Members
796-------
797
798gdev
799    the GPIO device the event pertains to
800
801label
802    consumer label used to tag descriptors
803
804desc
805    the GPIO descriptor held by this event
806
807eflags
808    the event flags this line was requested with
809
810irq
811    the interrupt that trigger in response to events on this GPIO
812
813wait
814    wait queue that handles blocking reads of events
815
816events
817    KFIFO for the GPIO events (testing DECLARE_KFIFO)
818
819foobar
820    testing DECLARE_KFIFO_PTR
821
822read_lock
823    mutex lock to protect reads from colliding with adding
824    new events to the FIFO
825
826.. _`foo.genpool_algo_t`:
827
828typedef genpool_algo_t
829======================
830
831.. c:function:: unsigned long genpool_algo_t(unsigned long *map, unsigned long size, unsigned long start, unsigned int nr, void *data, struct gen_pool *pool, unsigned long start_addr)
832
833    Allocation callback function type definition
834
835    :param map:
836        Pointer to bitmap
837    :type map: unsigned long \*
838
839    :param size:
840        The bitmap size in bits
841    :type size: unsigned long
842
843    :param start:
844        The bitnumber to start searching at
845    :type start: unsigned long
846
847    :param nr:
848        The number of zeroed bits we're looking for
849    :type nr: unsigned int
850
851    :param data:
852        optional additional data used by the callback
853    :type data: void \*
854
855    :param pool:
856        the pool being allocated from
857    :type pool: struct gen\_pool \*
858
859    :param start\_addr:
860        *undescribed*
861    :type start\_addr: unsigned long
862
863.. _`foo.v4l2_check_dv_timings_fnc`:
864
865typedef v4l2_check_dv_timings_fnc
866=================================
867
868.. c:function:: bool v4l2_check_dv_timings_fnc(const struct v4l2_dv_timings *t, void *handle)
869
870    timings check callback
871
872    :param t:
873        the v4l2_dv_timings struct.
874    :type t: const struct v4l2\_dv\_timings \*
875
876    :param handle:
877        a handle from the driver.
878    :type handle: void \*
879
880.. _`foo.v4l2_check_dv_timings_fnc.description`:
881
882Description
883-----------
884
885Returns true if the given timings are valid.
886
887.. _`foo.add`:
888
889macro ADD
890=========
891
892.. c:macro::  ADD( first,  second)
893
894    Function like macro to add two values
895
896    :param first:
897        first value
898
899    :param second:
900        second value
901
902.. _`foo.add.description`:
903
904Description
905-----------
906
907Is replaced by a addition of \ ``first``\  and \ ``second``\ .
908
909.. _`foo.iosys_map_wr_field`:
910
911macro iosys_map_wr_field
912========================
913
914.. c:macro::  iosys_map_wr_field( map__,  struct_offset__,  struct_type__,  field__,  val__)
915
916    Write to a member of a struct in the iosys_map
917
918    :param map\_\_:
919        The iosys_map structure
920
921    :param struct\_offset\_\_:
922        Offset from the beggining of the map, where the struct
923        is located
924
925    :param struct\_type\_\_:
926        The struct describing the layout of the mapping
927
928    :param field\_\_:
929        Member of the struct to read
930
931    :param val\_\_:
932        Value to write
933
934.. _`foo.iosys_map_wr_field.description`:
935
936Description
937-----------
938
939Write a value to the iosys_map considering its layout is described by a C
940struct starting at \ ``struct_offset__``\ . The field offset and size is calculated
941and the \ ``val_``\ \_ is written. If the field access would incur in un-aligned
942access, then either \ :c:func:`iosys_map_memcpy_to`\  needs to be used or the
943architecture must support it. Refer to \ :c:func:`iosys_map_rd_field`\  for expected
944usage and memory layout.
945
946.. c:namespace-pop::

kernel-doc from all-in-a-tumble.c

  1.. c:namespace-push:: foo
  2
  3.. _`foo.user_function`:
  4
  5user_function
  6=============
  7
  8.. c:function:: int user_function(int a,  ...)
  9
 10    function that can only be called in user context
 11
 12    :param a:
 13        some argument
 14    :type a: int
 15
 16    :param ellipsis ellipsis:
 17        ellipsis operator
 18
 19.. _`foo.user_function.description`:
 20
 21Description
 22-----------
 23
 24This function makes no sense, it's only a kernel-doc demonstration.
 25
 26.. _`foo.user_function.example`:
 27
 28Example
 29-------
 30
 31.. code-block:: c
 32
 33    x = user_function(22);
 34
 35
 36.. _`foo.user_function.return`:
 37
 38Return
 39------
 40
 41Returns first argument
 42
 43.. _`foo.user_sum`:
 44
 45user_sum
 46========
 47
 48.. c:function:: API_EXPORTED int user_sum(int a, int b)
 49
 50    another function that can only be called in user context
 51
 52    :param a:
 53        first argument
 54    :type a: int
 55
 56    :param b:
 57        second argument
 58    :type b: int
 59
 60.. _`foo.user_sum.description`:
 61
 62Description
 63-----------
 64
 65This function makes no sense, it's only a kernel-doc demonstration.
 66
 67.. _`foo.user_sum.example`:
 68
 69Example
 70-------
 71
 72.. code-block:: c
 73
 74    x = user_sum(1, 2);
 75
 76
 77.. _`foo.user_sum.return`:
 78
 79Return
 80------
 81
 82Returns the sum of the \ ``a``\  and \ ``b``\ 
 83
 84.. _`foo.sys_tgkill`:
 85
 86sys_tgkill
 87==========
 88
 89.. c:function:: long sys_tgkill(pid_t tgid, pid_t pid, int sig)
 90
 91    send signal to one specific thread
 92
 93    :param tgid:
 94        the thread group ID of the thread
 95    :type tgid: pid\_t
 96
 97    :param pid:
 98        the PID of the thread
 99    :type pid: pid\_t
100
101    :param sig:
102        signal to be sent
103    :type sig: int
104
105.. _`foo.sys_tgkill.description`:
106
107Description
108-----------
109
110 This syscall also checks the \ ``tgid``\  and returns -ESRCH even if the PID
111 exists but it's not belonging to the target process anymore. This
112 method solves the problem of threads exiting and PIDs getting reused.
113
114.. _`foo.rarely_enum`:
115
116enum rarely_enum
117================
118
119.. c:enum:: rarely_enum
120
121    enum to test parsing rarely code styles
122
123.. _`foo.rarely_enum.definition`:
124
125Definition
126----------
127
128.. code-block:: c
129
130    enum rarely_enum {
131        F1,
132        F2
133    };
134
135.. _`foo.rarely_enum.constants`:
136
137Constants
138---------
139
140F1
141    f1
142
143F2
144    f2
145
146.. _`foo.rarely_struct`:
147
148struct rarely_struct
149====================
150
151.. c:struct:: rarely_struct
152
153    struct to test parsing rarely code styles
154
155.. _`foo.rarely_struct.definition`:
156
157Definition
158----------
159
160.. code-block:: c
161
162    struct rarely_struct {
163        struct foo foofoo;
164        struct bar barbar;
165    }
166
167.. _`foo.rarely_struct.members`:
168
169Members
170-------
171
172foofoo
173    lorem
174
175barbar
176    ipsum
177
178.. c:namespace-pop::