Skip to content

Instantly share code, notes, and snippets.

@kgsws

kgsws/stdout.c Secret

Created November 12, 2017 20:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kgsws/86d56537343ea621a120ccfe2eaaa80d to your computer and use it in GitHub Desktop.
Save kgsws/86d56537343ea621a120ccfe2eaaa80d to your computer and use it in GitHub Desktop.
#include <libtransistor/nx.h>
#include <stdio.h>
#define make_ip(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
static FILE customout;
static int sck;
const struct sockaddr_in server_addr =
{
.sin_family = AF_INET,
.sin_port = htons(2991),
.sin_addr = {
.s_addr = make_ip(192,168,1,47)
}
};
// dummy for linker fail
void *__trunctfdf2()
{
return NULL;
}
int stdout_debug(struct _reent *reent, void *v, const char *ptr, int len)
{
bsd_send(sck, ptr, len, 0);
return len;
}
int main()
{
svcSleepThread(100000000);
if(sm_init() != RESULT_OK)
return 1;
if(bsd_init() != RESULT_OK)
{
sm_finalize();
return 1;
}
sck = bsd_socket(2, 1, 6); // AF_INET, SOCK_STREAM, PROTO_TCP
if(sck < 0)
{
bsd_finalize();
sm_finalize();
return 1;
}
if(bsd_connect(sck, (struct sockaddr*) &server_addr, sizeof(server_addr)) < 0)
{
bsd_finalize();
sm_finalize();
return 1;
}
// this exact sequence will redirect stdout to socket
printf("_"); // init stdout
customout._write = stdout_debug;
customout._flags = __SWR | __SNBF;
customout._bf._base = (void*)1;
stdout = &customout;
stderr = &customout;
printf("test %i %x\n", -123, 2991);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment