Няшная / Говнокод #3392 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
void init(void)
{
	int i,j;

	setup();
	if (!fork())
		_exit(execve("/bin/update",NULL,NULL));
	(void) open("/dev/tty0",O_RDWR,0);
	(void) dup(0);
	(void) dup(0);
	printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS,
		NR_BUFFERS*BLOCK_SIZE);
	printf(" Ok.\n\r");
	if ((i=fork())<0)
		printf("Fork failed in init\r\n");
	else if (!i) {
		close(0);close(1);close(2);
		setsid();
		(void) open("/dev/tty0",O_RDWR,0);
		(void) dup(0);
		(void) dup(0);
		_exit(execve("/bin/sh",argv,envp));
	}
	j=wait(&i);
	printf("child %d died with code %04x\n",j,i);
	sync();
	_exit(0);	/* NOTE! _exit, not exit() */
}

Говно, вошедшее в историю.

Запостил: avaaron avaaron, (Updated )

Комментарии (7) RSS

  • похоже на быструю прожку для правильной демонизации - двойной форк + сетсид - программы заданной на коммандной строке.

    только как-то видеть на конце exec("/bin/sh") ... не очень привычно.

    и вызов _exit() выдает что там где-то С++ порылся - либо в коде либо в мозгах.
    Ответить
    • При чем тут C++? _exit() зовется, если не нужно вызывать функции, зарегистрированные с помощью atexit(). man 2 _exit
      Ответить
      • я еще не разу не видел проблем с этим в С.

        а вот статические С++ объекты которые автоматом добавляют вызов деструкторов в atexit() коркают такие говнокоды с легкостью.
        Ответить
  • >наверное линуксоид какой писал....
    Линус это писал для kernel 0.01. В 1991г.
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8