Signal.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /**
  2. * Copyright (c) 2006-2009 LOVE Development Team
  3. *
  4. * This software is provided 'as-is', without any express or implied
  5. * warranty. In no event will the authors be held liable for any damages
  6. * arising from the use of this software.
  7. *
  8. * Permission is granted to anyone to use this software for any purpose,
  9. * including commercial applications, and to alter it and redistribute it
  10. * freely, subject to the following restrictions:
  11. *
  12. * 1. The origin of this software must not be misrepresented; you must not
  13. * claim that you wrote the original software. If you use this software
  14. * in a product, an acknowledgment in the product documentation would be
  15. * appreciated but is not required.
  16. * 2. Altered source versions must be plainly marked as such, and must not be
  17. * misrepresented as being the original software.
  18. * 3. This notice may not be removed or altered from any source distribution.
  19. **/
  20. #include "Signal.h"
  21. namespace love
  22. {
  23. namespace signal
  24. {
  25. namespace posix
  26. {
  27. Signal::Signal()
  28. : signals(0)
  29. {
  30. cb = 0;
  31. }
  32. Signal::~Signal()
  33. {
  34. ::signal(signals, SIG_DFL);
  35. }
  36. bool Signal::registerSignal(int sgn)
  37. {
  38. signals |= sgn;
  39. ::signal(sgn, (void (*)(int)) &handler);
  40. }
  41. void Signal::setCallback(lua_State *L)
  42. {
  43. luax_assert_argc(L, 1, 1);
  44. luax_assert_function(L, -1);
  45. if(cb != 0)
  46. {
  47. delete cb;
  48. cb = 0;
  49. }
  50. cb = new Reference(L);
  51. }
  52. void handler(int signal)
  53. {
  54. if (cb == 0)
  55. return;
  56. lua_State *L = cb->getL();
  57. cb->push();
  58. lua_pushnumber(L, signal);
  59. lua_call(L, 1, 0);
  60. }
  61. const char * Signal::getName() const
  62. {
  63. return "love.signal.posix";
  64. }
  65. } // posix
  66. } // signal
  67. } // love