// File: /workspace/github_c_makefile_star2_O0/carlitosmarin[P]Sistema-Ficheros-SOII/./src/ficheros_basico.c
// Function: reservar_inodo
int reservar_inodo (unsigned char tipo, unsigned char permisos) {
	struct superbloque sb; 
	if(bread(posSB,&sb) < 0) {
		puts("Error a la hora de leer el superbloque");
		return -1; //Error BREAD
	} 
	if(sb.cantInodosLibres == 0) {
		puts("No hay inodos libres");
		return -2; //Error NO_INODOS_LIBRES
	} 
	int posPIL = sb.posPrimerInodoLibre;
	
	struct inodo inodoR = leer_inodo(posPIL);
	
	//Modificamos el SuperBloque
	sb.posPrimerInodoLibre = inodoR.punterosDirectos[0];
	sb.cantInodosLibres--; //Al reservar un inodo, un inodo libre menos
	if(bwrite(posSB,&sb) < 0) {
		puts("Error a la hora de escribir en el superbloque");
		return -3; //Error BWRITE	
	}
	
	//Inicializamos el inodo
	inodoR.tipo = tipo;
	inodoR.permisos = permisos;
	inodoR.atime = time(NULL);
	inodoR.mtime = time(NULL);
	inodoR.ctime = time(NULL);
	inodoR.cantLinks = 1;
	inodoR.tamBytesLogicos = 0;
	inodoR.cantBloquesOcupados = 0;
	
	//Inicializamos los punteros
	int bucle;
	for(bucle = 0; bucle < puntD; bucle++) inodoR.punterosDirectos[bucle] = 0;
	for(bucle = 0; bucle < puntI; bucle++) inodoR.punterosIndirectos[bucle] = 0;
	if(escribir_inodo(inodoR,posPIL) < 0) {
		puts("Error a la hora de escribir el inodo");	
		return -4; //Escribimos el nuevo inodo Error ESCRIBIR_INODO
	}
	return posPIL; //Devolvemos le numero de inodo reservado
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x520, %rsp            # imm = 0x520
movb %sil, %al
movb %dil, %cl
movb %cl, -0x5(%rbp)
movb %al, -0x6(%rbp)
xorl %edi, %edi
leaq -0x408(%rbp), %rsi
callq 0x1380
cmpl $0x0, %eax
jge 0x1ff2
leaq 0x41c8(%rip), %rdi      # 0x61a9
callq 0x1060
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x21d2
cmpl $0x0, -0x3e4(%rbp)
jne 0x2013
leaq 0x41ce(%rip), %rdi      # 0x61d0
callq 0x1060
movl $0xfffffffe, -0x4(%rbp) # imm = 0xFFFFFFFE
jmp 0x21d2
movl -0x3ec(%rbp), %eax
movl %eax, -0x40c(%rbp)
movl -0x40c(%rbp), %esi
leaq -0x490(%rbp), %rdi
callq 0x1f20
movl -0x464(%rbp), %eax
movl %eax, -0x3ec(%rbp)
movl -0x3e4(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x3e4(%rbp)
xorl %edi, %edi
leaq -0x408(%rbp), %rsi
callq 0x1320
cmpl $0x0, %eax
jge 0x2077
leaq 0x417f(%rip), %rdi      # 0x61e5
callq 0x1060
movl $0xfffffffd, -0x4(%rbp) # imm = 0xFFFFFFFD
jmp 0x21d2
movb -0x5(%rbp), %al
movb %al, -0x490(%rbp)
movb -0x6(%rbp), %al
movb %al, -0x48f(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x488(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x480(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x1130
movq %rax, -0x478(%rbp)
movl $0x1, -0x470(%rbp)
movl $0x0, -0x46c(%rbp)
movl $0x0, -0x468(%rbp)
movl $0x0, -0x494(%rbp)
cmpl $0xc, -0x494(%rbp)
jge 0x210d
movslq -0x494(%rbp), %rax
movl $0x0, -0x464(%rbp,%rax,4)
movl -0x494(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x494(%rbp)
jmp 0x20e1
movl $0x0, -0x494(%rbp)
cmpl $0x3, -0x494(%rbp)
jge 0x2143
movslq -0x494(%rbp), %rax
movl $0x0, -0x434(%rbp,%rax,4)
movl -0x494(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x494(%rbp)
jmp 0x2117
movl -0x40c(%rbp), %edi
movups -0x420(%rbp), %xmm0
movq %rsp, %rax
movq %rax, -0x4a0(%rbp)
movups %xmm0, 0x70(%rax)
movups -0x430(%rbp), %xmm0
movups %xmm0, 0x60(%rax)
movups -0x440(%rbp), %xmm0
movups %xmm0, 0x50(%rax)
movups -0x450(%rbp), %xmm0
movups %xmm0, 0x40(%rax)
movups -0x490(%rbp), %xmm0
movups -0x480(%rbp), %xmm1
movups -0x470(%rbp), %xmm2
movups -0x460(%rbp), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x1e40
cmpl $0x0, %eax
jge 0x21c9
leaq 0x4058(%rip), %rdi      # 0x6213
callq 0x1060
movl $0xfffffffc, -0x4(%rbp) # imm = 0xFFFFFFFC
jmp 0x21d2
movl -0x40c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x520, %rsp            # imm = 0x520
popq %rbp
retq
nop