libarchive-ruby-swig 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -41,6 +41,31 @@ void Writer::close()
41
41
  }
42
42
 
43
43
 
44
+ Writer *Writer::write_open_filename(const char *filename,
45
+ const char *cmd, int format)
46
+
47
+ {
48
+ std::string error_msg;
49
+ struct archive *ar = archive_write_new();
50
+
51
+ archive_write_set_compression_program(ar, cmd);
52
+ try {
53
+ set_format_helper(ar, format);
54
+
55
+ if(archive_write_open_filename(ar, filename) != ARCHIVE_OK) {
56
+ error_msg = archive_error_string(ar);
57
+ throw Error(error_msg);
58
+ }
59
+
60
+ } catch(...) {
61
+ archive_write_finish(ar);
62
+ throw;
63
+ }
64
+
65
+ return new Writer(ar);
66
+ }
67
+
68
+
44
69
  Writer *Writer::write_open_filename(const char *filename,
45
70
  int compression, int format)
46
71
  {
@@ -73,36 +98,7 @@ Writer *Writer::write_open_filename(const char *filename,
73
98
  throw Error(error_msg);
74
99
  }
75
100
 
76
- switch(format) {
77
- case Archive::FORMAT_AR_BSD:
78
- archive_write_set_format_ar_bsd(ar);
79
- break;
80
- case Archive::FORMAT_AR_SVR4:
81
- archive_write_set_format_ar_svr4(ar);
82
- break;
83
- case Archive::FORMAT_CPIO:
84
- archive_write_set_format_cpio(ar);
85
- break;
86
- case Archive::FORMAT_CPIO_NEWC:
87
- archive_write_set_format_cpio_newc(ar);
88
- break;
89
- case Archive::FORMAT_MTREE:
90
- archive_write_set_format_mtree(ar);
91
- break;
92
- case Archive::FORMAT_TAR:
93
- case Archive::FORMAT_TAR_PAX_RESTRICTED:
94
- archive_write_set_format_pax_restricted(ar);
95
- break;
96
- case Archive::FORMAT_TAR_PAX_INTERCHANGE:
97
- archive_write_set_format_pax(ar);
98
- break;
99
- case Archive::FORMAT_TAR_USTAR:
100
- archive_write_set_format_ustar(ar);
101
- break;
102
- default:
103
- error_msg = "unknown or unsupported archive format";
104
- throw Error(error_msg);
105
- }
101
+ set_format_helper(ar, format);
106
102
 
107
103
  if(archive_write_open_filename(ar, filename) != ARCHIVE_OK) {
108
104
  error_msg = archive_error_string(ar);
@@ -123,6 +119,7 @@ Entry *Writer::new_entry_helper()
123
119
  return new Entry(archive_entry_new());
124
120
  }
125
121
 
122
+
126
123
  void Writer::write_header(Entry *entry)
127
124
  {
128
125
  if(archive_write_header(_ar, entry->_entry) != ARCHIVE_OK) {
@@ -131,6 +128,7 @@ void Writer::write_header(Entry *entry)
131
128
  }
132
129
  }
133
130
 
131
+
134
132
  void Writer::write_data_helper(const char *string, int length)
135
133
  {
136
134
  if(archive_write_data(_ar, (void*) string, length) == -1) {
@@ -139,3 +137,40 @@ void Writer::write_data_helper(const char *string, int length)
139
137
  }
140
138
  }
141
139
 
140
+
141
+ void Writer::set_format_helper(struct archive *ar, int format)
142
+ {
143
+ std::string error_msg;
144
+
145
+ switch(format) {
146
+ case Archive::FORMAT_AR_BSD:
147
+ archive_write_set_format_ar_bsd(ar);
148
+ break;
149
+ case Archive::FORMAT_AR_SVR4:
150
+ archive_write_set_format_ar_svr4(ar);
151
+ break;
152
+ case Archive::FORMAT_CPIO:
153
+ archive_write_set_format_cpio(ar);
154
+ break;
155
+ case Archive::FORMAT_CPIO_NEWC:
156
+ archive_write_set_format_cpio_newc(ar);
157
+ break;
158
+ case Archive::FORMAT_MTREE:
159
+ archive_write_set_format_mtree(ar);
160
+ break;
161
+ case Archive::FORMAT_TAR:
162
+ case Archive::FORMAT_TAR_PAX_RESTRICTED:
163
+ archive_write_set_format_pax_restricted(ar);
164
+ break;
165
+ case Archive::FORMAT_TAR_PAX_INTERCHANGE:
166
+ archive_write_set_format_pax(ar);
167
+ break;
168
+ case Archive::FORMAT_TAR_USTAR:
169
+ archive_write_set_format_ustar(ar);
170
+ break;
171
+ default:
172
+ error_msg = "unknown or unsupported archive format";
173
+ throw Error(error_msg);
174
+ }
175
+ }
176
+
@@ -68,10 +68,15 @@ class Writer
68
68
  #endif
69
69
 
70
70
  #ifdef SWIG
71
+ %newobject write_open_filename(const char *filename,
72
+ const char *cmd, int format);
71
73
  %newobject write_open_filename(const char *filename,
72
74
  int compression, int format);
73
75
  #endif
74
76
 
77
+ static Writer *write_open_filename(const char *filename,
78
+ const char *cmd, int format);
79
+
75
80
  static Writer *write_open_filename(const char *filename,
76
81
  int compression, int format);
77
82
 
@@ -94,6 +99,8 @@ class Writer
94
99
  Entry *new_entry_helper();
95
100
 
96
101
  private:
102
+ static void set_format_helper(struct archive *ar, int format);
103
+
97
104
  struct archive *_ar;
98
105
  char *_buf;
99
106
  int _buf_size;
data/lib/libarchive_rs.rb CHANGED
@@ -12,6 +12,9 @@ require 'archive'
12
12
 
13
13
  module Archive
14
14
 
15
+ class Error < StandardError
16
+ end
17
+
15
18
  class Entry
16
19
  alias :file? :is_file
17
20
  alias :directory? :is_directory
@@ -100,6 +103,21 @@ module Archive
100
103
  end
101
104
 
102
105
  def self.write_open_filename(filename, compression, format)
106
+ if compression.is_a? String
107
+ if compression.index('/').nil?
108
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
109
+ if File.executable?(path + '/' + compression)
110
+ compression = path + '/' + compression
111
+ break
112
+ end
113
+ end
114
+ end
115
+
116
+ unless File.executable? compression
117
+ raise Error, "executable '#{compression}' not found."
118
+ end
119
+ end
120
+
103
121
  ar = Writer.write_open_filename(filename, compression, format)
104
122
 
105
123
  if block_given?
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libarchive-ruby-swig
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Koch
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-30 00:00:00 +02:00
18
+ date: 2011-02-05 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21