return 0;
}
-int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset)
+int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDICE_TIPO tipo, INDICE_TIPO_DATO tipo_dato, unsigned int offset, unsigned int tam_bloque)
{
INDICE *tmp;
- tmp = emufs_indice_crear(emu, nombre, tipo, tipo_dato, offset);
+ int error=0;
+
+ /* Verifico que no existe un indice con el mismo nombre */
+ /* y que no exista un indice primario */
+ PERR("Agregando indice");
+ tmp = emu->indices;
+ while (tmp) {
+ if (strcmp(tmp->nombre, nombre)==0) {
+ error = 1;
+ break;
+ }
+ if ((funcion == IND_PRIMARIO) && (tmp->funcion == funcion)) {
+ error = 2;
+ break;
+ }
+ tmp = tmp->sig;
+ }
- if (tmp == NULL) return 0;
+ if (tmp != NULL) {
+ switch (error) {
+ case 1:
+ PERR("Ya existe un indice con el mismo nombre!");
+ break;
+ case 2:
+ PERR("EMUFS ya tiene indice primario!!");
+ }
+ return 0;
+ }
+
+ /* Creo el nuevo indice */
+ PERR("Creando indice\n");
+ tmp = emufs_indice_crear(emu, nombre, funcion, tipo, tipo_dato, offset, tam_bloque);
+
+ if (tmp == NULL) {
+ PERR("NO SE PUDO CREAR INDICE!!!");
+ return 0;
+ }
if (emu->indices==NULL)
emu->indices = tmp;
return 1;
}
+INDICE_DATO *emufs_buscar_registros(EMUFS *emu, char *indice, char *data, int *cant)
+{
+ CLAVE k;
+ INDICE *tmp;
+
+ tmp = emu->indices;
+ while (tmp) {
+ if (strcmp(tmp->nombre, indice) == 0) break;
+ tmp = tmp->sig;
+ }
+
+ if (tmp == NULL) {
+ PERR("NO EXISTE EL INDICE");
+ cant = 0;
+ return NULL;
+ }
+
+ PERR("GENERANDO CLAVE")
+ PERR(data);
+ k = emufs_indice_generar_clave_desde_valor(tmp, data);
+ PERR("DONE");
+ return tmp->buscar_entradas(tmp, k, cant);
+}
+