error.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * File: error.h
  3. * Author: Arthur Brandao
  4. *
  5. * Created on 8 novembre 2018
  6. */
  7. #ifndef ERROR_H
  8. #define ERROR_H
  9. #include <stdio.h>
  10. #include <time.h>
  11. /* --- Macro --- */
  12. #define serror(str) fprintf(stderr, str" : %s\n", serrlib[serrno])
  13. #define strserror(index) serrlib[index]
  14. #define adderror(str) fprintf(stderr, "Erreur dans le fichier "__FILE__" ligne %d, %s\n", __LINE__, str)
  15. #define addperror(str) fprintf(stderr, "Erreur dans le fichier "__FILE__" ligne %d, ", __LINE__); perror(str" ")
  16. #define addserror(str) fprintf(stderr, "Erreur dans le fichier "__FILE__" ligne %d, %s : %s\n", __LINE__, str, strserror(serrno))
  17. /* --- Constantes Generales --- */
  18. #define ERR -1
  19. #define FAIL 0
  20. #define SUCCESS 1
  21. /* --- Constantes Erreurs --- */
  22. #define SENONE 0
  23. #define SESOCKET 1
  24. #define SEBIND 2
  25. #define SEACCEPT 3
  26. #define SERECEIVE 4
  27. #define SESEND 5
  28. #define SECLOSE 6
  29. #define SETYPE 7
  30. #define SEABORT 8
  31. /* --- Structure --- */
  32. typedef struct{
  33. int init; //Initialisée ou non
  34. char* filename; //Nom du fichier
  35. int errfd; //Descripteur de fichier de la sortie standard des erreurs
  36. time_t start; //TImestamp de debut
  37. /* Fonctions */
  38. void (*end)(); //Termine le gestionnaire d'erreur
  39. void (*exit)(); //Termine le programme avec EXIT_SUCCESS
  40. void (*exit_err)(); //Termine le programme avec EXIT_FAILURE
  41. void (*exit_status)(int); //Termine le programme avec un status utilisateur
  42. void (*exit_msg)(int, const char*, ...); //Termine le programme avec un status utilisateur et un message dans la sortie standard
  43. void (*add)(const char*, ...); //Ajoute un message dans le log
  44. void (*print)(const char*, ...); //Affiche un message dans la sortie d'erreur
  45. void (*printadd)(const char*, ...); //Fonction print + add
  46. }Error;
  47. /* --- Extern --- */
  48. extern int serrno; //Server Errno
  49. extern char* serrlib[];
  50. extern Error error;
  51. /* --- Fonctions --- */
  52. /**
  53. * Change un fd par la valeur d'un autre fd
  54. * @param int fd accueil
  55. * @param int fd source fermé par la fonction
  56. * @return int Le nouveau fd du fichier qui avait le fd d'accueil
  57. */
  58. int redirect_fd(int, int);
  59. /**
  60. * Change un fd par la valeur d'un autre fd
  61. * @param int fd accueil
  62. * @param int fd source
  63. * @return int Le nouveau fd du fichier qui avait le fd d'accueil
  64. */
  65. int redirect_fd2(int, int);
  66. /**
  67. * Initialise la gestion d'erreur
  68. * Le log sera nommé err-timestamp.log
  69. */
  70. void error_init();
  71. /**
  72. * Initialise le log d'erreur
  73. * @param char* Le nom du fichier de log
  74. */
  75. void error_finit(const char*);
  76. #endif /* ERROR_H */