vlmcsdmulti.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /* Multi-Call Binary for vlmcs and vlmcsd */
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #ifndef CONFIG
  4. #define CONFIG "config.h"
  5. #endif // CONFIG
  6. #include CONFIG
  7. #if MULTI_CALL_BINARY < 1
  8. #error "Please define MULTI_CALL_BINARY=1 when compiling this file."
  9. #endif
  10. #include <stdio.h>
  11. #if !_MSC_VER
  12. #include <libgen.h>
  13. #else // _MSC_VER
  14. #include <stdlib.h>
  15. #include "helpers.h"
  16. #endif // _MSC_VER
  17. #include "vlmcs.h"
  18. #include "vlmcsd.h"
  19. #include "types.h"
  20. #include "shared_globals.h"
  21. #include "output.h"
  22. #if (defined(_WIN32) || defined(__CYGWIN__))
  23. #define compare strcasecmp // Best for case-preserving (but otherwise case-insensitive) filesystems
  24. #else // native Unix
  25. #define compare strcmp // for case-sensitive filesystems
  26. #endif // native Unix
  27. #if _MSC_VER
  28. static char* basename(const char* fullname)
  29. {
  30. size_t len = strlen(fullname);
  31. char* filename = (char*)vlmcsd_malloc(len + 1);
  32. char* extension = (char*)vlmcsd_malloc(len + 1);
  33. static char result[64];
  34. _splitpath(fullname, NULL, NULL, filename, extension);
  35. if (strlen(filename) + strlen(extension) > 63)
  36. {
  37. *result = 0;
  38. goto finally;
  39. }
  40. strcpy(result, filename);
  41. strcat(result, extension);
  42. finally:
  43. free(filename);
  44. free(extension);
  45. return result;
  46. }
  47. #endif // _MSC_VER
  48. int main(int argc, CARGV argv)
  49. {
  50. multi_argv = argv;
  51. multi_argc = argc;
  52. if (!compare(basename((char*)*argv), "vlmcsd"))
  53. return server_main(argc, argv);
  54. if (!compare(basename((char*)*argv), "vlmcs"))
  55. return client_main(argc, argv);
  56. #ifdef _WIN32
  57. if (!compare(basename((char*)*argv), "vlmcsd.exe"))
  58. return server_main(argc, argv);
  59. if (!compare(basename((char*)*argv), "vlmcs.exe"))
  60. return client_main(argc, argv);
  61. #endif // _WIN32
  62. if (argc > 1)
  63. {
  64. if (!strcmp((char*)argv[1], "vlmcsd"))
  65. return server_main(argc - 1, argv + 1);
  66. if (!strcmp((char*)argv[1], "vlmcs"))
  67. return client_main(argc - 1, argv + 1);
  68. }
  69. errorout(
  70. "vlmcsdmulti %s\n\n"
  71. "Usage:\n"
  72. "\t%s vlmcsd [<vlmcsd command line>]\n"
  73. "\t%s vlmcs [<vlmcs command line>]\n\n",
  74. Version, *argv, *argv
  75. );
  76. return !0;
  77. }