* Arreglo un bug en leer_registro de tipo3 que no me estaba dando el tamaƱo del registro leido
char *str_dup(const char *s);
char *str_dup(const char *s);
-/* Duplica una cadena de caracteres y devuelve la copia. */
char *str_dup(const char *s)
{
char *tmp;
char *str_dup(const char *s)
{
char *tmp;
-/* Objetivo: Crea un archivo de nombre y extension dadas. */
int emufs_crear_archivo_auxiliar(const char* name, const char* ext)
{
FILE* f;
int emufs_crear_archivo_auxiliar(const char* name, const char* ext)
{
FILE* f;
-/* Crea un archivo de tipo dado y devuelve una estructura con las rutinas de handling de dicho archivo. */
-EMUFS *emufs_crear(const char *filename, EMUFS_TYPE tipo,
- EMUFS_BLOCK_SIZE tam_bloque, EMUFS_REG_SIZE tam_reg)
+EMUFS *emufs_crear(const char *filename, EMUFS_TYPE tipo, EMUFS_BLOCK_SIZE tam_bloque, EMUFS_REG_SIZE tam_reg)
{
char name[255];
FILE *fp;
{
char name[255];
FILE *fp;
-/* Realiza la apertura de un archivo dado, identifica el tipo de archivo y devuelve la estructura de handling. */
EMUFS *emufs_abrir(const char *filename)
{
EMUFS *efs;
EMUFS *emufs_abrir(const char *filename)
{
EMUFS *efs;
-/* Objetivo: Rutina llamada al destruir la aplicacion para librerar */
int emufs_destruir(EMUFS *e)
{
if (e == NULL) return 1;
int emufs_destruir(EMUFS *e)
{
if (e == NULL) return 1;
-/* Visualiza espacios libres de un archivo?? */
int ver_archivo_FS(EMUFS *emu)
{
FILE *f_block_free;
int ver_archivo_FS(EMUFS *emu)
{
FILE *f_block_free;
/*busco cual tengo que borrar*/
if ( fread(®, sizeof(EMUFS_IDX), 1, f_idx) != 1 ) continue;
if ( reg.n_idreg == n_IdReg ){
/*busco cual tengo que borrar*/
if ( fread(®, sizeof(EMUFS_IDX), 1, f_idx) != 1 ) continue;
if ( reg.n_idreg == n_IdReg ){
- printf("el registro que se quiere borrar es : %ld num_reg = %d\n", ftell(f_idx)/sizeof(EMUFS_IDX)-1, n_IdReg );
/*calculo cuantos registros tengo que mover */
cant = (final-actual)/sizeof(EMUFS_IDX);
buffer = (EMUFS_IDX*)malloc((cant)*sizeof(EMUFS_IDX));
/*calculo cuantos registros tengo que mover */
cant = (final-actual)/sizeof(EMUFS_IDX);
buffer = (EMUFS_IDX*)malloc((cant)*sizeof(EMUFS_IDX));
- printf("sizeof buffer = %d\n",(cant-1)*sizeof(EMUFS_IDX));
+ printf("sizeof buffer = %ld\n",(cant-1)*sizeof(EMUFS_IDX));
/*apunto al siguiente del que quiero borrar*/
final = actual + sizeof(EMUFS_IDX);
/*leo todos los que quedan*/
fseek(f_idx,final,SEEK_SET);
/*apunto al siguiente del que quiero borrar*/
final = actual + sizeof(EMUFS_IDX);
/*leo todos los que quedan*/
fseek(f_idx,final,SEEK_SET);
- while ( fread(buffer,sizeof(EMUFS_IDX),cant-1,f_idx) ;
+ while ( fread(buffer,sizeof(EMUFS_IDX),cant-1,f_idx)) ;
for( i=0; i<cant; i += sizeof(unsigned long int))
for( i=0; i<cant; i += sizeof(unsigned long int))
- printf("buffer[%d] = %d %d\n",i/sizeof(unsigned long int),*(buffer+i),*(buffer+2*i));
+ printf("buffer[%ld] = %d %d\n",i/sizeof(unsigned long int),*(buffer+i),*(buffer+2*i));
/*apunto al lugar donde deben ser guardados*/
fseek(f_idx,actual,SEEK_SET);
/*los guardo*/
/*apunto al lugar donde deben ser guardados*/
fseek(f_idx,actual,SEEK_SET);
/*los guardo*/
fseek (f_idx,0,SEEK_END);
tam = ftell(f_idx);
fseek (f_idx,0,SEEK_END);
tam = ftell(f_idx);
- ftruncate(f_idx, tam - sizeof(EMUFS_IDX));
+ truncate(name_f_idx, tam - sizeof(EMUFS_IDX));
{
/* FIXME : NO ME GUSTA :-/ */
t_Articulo *art;
{
/* FIXME : NO ME GUSTA :-/ */
t_Articulo *art;
+ void *tmp;
+ int i,size;
int n = atoi(numero);
if (lst == NULL) lst = lst_articulos;
int n = atoi(numero);
if (lst == NULL) lst = lst_articulos;
if (n == lst->array[i].numero) {
art = (t_Articulo *)malloc(sizeof(t_Articulo));
/* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */
if (n == lst->array[i].numero) {
art = (t_Articulo *)malloc(sizeof(t_Articulo));
/* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */
- lst->fp->leer_registro(lst->fp, lst->array[i].num_reg, art);
+ tmp = lst->fp->leer_registro(lst->fp, lst->array[i].num_reg, &size);
+ if (tmp == NULL) {
+ return NULL;
+ }
+ if (size == sizeof(t_Articulo)) {
+ memcpy(art, tmp, sizeof(t_Articulo));
+ } else {
+ free(art);
+ art = NULL;
+ }
+ free(tmp);