+static void
+check_no_check_device(void)
+{
+ if (gnutar_checkdevice == 0) {
+ GPtrArray *argv_ptr = g_ptr_array_new();
+ int dumpin;
+ int dataf;
+ int outf;
+ int size;
+ char buf[32768];
+
+ g_ptr_array_add(argv_ptr, gnutar_path);
+ g_ptr_array_add(argv_ptr, "-x");
+ g_ptr_array_add(argv_ptr, "--no-check-device");
+ g_ptr_array_add(argv_ptr, "-f");
+ g_ptr_array_add(argv_ptr, "-");
+ g_ptr_array_add(argv_ptr, NULL);
+
+ pipespawnv(gnutar_path, STDIN_PIPE|STDOUT_PIPE|STDERR_PIPE, 0,
+ &dumpin, &dataf, &outf, (char **)argv_ptr->pdata);
+ aclose(dumpin);
+ aclose(dataf);
+ size = read(outf, buf, 32767);
+ if (size > 0) {
+ buf[size] = '\0';
+ if (strstr(buf, "--no-check-device")) {
+ g_debug("disabling --no-check-device since '%s' doesn't support it", gnutar_path);
+ gnutar_checkdevice = 1;
+ }
+ }
+ aclose(outf);
+ g_ptr_array_free(argv_ptr, TRUE);
+ }
+}
+