kopia lustrzana https://gitlab.com/sane-project/backends
minor fixes to sane-desc.c
- memleaks on error paths - whitspaces at end of linemerge-requests/1/head
rodzic
8f3983ed20
commit
e7804700f6
|
@ -1,3 +1,6 @@
|
||||||
|
2013-02-11 Stéphane Voltz <stef.dev@free.fr>
|
||||||
|
* tools/sane-desc.c: fix minor memleaks and whitespace at end of line.
|
||||||
|
|
||||||
2013-02-09 Rolf Bensch <rolf at bensch hyphen online dot de>
|
2013-02-09 Rolf Bensch <rolf at bensch hyphen online dot de>
|
||||||
* backend/pixma.c, backend/pixma_mp750.c, backend/pixma_mp810.c,
|
* backend/pixma.c, backend/pixma_mp750.c, backend/pixma_mp810.c,
|
||||||
backend/pixma_sane_options.c: fixed compiler warnings.
|
backend/pixma_sane_options.c: fixed compiler warnings.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*
|
/*
|
||||||
sane-desc.c -- generate list of supported SANE devices
|
sane-desc.c -- generate list of supported SANE devices
|
||||||
|
|
||||||
Copyright (C) 2002-2006 Henning Meier-Geinitz <henning@meier-geinitz.de>
|
Copyright (C) 2002-2006 Henning Meier-Geinitz <henning@meier-geinitz.de>
|
||||||
|
@ -258,17 +258,17 @@ static enum output_mode mode = output_mode_ascii;
|
||||||
static char *title = 0;
|
static char *title = 0;
|
||||||
static char *intro = 0;
|
static char *intro = 0;
|
||||||
static SANE_String desc_name = 0;
|
static SANE_String desc_name = 0;
|
||||||
static const char *status_name[] =
|
static const char *status_name[] =
|
||||||
{"Unknown", "Unsupported", "Untested", "Minimal", "Basic",
|
{"Unknown", "Unsupported", "Untested", "Minimal", "Basic",
|
||||||
"Good", "Complete"};
|
"Good", "Complete"};
|
||||||
static const char *device_type_name[] =
|
static const char *device_type_name[] =
|
||||||
{"Unknown", "Scanners", "Still cameras", "Video Cameras", "Meta backends",
|
{"Unknown", "Scanners", "Still cameras", "Video Cameras", "Meta backends",
|
||||||
"APIs"};
|
"APIs"};
|
||||||
static const char *device_type_aname[] =
|
static const char *device_type_aname[] =
|
||||||
{"UKNOWN", "SCANNERS", "STILL", "VIDEO", "META",
|
{"UKNOWN", "SCANNERS", "STILL", "VIDEO", "META",
|
||||||
"API"};
|
"API"};
|
||||||
static const char *status_color[] =
|
static const char *status_color[] =
|
||||||
{COLOR_UNKNOWN, COLOR_UNSUPPORTED, COLOR_UNTESTED, COLOR_MINIMAL,
|
{COLOR_UNKNOWN, COLOR_UNSUPPORTED, COLOR_UNTESTED, COLOR_MINIMAL,
|
||||||
COLOR_BASIC, COLOR_GOOD, COLOR_COMPLETE};
|
COLOR_BASIC, COLOR_GOOD, COLOR_COMPLETE};
|
||||||
|
|
||||||
|
|
||||||
|
@ -616,7 +616,10 @@ read_keyword (SANE_String line, SANE_String keyword_token,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp (word, keyword_token) != 0)
|
if (strcmp (word, keyword_token) != 0)
|
||||||
return SANE_STATUS_INVAL;
|
{
|
||||||
|
free(word);
|
||||||
|
return SANE_STATUS_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
free (word);
|
free (word);
|
||||||
word = 0;
|
word = 0;
|
||||||
|
@ -651,6 +654,7 @@ read_keyword (SANE_String line, SANE_String keyword_token,
|
||||||
cp = get_token (cp, &word);
|
cp = get_token (cp, &word);
|
||||||
if (!word)
|
if (!word)
|
||||||
{
|
{
|
||||||
|
free(strings);
|
||||||
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
||||||
return SANE_STATUS_INVAL;
|
return SANE_STATUS_INVAL;
|
||||||
}
|
}
|
||||||
|
@ -666,6 +670,7 @@ read_keyword (SANE_String line, SANE_String keyword_token,
|
||||||
cp = get_token (cp, &word);
|
cp = get_token (cp, &word);
|
||||||
if (!word)
|
if (!word)
|
||||||
{
|
{
|
||||||
|
free(strings);
|
||||||
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
||||||
return SANE_STATUS_INVAL;
|
return SANE_STATUS_INVAL;
|
||||||
}
|
}
|
||||||
|
@ -686,6 +691,7 @@ read_keyword (SANE_String line, SANE_String keyword_token,
|
||||||
cp = get_token (cp, &word);
|
cp = get_token (cp, &word);
|
||||||
if (!word)
|
if (!word)
|
||||||
{
|
{
|
||||||
|
free(strings);
|
||||||
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
||||||
return SANE_STATUS_INVAL;
|
return SANE_STATUS_INVAL;
|
||||||
}
|
}
|
||||||
|
@ -701,6 +707,7 @@ read_keyword (SANE_String line, SANE_String keyword_token,
|
||||||
cp = get_token (cp, &word);
|
cp = get_token (cp, &word);
|
||||||
if (!word)
|
if (!word)
|
||||||
{
|
{
|
||||||
|
free(strings);
|
||||||
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
||||||
return SANE_STATUS_INVAL;
|
return SANE_STATUS_INVAL;
|
||||||
}
|
}
|
||||||
|
@ -716,6 +723,7 @@ read_keyword (SANE_String line, SANE_String keyword_token,
|
||||||
cp = get_token (cp, &word);
|
cp = get_token (cp, &word);
|
||||||
if (!word)
|
if (!word)
|
||||||
{
|
{
|
||||||
|
free(strings);
|
||||||
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
DBG_ERR ("read_keyword: missing quotation mark: %s\n", line);
|
||||||
return SANE_STATUS_INVAL;
|
return SANE_STATUS_INVAL;
|
||||||
}
|
}
|
||||||
|
@ -827,7 +835,7 @@ read_files (void)
|
||||||
strerror (errno));
|
strerror (errno));
|
||||||
return SANE_FALSE;
|
return SANE_FALSE;
|
||||||
}
|
}
|
||||||
/* now we check if everything is ok with the previous backend
|
/* now we check if everything is ok with the previous backend
|
||||||
before we read the new one */
|
before we read the new one */
|
||||||
if (current_backend)
|
if (current_backend)
|
||||||
{
|
{
|
||||||
|
@ -835,7 +843,7 @@ read_files (void)
|
||||||
int no_usbids = 0;
|
int no_usbids = 0;
|
||||||
int no_interface = 0;
|
int no_interface = 0;
|
||||||
int no_status = 0;
|
int no_status = 0;
|
||||||
|
|
||||||
while (current_type)
|
while (current_type)
|
||||||
{
|
{
|
||||||
if (current_type->type == type_scanner ||
|
if (current_type->type == type_scanner ||
|
||||||
|
@ -874,7 +882,7 @@ read_files (void)
|
||||||
&& !current_model->ignore_usb_id)
|
&& !current_model->ignore_usb_id)
|
||||||
{
|
{
|
||||||
DBG_INFO ("`%s' seems to provide a USB device "
|
DBG_INFO ("`%s' seems to provide a USB device "
|
||||||
"without :usbid (%s %s)\n",
|
"without :usbid (%s %s)\n",
|
||||||
current_backend->name,
|
current_backend->name,
|
||||||
current_mfg->name,
|
current_mfg->name,
|
||||||
current_model->name);
|
current_model->name);
|
||||||
|
@ -890,17 +898,17 @@ read_files (void)
|
||||||
}
|
}
|
||||||
if (no_status)
|
if (no_status)
|
||||||
{
|
{
|
||||||
DBG_WARN ("Backend `%s': %d devices without :status\n",
|
DBG_WARN ("Backend `%s': %d devices without :status\n",
|
||||||
current_backend->name, no_status);
|
current_backend->name, no_status);
|
||||||
}
|
}
|
||||||
if (no_interface)
|
if (no_interface)
|
||||||
{
|
{
|
||||||
DBG_WARN ("Backend `%s': %d devices without :interface\n",
|
DBG_WARN ("Backend `%s': %d devices without :interface\n",
|
||||||
current_backend->name, no_interface);
|
current_backend->name, no_interface);
|
||||||
}
|
}
|
||||||
if (no_usbids)
|
if (no_usbids)
|
||||||
{
|
{
|
||||||
DBG_WARN ("Backend `%s': %d USB devices without :usbid\n",
|
DBG_WARN ("Backend `%s': %d USB devices without :usbid\n",
|
||||||
current_backend->name, no_usbids);
|
current_backend->name, no_usbids);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1443,7 +1451,7 @@ read_files (void)
|
||||||
"`%s' to `%s/%s' (was: `%s/%s')\n",
|
"`%s' to `%s/%s' (was: `%s/%s')\n",
|
||||||
current_backend->name,
|
current_backend->name,
|
||||||
current_model->name, two_string_entry[0],
|
current_model->name, two_string_entry[0],
|
||||||
two_string_entry[1],
|
two_string_entry[1],
|
||||||
current_model->usb_vendor_id,
|
current_model->usb_vendor_id,
|
||||||
current_model->usb_product_id);
|
current_model->usb_product_id);
|
||||||
}
|
}
|
||||||
|
@ -2299,7 +2307,7 @@ calculate_statistics_per_type (device_type dev_type, statistics_type num)
|
||||||
static void
|
static void
|
||||||
html_print_statistics_cell (const char * color, int number)
|
html_print_statistics_cell (const char * color, int number)
|
||||||
{
|
{
|
||||||
printf ("<td align=center><font color=%s>%d</font></td>\n",
|
printf ("<td align=center><font color=%s>%d</font></td>\n",
|
||||||
color, number);
|
color, number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2311,18 +2319,18 @@ html_print_statistics_per_type (device_type dev_type)
|
||||||
|
|
||||||
calculate_statistics_per_type (dev_type, num);
|
calculate_statistics_per_type (dev_type, num);
|
||||||
printf ("<tr>\n");
|
printf ("<tr>\n");
|
||||||
printf("<td align=center><a href=\"#%s\">%s</a></td>\n",
|
printf("<td align=center><a href=\"#%s\">%s</a></td>\n",
|
||||||
device_type_aname [dev_type], device_type_name [dev_type]);
|
device_type_aname [dev_type], device_type_name [dev_type]);
|
||||||
|
|
||||||
html_print_statistics_cell
|
html_print_statistics_cell
|
||||||
(COLOR_UNKNOWN,
|
(COLOR_UNKNOWN,
|
||||||
num[status_minimal] + num[status_basic] + num[status_good] +
|
num[status_minimal] + num[status_basic] + num[status_good] +
|
||||||
num[status_complete] + num[status_untested] + num[status_unsupported]);
|
num[status_complete] + num[status_untested] + num[status_unsupported]);
|
||||||
if (dev_type == type_scanner || dev_type == type_stillcam
|
if (dev_type == type_scanner || dev_type == type_stillcam
|
||||||
|| dev_type == type_vidcam)
|
|| dev_type == type_vidcam)
|
||||||
{
|
{
|
||||||
html_print_statistics_cell
|
html_print_statistics_cell
|
||||||
(COLOR_UNKNOWN,
|
(COLOR_UNKNOWN,
|
||||||
num[status_minimal] + num[status_basic] + num[status_good] +
|
num[status_minimal] + num[status_basic] + num[status_good] +
|
||||||
num[status_complete]);
|
num[status_complete]);
|
||||||
for (status = status_complete; status >= status_unsupported; status--)
|
for (status = status_complete; status >= status_unsupported; status--)
|
||||||
|
@ -2351,7 +2359,7 @@ html_print_summary (void)
|
||||||
printf ("<tr bgcolor=E0E0FF>\n");
|
printf ("<tr bgcolor=E0E0FF>\n");
|
||||||
printf ("<th align=center rowspan=2>Total</th>\n");
|
printf ("<th align=center rowspan=2>Total</th>\n");
|
||||||
printf ("<th align=center colspan=5>Supported</th>\n");
|
printf ("<th align=center colspan=5>Supported</th>\n");
|
||||||
printf ("<th align=center rowspan=2><font color=" COLOR_UNTESTED
|
printf ("<th align=center rowspan=2><font color=" COLOR_UNTESTED
|
||||||
">%s</font></th>\n", status_name[status_untested]);
|
">%s</font></th>\n", status_name[status_untested]);
|
||||||
printf ("<th align=center rowspan=2><font color=" COLOR_UNSUPPORTED
|
printf ("<th align=center rowspan=2><font color=" COLOR_UNSUPPORTED
|
||||||
">%s</font></th>\n", status_name[status_unsupported]);
|
">%s</font></th>\n", status_name[status_unsupported]);
|
||||||
|
@ -2591,12 +2599,12 @@ html_backends_split_table (device_type dev_type)
|
||||||
printf ("<td align=center>?</td>\n");
|
printf ("<td align=center>?</td>\n");
|
||||||
|
|
||||||
if (model->usb_vendor_id && model->usb_product_id)
|
if (model->usb_vendor_id && model->usb_product_id)
|
||||||
printf ("<td align=center>%s/%s</td>\n",
|
printf ("<td align=center>%s/%s</td>\n",
|
||||||
model->usb_vendor_id, model->usb_product_id);
|
model->usb_vendor_id, model->usb_product_id);
|
||||||
else
|
else
|
||||||
printf ("<td align=center> </td>\n");
|
printf ("<td align=center> </td>\n");
|
||||||
|
|
||||||
printf ("<td align=center><font color=%s>%s</font></td>\n",
|
printf ("<td align=center><font color=%s>%s</font></td>\n",
|
||||||
status_color[status], status_name[status]);
|
status_color[status], status_name[status]);
|
||||||
|
|
||||||
if (model->comment && model->comment[0] != 0)
|
if (model->comment && model->comment[0] != 0)
|
||||||
|
@ -2701,12 +2709,12 @@ html_mfgs_table (device_type dev_type)
|
||||||
printf ("<td align=center>?</td>\n");
|
printf ("<td align=center>?</td>\n");
|
||||||
|
|
||||||
if (model_record->usb_vendor_id && model_record->usb_product_id)
|
if (model_record->usb_vendor_id && model_record->usb_product_id)
|
||||||
printf ("<td align=center>%s/%s</td>\n",
|
printf ("<td align=center>%s/%s</td>\n",
|
||||||
model_record->usb_vendor_id, model_record->usb_product_id);
|
model_record->usb_vendor_id, model_record->usb_product_id);
|
||||||
else
|
else
|
||||||
printf ("<td align=center> </td>\n");
|
printf ("<td align=center> </td>\n");
|
||||||
|
|
||||||
printf ("<td align=center><font color=%s>%s</font></td>\n",
|
printf ("<td align=center><font color=%s>%s</font></td>\n",
|
||||||
status_color[status], status_name[status]);
|
status_color[status], status_name[status]);
|
||||||
|
|
||||||
if (model_record->comment && model_record->comment[0] != 0)
|
if (model_record->comment && model_record->comment[0] != 0)
|
||||||
|
@ -3026,7 +3034,7 @@ print_statistics_per_type (device_type dev_type)
|
||||||
|| dev_type == type_vidcam)
|
|| dev_type == type_vidcam)
|
||||||
{
|
{
|
||||||
printf (" Supported: %4d (complete: %d, good: %d, basic: %d, "
|
printf (" Supported: %4d (complete: %d, good: %d, basic: %d, "
|
||||||
"minimal: %d)\n",
|
"minimal: %d)\n",
|
||||||
num[status_minimal] + num[status_basic] + num[status_good] +
|
num[status_minimal] + num[status_basic] + num[status_good] +
|
||||||
num[status_complete], num[status_complete], num[status_good],
|
num[status_complete], num[status_complete], num[status_good],
|
||||||
num[status_basic], num[status_minimal]);
|
num[status_basic], num[status_minimal]);
|
||||||
|
@ -3052,7 +3060,7 @@ print_statistics (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static usbid_type *
|
static usbid_type *
|
||||||
create_usbid (char *manufacturer, char *model,
|
create_usbid (char *manufacturer, char *model,
|
||||||
char *usb_vendor_id, char *usb_product_id)
|
char *usb_vendor_id, char *usb_product_id)
|
||||||
{
|
{
|
||||||
usbid_type * usbid = calloc (1, sizeof (usbid_type));
|
usbid_type * usbid = calloc (1, sizeof (usbid_type));
|
||||||
|
@ -3070,7 +3078,7 @@ create_usbid (char *manufacturer, char *model,
|
||||||
}
|
}
|
||||||
|
|
||||||
static scsiid_type *
|
static scsiid_type *
|
||||||
create_scsiid (char *manufacturer, char *model,
|
create_scsiid (char *manufacturer, char *model,
|
||||||
char *scsi_vendor_id, char *scsi_product_id, SANE_Bool is_processor)
|
char *scsi_vendor_id, char *scsi_product_id, SANE_Bool is_processor)
|
||||||
{
|
{
|
||||||
scsiid_type * scsiid = calloc (1, sizeof (scsiid_type));
|
scsiid_type * scsiid = calloc (1, sizeof (scsiid_type));
|
||||||
|
@ -3089,7 +3097,7 @@ create_scsiid (char *manufacturer, char *model,
|
||||||
}
|
}
|
||||||
|
|
||||||
static usbid_type *
|
static usbid_type *
|
||||||
add_usbid (usbid_type *first_usbid, char *manufacturer, char *model,
|
add_usbid (usbid_type *first_usbid, char *manufacturer, char *model,
|
||||||
char *usb_vendor_id, char *usb_product_id)
|
char *usb_vendor_id, char *usb_product_id)
|
||||||
{
|
{
|
||||||
usbid_type *usbid = first_usbid;
|
usbid_type *usbid = first_usbid;
|
||||||
|
@ -3116,11 +3124,11 @@ add_usbid (usbid_type *first_usbid, char *manufacturer, char *model,
|
||||||
usb_vendor_id, usb_product_id);
|
usb_vendor_id, usb_product_id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (strcmp (usb_vendor_id, usbid->usb_vendor_id) < 0 ||
|
if (strcmp (usb_vendor_id, usbid->usb_vendor_id) < 0 ||
|
||||||
(strcmp (usb_vendor_id, usbid->usb_vendor_id) == 0 &&
|
(strcmp (usb_vendor_id, usbid->usb_vendor_id) == 0 &&
|
||||||
strcmp (usb_product_id, usbid->usb_product_id) < 0))
|
strcmp (usb_product_id, usbid->usb_product_id) < 0))
|
||||||
{
|
{
|
||||||
|
|
||||||
tmp_usbid = create_usbid (manufacturer, model, usb_vendor_id, usb_product_id);
|
tmp_usbid = create_usbid (manufacturer, model, usb_vendor_id, usb_product_id);
|
||||||
tmp_usbid->next = usbid;
|
tmp_usbid->next = usbid;
|
||||||
if (prev_usbid)
|
if (prev_usbid)
|
||||||
|
@ -3142,7 +3150,7 @@ add_usbid (usbid_type *first_usbid, char *manufacturer, char *model,
|
||||||
}
|
}
|
||||||
|
|
||||||
static scsiid_type *
|
static scsiid_type *
|
||||||
add_scsiid (scsiid_type *first_scsiid, char *manufacturer, char *model,
|
add_scsiid (scsiid_type *first_scsiid, char *manufacturer, char *model,
|
||||||
char *scsi_vendor_id, char *scsi_product_id, SANE_Bool is_processor)
|
char *scsi_vendor_id, char *scsi_product_id, SANE_Bool is_processor)
|
||||||
{
|
{
|
||||||
scsiid_type *scsiid = first_scsiid;
|
scsiid_type *scsiid = first_scsiid;
|
||||||
|
@ -3169,11 +3177,11 @@ add_scsiid (scsiid_type *first_scsiid, char *manufacturer, char *model,
|
||||||
scsi_vendor_id, scsi_product_id);
|
scsi_vendor_id, scsi_product_id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (strcmp (scsi_vendor_id, scsiid->scsi_vendor_id) < 0 ||
|
if (strcmp (scsi_vendor_id, scsiid->scsi_vendor_id) < 0 ||
|
||||||
(strcmp (scsi_vendor_id, scsiid->scsi_vendor_id) == 0 &&
|
(strcmp (scsi_vendor_id, scsiid->scsi_vendor_id) == 0 &&
|
||||||
strcmp (scsi_product_id, scsiid->scsi_product_id) < 0))
|
strcmp (scsi_product_id, scsiid->scsi_product_id) < 0))
|
||||||
{
|
{
|
||||||
|
|
||||||
tmp_scsiid = create_scsiid (manufacturer, model, scsi_vendor_id, scsi_product_id, is_processor);
|
tmp_scsiid = create_scsiid (manufacturer, model, scsi_vendor_id, scsi_product_id, is_processor);
|
||||||
tmp_scsiid->next = scsiid;
|
tmp_scsiid->next = scsiid;
|
||||||
if (prev_scsiid)
|
if (prev_scsiid)
|
||||||
|
@ -3232,7 +3240,7 @@ create_usbids_table (void)
|
||||||
|
|
||||||
if (model->usb_vendor_id && model->usb_product_id)
|
if (model->usb_vendor_id && model->usb_product_id)
|
||||||
{
|
{
|
||||||
first_usbid = add_usbid (first_usbid, mfg->name,
|
first_usbid = add_usbid (first_usbid, mfg->name,
|
||||||
model->name,
|
model->name,
|
||||||
model->usb_vendor_id,
|
model->usb_vendor_id,
|
||||||
model->usb_product_id);
|
model->usb_product_id);
|
||||||
|
@ -3283,7 +3291,7 @@ create_scsiids_table (void)
|
||||||
|
|
||||||
if (model->scsi_vendor_id && model->scsi_product_id)
|
if (model->scsi_vendor_id && model->scsi_product_id)
|
||||||
{
|
{
|
||||||
first_scsiid = add_scsiid (first_scsiid, mfg->name,
|
first_scsiid = add_scsiid (first_scsiid, mfg->name,
|
||||||
model->name,
|
model->name,
|
||||||
model->scsi_vendor_id,
|
model->scsi_vendor_id,
|
||||||
model->scsi_product_id,
|
model->scsi_product_id,
|
||||||
|
@ -3386,7 +3394,7 @@ print_db_header (void)
|
||||||
"# permissions on the \"device node\" used by libusb.\n"
|
"# permissions on the \"device node\" used by libusb.\n"
|
||||||
"# Sample entry (replace 0xVVVV and 0xPPPP with vendor ID and product ID\n"
|
"# Sample entry (replace 0xVVVV and 0xPPPP with vendor ID and product ID\n"
|
||||||
"# respectively):\n");
|
"# respectively):\n");
|
||||||
printf
|
printf
|
||||||
("#\n"
|
("#\n"
|
||||||
"# 0xVVVV<tab>0xPPPP<tab>%s:%s<tab>%s<tab>[/usr/local/bin/foo.sh]\n"
|
"# 0xVVVV<tab>0xPPPP<tab>%s:%s<tab>%s<tab>[/usr/local/bin/foo.sh]\n"
|
||||||
"# Fields:\n"
|
"# Fields:\n"
|
||||||
|
@ -3445,7 +3453,7 @@ print_udev_header (void)
|
||||||
"# by sane-desc %s from %s on %s",
|
"# by sane-desc %s from %s on %s",
|
||||||
SANE_DESC_VERSION, PACKAGE_STRING, asctime (localtime (¤t_time)));
|
SANE_DESC_VERSION, PACKAGE_STRING, asctime (localtime (¤t_time)));
|
||||||
|
|
||||||
printf
|
printf
|
||||||
("#\n"
|
("#\n"
|
||||||
"# udev rules file for supported USB and SCSI devices\n"
|
"# udev rules file for supported USB and SCSI devices\n"
|
||||||
"#\n"
|
"#\n"
|
||||||
|
|
Ładowanie…
Reference in New Issue