Sim!
Talvez algumas das chamadas recursivas sejam documentadas ou façam parte de nomes de função? Então, um find / grep deve revelá-los. Aqui está um comando para fazer isso:
find /usr/src/linux/ -name "*.c" -exec grep recursive {} ";" -ls
Conduzindo isso através | wc -l me dá 270, ou seja, desde -ls imprime uma linha adicional por arquivo, pelo menos 135 arquivos + funções.
Vamos dar uma olhada no primeiro jogo:
/usr/src/linux/fs/jfs/jfs_dmap.c
A partida é um comentário:
- if the adjustment of the dmap control page, itself, causes its
- root to change, this change will be bubbled up to the next dmap
- control level by a recursive call to this routine, specifying
- the new root value and the next dmap control page level to
- be adjusted.
na frente do método
static int
dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, int level)
e, de fato, a linha 2486 e os vizinhos são:
if (dcp->stree[ROOT] != oldroot) {
/* are we below the top level of the map. if so,
* bubble the root up to the next higher level.
*/
if (level < bmp->db_maxlevel) {
/* bubble up the new root of this dmap control page to
* the next level.
*/
if ((rc =
dbAdjCtl(bmp, blkno, dcp->stree[ROOT], alloc,
level + 1))) {
/* something went wrong in bubbling up the new
* root value, so backout the changes to the
* current dmap control page.
*/
Como a pergunta era: se há qualquer função recursiva , não precisamos visitar as próximas 135 ou mais correspondências ou pesquisar por recursões não mencionadas explicitamente. A resposta é