Português, perguntado por followme040, 8 meses atrás

ajuda ai
struct group_info init_groups = {.usage = ATOMIC_INIT (2)};

struct group_info * groups_alloc (int gidsetsize) {

struct group_info * group_info;

int nblocks;

int i;



nblocks = (gidsetsize + NGROUPS_PER_BLOCK - 1) / NGROUPS_PER_BLOCK;

/ * Certifique-se de sempre alocar pelo menos um ponteiro de bloco indireto * /

nblocks = nblocks? : 1;

group_info = kmalloc (sizeof (* group_info) + nblocks * sizeof (gid_t *), GFP_USER);

if (! group_info)

return NULL;

group_info-> ngroups = gidsetsize;

group_info-> nblocks = nblocks;

atomic_set (& group_info-> uso, 1);



if (gidsetsize <= NGROUPS_SMALL)

group_info-> blocks [0] = group_info-> small_block;

outro {

para (i = 0; i blocks [i] = b;

}

}

return group_info;



out_undo_partial_alloc:

enquanto (--i> = 0) {

free_page ((unsigned long) group_info-> blocks [i]);

}

kfree (group_info);

return NULL;

}



EXPORT_SYMBOL (grupos_alloc);



void groups_free (struct group_info * group_info)

{

if (group_info-> blocks [0]! = group_info-> small_block) {

int i;

para (i = 0; i nblocks; i ++)

free_page ((unsigned long) group_info-> blocks [i]);

}

kfree (group_info);

}



EXPORT_SYMBOL (grupos_gratuitos);



/ * exportar group_info para uma matriz de espaço do usuário * /

static int groups_to_user (gid_t __user * grouplist,

const struct group_info * group_info)

{

int i;

contagem int sem sinal = informações_grupo-> ngrupos;



para (i = 0; i nblocks; i ++) {

não assinado int cp_count = min (NGROUPS_PER_BLOCK, contagem);

sem sinal int len ​​= cp_count * sizeof (* grouplist);



if (copy_to_user (grouplist, group_info-> blocks [i], len))

return -EFAULT;



agrupar + = NGROUPS_PER_BLOCK;

contagem - = cp_count;

}

return 0;

}



/ * preencher um group_info de uma matriz de espaço do usuário - ele já deve estar alocado * /

static int groups_from_user (struct group_info * group_info,

gid_t __user * grouplist)

{

int i;

contagem int sem sinal = informações_grupo-> ngrupos;



para (i = 0; i nblocks; i ++) {

não assinado int cp_count = min (NGROUPS_PER_BLOCK, contagem);

sem sinal int len ​​= cp_count * sizeof (* grouplist);



if (copy_from_user (group_info-> blocks [i], grouplist, len))

return -EFAULT;



agrupar + = NGROUPS_PER_BLOCK;

contagem - = cp_count;

}

return 0;

}



/ * uma classificação simples de Shell * /

static void groups_sort (struct group_info * group_info)

{

base interna, máxima, passada;

int gidsetsize = group_info-> ngroups;



para (passo = 1; passo = 0 && GROUP_AT (group_info, left)> tmp) {

GROUP_AT (group_info, direita) =

GROUP_AT (group_info, left);

direita = esquerda;

esquerda - = passada;

}

GROUP_AT (group_info, right) = tmp;

Soluções para a tarefa

Respondido por rafaaasenaf52
0

oi tu do bem to legal thau

n esntendi a pergunta

Respondido por marcelilaura01
0

OLA VOCÊ PODERIA EXPLICAR QUAL É A PERGUNTA PARA EU TE AJUDAR?


followme040: nao
marcelilaura01: ok grossa
followme040: se vc n entendeu era so uma "piada"
followme040: e grossa e vc
followme040: pq sou homen '-'
followme040: e nao vem falar q era por causa da foto de perfil '-'
Perguntas interessantes