Beispiel #1
0
ops_memory_t* ops_write_mem_from_file(const char *filename, int* errnum)
    {
    size_t initial_size=1024;
    int fd=0;
    unsigned char buf[1024];
    ops_memory_t* mem=NULL;

    *errnum=0;

    fd=ops_open(filename,O_RDONLY | O_BINARY, 0);

    if (fd < 0)
        {
        *errnum=errno;
        return ops_false;
        }

    mem=ops_memory_new();
    ops_memory_init(mem,initial_size);
    for (;;)
        {
        ssize_t n=0;
        n=read(fd,buf,1024);
        if (n<0)
            {
            *errnum=errno;
            break;
            }
        if (!n)
            break;
        ops_memory_add(mem, &buf[0], n);
        }
    close(fd);    
    return mem;
    }
Beispiel #2
0
/**
 \ingroup Core_Writers
 \brief Create and initialise cinfo and mem; Set for writing to mem
 \param cinfo Address where new cinfo pointer will be set
 \param mem Address when new mem pointer will be set
 \param bufsz Initial buffer size (will automatically be increased when necessary)
 \note It is the caller's responsiblity to free cinfo and mem.
 \sa ops_teardown_memory_write()
*/
void ops_setup_memory_write(ops_create_info_t **cinfo, ops_memory_t **mem, size_t bufsz)
    {
    /*
     * initialise needed structures for writing to memory
     */

    *cinfo=ops_create_info_new();
    *mem=ops_memory_new();

    ops_memory_init(*mem,bufsz);

    ops_writer_set_memory(*cinfo,*mem);
    }
Beispiel #3
0
ops_boolean_t
ops_write_literal_data_from_file(const char *filename, 
				 const ops_literal_data_type_t type,
				 ops_create_info_t *info)
    {
    size_t initial_size=1024;
    int fd=0;
    ops_boolean_t rtn;
    unsigned char buf[1024];
    ops_memory_t* mem=NULL;
    size_t len=0;

    fd=ops_open(filename,O_RDONLY | O_BINARY, 0);

    if (fd < 0)
        return ops_false;

    mem=ops_memory_new();
    ops_memory_init(mem,initial_size);
    for (;;)
        {
        ssize_t n=0;
        n=read(fd,buf,1024);
        if (!n)
            break;
        if (n == -1)
        {
            close(fd);
            ops_memory_free(mem);
            return ops_false;
        }
        ops_memory_add(mem, &buf[0], n);
        }
    close(fd);    

    // \todo do we need to check text data for <cr><lf> line endings ?
    len=ops_memory_get_length(mem);
    rtn=ops_write_ptag(OPS_PTAG_CT_LITERAL_DATA, info)
        && ops_write_length(1+1+4+len,info)
        && ops_write_scalar(type, 1, info)
        && ops_write_scalar(0, 1, info) // filename
        && ops_write_scalar(0, 4, info) // date
        && ops_write(ops_memory_get_data(mem), len, info);

    ops_memory_free(mem);
    return rtn;
    }
Beispiel #4
0
void ops_build_public_key(ops_memory_t *out,const ops_public_key_t *key,
			  ops_boolean_t make_packet)
    {
    ops_create_info_t *info;

    info=ops_create_info_new();

    ops_memory_init(out,128);
    ops_writer_set_memory(info,out);

    write_public_key_body(key,info);

    if(make_packet)
	ops_memory_make_packet(out,OPS_PTAG_CT_PUBLIC_KEY);

    ops_create_info_delete(info);
    }