main.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <sys/types.h>
  7. #ifdef _WIN32
  8. #include <io.h>
  9. #include <windows.h>
  10. #else
  11. #include <unistd.h>
  12. #endif
  13. /* Who cares about stack sizes in test programs anyway */
  14. #define LINE_LENGTH 4096
  15. static int
  16. intrp_copyfile (char * src, char * dest)
  17. {
  18. #ifdef _WIN32
  19. if (!CopyFile (src, dest, FALSE))
  20. return 1;
  21. return 0;
  22. #else
  23. return execlp ("cp", "copyfile", src, dest, NULL);
  24. #endif
  25. }
  26. static void
  27. parser_get_line (FILE * f, char line[LINE_LENGTH])
  28. {
  29. if (!fgets (line, LINE_LENGTH, f))
  30. fprintf (stderr, "%s\n", strerror (errno));
  31. }
  32. int
  33. main (int argc, char * argv[])
  34. {
  35. FILE *f = NULL;
  36. char line[LINE_LENGTH];
  37. if (argc != 4) {
  38. fprintf (stderr, "Invalid number of arguments: %i\n", argc);
  39. goto err;
  40. }
  41. if ((f = fopen (argv[1], "r")) == NULL) {
  42. fprintf (stderr, "%s\n", strerror (errno));
  43. goto err;
  44. }
  45. parser_get_line (f, line);
  46. if (!line || line[0] != '#' || line[1] != '!') {
  47. fprintf (stderr, "Invalid script\n");
  48. goto err;
  49. }
  50. parser_get_line (f, line);
  51. if (!line || strncmp (line, "copy", 4) != 0) {
  52. fprintf (stderr, "Syntax error: %s\n", line);
  53. goto err;
  54. }
  55. return intrp_copyfile (argv[2], argv[3]);
  56. err:
  57. fclose (f);
  58. return 1;
  59. }