.
This commit is contained in:
commit
aae369b9c8
9 changed files with 334 additions and 0 deletions
32
extension.c
Normal file
32
extension.c
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#include <magic.h>
|
||||
#include <libowfat/errmsg.h>
|
||||
#include <libowfat/byte.h>
|
||||
#include <libowfat/str.h>
|
||||
|
||||
#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
|
||||
Loading…
Add table
Add a link
Reference in a new issue