PERFORCE change 51021 for review
Peter Wemm
peter at FreeBSD.org
Tue Apr 13 17:50:14 PDT 2004
http://perforce.freebsd.org/chv.cgi?CH=51021
Change 51021 by peter at peter_daintree on 2004/04/13 17:49:12
IFC @51019
Affected files ...
.. //depot/projects/hammer/lib/libarchive/archive_entry.c#7 integrate
.. //depot/projects/hammer/lib/libarchive/archive_entry.h#6 integrate
.. //depot/projects/hammer/lib/libarchive/archive_read.c#6 integrate
.. //depot/projects/hammer/lib/libarchive/archive_read_open_file.c#5 integrate
.. //depot/projects/hammer/lib/libarchive/archive_read_support_format_cpio.c#6 integrate
.. //depot/projects/hammer/lib/libarchive/archive_read_support_format_tar.c#7 integrate
.. //depot/projects/hammer/lib/libarchive/archive_write.c#6 integrate
.. //depot/projects/hammer/lib/libarchive/archive_write_set_format_cpio.c#4 integrate
.. //depot/projects/hammer/lib/libarchive/archive_write_set_format_pax.c#8 integrate
.. //depot/projects/hammer/lib/libarchive/archive_write_set_format_shar.c#5 integrate
.. //depot/projects/hammer/lib/libarchive/archive_write_set_format_ustar.c#5 integrate
.. //depot/projects/hammer/share/man/man4/man4.i386/acpi_toshiba.4#3 integrate
.. //depot/projects/hammer/sys/i386/acpica/acpi_toshiba.c#4 integrate
.. //depot/projects/hammer/usr.bin/tar/util.c#2 integrate
.. //depot/projects/hammer/usr.bin/tar/write.c#4 integrate
Differences ...
==== //depot/projects/hammer/lib/libarchive/archive_entry.c#7 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_entry.c,v 1.6 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_entry.c,v 1.7 2004/04/13 23:45:37 kientzle Exp $");
#include <sys/stat.h>
#include <sys/types.h>
@@ -481,6 +481,12 @@
}
void
+archive_entry_copy_hardlink(struct archive_entry *entry, const char *target)
+{
+ aes_copy_mbs(&entry->ae_hardlink, target);
+}
+
+void
archive_entry_copy_hardlink_w(struct archive_entry *entry, const wchar_t *target)
{
aes_copy_wcs(&entry->ae_hardlink, target);
@@ -1111,6 +1117,7 @@
malloc(namebuff_length * sizeof(wchar_t));
}
wmemcpy(namebuff, name_start, name_end - name_start);
+ namebuff[name_end - name_start] = L'\0';
archive_entry_acl_add_entry_w(entry, type,
permset, tag, id, namebuff);
}
==== //depot/projects/hammer/lib/libarchive/archive_entry.h#6 (text+ko) ====
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/lib/libarchive/archive_entry.h,v 1.5 2004/04/12 01:16:16 kientzle Exp $
+ * $FreeBSD: src/lib/libarchive/archive_entry.h,v 1.6 2004/04/13 23:45:37 kientzle Exp $
*/
#ifndef ARCHIVE_ENTRY_H_INCLUDED
@@ -97,6 +97,7 @@
void archive_entry_set_gname(struct archive_entry *, const char *);
void archive_entry_copy_gname_w(struct archive_entry *, const wchar_t *);
void archive_entry_set_hardlink(struct archive_entry *, const char *);
+void archive_entry_copy_hardlink(struct archive_entry *, const char *);
void archive_entry_copy_hardlink_w(struct archive_entry *, const wchar_t *);
void archive_entry_set_link(struct archive_entry *, const char *);
void archive_entry_set_mode(struct archive_entry *, mode_t);
==== //depot/projects/hammer/lib/libarchive/archive_read.c#6 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_read.c,v 1.5 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_read.c,v 1.6 2004/04/13 23:45:37 kientzle Exp $");
#include <err.h>
#include <errno.h>
@@ -428,8 +428,8 @@
/* Casting a pointer to int allows us to remove 'const.' */
free((void *)(uintptr_t)(const void *)a->nulls);
- if (a->extract_mkdirpath.s != NULL)
- free(a->extract_mkdirpath.s);
+ archive_string_free(&a->extract_mkdirpath);
+ archive_string_free(&a->error_string);
if (a->entry)
archive_entry_free(a->entry);
a->magic = 0;
@@ -455,7 +455,7 @@
for (i = 0; i < number_slots; i++) {
if (a->formats[i].bid == bid)
- return (0); /* We've already installed */
+ return (ARCHIVE_WARN); /* We've already installed */
if (a->formats[i].bid == NULL) {
a->formats[i].bid = bid;
a->formats[i].read_header = read_header;
==== //depot/projects/hammer/lib/libarchive/archive_read_open_file.c#5 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_open_file.c,v 1.4 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_open_file.c,v 1.5 2004/04/13 23:45:37 kientzle Exp $");
#include <errno.h>
#include <fcntl.h>
@@ -68,7 +68,7 @@
strcpy(mine->filename, filename);
}
mine->block_size = block_size;
- mine->buffer = malloc(mine->block_size);
+ mine->buffer = NULL;
mine->fd = -1;
return (archive_read_open(a, mine, file_open, file_read, file_close));
}
@@ -78,6 +78,7 @@
{
struct read_file_data *mine = client_data;
+ mine->buffer = malloc(mine->block_size);
if (*mine->filename != 0)
mine->fd = open(mine->filename, O_RDONLY);
else
@@ -108,6 +109,8 @@
(void)a; /* UNUSED */
if (mine->fd >= 0)
close(mine->fd);
+ if (mine->buffer != NULL)
+ free(mine->buffer);
free(mine);
return (ARCHIVE_OK);
}
==== //depot/projects/hammer/lib/libarchive/archive_read_support_format_cpio.c#6 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_cpio.c,v 1.6 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_cpio.c,v 1.7 2004/04/13 23:45:37 kientzle Exp $");
#include <sys/stat.h>
@@ -83,16 +83,21 @@
archive_read_support_format_cpio(struct archive *a)
{
struct cpio *cpio;
+ int r;
cpio = malloc(sizeof(*cpio));
memset(cpio, 0, sizeof(*cpio));
cpio->magic = CPIO_MAGIC;
- return (__archive_read_register_format(a,
+ r = __archive_read_register_format(a,
cpio,
archive_read_format_cpio_bid,
archive_read_format_cpio_read_header,
- archive_read_format_cpio_cleanup));
+ archive_read_format_cpio_cleanup);
+
+ if (r != ARCHIVE_OK)
+ free(cpio);
+ return (ARCHIVE_OK);
}
==== //depot/projects/hammer/lib/libarchive/archive_read_support_format_tar.c#7 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_tar.c,v 1.7 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_tar.c,v 1.8 2004/04/13 23:45:37 kientzle Exp $");
#include <sys/stat.h>
#include <errno.h>
@@ -131,15 +131,19 @@
archive_read_support_format_tar(struct archive *a)
{
struct tar *tar;
+ int r;
tar = malloc(sizeof(*tar));
memset(tar, 0, sizeof(*tar));
- return (__archive_read_register_format(a,
- tar,
+ r = __archive_read_register_format(a, tar,
archive_read_format_tar_bid,
archive_read_format_tar_read_header,
- archive_read_format_tar_cleanup));
+ archive_read_format_tar_cleanup);
+
+ if (r != ARCHIVE_OK)
+ free(tar);
+ return (ARCHIVE_OK);
}
static int
@@ -148,19 +152,15 @@
struct tar *tar;
tar = *(a->pformat_data);
- if (tar->entry_name.s != NULL)
- free(tar->entry_name.s);
- if (tar->entry_linkname.s != NULL)
- free(tar->entry_linkname.s);
- if (tar->entry_uname.s != NULL)
- free(tar->entry_uname.s);
- if (tar->entry_gname.s != NULL)
- free(tar->entry_gname.s);
- if (tar->pax_header.s != NULL)
- free(tar->pax_header.s);
- if (tar->pax_global.s != NULL)
- free(tar->pax_global.s);
-
+ archive_string_free(&tar->acl_text);
+ archive_string_free(&tar->entry_name);
+ archive_string_free(&tar->entry_linkname);
+ archive_string_free(&tar->entry_uname);
+ archive_string_free(&tar->entry_gname);
+ archive_string_free(&tar->pax_global);
+ archive_string_free(&tar->pax_header);
+ if (tar->pax_entry != NULL)
+ free(tar->pax_entry);
free(tar);
*(a->pformat_data) = NULL;
return (ARCHIVE_OK);
@@ -822,7 +822,7 @@
/* Ensure pax_entry buffer is big enough. */
if (tar->pax_entry_length <= line_length) {
if (tar->pax_entry_length <= 0)
- tar->pax_entry_length = 256;
+ tar->pax_entry_length = 1024;
while (tar->pax_entry_length <= line_length + 1)
tar->pax_entry_length *= 2;
==== //depot/projects/hammer/lib/libarchive/archive_write.c#6 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_write.c,v 1.5 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_write.c,v 1.6 2004/04/13 23:45:37 kientzle Exp $");
/*
* This file contains the "essential" portions of the write API, that
@@ -165,8 +165,8 @@
/* Release various dynamic buffers. */
free((void *)(uintptr_t)(const void *)a->nulls);
- if (a->extract_mkdirpath.s != NULL)
- free(a->extract_mkdirpath.s);
+ archive_string_free(&a->extract_mkdirpath);
+ archive_string_free(&a->error_string);
a->magic = 0;
free(a);
}
==== //depot/projects/hammer/lib/libarchive/archive_write_set_format_cpio.c#4 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_format_cpio.c,v 1.3 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_format_cpio.c,v 1.4 2004/04/13 23:45:37 kientzle Exp $");
#include <sys/stat.h>
#include <errno.h>
@@ -207,10 +207,12 @@
static int
archive_write_cpio_finish(struct archive *a)
{
+ struct cpio *cpio;
struct stat st;
int er;
struct archive_entry *trailer;
+ cpio = a->format_data;
trailer = archive_entry_new();
memset(&st, 0, sizeof(st));
st.st_nlink = 1;
@@ -218,6 +220,9 @@
archive_entry_set_pathname(trailer, "TRAILER!!!");
er = archive_write_cpio_header(a, trailer);
archive_entry_free(trailer);
+
+ free(cpio);
+ a->format_data = NULL;
return (er);
}
==== //depot/projects/hammer/lib/libarchive/archive_write_set_format_pax.c#8 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_format_pax.c,v 1.7 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_format_pax.c,v 1.8 2004/04/13 23:45:37 kientzle Exp $");
#include <sys/stat.h>
#include <errno.h>
@@ -611,7 +611,7 @@
pax_attr_entry, 'x');
archive_entry_free(pax_attr_entry);
- free(pax_entry_name.s);
+ archive_string_free(&pax_entry_name);
/* Note that the 'x' header shouldn't ever fail to format */
if (ret != 0) {
@@ -765,12 +765,16 @@
archive_write_pax_finish(struct archive *a)
{
struct pax *pax;
+ int r;
+
+ r = ARCHIVE_OK;
pax = a->format_data;
if (pax->written && a->compression_write != NULL)
- return (write_nulls(a, 512 * 2));
+ r = write_nulls(a, 512 * 2);
+ archive_string_free(&pax->pax_header);
free(pax);
a->format_data = NULL;
- return (ARCHIVE_OK);
+ return (r);
}
static int
==== //depot/projects/hammer/lib/libarchive/archive_write_set_format_shar.c#5 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_format_shar.c,v 1.4 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_format_shar.c,v 1.5 2004/04/13 23:45:37 kientzle Exp $");
#include <sys/stat.h>
#include <errno.h>
@@ -38,16 +38,6 @@
#include "archive_entry.h"
#include "archive_private.h"
-static int archive_write_shar_finish(struct archive *);
-static int archive_write_shar_header(struct archive *,
- struct archive_entry *);
-static int archive_write_shar_data_sed(struct archive *,
- const void * buff, size_t);
-static int archive_write_shar_data_uuencode(struct archive *,
- const void * buff, size_t);
-static int archive_write_shar_finish_entry(struct archive *);
-static int shar_printf(struct archive *, const char *fmt, ...);
-
struct shar {
int dump;
int end_of_line;
@@ -60,19 +50,43 @@
int uuavail;
char uubuffer[3];
int wrote_header;
+ char *work;
+ size_t work_len;
};
+static int archive_write_shar_finish(struct archive *);
+static int archive_write_shar_header(struct archive *,
+ struct archive_entry *);
+static int archive_write_shar_data_sed(struct archive *,
+ const void * buff, size_t);
+static int archive_write_shar_data_uuencode(struct archive *,
+ const void * buff, size_t);
+static int archive_write_shar_finish_entry(struct archive *);
+static int shar_printf(struct archive *, const char *fmt, ...);
+static void uuencode_group(struct shar *);
+
static int
shar_printf(struct archive *a, const char *fmt, ...)
{
+ struct shar *shar;
va_list ap;
- char *p;
+ int required;
int ret;
+ shar = a->format_data;
+ if (shar->work_len <= 0) {
+ shar->work_len = 1024;
+ shar->work = malloc(shar->work_len);
+ }
+
va_start(ap, fmt);
- vasprintf(&p, fmt, ap);
- ret = ((a->compression_write)(a, p, strlen(p)));
- free(p);
+ required = vsnprintf(shar->work, shar->work_len, fmt, ap);
+ if ((size_t)required >= shar->work_len) {
+ shar->work_len = required + 256;
+ realloc(shar->work, shar->work_len);
+ required = vsnprintf(shar->work, shar->work_len, fmt, ap);
+ }
+ ret = ((a->compression_write)(a, shar->work, strlen(shar->work)));
va_end(ap);
return (ret);
}
@@ -261,6 +275,7 @@
return (ARCHIVE_OK);
}
+/* XXX TODO: This could be more efficient XXX */
static int
archive_write_shar_data_sed(struct archive *a, const void *buff, size_t length)
{
@@ -297,6 +312,7 @@
#define UUENC(c) (((c)!=0) ? ((c) & 077) + ' ': '`')
+/* XXX This could be a lot more efficient. XXX */
static void
uuencode_group(struct shar *shar)
{
@@ -443,6 +459,8 @@
archive_entry_free(shar->entry);
if (shar->last_dir != NULL)
free(shar->last_dir);
+ if (shar->work != NULL)
+ free(shar->work);
free(shar);
a->format_data = NULL;
return (ARCHIVE_OK);
==== //depot/projects/hammer/lib/libarchive/archive_write_set_format_ustar.c#5 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_format_ustar.c,v 1.4 2004/04/12 01:16:16 kientzle Exp $");
+__FBSDID("$FreeBSD: src/lib/libarchive/archive_write_set_format_ustar.c,v 1.5 2004/04/13 23:45:37 kientzle Exp $");
#include <sys/stat.h>
#include <errno.h>
@@ -373,19 +373,20 @@
archive_write_ustar_finish(struct archive *a)
{
struct ustar *ustar;
+ int r;
+ r = ARCHIVE_OK;
ustar = a->format_data;
/*
* Suppress end-of-archive if nothing else was ever written.
- * This fixes a problem where setting one format, then another ends up
- * attempting to write a gratuitous end-of-archive marker.
+ * This fixes a problem where setting one format, then another
+ * ends up writing a gratuitous end-of-archive marker.
*/
if (ustar->written && a->compression_write != NULL)
- if (write_nulls(a, 512*2) < 512*2)
- return (ARCHIVE_FATAL);
- free(a->format_data);
+ r = write_nulls(a, 512*2);
+ free(ustar);
a->format_data = NULL;
- return (ARCHIVE_OK);
+ return (r);
}
static int
@@ -409,10 +410,11 @@
while (padding > 0) {
to_write = padding < a->null_length ? padding : a->null_length;
ret = (a->compression_write)(a, a->nulls, to_write);
- if (ret < to_write) return (-1);
+ if (ret < to_write)
+ return (ARCHIVE_FATAL);
padding -= to_write;
}
- return (0);
+ return (ARCHIVE_OK);
}
static int
==== //depot/projects/hammer/share/man/man4/man4.i386/acpi_toshiba.4#3 (text+ko) ====
@@ -23,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/share/man/man4/man4.i386/acpi_toshiba.4,v 1.4 2004/03/20 13:05:11 marks Exp $
+.\" $FreeBSD: src/share/man/man4/man4.i386/acpi_toshiba.4,v 1.5 2004/04/14 00:23:58 njl Exp $
.\"
.Dd February 19, 2004
.Dt ACPI_TOSHIBA 4 i386
@@ -64,6 +64,12 @@
.It Li 4
TV-Out
.El
+.Pp
+Only some systems (i.e., the Libretto L5) support video switching via
+this hardware-specific driver.
+Use the
+.Xr acpi_video 4
+driver for generic video output support.
.It Va hw.acpi.toshiba.lcd_brightness
Makes the LCD backlight brighter or dimmer (higher values are brighter).
.It Va hw.acpi.toshiba.lcd_backlight
@@ -91,6 +97,7 @@
.Xr loader.conf 5 .
.Sh SEE ALSO
.Xr acpi 4 ,
+.Xr acpi_video 4 ,
.Xr loader.conf 5 ,
.Xr sysctl.conf 5 ,
.Xr sysctl 8
==== //depot/projects/hammer/sys/i386/acpica/acpi_toshiba.c#4 (text+ko) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/acpica/acpi_toshiba.c,v 1.5 2004/04/08 16:45:12 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/acpica/acpi_toshiba.c,v 1.6 2004/04/14 00:23:58 njl Exp $");
#include "opt_acpi.h"
#include <sys/param.h>
@@ -49,6 +49,7 @@
#define METHOD_HCI "GHCI"
#define METHOD_HCI_ENABLE "ENAB"
+#define METHOD_VIDEO "DSSX"
/* Operations */
#define HCI_SET 0xFF00
@@ -120,6 +121,7 @@
struct acpi_toshiba_softc {
device_t dev;
ACPI_HANDLE handle;
+ ACPI_HANDLE video_handle;
struct sysctl_ctx_list sysctl_ctx;
struct sysctl_oid *sysctl_tree;
};
@@ -137,9 +139,12 @@
static hci_fn_t hci_lcd_backlight;
static hci_fn_t hci_cpu_speed;
static int hci_call(ACPI_HANDLE h, int op, int function, UINT32 *arg);
-static void hci_key_action(ACPI_HANDLE h, UINT32 key);
+static void hci_key_action(struct acpi_toshiba_softc *sc, ACPI_HANDLE h,
+ UINT32 key);
static void acpi_toshiba_notify(ACPI_HANDLE h, UINT32 notify,
- void *context);
+ void *context);
+static int acpi_toshiba_video_probe(device_t dev);
+static int acpi_toshiba_video_attach(device_t dev);
/* Table of sysctl names and HCI functions to call. */
static struct {
@@ -171,9 +176,27 @@
static devclass_t acpi_toshiba_devclass;
DRIVER_MODULE(acpi_toshiba, acpi, acpi_toshiba_driver, acpi_toshiba_devclass,
- 0, 0);
+ 0, 0);
MODULE_DEPEND(acpi_toshiba, acpi, 1, 1, 1);
+static device_method_t acpi_toshiba_video_methods[] = {
+ DEVMETHOD(device_probe, acpi_toshiba_video_probe),
+ DEVMETHOD(device_attach, acpi_toshiba_video_attach),
+
+ {0, 0}
+};
+
+static driver_t acpi_toshiba_video_driver = {
+ "acpi_toshiba_video",
+ acpi_toshiba_video_methods,
+ 0,
+};
+
+static devclass_t acpi_toshiba_video_devclass;
+DRIVER_MODULE(acpi_toshiba_video, acpi, acpi_toshiba_video_driver,
+ acpi_toshiba_video_devclass, 0, 0);
+MODULE_DEPEND(acpi_toshiba_video, acpi, 1, 1, 1);
+
static int enable_fn_keys = 1;
TUNABLE_INT("hw.acpi.toshiba.enable_fn_keys", &enable_fn_keys);
@@ -306,15 +329,25 @@
hci_video_output(ACPI_HANDLE h, int op, UINT32 *video_output)
{
int ret;
+ ACPI_STATUS status;
if (op == HCI_SET) {
if (*video_output < 1 || *video_output > 7)
return (EINVAL);
+ if (h == NULL)
+ return (ENXIO);
*video_output |= HCI_VIDEO_OUTPUT_FLAG;
+ status = acpi_SetInteger(h, "DSSX", *video_output);
+ if (ACPI_SUCCESS(status))
+ ret = 0;
+ else
+ ret = ENXIO;
+ } else {
+ ret = hci_call(h, op, HCI_REG_VIDEO_OUTPUT, video_output);
+ if (ret == 0)
+ *video_output &= 0xff;
}
- ret = hci_call(h, op, HCI_REG_VIDEO_OUTPUT, video_output);
- if (ret == 0 && op == HCI_GET)
- *video_output &= 0xff;
+
return (ret);
}
@@ -419,7 +452,7 @@
* functionality by reading the keystrokes we send to devd(8).
*/
static void
-hci_key_action(ACPI_HANDLE h, UINT32 key)
+hci_key_action(struct acpi_toshiba_softc *sc, ACPI_HANDLE h, UINT32 key)
{
UINT32 arg;
@@ -444,7 +477,7 @@
/* Cycle through video outputs. */
hci_video_output(h, HCI_GET, &arg);
arg = (arg + 1) % 7;
- hci_video_output(h, HCI_SET, &arg);
+ hci_video_output(sc->video_handle, HCI_SET, &arg);
break;
case FN_F8_RELEASE:
/* Toggle LCD backlight. */
@@ -471,10 +504,45 @@
if (notify == 0x80) {
while (hci_call(h, HCI_GET, HCI_REG_SYSTEM_EVENT, &key) == 0) {
- hci_key_action(h, key);
+ hci_key_action(sc, h, key);
acpi_UserNotify("TOSHIBA", h, (uint8_t)key);
}
- } else {
+ } else
device_printf(sc->dev, "unknown notify: 0x%x\n", notify);
+}
+
+/*
+ * Toshiba video pseudo-device to provide the DSSX method.
+ *
+ * HID Model
+ * -------------------------------------
+ * TOS6201 Libretto L Series
+ */
+static int
+acpi_toshiba_video_probe(device_t dev)
+{
+ int ret = ENXIO;
+
+ if (!acpi_disabled("toshiba") &&
+ acpi_get_type(dev) == ACPI_TYPE_DEVICE &&
+ device_get_unit(dev) == 0 &&
+ acpi_MatchHid(dev, "TOS6201")) {
+ device_quiet(dev);
+ device_set_desc(dev, "Toshiba Video");
+ ret = 0;
}
+
+ return (ret);
+}
+
+static int
+acpi_toshiba_video_attach(device_t dev)
+{
+ struct acpi_toshiba_softc *sc;
+
+ sc = devclass_get_softc(acpi_toshiba_devclass, 0);
+ if (sc == NULL)
+ return (ENXIO);
+ sc->video_handle = acpi_get_handle(dev);
+ return (0);
}
==== //depot/projects/hammer/usr.bin/tar/util.c#2 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: src/usr.bin/tar/util.c,v 1.1 2004/04/05 21:32:18 kientzle Exp $");
+__FBSDID("$FreeBSD: src/usr.bin/tar/util.c,v 1.2 2004/04/13 23:49:02 kientzle Exp $");
#include <ctype.h>
#include <stdarg.h>
@@ -45,19 +45,24 @@
safe_fprintf(FILE *f, const char *fmt, ...)
{
char *buff;
+ char *buffheap;
+ char buffstack[256];
int bufflength;
int length;
va_list ap;
char *p;
- bufflength = 512;
- buff = malloc(bufflength);
+ /* Use a stack-allocated buffer if we can. */
+ buffheap = NULL;
+ bufflength = 256;
+ buff = buffstack;
va_start(ap, fmt);
length = vsnprintf(buff, bufflength, fmt, ap);
+ /* If the result is too large, allocate a buffer on the heap. */
if (length >= bufflength) {
bufflength = length+1;
- buff = realloc(buff, bufflength);
+ buff = buffheap = malloc(bufflength);
length = vsnprintf(buff, bufflength, fmt, ap);
}
va_end(ap);
@@ -83,7 +88,9 @@
fprintf(f, "\\%03o", c);
}
}
- free(buff);
+ /* If we allocated a heap-based buffer, free it now. */
+ if (buffheap != NULL)
+ free(buffheap);
}
static void
==== //depot/projects/hammer/usr.bin/tar/write.c#4 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: src/usr.bin/tar/write.c,v 1.5 2004/04/12 00:13:23 kientzle Exp $");
+__FBSDID("$FreeBSD: src/usr.bin/tar/write.c,v 1.6 2004/04/13 23:50:48 kientzle Exp $");
#include <sys/stat.h>
#include <sys/types.h>
@@ -807,7 +807,7 @@
*/
for (le = bsdtar->links_head; le != NULL; le = le->next) {
if (le->dev == st->st_dev && le->ino == st->st_ino) {
- archive_entry_set_hardlink(entry, le->name);
+ archive_entry_copy_hardlink(entry, le->name);
/*
* Decrement link count each time and release
@@ -820,6 +820,8 @@
le->previous->next = le->next;
if (le->next != NULL)
le->next->previous = le->previous;
+ if (le->name != NULL)
+ free(le->name);
if (bsdtar->links_head == le)
bsdtar->links_head = le->next;
free(le);
More information about the p4-projects
mailing list