The idea is the same, but I think that I did it in a more general adding
the virtual io to tinycc with any source can be easily used like databases,
compressed files,

Main code of vio:

/* virtual io */

LIBTCCAPI void tcc_set_vio_module(TCCState *s, vio_module_t *vio_module){
    s->vio_module = vio_module;
    vio_module->tcc_state = s;
}

void vio_initialize(vio_fd *fd) {
    fd->fd = -1;
    fd->vio_udata = NULL;
    fd->vio_module = NULL;
}

int vio_open(struct TCCState *s, vio_fd *fd, const char *fn, int oflag) {
    int rc;
    vio_initialize(fd);
    fd->vio_module = s->vio_module;
    if(s->vio_module && (s->vio_module->call_vio_open_flags &
CALL_VIO_OPEN_FIRST)) {
    rc =  s->vio_module->vio_open(fd, fn, oflag);
    if(rc >= 0) return rc;
    }

    fd->fd = open(fn, oflag);

    if(fd->fd < 0 && s->vio_module && (s->vio_module->call_vio_open_flags &
CALL_VIO_OPEN_LAST)) {
    rc =  s->vio_module->vio_open(fd, fn, oflag);
    if(rc >= 0) return rc;
    }
    //printf("vio_open = %d %s\n", fd->fd, fn);
    return fd->fd;
}

off_t vio_lseek(vio_fd fd, off_t offset, int whence) {
    if(fd.vio_udata) {
        return fd.vio_module->vio_lseek(fd, offset, whence);
    }
    return lseek(fd.fd, offset, whence);
}

size_t vio_read(vio_fd fd, void *buf, size_t bytes) {
    if(fd.vio_udata) {
    return fd.vio_module->vio_read(fd, buf, bytes);
    }
    return read(fd.fd, buf, bytes);
}

int vio_close(vio_fd *fd) {
    int rc = 0;
    if(fd->vio_udata){
    fd->vio_module->vio_close(fd);
    } else rc = close(fd->fd);
    vio_initialize(fd);
    return rc;
}



On Fri, Jan 11, 2013 at 7:28 AM, <u-tcc-u...@aetey.se> wrote:

> Hello Domingo,
>
> On Fri, Jan 11, 2013 at 12:23:35AM +0000, Domingo Alvarez Duarte wrote:
> > Added what I call virtual io to tinycc this way we can make a monolitic
> > executable or library that contains all needed to compile programs, truly
> > tinycc portable.
> >     Tested under linux exec the "mk-it" shell script and you'll end up
> with
> > a portable tinycc executable that doesn't depend on anything else.
>
> Is it like
>
> http://ptspts.blogspot.se/2009/11/tiny-self-contained-c-compiler-using.html
> ?
>
> Hope you did it in a more general fashion. (I have no time slices now
> to look at/test you code, sorry).
>
> I always felt that such a thing should belong to tcc upstream, thanks for
> doing this.
>
> > The idea is inspired by what http://www.evolane.com/software/etcl/ did,
> > make a no dependency tinycc library that can be added to a project and
> work
> > without need extra files or paths for basic c compilation.
>
> I am not a fan of "including everything" in an application package, I
> prefer global file systems when you always have at hand those parts
> which you _need_ but not have to keep with you all the parts you _might_
> need.
>
> Anyway, having a single executable which does all the job is sometimes
> very handy and tcc looks like a very suitable target.
>
> Cheers,
> Rl
>
>
> _______________________________________________
> Tinycc-devel mailing list
> Tinycc-devel@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
>
_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to