Lines Matching refs:shar

46 struct shar {
101 * Set output format to 'shar' format.
107 struct shar *shar;
113 shar = (struct shar *)malloc(sizeof(*shar));
114 if (shar == NULL) {
115 archive_set_error(&a->archive, ENOMEM, "Can't allocate shar data");
118 memset(shar, 0, sizeof(*shar));
119 archive_string_init(&shar->work);
120 archive_string_init(&shar->quoted_name);
121 a->format_data = shar;
124 a->format_name = "shar";
131 a->archive.archive_format_name = "shar";
136 * An alternate 'shar' that uses uudecode instead of 'sed' to encode
145 struct shar *shar;
148 shar = (struct shar *)a->format_data;
149 shar->dump = 1;
152 a->archive.archive_format_name = "shar dump";
162 struct shar *shar;
164 shar = (struct shar *)a->format_data;
165 if (!shar->wrote_header) {
166 archive_strcat(&shar->work, "#!/bin/sh\n");
167 archive_strcat(&shar->work, "# This is a shell archive\n");
168 shar->wrote_header = 1;
172 if (shar->entry)
173 archive_entry_free(shar->entry);
174 shar->entry = archive_entry_clone(entry);
199 "shar format cannot archive this");
204 archive_string_empty(&shar->quoted_name);
205 shar_quote(&shar->quoted_name, name, 1);
208 archive_string_sprintf(&shar->work, "echo x %s\n", shar->quoted_name.s);
222 } else if (shar->last_dir == NULL) {
223 archive_strcat(&shar->work, "mkdir -p ");
224 shar_quote(&shar->work, p, 1);
225 archive_strcat(&shar->work,
227 shar->last_dir = p;
228 } else if (strcmp(p, shar->last_dir) == 0) {
231 } else if (strlen(p) < strlen(shar->last_dir) &&
232 strncmp(p, shar->last_dir, strlen(p)) == 0) {
236 archive_strcat(&shar->work, "mkdir -p ");
237 shar_quote(&shar->work, p, 1);
238 archive_strcat(&shar->work,
240 shar->last_dir = p;
248 shar->has_data = 0;
250 archive_strcat(&shar->work, "ln -f ");
251 shar_quote(&shar->work, linkname, 1);
252 archive_string_sprintf(&shar->work, " %s\n",
253 shar->quoted_name.s);
255 archive_strcat(&shar->work, "ln -fs ");
256 shar_quote(&shar->work, linkname, 1);
257 archive_string_sprintf(&shar->work, " %s\n",
258 shar->quoted_name.s);
264 archive_string_sprintf(&shar->work,
266 shar->quoted_name.s, shar->quoted_name.s);
268 if (shar->dump) {
269 archive_string_sprintf(&shar->work,
271 shar->quoted_name.s);
272 archive_string_sprintf(&shar->work,
275 shar_quote(&shar->work, name, 0);
276 archive_strcat(&shar->work, "\n");
278 archive_string_sprintf(&shar->work,
280 shar->quoted_name.s);
282 shar->has_data = 1;
283 shar->end_of_line = 1;
284 shar->outpos = 0;
288 archive_string_sprintf(&shar->work,
290 shar->quoted_name.s);
292 if (shar->last_dir != NULL)
293 free(shar->last_dir);
295 shar->last_dir = strdup(name);
297 pp = strrchr(shar->last_dir, '/');
306 archive_string_sprintf(&shar->work,
307 "mkfifo %s\n", shar->quoted_name.s);
310 archive_string_sprintf(&shar->work,
311 "mknod %s c %d %d\n", shar->quoted_name.s,
316 archive_string_sprintf(&shar->work,
317 "mknod %s b %d %d\n", shar->quoted_name.s,
333 struct shar *shar;
339 shar = (struct shar *)a->format_data;
340 if (!shar->has_data || n == 0)
352 if (archive_string_ensure(&shar->work, ensured + 3) == NULL)
355 if (shar->work.length > ensured) {
356 ret = (*a->compressor.write)(a, shar->work.s,
357 shar->work.length);
360 archive_string_empty(&shar->work);
362 buf = shar->work.s + shar->work.length;
363 buf_end = shar->work.s + ensured;
365 if (shar->end_of_line) {
367 shar->end_of_line = 0;
373 shar->end_of_line = 1;
379 shar->work.length = buf - shar->work.s;
380 ret = (*a->compressor.write)(a, shar->work.s,
381 shar->work.length);
384 archive_string_empty(&shar->work);
385 buf = shar->work.s;
389 shar->work.length = buf - shar->work.s;
410 uuencode_line(struct shar *shar, const char *inbuf, size_t len)
416 alloc_len = shar->work.length + 62;
417 if (archive_string_ensure(&shar->work, alloc_len) == NULL)
420 buf = shar->work.s + shar->work.length;
439 if ((buf - shar->work.s) > (ptrdiff_t)(shar->work.length + 62))
441 shar->work.length = buf - shar->work.s;
448 struct shar *shar;
453 shar = (struct shar *)a->format_data;
454 if (!shar->has_data)
458 if (shar->outpos != 0) {
459 n = 45 - shar->outpos;
462 memcpy(shar->outbuff + shar->outpos, src, n);
463 if (shar->outpos + n < 45) {
464 shar->outpos += n;
467 uuencode_line(shar, shar->outbuff, 45);
475 uuencode_line(shar, src, 45);
479 if (shar->work.length < 65536)
481 ret = (*a->compressor.write)(a, shar->work.s,
482 shar->work.length);
485 archive_string_empty(&shar->work);
488 memcpy(shar->outbuff, src, n);
489 shar->outpos = n;
498 struct shar *shar;
501 shar = (struct shar *)a->format_data;
502 if (shar->entry == NULL)
505 if (shar->dump) {
507 if (shar->has_data) {
508 if (shar->outpos > 0)
509 uuencode_line(shar, shar->outbuff,
510 shar->outpos);
511 archive_strcat(&shar->work, "`\nend\n");
512 archive_strcat(&shar->work, "SHAR_END\n");
519 archive_string_sprintf(&shar->work, "chmod %o ",
520 archive_entry_mode(shar->entry) & 07777);
521 shar_quote(&shar->work, archive_entry_pathname(shar->entry), 1);
522 archive_strcat(&shar->work, "\n");
524 u = archive_entry_uname(shar->entry);
525 g = archive_entry_gname(shar->entry);
527 archive_strcat(&shar->work, "chown ");
529 shar_quote(&shar->work, u, 1);
531 archive_strcat(&shar->work, ":");
532 shar_quote(&shar->work, g, 1);
534 shar_quote(&shar->work,
535 archive_entry_pathname(shar->entry), 1);
536 archive_strcat(&shar->work, "\n");
539 if ((p = archive_entry_fflags_text(shar->entry)) != NULL) {
540 archive_string_sprintf(&shar->work, "chflags %s ", p);
541 shar_quote(&shar->work,
542 archive_entry_pathname(shar->entry), 1);
543 archive_strcat(&shar->work, "\n");
549 if (shar->has_data) {
551 if (!shar->end_of_line)
552 archive_strappend_char(&shar->work, '\n');
553 archive_strcat(&shar->work, "SHAR_END\n");
557 archive_entry_free(shar->entry);
558 shar->entry = NULL;
560 if (shar->work.length < 65536)
563 ret = (*a->compressor.write)(a, shar->work.s, shar->work.length);
566 archive_string_empty(&shar->work);
574 struct shar *shar;
582 shar = (struct shar *)a->format_data;
587 * shar format, then sets another format (which would invoke
590 if (shar->wrote_header == 0)
593 archive_strcat(&shar->work, "exit\n");
595 ret = (*a->compressor.write)(a, shar->work.s, shar->work.length);
602 * TODO: shar should also suppress padding of
612 struct shar *shar;
614 shar = (struct shar *)a->format_data;
615 if (shar == NULL)
618 archive_entry_free(shar->entry);
619 free(shar->last_dir);
620 archive_string_free(&(shar->work));
621 archive_string_free(&(shar->quoted_name));
622 free(shar);