#include #include #include #include #include "pipeshare.h" #define MAX(a,b) (a>b?a:b) #define failmagic(...) do { \ carp(__VA_ARGS__,": ",magic_error(magic)); \ return 0; \ } while(0) int extension(int64 fd,char result[16]) { magic_t magic=magic_open(MAGIC_EXTENSION); if(!magic) failmagic("initialize libmagic"); if(magic_load(magic,NULL)<0) failmagic("load magic database"); const char *extensions=magic_descriptor(magic,fd); if(!extensions) failmagic("get magic data"); size_t l=MAX(str_chr(extensions,'/'),16); byte_copy(result,l,extensions); result[l]=0; magic_close(magic); if(str_equal(result,"???")) str_copy(result,"txt"); return 1; } #undef failmagic