00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00039 #include <string.h>
00040 #include <errno.h>
00041
00042 #ifdef __WIN32__
00043 #include <winsock.h>
00044 #else
00045 #include <netdb.h>
00046 #endif
00047
00048 #include "splt.h"
00049
00050 static void splt_e_set_strerr_msg(splt_state *state, const char *message);
00051
00052 void splt_e_set_errors_default_values(splt_state *state)
00053 {
00054 splt_error *err = &state->err;
00055 err->error_data = NULL;
00056 err->strerror_msg = NULL;
00057 }
00058
00059 void splt_e_free_errors(splt_state *state)
00060 {
00061 splt_error *err = &state->err;
00062
00063 if (err->error_data)
00064 {
00065 free(err->error_data);
00066 err->error_data = NULL;
00067 }
00068
00069 if (err->strerror_msg)
00070 {
00071 free(err->strerror_msg);
00072 err->strerror_msg = NULL;
00073 }
00074 }
00075
00076 void splt_e_set_error_data(splt_state *state, const char *error_data)
00077 {
00078 splt_error *err = &state->err;
00079
00080 if (err->error_data)
00081 {
00082 free(err->error_data);
00083 err->error_data = NULL;
00084 }
00085
00086 if (error_data)
00087 {
00088 splt_su_copy(error_data, &err->error_data);
00089 }
00090 }
00091
00092 void splt_e_set_error_data_from_splitpoint(splt_state *state, long splitpoint)
00093 {
00094 long mins = 0, secs = 0, hundr = 0;
00095 splt_sp_get_mins_secs_hundr_from_splitpoint(splitpoint, &mins, &secs, &hundr);
00096 char str_value[256] = { '\0' };
00097 snprintf(str_value,256,"%ldm%lds%ldh",mins,secs,hundr);
00098 splt_e_set_error_data(state, str_value);
00099 }
00100
00101 void splt_e_set_error_data_from_splitpoints(splt_state *state, long splitpoint1,
00102 long splitpoint2)
00103 {
00104 long mins = 0, secs = 0, hundr = 0;
00105 long mins2 = 0, secs2 = 0, hundr2 = 0;
00106 splt_sp_get_mins_secs_hundr_from_splitpoint(splitpoint1, &mins, &secs, &hundr);
00107 splt_sp_get_mins_secs_hundr_from_splitpoint(splitpoint2, &mins2, &secs2, &hundr2);
00108 char str_value[256] = { '\0' };
00109 snprintf(str_value,256,"%ldm%lds%ldh, %ldm%lds%ldh",
00110 mins, secs, hundr, mins2, secs2, hundr2);
00111 splt_e_set_error_data(state, str_value);
00112 }
00113
00114 void splt_e_clean_strerror_msg(splt_state *state)
00115 {
00116 splt_e_set_strerr_msg(state, NULL);
00117 }
00118
00119 void splt_e_set_strerror_msg(splt_state *state)
00120 {
00121 splt_e_set_strerr_msg(state, strerror(errno));
00122 }
00123
00124 void splt_e_set_strherror_msg(splt_state *state)
00125 {
00126 #ifndef __WIN32__
00127 splt_e_set_strerr_msg(state, hstrerror(h_errno));
00128 #else
00129 splt_e_set_strerr_msg(state, _("Network error"));
00130 #endif
00131 }
00132
00133 void splt_e_set_strerr_msg_with_data(splt_state *state, const char *message, const char *data)
00134 {
00135 splt_e_set_strerr_msg(state, message);
00136 splt_e_set_error_data(state, data);
00137 }
00138
00139 void splt_e_set_strerror_msg_with_data(splt_state *state, const char *data)
00140 {
00141 splt_e_set_strerror_msg(state);
00142 splt_e_set_error_data(state, data);
00143 }
00144
00145 void splt_e_error(int error_type, const char *function,
00146 int arg_int, const char *arg_char)
00147 {
00148 switch (error_type)
00149 {
00150 case SPLT_IERROR_INT:
00151 fprintf(stderr, "libmp3splt: error in %s with value %d\n",
00152 function, arg_int);
00153 fflush(stderr);
00154 break;
00155 case SPLT_IERROR_SET_ORIGINAL_TAGS:
00156 fprintf(stderr,
00157 "libmp3splt: cannot set original file tags, "
00158 "libmp3splt not compiled with libid3tag\n");
00159 fflush(stderr);
00160 break;
00161 case SPLT_IERROR_CHAR:
00162 fprintf(stderr,
00163 "libmp3splt: error in %s with message '%s'\n",function,arg_char);
00164 fflush(stderr);
00165 break;
00166 default:
00167 fprintf(stderr, "libmp3splt: unknown error in %s\n", function);
00168 fflush(stderr);
00169 break;
00170 }
00171 }
00172
00173 char *splt_e_strerror(splt_state *state, splt_code error_code)
00174 {
00175 switch (error_code)
00176 {
00177 case SPLT_MIGHT_BE_VBR:
00178 return splt_su_get_formatted_message(state,
00179 _(" warning: might be VBR, use frame mode"));
00180 case SPLT_SYNC_OK:
00181 return splt_su_get_formatted_message(state, _(" error mode ok"));
00182 case SPLT_ERR_SYNC:
00183 return splt_su_get_formatted_message(state, _(" error: unknown sync error"));
00184 case SPLT_ERR_NO_SYNC_FOUND:
00185 return splt_su_get_formatted_message(state, _(" no sync errors found"));
00186 case SPLT_ERR_TOO_MANY_SYNC_ERR:
00187 return splt_su_get_formatted_message(state,
00188 _(" sync error: too many sync errors"));
00189
00190 case SPLT_FREEDB_MAX_CD_REACHED:
00191 return splt_su_get_formatted_message(state,
00192 _(" maximum number of found CD reached"));
00193 case SPLT_CUE_OK:
00194 return splt_su_get_formatted_message(state, _(" cue file processed"));
00195 case SPLT_CDDB_OK:
00196 return splt_su_get_formatted_message(state, _(" cddb file processed"));
00197 case SPLT_FREEDB_FILE_OK:
00198 return splt_su_get_formatted_message(state, _(" freedb file downloaded"));
00199 case SPLT_FREEDB_OK:
00200 return splt_su_get_formatted_message(state, _(" freedb search processed"));
00201
00202 case SPLT_FREEDB_ERROR_INITIALISE_SOCKET:
00203 return splt_su_get_formatted_message(state,
00204 _(" freedb error: cannot initialise socket (%s)"),
00205 state->err.strerror_msg);
00206 case SPLT_FREEDB_ERROR_CANNOT_GET_HOST:
00207 return splt_su_get_formatted_message(state,
00208 _(" freedb error: cannot get host '%s' by name (%s)"),
00209 state->err.error_data, state->err.strerror_msg);
00210 case SPLT_FREEDB_ERROR_CANNOT_OPEN_SOCKET:
00211 return splt_su_get_formatted_message(state,
00212 _(" freedb error: cannot open socket (%s)"));
00213 case SPLT_FREEDB_ERROR_CANNOT_CONNECT:
00214 return splt_su_get_formatted_message(state,
00215 _(" freedb error: cannot connect to host '%s' (%s)"),
00216 state->err.error_data, state->err.strerror_msg);
00217 case SPLT_FREEDB_ERROR_CANNOT_DISCONNECT:
00218 return splt_su_get_formatted_message(state,
00219 _(" freedb error: cannot disconnect from host (%s)"),
00220 state->err.strerror_msg);
00221 case SPLT_FREEDB_ERROR_CANNOT_SEND_MESSAGE:
00222 return splt_su_get_formatted_message(state,
00223 _(" freedb error: cannot send message to host '%s' (%s)"),
00224 state->err.error_data, state->err.strerror_msg);
00225 case SPLT_FREEDB_ERROR_INVALID_SERVER_ANSWER:
00226 return splt_su_get_formatted_message(state,
00227 _(" freedb error: invalid server answer"));
00228 case SPLT_FREEDB_ERROR_SITE_201:
00229 return splt_su_get_formatted_message(state,
00230 _(" freedb error: site returned code 201"));
00231 case SPLT_FREEDB_ERROR_SITE_200:
00232 return splt_su_get_formatted_message(state,
00233 _(" freedb error: site returned code 200"));
00234 case SPLT_FREEDB_ERROR_BAD_COMMUNICATION:
00235 return splt_su_get_formatted_message(state,
00236 _(" freedb error: bad communication with site"));
00237 case SPLT_FREEDB_ERROR_GETTING_INFOS:
00238 return splt_su_get_formatted_message(state,
00239 _(" freedb error: could not get infos from site '%s'"),
00240 state->err.error_data);
00241 case SPLT_FREEDB_NO_CD_FOUND:
00242 return splt_su_get_formatted_message(state, _(" no CD found for this search"));
00243 case SPLT_FREEDB_ERROR_CANNOT_RECV_MESSAGE:
00244 return splt_su_get_formatted_message(state,
00245 _(" freedb error: cannot receive message from server '%s' (%s)"),
00246 state->err.error_data, state->err.strerror_msg);
00247 case SPLT_INVALID_CUE_FILE:
00248 return splt_su_get_formatted_message(state, _(" cue error: invalid cue file '%s'"),
00249 state->err.error_data);
00250 case SPLT_INVALID_CDDB_FILE:
00251 return splt_su_get_formatted_message(state, _(" cddb error: invalid cddb file '%s'"),
00252 state->err.error_data);
00253 case SPLT_FREEDB_NO_SUCH_CD_IN_DATABASE:
00254 return splt_su_get_formatted_message(state,
00255 _(" freedb error: No such CD entry in database"));
00256 case SPLT_FREEDB_ERROR_SITE:
00257 return splt_su_get_formatted_message(state,
00258 _(" freedb error: site returned an unknown error"));
00259
00260 case SPLT_DEWRAP_OK:
00261 return splt_su_get_formatted_message(state, _(" wrap split ok"));
00262
00263 case SPLT_DEWRAP_ERR_FILE_LENGTH:
00264 return splt_su_get_formatted_message(state, _(" wrap error: incorrect file length"));
00265 case SPLT_DEWRAP_ERR_VERSION_OLD:
00266 return splt_su_get_formatted_message(state,
00267 _(" wrap error: libmp3splt version too old for this wrap file"));
00268 case SPLT_DEWRAP_ERR_NO_FILE_OR_BAD_INDEX:
00269 return splt_su_get_formatted_message(state,
00270 _(" wrap error: no file found or bad index"));
00271 case SPLT_DEWRAP_ERR_FILE_DAMAGED_INCOMPLETE:
00272 return splt_su_get_formatted_message(state,
00273 _(" wrap error: file '%s' damaged or incomplete"),
00274 state->err.error_data);
00275 case SPLT_DEWRAP_ERR_FILE_NOT_WRAPED_DAMAGED:
00276 return splt_su_get_formatted_message(state,
00277 _(" wrap error: maybe not a wrapped file or wrap file damaged"));
00278
00279 case SPLT_OK_SPLIT_EOF:
00280 return splt_su_get_formatted_message(state, _(" file split (EOF)"));
00281 case SPLT_NO_SILENCE_SPLITPOINTS_FOUND:
00282 return splt_su_get_formatted_message(state, _(" no silence splitpoints found"));
00283 case SPLT_TIME_SPLIT_OK:
00284 return splt_su_get_formatted_message(state, _(" time split ok"));
00285 case SPLT_LENGTH_SPLIT_OK:
00286 return splt_su_get_formatted_message(state, _(" split in equal tracks ok"));
00287 case SPLT_SILENCE_OK:
00288 return splt_su_get_formatted_message(state, _(" silence split ok"));
00289 case SPLT_TRIM_SILENCE_OK:
00290 return splt_su_get_formatted_message(state, _(" trim using silence split ok"));
00291 case SPLT_SPLITPOINT_BIGGER_THAN_LENGTH:
00292 return splt_su_get_formatted_message(state,
00293 _(" file split, splitpoints bigger than length"));
00294 case SPLT_OK_SPLIT:
00295 return splt_su_get_formatted_message(state, _(" file split"));
00296 case SPLT_OK:
00297 return NULL;
00298 case SPLT_ERROR_SPLITPOINTS:
00299 return splt_su_get_formatted_message(state, _(" error: not enough splitpoints (<2)"));
00300 case SPLT_ERROR_CANNOT_OPEN_FILE:
00301 return splt_su_get_formatted_message(state,
00302 _(" error: cannot open file '%s': %s"),
00303 state->err.error_data, state->err.strerror_msg);
00304 case SPLT_ERROR_CANNOT_CLOSE_FILE:
00305 return splt_su_get_formatted_message(state,
00306 _(" error: cannot close file '%s': %s"),
00307 state->err.error_data, state->err.strerror_msg);
00308 case SPLT_ERROR_INVALID:
00309 ;
00310 int err = SPLT_OK;
00311 const char *plugin_name = splt_p_get_name(state, &err);
00312 return splt_su_get_formatted_message(state,
00313 _(" error: invalid input file '%s' for '%s' plugin"),
00314 state->err.error_data, plugin_name);
00315 case SPLT_ERROR_EQUAL_SPLITPOINTS:
00316 return splt_su_get_formatted_message(state,
00317 _(" error: splitpoints are equal (%s)"),
00318 state->err.error_data);
00319 case SPLT_ERROR_TIME_SPLIT_VALUE_INVALID:
00320 return splt_su_get_formatted_message(state, _(" error: invalid time split value"));
00321 case SPLT_ERROR_LENGTH_SPLIT_VALUE_INVALID:
00322 return splt_su_get_formatted_message(state,
00323 _(" error: invalid number of files for equal length split"));
00324 case SPLT_ERROR_CANNOT_GET_TOTAL_TIME:
00325 return splt_su_get_formatted_message(state,
00326 _(" error: cannot get total audio length"));
00327 case SPLT_ERROR_LIBID3:
00328 return splt_su_get_formatted_message(state,
00329 _(" error: unknown error while setting tags with libid3"));
00330 case SPLT_ERROR_SPLITPOINTS_NOT_IN_ORDER:
00331 return splt_su_get_formatted_message(state,
00332 _(" error: the splitpoints are not in order (%s)"),
00333 state->err.error_data);
00334 case SPLT_ERROR_NEGATIVE_SPLITPOINT:
00335 return splt_su_get_formatted_message(state, _(" error: negative splitpoint (%s)"),
00336 state->err.error_data);
00337 case SPLT_ERROR_INCORRECT_PATH:
00338 return splt_su_get_formatted_message(state,
00339 _(" error: bad destination folder '%s' (%s)"),
00340 state->err.error_data, state->err.strerror_msg);
00341 case SPLT_ERROR_INCOMPATIBLE_OPTIONS:
00342 return splt_su_get_formatted_message(state, _(" error: incompatible options"));
00343 case SPLT_ERROR_INPUT_OUTPUT_SAME_FILE:
00344 return splt_su_get_formatted_message(state,
00345 _(" input and output are the same file ('%s')"),
00346 state->err.error_data);
00347 case SPLT_ERROR_CANNOT_ALLOCATE_MEMORY:
00348 return splt_su_get_formatted_message(state, _(" error: cannot allocate memory"));
00349 case SPLT_ERROR_CANNOT_OPEN_DEST_FILE:
00350 return splt_su_get_formatted_message(state,
00351 _(" error: cannot open destination file '%s': %s"),
00352 state->err.error_data,state->err.strerror_msg);
00353 case SPLT_ERROR_CANT_WRITE_TO_OUTPUT_FILE:
00354 return splt_su_get_formatted_message(state,
00355 _(" error: cannot write to output file '%s'"),
00356 state->err.error_data);
00357 case SPLT_ERROR_WHILE_READING_FILE:
00358 return splt_su_get_formatted_message(state,
00359 _(" error: error while reading file '%s': %s"),
00360 state->err.error_data, state->err.strerror_msg);
00361 case SPLT_ERROR_SEEKING_FILE:
00362 return splt_su_get_formatted_message(state, _(" error: cannot seek file '%s'"),
00363 state->err.error_data);
00364 case SPLT_ERROR_BEGIN_OUT_OF_FILE:
00365 return splt_su_get_formatted_message(state, _(" error: begin point out of file"));
00366 case SPLT_ERROR_INEXISTENT_FILE:
00367 return splt_su_get_formatted_message(state, _(" error: inexistent file '%s': %s"),
00368 state->err.error_data,state->err.strerror_msg);
00369 case SPLT_SPLIT_CANCELLED:
00370 return splt_su_get_formatted_message(state, _(" split process cancelled"));
00371 case SPLT_ERROR_LIBRARY_LOCKED:
00372 return splt_su_get_formatted_message(state, _(" error: library locked"));
00373 case SPLT_ERROR_STATE_NULL:
00374 return splt_su_get_formatted_message(state,
00375 _(" error: the state has not been initialized with 'mp3splt_new_state'"));
00376 case SPLT_ERROR_NEGATIVE_TIME_SPLIT:
00377 return splt_su_get_formatted_message(state, _(" error: negative time split"));
00378 case SPLT_ERROR_CANNOT_CREATE_DIRECTORY:
00379 return splt_su_get_formatted_message(state,
00380 _(" error: cannot create directory '%s'"),
00381 state->err.error_data);
00382 case SPLT_ERROR_NO_PLUGIN_FOUND:
00383 return splt_su_get_formatted_message(state, _(" error: no plugin found"));
00384 case SPLT_ERROR_CANNOT_INIT_LIBLTDL:
00385 return splt_su_get_formatted_message(state, _(" error: cannot initiate libltdl"));
00386 case SPLT_ERROR_CRC_FAILED:
00387 return splt_su_get_formatted_message(state, _(" error: CRC failed"));
00388 case SPLT_ERROR_NO_PLUGIN_FOUND_FOR_FILE:
00389 return splt_su_get_formatted_message(state,
00390 _(" error: no plugin matches the file '%s'"),
00391 state->err.error_data);
00392
00393 case SPLT_OUTPUT_FORMAT_OK:
00394 return NULL;
00395 case SPLT_OUTPUT_FORMAT_AMBIGUOUS:
00396 return splt_su_get_formatted_message(state,
00397 _(" warning: output format ambiguous (@t or @n missing)"));
00398
00399 case SPLT_OUTPUT_FORMAT_ERROR:
00400 if (state->err.error_data != NULL && strlen(state->err.error_data) == 1)
00401 {
00402 return splt_su_get_formatted_message(state,
00403 _(" error: illegal variable '@%s' in output format"),
00404 state->err.error_data);
00405 }
00406 else
00407 {
00408 return splt_su_get_formatted_message(state, _(" error: invalid output format"));
00409 }
00410
00411 case SPLT_ERROR_INEXISTENT_SPLITPOINT:
00412 return splt_su_get_formatted_message(state, _(" error: inexistent splitpoint"));
00413
00414 case SPLT_ERROR_PLUGIN_ERROR:
00415 return splt_su_get_formatted_message(state, _(" plugin error: '%s'"),
00416 state->err.error_data);
00417
00418 case SPLT_PLUGIN_ERROR_UNSUPPORTED_FEATURE:
00419 ;
00420 splt_plugins *pl = state->plug;
00421 int current_plugin = splt_p_get_current_plugin(state);
00422 return splt_su_get_formatted_message(state,
00423 _(" error: unsupported feature for the plugin '%s'"),
00424 pl->data[current_plugin].info.name);
00425 case SPLT_AUDACITY_OK:
00426 return splt_su_get_formatted_message(state, _(" audacity labels file processed"));
00427 case SPLT_INVALID_AUDACITY_FILE:
00428 return splt_su_get_formatted_message(state,
00429 _(" audacity error: invalid audacity labels file '%s'"),
00430 state->err.error_data);
00431 case SPLT_INVALID_REGEX:
00432 return splt_su_get_formatted_message(state,
00433 _(" regular expression error: %s"), state->err.error_data);
00434 case SPLT_REGEX_UNAVAILABLE:
00435 return splt_su_get_formatted_message(state, _(" regular expressions are not supported"));
00436 case SPLT_REGEX_NO_MATCH:
00437 return splt_su_get_formatted_message(state, _(" regular expression error: no match"));
00438 case SPLT_REGEX_OK:
00439 return splt_su_get_formatted_message(state, _(" regular expression ok"));
00440 }
00441
00442 return NULL;
00443 }
00444
00445 static void splt_e_set_strerr_msg(splt_state *state, const char *message)
00446 {
00447 splt_su_copy(message, &state->err.strerror_msg);
00448 }
00449