static void local_browse (gboolean add, const char *name, const char *type_in, const char *domain_in) { char *filename; GList *l; char *type; char *domain; int len; /* We don't want last dots in the domain or type */ type = g_strdup (type_in); domain = g_strdup (domain_in); len = strlen (type); if (len > 0 && type[len-1] == '.') type[len-1] = 0; len = strlen (domain); if (len > 0 && domain[len-1] == '.') domain[len-1] = 0; filename = encode_filename (name, type, domain); g_free (type); g_free (domain); if (filename == NULL) return; for (l = local_files; l != NULL; l = l->next) { if (strcmp (l->data, filename) == 0) { if (!add) { g_free (l->data); local_files = g_list_delete_link (local_files, l); call_monitors (FALSE, filename); } g_free (filename); return; } } if (add) { local_files = g_list_prepend (local_files, filename); call_monitors (TRUE, filename); } else { g_free (filename); } }
/* * 2.3.10. diropargs * * struct diropargs { * fhandle dir; * filename name; * }; */ static void encode_diropargs(struct xdr_stream *xdr, const struct nfs_fh *fh, const char *name, u32 length) { encode_fhandle(xdr, fh); encode_filename(xdr, name, length); }
char *guess_gzip_options(const char *f) { char orig[SAMPLE]; { /* Read sample of the header of the compressed file */ FILE *s = fopen(f, "r"); if (!s) { perror("open"); return NULL; } if (!read_sample_and_close(s, SAMPLE, orig)) return NULL; } { int i; const char *o; char *enc_f = encode_filename(f); int has_mtime_fname; { int has_mtime = zhead_has_mtime(orig); int has_fname = zhead_has_fname(orig); if (has_mtime && !has_fname) { fprintf(stderr, "can't recompress, stream has mtime but no fname\n"); return NULL; } else if (has_fname && !has_mtime) { fprintf(stderr, "can't recompress, stream has fname but no mtime\n"); return NULL; } else { has_mtime_fname = has_fname; /* which = has_mtime */ } } /* For each likely set of options, try recompressing the content with * those options */ for (i = 0; (o = try_opts[i]) != NULL; i++) { FILE *p; { /* Compose command line */ char cmd[1024]; snprintf(cmd, sizeof(cmd), "zcat %s | gzip -n %s 2> /dev/null", enc_f, o); /* And run it */ if (verbose) fprintf(stderr, "running %s to determine gzip options\n", cmd); p = popen(cmd, "r"); if (!p) { perror(cmd); } } if (p) { /* Read the recompressed content */ char samp[SAMPLE]; if (!read_sample_and_close(p, SAMPLE, samp)) { ; /* Read error - just fail this one and let the loop * try another */ } else { /* We have the compressed version with these options. * Compare with the original */ const char *a = skip_zhead(orig); const char *b = skip_zhead(samp); if (!memcmp(a, b, 900)) break; } } } free(enc_f); if (!o) { return NULL; } else if (has_mtime_fname) { return strdup(o); } else { /* Add --no-name to options to return */ static const char noname[] = { "--no-name" }; char* opts = malloc(strlen(o)+strlen(noname)+2); if (o[0]) { strcpy(opts, o); strcat(opts, " "); } else { opts[0] = 0; } strcat(opts, noname); return opts; } } }