Thanks, this is exactly what I was looking for. It will be nice for the user to be able to deploy a single dll with everything in it for a C scripting inside their .NET applications.
Cheers, jhabjan 2014-04-16 18:00 GMT+02:00 <[email protected]>: > Send Tinycc-devel mailing list submissions to > [email protected] > > To subscribe or unsubscribe via the World Wide Web, visit > https://lists.nongnu.org/mailman/listinfo/tinycc-devel > or, via email, send a message with subject or body 'help' to > [email protected] > > You can reach the person managing the list at > [email protected] > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Tinycc-devel digest..." > > > Today's Topics: > > 1. Re: dynamic library - embedded header, object, > library....files (Domingo Alvarez Duarte) > 2. Re: dynamic library - embedded header, object, > library....files (Jared Maddox) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Tue, 15 Apr 2014 20:09:16 +0100 > From: Domingo Alvarez Duarte <[email protected]> > To: [email protected] > Subject: Re: [Tinycc-devel] dynamic library - embedded header, object, > library....files > Message-ID: > < > calctsagxsfdpyhkdxg+6eijxv84-65z_gydfa0wmlyp3bdg...@mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > That is just what I did here https://github.com/mingodad/tinycc I called > it > virtual_io. > > If you checkout it and execute the script "mk-it" it will create a self > contained tinycc, the same principle can be used to use it as a library. > > Cheers ! > > > On Tue, Apr 15, 2014 at 4:58 PM, Josip Habjan <[email protected]> wrote: > > > Hi, > > > > Is there a chance to add a simple function that will allow users to load > > all required files from memory? For instance: I made a .NET wrapper for > > tcclib and I have all 'lib' and 'include' files compiled in a single .NET > > dll as embedded resources. Now, I don't want to export embedded files out > > from the dll to disk, and then run compiled, instead i would like > compiler > > to ask me where he can find requested file. (In my case I want it to be > > read from memory). > > > > What I'm thinking is some function that will allow file redirection. This > > would be easy for non windows systems which supports "fmemopen" function > as > > they can easily redirect some file request to the file descriptor from > > memory returned by "fmemopen". For windows users the only option is a > > memory buffer. > > > > What I had in mind is something like: > > > > typedef struct RedirectedFile > > { > > int fd; > > void *buf; > > unsigned long buflen; > > unsigned char filename[1024]; > > } RedirectedFile; > > > > LIBTCCAPI void tcc_set_file_redirection_func(TCCState *s, > > int(*get_file_func)(const char *filename, RedirectedFile *rf), > > void(*release_file_func)(void* buff, int fd)); > > > > typedef struct FileOrBuffer > > { > > int state; > > int is_fd; > > int fd; > > void *buf; > > unsigned long len; > > unsigned long pos; > > int is_redirect; > > } FileOrBuffer; > > > > typedef struct BufferedFile { > > ... FileOrBuffer fob; /* ex: int fd */ > > ... > > } BufferedFile; > > > > and then in tcc_open before opening a file I would simply call > > "get_file_func"... > > > > I know this takes a lot of changes for all file reads and seeks, but.. > > actualy, it's not that complicated as I had to replace and add only 2 > > functions: > > > > PUB_FUNC int tcc_fobread(FileOrBuffer *fob, void *dest, int size) > > { > > if (fob->is_fd) > > return read(fob->fd, dest, size); > > else { > > long available = fob->len - fob->pos; > > > > if (size > available) { > > size = available; > > } > > > > memcpy(dest, (char*)fob->buf + fob->pos, size); > > > > fob->pos += size; > > > > return size; > > } > > } > > > > PUB_FUNC long tcc_foblseek(FileOrBuffer *fob, long offset, int origin) > > { > > if (fob->is_fd) > > return lseek(fob->fd, offset, origin); > > else { > > long pos; > > switch (origin) { > > case SEEK_SET: { > > if (offset >= 0) { > > pos = offset; > > } > > else { > > pos = 0; > > } > > break; > > } > > case SEEK_CUR: { > > if (offset >= 0 || -offset <= fob->pos) { > > pos = fob->pos + offset; > > } > > else { > > pos = 0; > > } > > break; > > } > > case SEEK_END: { > > pos = fob->len + offset; > > break; > > } > > default: > > return -1; > > } > > > > if (pos > fob->len) { > > return -1; > > } > > > > fob->pos = pos; > > return pos; > > } > > } > > > > C is not really familiar to me, I'm more .NET oriented, but I gave it a > > try and came up with the solution. Here is a complete source code that > > works: > > > > https://www.dropbox.com/s/4y30qrejkmocvqn/tcc-src.zip > > > > Thanks, > > jhabjan > > > > _______________________________________________ > > Tinycc-devel mailing list > > [email protected] > > https://lists.nongnu.org/mailman/listinfo/tinycc-devel > > > > > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: < > http://lists.nongnu.org/archive/html/tinycc-devel/attachments/20140415/920f86de/attachment.html > > > > ------------------------------ > > Message: 2 > Date: Wed, 16 Apr 2014 00:15:36 -0500 > From: Jared Maddox <[email protected]> > To: [email protected] > Subject: Re: [Tinycc-devel] dynamic library - embedded header, object, > library....files > Message-ID: > <CABXS6_= > [email protected]> > Content-Type: text/plain; charset=UTF-8 > > Happily, it appears that the cat did NOT send this email for me. > > > Date: Tue, 15 Apr 2014 17:58:57 +0200 > > From: Josip Habjan <[email protected]> > > To: [email protected] > > Subject: [Tinycc-devel] dynamic library - embedded header, object, > > library....files > > Message-ID: > > <CABA7v= > [email protected]> > > Content-Type: text/plain; charset="utf-8" > > > > Hi, > > > > Is there a chance to add a simple function that will allow users to load > > all required files from memory? For instance: I made a .NET wrapper for > > tcclib and I have all 'lib' and 'include' files compiled in a single .NET > > dll as embedded resources. Now, I don't want to export embedded files out > > from the dll to disk, and then run compiled, instead i would like > compiler > > to ask me where he can find requested file. (In my case I want it to be > > read from memory). > > > > What I'm thinking is some function that will allow file redirection. This > > would be easy for non windows systems which supports "fmemopen" function > as > > they can easily redirect some file request to the file descriptor from > > memory returned by "fmemopen". For windows users the only option is a > > memory buffer. > > > > Look up "virtual io tcc", or look at this ( > http://lists.nongnu.org/archive/html/tinycc-devel/2013-01/index.html ) > page, starting around January 10th. I don't believe such a facility > was ever accepted into a release candidate, but I think it was on a > "not enough requests" basis rather than anything else. Then again, I > didn't review all of those emails. > > On a slightly separate note, this is the second question that seemed > relevant to "virtual io" that I REMEMBER from as many weeks (the other > was in a direct email). I think that there really is enough reason to > add this sort of "glue layer" into TCC, though I also wonder if this > should be forcibly delayed until after the "globals removal" work has > been completed and merged, since it would probably be wise to allow > individual states to be associated with individual individual IO > wrappers. > > > > ------------------------------ > > _______________________________________________ > Tinycc-devel mailing list > [email protected] > https://lists.nongnu.org/mailman/listinfo/tinycc-devel > > > End of Tinycc-devel Digest, Vol 132, Issue 22 > ********************************************* >
_______________________________________________ Tinycc-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/tinycc-devel
