diff options
Diffstat (limited to 'src/xattr.c')
| -rw-r--r-- | src/xattr.c | 37 | 
1 files changed, 37 insertions, 0 deletions
diff --git a/src/xattr.c b/src/xattr.c new file mode 100644 index 000000000..fbc09c207 --- /dev/null +++ b/src/xattr.c @@ -0,0 +1,37 @@ +#include <sys/types.h> +#include <sys/xattr.h> /* include header from libc, not from libattr */ +#include <string.h> +#include <curl/curl.h> +#include "xattr.h" + +/* mapping table of curl metadata to extended attribute names */ +static struct xattr_mapping { +  char *attr; /* name of the xattr */ +  CURLINFO info; +} mappings[] = { +  /* mappings proposed by +   * http://freedesktop.org/wiki/CommonExtendedAttributes +   */ +  { "user.xdg.origin.url", CURLINFO_EFFECTIVE_URL }, +  { "user.mime_type", CURLINFO_CONTENT_TYPE }, +  { NULL, 0 } /* last element, abort loop here */ +}; + +/* store metadata from the curl request alongside the downloaded + * file using extended attributes + */ +int write_xattr( CURL *curl, const char *filename ) +{ +  int i = 0; +  int err = 0; +  /* loop through all xattr-curlinfo pairs and abort on error */ +  while ( err == 0 && mappings[i].attr != NULL ) { +    char *value = NULL; +    curl_easy_getinfo(curl, mappings[i].info, &value); +    if (value) { +      err = setxattr( filename, mappings[i].attr, value, strlen(value), 0 ); +    } +    i++; +  } +  return err; +}  | 
