Giter VIP home page Giter VIP logo

fcurl's Introduction

fcurl

The fopen, fread, fwrite et all functions are common and a standard "idiom" in many C programs.

By providing fcurl* functions with the same general behavior as the file based versions, but instead allowing URLs where file names are otherwise used, this is an attempt to allow existing file-based applications to switch over to read and write files over common internet protocols instead.

API

Maybe something like this?

FCURL *fcurl_open(const char *path, const char *mode);

size_t fcurl_read(void *ptr, size_t size, size_t nmemb, FCURL *stream);

size_t fcurl_write(const void *ptr, size_t size, size_t nmemb,
                   FCURL *stream);

int fcurl_flush(FCURL *stream);

int fcurl_close(FCURL *stream);

int fcurl_getc(FCURL *stream);

char *fcurl_gets(char *s, int size, FCURL *stream);

int fcurl_ungetc(int c, FCURL *stream);

int fcurl_seek(FCURL *stream, long offset, int whence);

long fcurl_tell(FCURL *stream);

void fcurl_rewind(FCURL *stream);

int fcurl_getpos(FCURL *stream, fpos_t *pos);

int fcurl_setpos(FCURL *stream, const fpos_t *pos);

fcurl's People

Contributors

bagder avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fcurl's Issues

[REQ] Provide an fseek analogue

I'm not sure if this is out of scope for fcurl or not, but I figured it was worth asking.

Is there any plan to provide an fseek analogue, providing range request support, perhaps? (e.g. fseek to an offset N and read X bytes yields a N to N+X range request). It may be too compilcated to be worth in in this wrapper.

This would also allow fcurl to be registered with fopencookie or funopen, or various libraries which take such callbacks.

Hopefully that made some semblance of sense.

Also apologies if a GitHub issue is not the appropriate place to put this; It wasn't clear from the README if there was a separate mailing list or bug tracker.

Add code for fcurl_fgets()

You want a function that essentially does what fgets() does but you don't want to use fgets()?

fcurl/src/fcurl.c

Lines 237 to 244 in b50c7e0

char *fcurl_fgets(char *ptr, size_t size, struct fcurl_handle *file)
{
size_t want = size - 1;/* always need to leave room for zero termination */
/* add code */
return ptr;/*success */
}

I may be able to work on this but I'm not clear yet on the goal.

Question about using 'restrict' with fcurl_open()

Are you sure you don't want to use restrict, as it shows in the fopen() man page?

FILE *fopen(const char *restrict pathname, const char *restrict mode);

fcurl/src/fcurl.c

Lines 143 to 146 in b50c7e0

* FILE *fopen(const char *path, const char *mode);
*/
struct fcurl_handle *fcurl_open(const char *url, const char *operation)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.