GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Description: a tiny graphical app kit for ruby
Homepage: http://code.whytheluckystiff.net/shoes
Clone URL: git://github.com/why/shoes.git
 * shoes/ruby.c: hook up the `error` callback on Shoes::Download.  throw 
 an error on out of memory for large downloads into a string.
why (author)
Tue Jul 22 08:38:50 -0700 2008
commit  9b19286b9d07c97344e69f98da2978bc32b19c65
tree    92d00e96cfb85c91f51c90ff10b55afe7c0cf00f
parent  e1da504178b635046af0e23ed6dbd66b07df67b2
...
63
64
65
66
 
67
68
69
...
63
64
65
 
66
67
68
69
0
@@ -63,7 +63,7 @@ typedef struct {
0
 
0
 void shoes_download(shoes_download_request *req);
0
 void shoes_queue_download(shoes_download_request *req);
0
-VALUE shoes_download_error(SHOES_DOWNLOAD_ERROR error);
0
+VALUE shoes_http_error(SHOES_DOWNLOAD_ERROR error);
0
 
0
 #ifdef SHOES_WIN32
0
 #include <stdio.h>
...
69
70
71
 
72
73
74
...
90
91
92
 
93
94
95
...
152
153
154
 
 
 
155
156
157
 
 
 
 
158
159
160
161
162
163
164
165
166
...
190
191
192
193
 
194
195
196
...
69
70
71
72
73
74
75
...
91
92
93
94
95
96
97
...
154
155
156
157
158
159
160
161
 
162
163
164
165
166
167
168
 
 
 
169
170
171
...
195
196
197
 
198
199
200
201
0
@@ -69,6 +69,7 @@ shoes_curl_header_funk(char *ptr, size_t size, size_t nmemb, shoes_curl_data *da
0
       {
0
         data->memlen = data->total;
0
         SHOE_REALLOC_N(data->mem, char, data->memlen);
0
+ if (data->mem == NULL) return -1;
0
       }
0
     }
0
   }
0
@@ -90,6 +91,7 @@ shoes_curl_write_funk(void *ptr, size_t size, size_t nmemb, shoes_curl_data *dat
0
       while (data->size + realsize > data->memlen)
0
         data->memlen += SHOES_BUFSIZE;
0
       SHOE_REALLOC_N(data->mem, char, data->memlen);
0
+ if (data->mem == NULL) return -1;
0
     }
0
     SHOE_MEMCPY(&(data->mem[data->size]), ptr, char, realsize);
0
   }
0
@@ -152,15 +154,18 @@ shoes_download(shoes_download_request *req)
0
   curl_easy_setopt(curl, CURLOPT_USERAGENT, uagent);
0
 
0
   res = curl_easy_perform(curl);
0
+ req->size = cdata.total;
0
+ req->mem = cdata.mem;
0
+
0
   if (res != CURLE_OK)
0
   {
0
- HTTP_EVENT(cdata.handler, SHOES_HTTP_ERROR, cdata.last, res, 0, 0, cdata.data, NULL, 1);
0
+ shoes_download_event event;
0
+ event.stage = SHOES_HTTP_ERROR;
0
+ event.error = res;
0
+ if (req->handler != NULL) req->handler(&event, req->data);
0
     goto done;
0
   }
0
 
0
- req->size = cdata.total;
0
- req->mem = cdata.mem;
0
-
0
   HTTP_EVENT(cdata.handler, SHOES_HTTP_COMPLETED, cdata.last, 100, req->size, req->size, cdata.data, req->mem, 1);
0
 
0
 done:
0
@@ -190,7 +195,7 @@ shoes_queue_download(shoes_download_request *req)
0
 }
0
 
0
 VALUE
0
-shoes_download_error(SHOES_DOWNLOAD_ERROR code)
0
+shoes_http_error(SHOES_DOWNLOAD_ERROR code)
0
 {
0
   return rb_str_new2(curl_easy_strerror(code));
0
 }
...
133
134
135
 
 
 
 
 
...
133
134
135
136
137
138
139
140
0
@@ -133,3 +133,8 @@ shoes_queue_download(shoes_download_request *req)
0
   ShoesHttp *http = [[ShoesHttp alloc] init];
0
   [http download: req];
0
 }
0
+
0
+VALUE
0
+shoes_http_error(SHOES_DOWNLOAD_ERROR code)
0
+{
0
+}
...
136
137
138
 
 
 
 
 
...
136
137
138
139
140
141
142
143
0
@@ -136,3 +136,8 @@ done:
0
   if (sess)
0
     WinHttpCloseHandle(sess);
0
 }
0
+
0
+VALUE
0
+shoes_http_error(SHOES_DOWNLOAD_ERROR code)
0
+{
0
+}
...
3701
3702
3703
3704
 
3705
3706
3707
...
3807
3808
3809
 
3810
3811
3812
...
3939
3940
3941
3942
3943
3944
3945
 
 
 
 
3946
3947
3948
...
3701
3702
3703
 
3704
3705
3706
3707
...
3807
3808
3809
3810
3811
3812
3813
...
3940
3941
3942
 
 
 
 
3943
3944
3945
3946
3947
3948
3949
0
@@ -3701,7 +3701,7 @@ shoes_message_download(VALUE self, void *data)
0
     case SHOES_HTTP_ERROR:
0
       proc = ATTR(dl->attr, error);
0
       if (!NIL_P(proc))
0
- shoes_safe_block(dl->parent, proc, rb_ary_new3(2, self, shoes_download_error(de->error)));
0
+ shoes_safe_block(dl->parent, proc, rb_ary_new3(2, self, shoes_http_error(de->error)));
0
     return 0;
0
 
0
     case SHOES_HTTP_COMPLETED:
0
@@ -3807,6 +3807,7 @@ shoes_download_transferred(VALUE self)
0
 EVENT_COMMON(download, download_klass, start);
0
 EVENT_COMMON(download, download_klass, progress);
0
 EVENT_COMMON(download, download_klass, finish);
0
+EVENT_COMMON(download, download_klass, error);
0
 
0
 //
0
 // Shoes::Response
0
@@ -3939,10 +3940,10 @@ shoes_ruby_init()
0
   s_URI = rb_intern("URI");
0
 
0
   s_now = rb_intern("now");
0
- s_debug = rb_intern("DEBUG");
0
- s_info = rb_intern("INFO");
0
- s_warn = rb_intern("WARN");
0
- s_error = rb_intern("ERROR");
0
+ s_debug = rb_intern("debug");
0
+ s_info = rb_intern("info");
0
+ s_warn = rb_intern("warn");
0
+ s_error = rb_intern("error");
0
 
0
   s_run = rb_intern("run");
0
   s_to_i = rb_intern("to_i");

Comments

    No one has commented yet.