boB Rudis
8 years ago
commit
a56fe85819
19 changed files with 375 additions and 0 deletions
@ -0,0 +1,7 @@ |
|||
^.*\.Rproj$ |
|||
^\.Rproj\.user$ |
|||
^\.travis\.yml$ |
|||
^README\.*md$ |
|||
^README\.*html$ |
|||
^NOTES\.*Rmd$ |
|||
^NOTES\.*html$ |
@ -0,0 +1,7 @@ |
|||
.Rproj.user |
|||
.Rhistory |
|||
.RData |
|||
.Rproj |
|||
src/*.o |
|||
src/*.so |
|||
src/*.dll |
@ -0,0 +1,17 @@ |
|||
language: r |
|||
warnings_are_errors: true |
|||
sudo: required |
|||
|
|||
apt_packages: |
|||
- binutils |
|||
- libproj-dev |
|||
- gdal-bin |
|||
|
|||
env: |
|||
global: |
|||
- CRAN: http://cran.rstudio.com |
|||
|
|||
notifications: |
|||
email: |
|||
on_success: change |
|||
on_failure: change |
@ -0,0 +1,20 @@ |
|||
Package: filemagic |
|||
Type: Package |
|||
Title: filemagic title goes here |
|||
Version: 0.1.0 |
|||
Date: 2016-08-12 |
|||
Author: Bob Rudis (@hrbrmstr) |
|||
Maintainer: Bob Rudis <bob@rudis.net> |
|||
Description: filemagic description goes here |
|||
URL: http://github.com/hrbrmstr/filemagic |
|||
BugReports: https://github.com/hrbrmstr/filemagic/issues |
|||
License: AGPL |
|||
Suggests: |
|||
testthat |
|||
Depends: |
|||
R (>= 3.0.0) |
|||
Imports: |
|||
purrr, |
|||
Rcpp |
|||
LinkingTo: Rcpp |
|||
RoxygenNote: 5.0.1 |
@ -0,0 +1,6 @@ |
|||
# Generated by roxygen2: do not edit by hand |
|||
|
|||
export(get_mimetype) |
|||
import(purrr) |
|||
importFrom(Rcpp,sourceCpp) |
|||
useDynLib(filemagic) |
@ -0,0 +1,2 @@ |
|||
0.1.0 |
|||
* Initial release |
@ -0,0 +1,10 @@ |
|||
# This file was generated by Rcpp::compileAttributes |
|||
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 |
|||
|
|||
#' Return file info |
|||
#' |
|||
#' @export |
|||
get_mimetype <- function(path) { |
|||
.Call('filemagic_get_mimetype', PACKAGE = 'filemagic', path) |
|||
} |
|||
|
@ -0,0 +1,9 @@ |
|||
#' A package to ... |
|||
#' |
|||
#' @name filemagic |
|||
#' @docType package |
|||
#' @author Bob Rudis (@@hrbrmstr) |
|||
#' @import purrr |
|||
#' @useDynLib filemagic |
|||
#' @importFrom Rcpp sourceCpp |
|||
NULL |
@ -0,0 +1,41 @@ |
|||
--- |
|||
output: rmarkdown::github_document |
|||
--- |
|||
|
|||
`filemagic` : ... |
|||
|
|||
The following functions are implemented: |
|||
|
|||
The following data sets are included: |
|||
|
|||
### Installation |
|||
|
|||
```{r eval=FALSE} |
|||
devtools::install_github("hrbrmstr/filemagic") |
|||
``` |
|||
|
|||
```{r echo=FALSE, message=FALSE, warning=FALSE, error=FALSE} |
|||
options(width=120) |
|||
``` |
|||
|
|||
### Usage |
|||
|
|||
```{r} |
|||
library(filemagic) |
|||
|
|||
# current verison |
|||
packageVersion("filemagic") |
|||
|
|||
``` |
|||
|
|||
### Test Results |
|||
|
|||
```{r} |
|||
library(filemagic) |
|||
library(testthat) |
|||
|
|||
date() |
|||
|
|||
test_dir("tests/") |
|||
``` |
|||
|
@ -0,0 +1,21 @@ |
|||
Version: 1.0 |
|||
|
|||
RestoreWorkspace: Default |
|||
SaveWorkspace: Default |
|||
AlwaysSaveHistory: Default |
|||
|
|||
EnableCodeIndexing: Yes |
|||
UseSpacesForTab: Yes |
|||
NumSpacesForTab: 2 |
|||
Encoding: UTF-8 |
|||
|
|||
RnwWeave: Sweave |
|||
LaTeX: pdfLaTeX |
|||
|
|||
StripTrailingWhitespace: Yes |
|||
|
|||
BuildType: Package |
|||
PackageUseDevtools: Yes |
|||
PackageInstallArgs: --no-multiarch --with-keep.source |
|||
PackageBuildArgs: --resave-data |
|||
PackageRoxygenize: rd,collate,namespace |
@ -0,0 +1,14 @@ |
|||
% Generated by roxygen2: do not edit by hand |
|||
% Please edit documentation in R/filemagic-package.R |
|||
\docType{package} |
|||
\name{filemagic} |
|||
\alias{filemagic} |
|||
\alias{filemagic-package} |
|||
\title{A package to ...} |
|||
\description{ |
|||
A package to ... |
|||
} |
|||
\author{ |
|||
Bob Rudis (@hrbrmstr) |
|||
} |
|||
|
@ -0,0 +1,12 @@ |
|||
% Generated by roxygen2: do not edit by hand |
|||
% Please edit documentation in R/RcppExports.R |
|||
\name{get_mimetype} |
|||
\alias{get_mimetype} |
|||
\title{Return file info} |
|||
\usage{ |
|||
get_mimetype(path) |
|||
} |
|||
\description{ |
|||
Return file info |
|||
} |
|||
|
@ -0,0 +1,3 @@ |
|||
*.o |
|||
*.so |
|||
*.dll |
@ -0,0 +1,3 @@ |
|||
CPPFLAGS = |
|||
CXXFLAGS = -std=gnu99 -Wall -Wextra -O2 -g -fstack-protector |
|||
PKG_LIBS = -lmagic |
@ -0,0 +1,18 @@ |
|||
// This file was generated by Rcpp::compileAttributes
|
|||
// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393
|
|||
|
|||
#include <Rcpp.h> |
|||
|
|||
using namespace Rcpp; |
|||
|
|||
// get_mimetype
|
|||
DataFrame get_mimetype(CharacterVector path); |
|||
RcppExport SEXP filemagic_get_mimetype(SEXP pathSEXP) { |
|||
BEGIN_RCPP |
|||
Rcpp::RObject __result; |
|||
Rcpp::RNGScope __rngScope; |
|||
Rcpp::traits::input_parameter< CharacterVector >::type path(pathSEXP); |
|||
__result = Rcpp::wrap(get_mimetype(path)); |
|||
return __result; |
|||
END_RCPP |
|||
} |
@ -0,0 +1,51 @@ |
|||
#include <Rcpp.h> |
|||
using namespace Rcpp; |
|||
|
|||
#include "magic.h" |
|||
#include "limits.h" |
|||
|
|||
//' Return file info
|
|||
//'
|
|||
//' @export
|
|||
// [[Rcpp::export]]
|
|||
DataFrame get_mimetype(CharacterVector path) { |
|||
|
|||
unsigned int input_size = path.size(); |
|||
StringVector mime_type(input_size); |
|||
|
|||
for (unsigned int i=0; i<input_size; i++) { |
|||
|
|||
if ((i % 10000) == 0) Rcpp::checkUserInterrupt(); |
|||
|
|||
std::string path_str = as<std::string>(path[i]); |
|||
std::string fullPath(R_ExpandFileName(path_str.c_str())); |
|||
|
|||
int flags = MAGIC_MIME_TYPE; |
|||
magic_t cookie = magic_open(flags); |
|||
|
|||
if (cookie == NULL) { |
|||
|
|||
mime_type[i] = NA_STRING; |
|||
|
|||
} else { |
|||
|
|||
magic_load(cookie, NULL); |
|||
|
|||
const char *magic_result = magic_file(cookie, fullPath.c_str()); |
|||
|
|||
if (magic_result == NULL) { |
|||
mime_type[i] = NA_STRING; |
|||
} else { |
|||
std::string res = std::string(magic_result, strnlen(magic_result, 1024)); |
|||
mime_type(i) = res; |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
return DataFrame::create(_["file"] = path, |
|||
_["mime_type"] = mime_type, |
|||
_["stringsAsFactors"] = false); |
|||
|
|||
} |
@ -0,0 +1,126 @@ |
|||
/*
|
|||
* Copyright (c) Christos Zoulas 2003. |
|||
* All Rights Reserved. |
|||
* |
|||
* Redistribution and use in source and binary forms, with or without |
|||
* modification, are permitted provided that the following conditions |
|||
* are met: |
|||
* 1. Redistributions of source code must retain the above copyright |
|||
* notice immediately at the beginning of the file, without modification, |
|||
* this list of conditions, and the following disclaimer. |
|||
* 2. Redistributions in binary form must reproduce the above copyright |
|||
* notice, this list of conditions and the following disclaimer in the |
|||
* documentation and/or other materials provided with the distribution. |
|||
* |
|||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
|||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR |
|||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
|||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
|||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
|||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|||
* SUCH DAMAGE. |
|||
*/ |
|||
#ifndef _MAGIC_H |
|||
#define _MAGIC_H |
|||
|
|||
#include <sys/types.h> |
|||
|
|||
#define MAGIC_NONE 0x0000000 /* No flags */ |
|||
#define MAGIC_DEBUG 0x0000001 /* Turn on debugging */ |
|||
#define MAGIC_SYMLINK 0x0000002 /* Follow symlinks */ |
|||
#define MAGIC_COMPRESS 0x0000004 /* Check inside compressed files */ |
|||
#define MAGIC_DEVICES 0x0000008 /* Look at the contents of devices */ |
|||
#define MAGIC_MIME_TYPE 0x0000010 /* Return the MIME type */ |
|||
#define MAGIC_CONTINUE 0x0000020 /* Return all matches */ |
|||
#define MAGIC_CHECK 0x0000040 /* Print warnings to stderr */ |
|||
#define MAGIC_PRESERVE_ATIME 0x0000080 /* Restore access time on exit */ |
|||
#define MAGIC_RAW 0x0000100 /* Don't convert unprintable chars */ |
|||
#define MAGIC_ERROR 0x0000200 /* Handle ENOENT etc as real errors */ |
|||
#define MAGIC_MIME_ENCODING 0x0000400 /* Return the MIME encoding */ |
|||
#define MAGIC_MIME (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING) |
|||
#define MAGIC_APPLE 0x0000800 /* Return the Apple creator/type */ |
|||
#define MAGIC_EXTENSION 0x1000000 /* Return a /-separated list of |
|||
* extensions */ |
|||
#define MAGIC_COMPRESS_TRANSP 0x2000000 /* Check inside compressed files |
|||
* but not report compression */ |
|||
#define MAGIC_NODESC (MAGIC_EXTENSION|MAGIC_MIME|MAGIC_APPLE) |
|||
|
|||
#define MAGIC_NO_CHECK_COMPRESS 0x0001000 /* Don't check for compressed files */ |
|||
#define MAGIC_NO_CHECK_TAR 0x0002000 /* Don't check for tar files */ |
|||
#define MAGIC_NO_CHECK_SOFT 0x0004000 /* Don't check magic entries */ |
|||
#define MAGIC_NO_CHECK_APPTYPE 0x0008000 /* Don't check application type */ |
|||
#define MAGIC_NO_CHECK_ELF 0x0010000 /* Don't check for elf details */ |
|||
#define MAGIC_NO_CHECK_TEXT 0x0020000 /* Don't check for text files */ |
|||
#define MAGIC_NO_CHECK_CDF 0x0040000 /* Don't check for cdf files */ |
|||
#define MAGIC_NO_CHECK_TOKENS 0x0100000 /* Don't check tokens */ |
|||
#define MAGIC_NO_CHECK_ENCODING 0x0200000 /* Don't check text encodings */ |
|||
|
|||
/* No built-in tests; only consult the magic file */ |
|||
#define MAGIC_NO_CHECK_BUILTIN ( \ |
|||
MAGIC_NO_CHECK_COMPRESS | \ |
|||
MAGIC_NO_CHECK_TAR | \ |
|||
/* MAGIC_NO_CHECK_SOFT | */ \ |
|||
MAGIC_NO_CHECK_APPTYPE | \ |
|||
MAGIC_NO_CHECK_ELF | \ |
|||
MAGIC_NO_CHECK_TEXT | \ |
|||
MAGIC_NO_CHECK_CDF | \ |
|||
MAGIC_NO_CHECK_TOKENS | \ |
|||
MAGIC_NO_CHECK_ENCODING | \ |
|||
0 \ |
|||
) |
|||
|
|||
/* Defined for backwards compatibility (renamed) */ |
|||
#define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT |
|||
|
|||
/* Defined for backwards compatibility; do nothing */ |
|||
#define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */ |
|||
#define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */ |
|||
|
|||
#define MAGIC_VERSION 528 /* This implementation */ |
|||
|
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
typedef struct magic_set *magic_t; |
|||
magic_t magic_open(int); |
|||
void magic_close(magic_t); |
|||
|
|||
const char *magic_getpath(const char *, int); |
|||
const char *magic_file(magic_t, const char *); |
|||
const char *magic_descriptor(magic_t, int); |
|||
const char *magic_buffer(magic_t, const void *, size_t); |
|||
|
|||
const char *magic_error(magic_t); |
|||
int magic_setflags(magic_t, int); |
|||
|
|||
int magic_version(void); |
|||
int magic_load(magic_t, const char *); |
|||
int magic_load_buffers(magic_t, void **, size_t *, size_t); |
|||
|
|||
int magic_compile(magic_t, const char *); |
|||
int magic_check(magic_t, const char *); |
|||
int magic_list(magic_t, const char *); |
|||
int magic_errno(magic_t); |
|||
|
|||
#define MAGIC_PARAM_INDIR_MAX 0 |
|||
#define MAGIC_PARAM_NAME_MAX 1 |
|||
#define MAGIC_PARAM_ELF_PHNUM_MAX 2 |
|||
#define MAGIC_PARAM_ELF_SHNUM_MAX 3 |
|||
#define MAGIC_PARAM_ELF_NOTES_MAX 4 |
|||
#define MAGIC_PARAM_REGEX_MAX 5 |
|||
#define MAGIC_PARAM_BYTES_MAX 6 |
|||
|
|||
int magic_setparam(magic_t, int, const void *); |
|||
int magic_getparam(magic_t, int, void *); |
|||
|
|||
#ifdef __cplusplus |
|||
}; |
|||
#endif |
|||
|
|||
#endif /* _MAGIC_H */ |
@ -0,0 +1,2 @@ |
|||
library(testthat) |
|||
test_check("filemagic") |
@ -0,0 +1,6 @@ |
|||
context("basic functionality") |
|||
test_that("we can do something", { |
|||
|
|||
#expect_that(some_function(), is_a("data.frame")) |
|||
|
|||
}) |
Loading…
Reference in new issue