📄 lib.c
字号:
/* * * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2000-2001 Qualcomm Incorporated * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com> * Copyright (C) 2002-2005 Marcel Holtmann <marcel@holtmann.org> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation; * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS * SOFTWARE IS DISCLAIMED. * * * $Id: lib.c,v 1.7 2005/01/26 02:08:03 holtmann Exp $ */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdlib.h>#include <string.h>#include <stdio.h>#include <stdarg.h>#include <unistd.h>#include <netdb.h>#include <signal.h>#include <bluetooth/bluetooth.h>#include <bluetooth/hci.h>#include <bluetooth/hci_lib.h>#include "hcid.h"#include "lib.h"volatile sig_atomic_t __io_canceled;/* * Device name expansion * %d - device id */char *expand_name(char *dst, int size, char *str, int dev_id){ register int sp, np, olen; char *opt, buf[10]; if (!str && !dst) return NULL; sp = np = 0; while (np < size - 1 && str[sp]) { switch (str[sp]) { case '%': opt = NULL; switch (str[sp+1]) { case 'd': sprintf(buf, "%d", dev_id); opt = buf; break; case 'h': opt = hcid.host_name; break; case '%': dst[np++] = str[sp++]; /* fall through */ default: sp++; continue; } if (opt) { /* substitute */ olen = strlen(opt); if (np + olen < size - 1) memcpy(dst + np, opt, olen); np += olen; } sp += 2; continue; case '\\': sp++; /* fall through */ default: dst[np++] = str[sp++]; break; } } dst[np] = '\0'; return dst;}/* Returns current host name */char *get_host_name(void){ char name[40]; if (!gethostname(name, sizeof(name)-1)) { name[sizeof(name)-1] = 0; return strdup(name); } return strdup("noname");}/* Functions to manipulate program title */extern char **environ;char *title_start; /* start of the proc title space */char *title_end; /* end of the proc title space */int title_size;void init_title(int argc, char *argv[], char *envp[], const char *name){ int i; /* * Move the environment so settitle can use the space at * the top of memory. */ for (i = 0; envp[i]; i++); environ = (char **) malloc(sizeof (char *) * (i + 1)); for (i = 0; envp[i]; i++) environ[i] = strdup(envp[i]); environ[i] = NULL; /* * Save start and extent of argv for set_title. */ title_start = argv[0]; /* * Determine how much space we can use for set_title. * Use all contiguous argv and envp pointers starting at argv[0] */ for (i =0; i < argc; i++) if (!i || title_end == argv[i]) title_end = argv[i] + strlen(argv[i]) + 1; for (i = 0; envp[i]; i++) if (title_end == envp[i]) title_end = envp[i] + strlen(envp[i]) + 1; strcpy(title_start, name); title_start += strlen(name); title_size = title_end - title_start;}void set_title(const char *fmt, ...){ char buf[255]; va_list ap; memset(title_start, 0, title_size); /* print the argument string */ va_start(ap, fmt); vsprintf(buf, fmt, ap); va_end(ap); if (strlen(buf) > title_size - 1) buf[title_size - 1] = '\0'; strcat(title_start, buf);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -