home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Amiga Shareware Floppies
/
ma64.dms
/
ma64.adf
/
FTPMount-1.0
/
Source
/
ftpinfo.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-12-10
|
3KB
|
184 lines
/*
* This source file is Copyright 1995 by Evan Scott.
* All rights reserved.
* Permission is granted to distribute this file provided no
* fees beyond distribution costs are levied.
*/
#include <exec/types.h>
#include <exec/memory.h>
#include <exec/alerts.h>
#include <devices/timer.h>
#include <dos/dos.h>
#include <dos/dosextens.h>
#include <dos/dostags.h>
#include <proto/exec.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "evtypes.h"
#include "verify.h"
#include "tcp.h"
#include "site.h"
#include "ftp.h"
#include "split.h"
#include "ftpinfo.h"
#include "connect.h"
#include "globals.h"
/*
* ftpinfo routines
*/
void add_ftpinfo(struct info_header *ih, b8 *name, struct DateStamp ds, b32 size, b32 blocks, b32 flags)
{
ftpinfo *fi;
int len;
verify(ih, V_info_header);
len = strlen(name);
fi = allocate(sizeof(*fi) + len + 1, V_ftpinfo);
if (!fi) return;
ensure(fi, V_ftpinfo);
strcpy(fi->name, name);
fi->modified = ds;
fi->size = size;
fi->blocks = blocks;
fi->flags = flags;
// fi->next = ih->infos;
// ih->infos = fi;
/* instead of adding to front, and getting reversed lists, add to end */
*(ih->last_info_p) = fi;
ih->last_info_p = &(fi->next);
fi->next = nil;
return;
}
void free_info_header(struct info_header *ih)
{
ftpinfo *fi, *fin;
verify(ih, V_info_header);
fi = ih->infos;
while (fi) {
verify(fi, V_ftpinfo);
fin = fi->next;
deallocate(fi, V_ftpinfo);
fi = fin;
}
if (ih->next)
ih->next->prev = ih->prev;
*(ih->prev) = ih->next;
deallocate(ih, V_info_header);
return;
}
struct info_header *new_info_header(site *sp, b8 *name)
{
struct info_header *ih;
verify(sp, V_site);
ih = (struct info_header *)allocate(sizeof(*ih) + strlen(name) + 1, V_info_header);
if (!ih) return nil;
ensure(ih, V_info_header);
ih->infos = nil;
ih->last_info_p = &(ih->infos);
ih->next = sp->infos;
if (sp->infos) sp->infos->prev = &(ih->next);
sp->infos = ih;
ih->prev = &(sp->infos);
strcpy(ih->name, name);
ih->case_sensitive = sp->case_sensitive;
return ih;
}
struct info_header *find_info_header(site *sp, b8 *name)
{
struct info_header *ih;
verify(sp, V_site);
ih = sp->infos;
if (sp->case_sensitive) {
while (ih) {
if (strcmp(ih->name, name) == 0) return ih;
ih = ih->next;
}
} else {
while (ih) {
if (stricmp(ih->name, name) == 0) return ih;
ih = ih->next;
}
}
return nil;
}
ftpinfo *find_info(struct info_header *ih, b8 *name)
{
ftpinfo *fi, *found;
found = nil;
fi = ih->infos;
if (ih->case_sensitive) {
while (fi) {
if (strcmp(fi->name, name) == 0 && !(fi->flags & MYFLAG_DELETED) )
{
found = fi;
break;
}
fi = fi->next;
}
} else {
found = nil;
while (fi) {
if (!(fi->flags & MYFLAG_DELETED))
{
if (stricmp(fi->name, name) == 0)
{
found = fi;
if (strcmp(fi->name, name) == 0)
{
break;
}
}
}
fi = fi->next;
}
}
return found;
}