source: gaycko/trunk/src/io/io.c @ 4734

Last change on this file since 4734 was 4734, checked in by Jean-Yves Lamoureux, 10 years ago
  • Fallback on http IO if URI is not an existing file
File size: 1.5 KB
Line 
1#include "io.h"
2#include <stdlib.h>
3#include <string.h>
4
5
6gIO *gaycko_open(char *uri) {
7        gIO *ret = NULL;   
8    //TODO handle URI scheme
9   
10    ret = malloc(sizeof(gIO));
11   
12    if(strlen(uri)>7 && !strncmp(uri, "http://", 7)) {
13        ret->type = IO_HTTP;
14    } else {
15        ret->type = IO_FILE;
16    }
17   
18retry:
19    switch(ret->type) {
20        default:
21            ret->stream.http = http_open(uri);
22            if(!ret->stream.http) {
23                free(ret);
24                return NULL;
25            }
26            break;
27        case IO_FILE:
28            ret->stream.file = file_open(uri);
29            if(!ret->stream.file) {
30                ret->type = IO_HTTP;
31                goto retry;
32                return NULL;
33            }
34            break;
35    }
36   
37    return ret;
38}
39
40void gaycko_close(gIO *io) {
41        if(!io) return;
42   
43    switch(io->type) {
44        default:
45            http_close(io->stream.http);
46            break;
47        case IO_FILE:
48            file_close(io->stream.file);
49            break;
50    }
51    free(io);
52   
53}
54
55char *gaycko_get_data(gIO *io) {
56        if(!io) return NULL;
57   
58    switch(io->type) {
59        default:
60            return io->stream.http->data;
61            break;
62        case IO_FILE:
63            return io->stream.file->data;
64            break;
65    }
66}
67
68unsigned int gaycko_get_size(gIO *io) {
69    if(!io) return 0;
70   
71    switch(io->type) {
72        default:
73            return io->stream.http->size;
74            break;
75        case IO_FILE:
76            return io->stream.file->size;
77            break;
78    }
79   
80}
Note: See TracBrowser for help on using the repository browser.