dll: Don't unnecessarily use alloca

merge-requests/83/head
Povilas Kanapickas 2019-04-27 12:16:07 +03:00
rodzic 5d7fc4e0ed
commit 18f9e5598c
1 zmienionych plików z 9 dodań i 13 usunięć

Wyświetl plik

@ -1155,7 +1155,8 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
SANE_Status SANE_Status
sane_open (SANE_String_Const full_name, SANE_Handle * meta_handle) sane_open (SANE_String_Const full_name, SANE_Handle * meta_handle)
{ {
const char *be_name, *dev_name; char *be_name;
const char *dev_name;
struct meta_scanner *s; struct meta_scanner *s;
SANE_Handle handle; SANE_Handle handle;
struct backend *be; struct backend *be;
@ -1178,16 +1179,7 @@ sane_open (SANE_String_Const full_name, SANE_Handle * meta_handle)
dev_name = strchr (full_name, ':'); dev_name = strchr (full_name, ':');
if (dev_name) if (dev_name)
{ {
#ifdef strndupa be_name = strndup(full_name, dev_name - full_name);
be_name = strndupa (full_name, dev_name - full_name);
#else
char *tmp;
tmp = alloca (dev_name - full_name + 1);
memcpy (tmp, full_name, dev_name - full_name);
tmp[dev_name - full_name] = '\0';
be_name = tmp;
#endif
++dev_name; /* skip colon */ ++dev_name; /* skip colon */
} }
else else
@ -1195,7 +1187,7 @@ sane_open (SANE_String_Const full_name, SANE_Handle * meta_handle)
/* if no colon interpret full_name as the backend name; an empty /* if no colon interpret full_name as the backend name; an empty
backend device name will cause us to open the first device of backend device name will cause us to open the first device of
that backend. */ that backend. */
be_name = full_name; be_name = strdup(full_name);
dev_name = ""; dev_name = "";
} }
@ -1210,8 +1202,12 @@ sane_open (SANE_String_Const full_name, SANE_Handle * meta_handle)
{ {
status = add_backend (be_name, &be); status = add_backend (be_name, &be);
if (status != SANE_STATUS_GOOD) if (status != SANE_STATUS_GOOD)
return status; {
free(be_name);
return status;
}
} }
free(be_name);
if (!be->inited) if (!be->inited)
{ {