Milán Major

netscape-revival

1 branch
Code

lib/libnet/cvdisk.c

/* Please leave outside of ifdef for windows precompiled headers */
#include "mkutils.h"

#ifdef MOZILLA_CLIENT

#include "mkstream.h"
#include "mkgeturl.h"
#include "xp.h"

typedef struct _DataObject {
    FILE * fp;
    char * filename;
} DataObject;


PRIVATE int net_SaveToDiskWrite (DataObject * obj, CONST char* s, int32 l)
{
    fwrite(s, 1, l, obj->fp); 
    return(1);
}

/* is the stream ready for writeing?
 */
PRIVATE unsigned int net_SaveToDiskWriteReady (DataObject * obj)
{
   return(MAX_WRITE_READY);  /* always ready for writing */ 
}


PRIVATE void net_SaveToDiskComplete (DataObject * obj)
{
    fclose(obj->fp);

    FREEIF(obj->filename);

    FREE(obj);
    return;
}

PRIVATE void net_SaveToDiskAbort (DataObject * obj, int status)
{
    fclose(obj->fp);

    if(obj->filename)
      {
        remove(obj->filename);
        FREE(obj->filename);
      }

    return;
}


PUBLIC NET_StreamClass * 
fe_MakeSaveAsStream (int         format_out,
                         void       *data_obj,
                         URL_Struct *URL_s,
                         MWContext  *window_id)
{
    DataObject* obj;
    NET_StreamClass* stream;
    static int count=0;
    char filename[256];
    FILE *fp = stdout;
    
    TRACEMSG(("Setting up display stream. Have URL: %s\n", URL_s->address));

    PR_snprintf(filename, sizeof(filename), "foo%d.unknown",count++);
    fp = fopen(filename,"w");

    stream = XP_NEW(NET_StreamClass);
    if(stream == NULL) 
        return(NULL);

    obj = XP_NEW(DataObject);
    if (obj == NULL) 
        return(NULL);
    

    stream->name           = "FileWriter";
    stream->complete       = (MKStreamCompleteFunc) net_SaveToDiskComplete;
    stream->abort          = (MKStreamAbortFunc) net_SaveToDiskAbort;
    stream->put_block      = (MKStreamWriteFunc) net_SaveToDiskWrite;
    stream->is_write_ready = (MKStreamWriteReadyFunc) net_SaveToDiskWriteReady;
    stream->data_object    = obj;  /* document info object */
    stream->window_id      = window_id;

    obj->fp = fp;
    obj->filename = 0;
    StrAllocCopy(obj->filename, filename);

    TRACEMSG(("Returning stream from NET_SaveToDiskConverter\n"));

    return stream;
}

#endif /* MOZILLA_CLIENT */