Mercurial > pidgin
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); |
