comparison src/ft.c @ 9796:68574cef02e2

[gaim-migrate @ 10664] Thanks to Dave West for being cool. When I grow up I want to be a p scichologiest. Sometimes I wish the coyote would catch the road runner. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Fri, 20 Aug 2004 21:57:18 +0000
parents 719fc957e9ee
children 255596f41014
comparison
equal deleted inserted replaced
9795:719fc957e9ee 9796:68574cef02e2
110 g_return_if_fail(xfer != NULL); 110 g_return_if_fail(xfer != NULL);
111 111
112 xfer->status = status; 112 xfer->status = status;
113 } 113 }
114 114
115 /* 115 static void gaim_xfer_show_file_error(GaimXfer *xfer, const char *filename)
116 * XXX - I REALLY feel like this should be using strerror.
117 * Also, should this use gaim_xfer_error?
118 */
119 static void gaim_xfer_show_file_error(const char *filename)
120 { 116 {
121 gchar *msg = NULL; 117 gchar *msg = NULL;
122 118 GaimXferType xfer_type = gaim_xfer_get_type(xfer);
123 switch (errno) 119
124 { 120 switch(xfer_type) {
125 case ENOENT: 121 case GAIM_XFER_SEND:
126 msg = g_strdup_printf(_("%s does not exist.\n"), filename); 122 msg = g_strdup_printf(_("Error reading %s: \n%s.\n"),
123 filename, strerror(errno));
127 break; 124 break;
128 case EISDIR: 125 case GAIM_XFER_RECEIVE:
129 msg = g_strdup_printf(_("%s is a directory, not a file.\n"), filename); 126 msg = g_strdup_printf(_("Error writing %s: \n%s.\n"),
130 break; 127 filename, strerror(errno));
131 case ENOTDIR:
132 msg = g_strdup_printf( _("A component of %s is not a directory.\n"), filename);
133 break;
134 #ifndef _WIN32
135 case ELOOP:
136 msg = g_strdup_printf( _("Too many symbolic links in path for %s\n"), filename);
137 break;
138 case ETXTBSY:
139 msg = g_strdup_printf(_("Cannot write %s: File is in use\n"), filename);
140 break;
141 #endif
142 case EACCES:
143 msg = g_strdup_printf( _("Permission denied accessing %s\n"), filename);
144 break;
145 case ENAMETOOLONG:
146 msg = g_strdup_printf(_("File name too long: %s\n"), filename);
147 break;
148 case EROFS:
149 msg = g_strdup_printf(_("Cannot write %s: Read only filesystem\n"), filename);
150 break;
151 case ENOSPC:
152 msg = g_strdup_printf(_("Cannot write %s: No space on filesystem\n"), filename);
153 break;
154 case EMFILE:
155 msg = g_strdup_printf(_("Cannot open %s: Gaim has too many files open\n"), filename);
156 break;
157 case ENFILE:
158 msg = g_strdup_printf(_("Cannot open %s: Your user or system has too many files open\n"), filename);
159 break;
160 case ENOMEM:
161 msg = g_strdup_printf(_("Cannot open %s: Not enough memory\n"), filename);
162 break; 128 break;
163 default: 129 default:
164 msg = NULL; 130 msg = NULL;
131 msg = g_strdup_printf(_("Error accessing %s: \n%s.\n"),
132 filename, strerror(errno));
165 break; 133 break;
166 } 134 }
167 135
168 if (msg != NULL) { 136 gaim_xfer_error(xfer_type, xfer->who, msg);
169 gaim_notify_error(NULL, NULL, msg, NULL); 137 g_free(msg);
170 g_free(msg);
171 }
172 } 138 }
173 139
174 static void 140 static void
175 gaim_xfer_choose_file_ok_cb(void *user_data, const char *filename) 141 gaim_xfer_choose_file_ok_cb(void *user_data, const char *filename)
176 { 142 {
183 /* File not found. */ 149 /* File not found. */
184 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { 150 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) {
185 gaim_xfer_request_accepted(xfer, filename); 151 gaim_xfer_request_accepted(xfer, filename);
186 } 152 }
187 else { 153 else {
188 gaim_xfer_show_file_error(filename); 154 gaim_xfer_show_file_error(xfer, filename);
189 gaim_xfer_request_denied(xfer); 155 gaim_xfer_request_denied(xfer);
190 } 156 }
191 } 157 }
192 else if ((gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) && 158 else if ((gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) &&
193 (st.st_size == 0)) { 159 (st.st_size == 0)) {
363 gaim_xfer_unref(xfer); 329 gaim_xfer_unref(xfer);
364 return; 330 return;
365 } 331 }
366 332
367 if (stat(filename, &st) == -1) { 333 if (stat(filename, &st) == -1) {
368 gaim_xfer_show_file_error(filename); 334 gaim_xfer_show_file_error(xfer, filename);
369 gaim_xfer_unref(xfer); 335 gaim_xfer_unref(xfer);
370 return; 336 return;
371 } 337 }
372 338
373 gaim_xfer_set_local_filename(xfer, filename); 339 gaim_xfer_set_local_filename(xfer, filename);
767 733
768 xfer->dest_fp = fopen(gaim_xfer_get_local_filename(xfer), 734 xfer->dest_fp = fopen(gaim_xfer_get_local_filename(xfer),
769 type == GAIM_XFER_RECEIVE ? "wb" : "rb"); 735 type == GAIM_XFER_RECEIVE ? "wb" : "rb");
770 736
771 if (xfer->dest_fp == NULL) { 737 if (xfer->dest_fp == NULL) {
772 gaim_xfer_show_file_error(gaim_xfer_get_local_filename(xfer)); 738 gaim_xfer_show_file_error(xfer, gaim_xfer_get_local_filename(xfer));
773 gaim_xfer_cancel_local(xfer); 739 gaim_xfer_cancel_local(xfer);
774 return; 740 return;
775 } 741 }
776 742
777 xfer->watcher = gaim_input_add(xfer->fd, cond, transfer_cb, xfer); 743 xfer->watcher = gaim_input_add(xfer->fd, cond, transfer_cb, xfer);