本文整理汇总了C++中perror_msg函数的典型用法代码示例。如果您正苦于以下问题:C++ perror_msg函数的具体用法?C++ perror_msg怎么用?C++ perror_msg使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了perror_msg函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: attach_binary_item
static
int attach_binary_item(struct abrt_xmlrpc *ax, const char *bug_id,
const char *item_name, struct problem_item *item)
{
if (!(item->flags & CD_FLAG_BIN))
return 0;
char *filename = item->content;
int fd = open(filename, O_RDONLY);
if (fd < 0)
{
perror_msg("Can't open '%s'", filename);
return 0;
}
errno = 0;
struct stat st;
if (fstat(fd, &st) != 0 || !S_ISREG(st.st_mode))
{
perror_msg("'%s': not a regular file", filename);
close(fd);
return 0;
}
VERB3 log("attaching '%s' as binary", item_name);
int r = rhbz_attach_fd(ax, bug_id, item_name, fd, RHBZ_NOMAIL_NOTIFY | RHBZ_BINARY_ATTACHMENT);
close(fd);
return (r == 0);
}
开发者ID:hors,项目名称:libreport,代码行数:27,代码来源:reporter-bugzilla.c
示例2: select_playtgt
void
select_playtgt (dspdev_t * dsp)
{
/*
* Handling of the -o command line option (playback target selection).
*
* Empty or "?" shows the available playback sources.
*/
int i, src;
oss_mixer_enuminfo ei;
if (ioctl (dsp->fd, SNDCTL_DSP_GET_PLAYTGT_NAMES, &ei) == -1)
{
perror_msg ("SNDCTL_DSP_GET_PLAYTGT_NAMES");
exit (E_SETUP_ERROR);
}
if (ioctl (dsp->fd, SNDCTL_DSP_GET_PLAYTGT, &src) == -1)
{
perror_msg ("SNDCTL_DSP_GET_PLAYTGT");
exit (E_SETUP_ERROR);
}
if ((dsp->playtgt[0] == '\0') || (strcmp (dsp->playtgt, "?") == 0))
{
print_msg (STARTM,
"\nPossible playback targets for the selected device:\n\n");
for (i = 0; i < ei.nvalues; i++)
{
print_msg (CONTM, "\t%s", ei.strings + ei.strindex[i]);
if (i == src)
print_msg (CONTM, " (currently selected)");
print_msg (CONTM, "\n");
}
print_msg (ENDM, "\n");
exit (0);
}
for (i = 0; i < ei.nvalues; i++)
{
char *s = ei.strings + ei.strindex[i];
if (strcmp (s, dsp->playtgt) == 0)
{
src = i;
if (ioctl (dsp->fd, SNDCTL_DSP_SET_PLAYTGT, &src) == -1)
{
perror_msg ("SNDCTL_DSP_SET_PLAYTGT");
exit (E_SETUP_ERROR);
}
return;
}
}
print_msg (ERRORM,
"Unknown playback target name '%s' - use -o? to get the list\n",
dsp->playtgt);
exit (E_USAGE);
}
开发者ID:Open-Sound-System,项目名称:Open-Sound-System,代码行数:60,代码来源:ossplay.c
示例3: handle_added
/**
* Produce an IN_CREATE notification for a new file and start wathing on it.
*
* This function is used as a callback and is invoked from the dep-list
* routines.
*
* @param[in] udata A pointer to user data (#handle_context).
* @param[in] path File name of a new file.
* @param[in] inode Inode number of a new file.
**/
static void
handle_added (void *udata, const char *path, ino_t inode)
{
assert (udata != NULL);
handle_context *ctx = (handle_context *) udata;
assert (ctx->wrk != NULL);
assert (ctx->w != NULL);
assert (ctx->be != NULL);
struct inotify_event *ie = NULL;
int ie_len = 0;
ie = create_inotify_event (ctx->w->fd, IN_CREATE, 0, path, &ie_len);
if (ie != NULL) {
bulk_write (ctx->be, ie, ie_len);
free (ie);
} else {
perror_msg ("Failed to create an IN_CREATE event for %s", path);
}
char *npath = path_concat (ctx->w->filename, path);
if (npath != NULL) {
watch *neww = worker_start_watching (ctx->wrk, npath, path, ctx->w->flags, WATCH_DEPENDENCY);
if (neww == NULL) {
perror_msg ("Failed to start watching on a new dependency %s", npath);
} else {
neww->parent = ctx->w;
}
free (npath);
} else {
perror_msg ("Failed to allocate a path to start watching a dependency");
}
}
开发者ID:karlpilkington,项目名称:libinotify-kqueue,代码行数:44,代码来源:worker-thread.c
示例4: decompress_file
int
decompress_file(const char *path_in, const char *path_out, mode_t mode_out)
{
int fdi = open(path_in, O_RDONLY | O_CLOEXEC);
if (fdi < 0)
{
perror_msg("Could not open file: %s", path_in);
return -1;
}
int fdo = open(path_out, O_WRONLY | O_CLOEXEC | O_EXCL | O_CREAT, mode_out);
if (fdo < 0)
{
close(fdi);
perror_msg("Could not create file: %s", path_out);
return -1;
}
int ret = decompress_fd(fdi, fdo);
close(fdi);
close(fdo);
if (ret != 0)
unlink(path_out);
return ret;
}
开发者ID:scottgfhong,项目名称:libreport,代码行数:27,代码来源:compress.c
示例5: select_recsrc
void
select_recsrc (dspdev_t * dsp)
{
/*
* Handling of the -i command line option (recording source selection).
*
* Empty or "?" shows the available recording sources.
*/
int i, src;
oss_mixer_enuminfo ei;
if (ioctl (dsp->fd, SNDCTL_DSP_GET_RECSRC_NAMES, &ei) == -1)
{
perror_msg ("SNDCTL_DSP_GET_RECSRC_NAMES");
exit (E_SETUP_ERROR);
}
if (ioctl (dsp->fd, SNDCTL_DSP_GET_RECSRC, &src) == -1)
{
perror_msg ("SNDCTL_DSP_GET_RECSRC");
exit (E_SETUP_ERROR);
}
if (dsp->recsrc[0] == '\0' || strcmp (dsp->recsrc, "?") == 0)
{
print_msg (STARTM,
"\nPossible recording sources for the selected device:\n\n");
for (i = 0; i < ei.nvalues; i++)
{
print_msg (CONTM, "\t%s", ei.strings + ei.strindex[i]);
if (i == src)
print_msg (CONTM, " (currently selected)");
print_msg (CONTM, "\n");
}
print_msg (ENDM, "\n");
exit (0);
}
for (i = 0; i < ei.nvalues; i++)
{
char *s = ei.strings + ei.strindex[i];
if (strcmp (s, dsp->recsrc) == 0)
{
src = i;
if (ioctl (dsp->fd, SNDCTL_DSP_SET_RECSRC, &src) == -1)
{
perror_msg ("SNDCTL_DSP_SET_RECSRC");
exit (E_SETUP_ERROR);
}
return;
}
}
print_msg (ERRORM,
"Unknown recording source name '%s' - use -i? to get the list\n",
dsp->recsrc);
exit (E_USAGE);
}
开发者ID:Open-Sound-System,项目名称:Open-Sound-System,代码行数:59,代码来源:ossplay.c
示例6: create_symlink_lockfile
/* Return values:
* -1: error (in this case, errno is 0 if error message is already logged)
* 0: failed to lock (someone else has it locked)
* 1: success
*/
int create_symlink_lockfile(const char* lock_file, const char* pid)
{
while (symlink(pid, lock_file) != 0)
{
if (errno != EEXIST)
{
if (errno != ENOENT && errno != ENOTDIR && errno != EACCES)
{
perror_msg("Can't create lock file '%s'", lock_file);
errno = 0;
}
return -1;
}
char pid_buf[sizeof(pid_t)*3 + 4];
ssize_t r = readlink(lock_file, pid_buf, sizeof(pid_buf) - 1);
if (r < 0)
{
if (errno == ENOENT)
{
/* Looks like lock_file was deleted */
usleep(SYMLINK_RETRY_USLEEP); /* avoid CPU eating loop */
continue;
}
perror_msg("Can't read lock file '%s'", lock_file);
errno = 0;
return -1;
}
pid_buf[r] = '\0';
if (strcmp(pid_buf, pid) == 0)
{
log("Lock file '%s' is already locked by us", lock_file);
errno = EALREADY;
return 0;
}
if (isdigit_str(pid_buf))
{
char pid_str[sizeof("/proc/") + sizeof(pid_buf)];
snprintf(pid_str, sizeof(pid_str), "/proc/%s", pid_buf);
if (access(pid_str, F_OK) == 0)
{
log("Lock file '%s' is locked by process %s", lock_file, pid_buf);
return 0;
}
log("Lock file '%s' was locked by process %s, but it crashed?", lock_file, pid_buf);
}
/* The file may be deleted by now by other process. Ignore ENOENT */
if (unlink(lock_file) != 0 && errno != ENOENT)
{
perror_msg("Can't remove stale lock file '%s'", lock_file);
errno = 0;
return -1;
}
}
log_info("Locked '%s'", lock_file);
return 1;
}
开发者ID:scottgfhong,项目名称:libreport,代码行数:64,代码来源:dump_dir.c
示例7: server_socket_cb
/* Callback called by glib main loop when a client connects to ABRT's socket. */
static gboolean server_socket_cb(GIOChannel *source, GIOCondition condition, gpointer ptr_unused)
{
kill_idle_timeout();
load_abrt_conf();
int socket = accept(g_io_channel_unix_get_fd(source), NULL, NULL);
if (socket == -1)
{
perror_msg("accept");
goto server_socket_finitio;
}
log_notice("New client connected");
fflush(NULL); /* paranoia */
int pipefd[2];
xpipe(pipefd);
pid_t pid = fork();
if (pid < 0)
{
perror_msg("fork");
close(socket);
close(pipefd[0]);
close(pipefd[1]);
goto server_socket_finitio;
}
if (pid == 0) /* child */
{
xdup2(socket, STDIN_FILENO);
xdup2(socket, STDOUT_FILENO);
close(socket);
close(pipefd[0]);
xmove_fd(pipefd[1], STDERR_FILENO);
char *argv[3]; /* abrt-server [-s] NULL */
char **pp = argv;
*pp++ = (char*)"abrt-server";
if (logmode & LOGMODE_JOURNAL)
*pp++ = (char*)"-s";
*pp = NULL;
execvp(argv[0], argv);
perror_msg_and_die("Can't execute '%s'", argv[0]);
}
/* parent */
close(socket);
close(pipefd[1]);
add_abrt_server_proc(pid, pipefd[0]);
server_socket_finitio:
start_idle_timeout();
return TRUE;
}
开发者ID:wlindauer,项目名称:abrt,代码行数:57,代码来源:abrtd.c
示例8: mark_unprocessed_dump_dirs_not_reportable
/* The function expects that FILENAME_COUNT dump dir element is created by
* abrtd after all post-create events are successfully done. Thus if
* FILENAME_COUNT element doesn't exist abrtd can consider the dump directory
* as unprocessed.
*
* Relying on content of dump directory has one problem. If a hook provides
* FILENAME_COUNT abrtd will consider the dump directory as processed.
*/
static void mark_unprocessed_dump_dirs_not_reportable(const char *path)
{
log_notice("Searching for unprocessed dump directories");
DIR *dp = opendir(path);
if (!dp)
{
perror_msg("Can't open directory '%s'", path);
return;
}
struct dirent *dent;
while ((dent = readdir(dp)) != NULL)
{
if (dot_or_dotdot(dent->d_name))
continue; /* skip "." and ".." */
char *full_name = concat_path_file(path, dent->d_name);
struct stat stat_buf;
if (stat(full_name, &stat_buf) != 0)
{
perror_msg("Can't access path '%s'", full_name);
goto next_dd;
}
if (S_ISDIR(stat_buf.st_mode) == 0)
/* This is expected. The dump location contains some aux files */
goto next_dd;
struct dump_dir *dd = dd_opendir(full_name, /*flags*/0);
if (dd)
{
if (!problem_dump_dir_is_complete(dd) && !dd_exist(dd, FILENAME_NOT_REPORTABLE))
{
log_warning("Marking '%s' not reportable (no '"FILENAME_COUNT"' item)", full_name);
dd_save_text(dd, FILENAME_NOT_REPORTABLE, _("The problem data are "
"incomplete. This usually happens when a problem "
"is detected while computer is shutting down or "
"user is logging out. In order to provide "
"valuable problem reports, ABRT will not allow "
"you to submit this problem. If you have time and "
"want to help the developers in their effort to "
"sort out this problem, please contact them directly."));
}
dd_close(dd);
}
next_dd:
free(full_name);
}
closedir(dp);
}
开发者ID:wlindauer,项目名称:abrt,代码行数:63,代码来源:abrtd.c
示例9: uname_main
int uname_main(int argc, char **argv)
{
struct utsname name;
char processor[256];
#if defined(__sparc__) && defined(__linux__)
char *fake_sparc = getenv("FAKE_SPARC");
#endif
toprint = 0;
/* Parse any options */
//fprintf(stderr, "argc=%d, argv=%s\n", argc, *argv);
while (--argc > 0 && **(++argv) == '-') {
while (*(++(*argv))) {
switch (**argv) {
case 's':
toprint |= PRINT_SYSNAME;
break;
case 'n':
toprint |= PRINT_NODENAME;
break;
case 'r':
toprint |= PRINT_RELEASE;
break;
case 'v':
toprint |= PRINT_VERSION;
break;
case 'm':
toprint |= PRINT_MACHINE;
break;
case 'p':
toprint |= PRINT_PROCESSOR;
break;
case 'a':
toprint = (PRINT_SYSNAME | PRINT_NODENAME | PRINT_RELEASE |
PRINT_PROCESSOR | PRINT_VERSION |
PRINT_MACHINE);
break;
default:
show_usage();
}
}
}
if (toprint == 0)
toprint = PRINT_SYSNAME;
if (uname(&name) == -1)
perror_msg("cannot get system name");
#if defined (HAVE_SYSINFO) && defined (SI_ARCHITECTURE)
if (sysinfo(SI_ARCHITECTURE, processor, sizeof(processor)) == -1)
perror_msg("cannot get processor type");
}
开发者ID:BackupTheBerlios,项目名称:wl530g-svn,代码行数:55,代码来源:uname.c
示例10: decompress_using_fork_execvp
static int
decompress_using_fork_execvp(const char** cmd, int fdi, int fdo)
{
pid_t child = fork();
if (child < 0)
{
VERB1 perror_msg("fork() for decompression");
return -1;
}
if (child == 0)
{
close(STDIN_FILENO);
if (dup2(fdi, STDIN_FILENO) < 0)
{
VERB1 perror_msg("Decompression failed: dup2(fdi, STDIN_FILENO)");
exit(EXIT_FAILURE);
}
close(STDOUT_FILENO);
if (dup2(fdo, STDOUT_FILENO) < 0)
{
VERB1 perror_msg("Decompression failed: dup2(fdo, STDOUT_FILENO)");
exit(EXIT_FAILURE);
}
execvp(cmd[0], (char **)cmd);
VERB1 perror_msg("Decompression failed: execlp('%s')", cmd[0]);
exit(EXIT_FAILURE);
}
int status = 0;
int r = safe_waitpid(child, &status, 0);
if (r < 0)
{
VERB1 perror_msg("Decompression failed: waitpid($1) failed");
return -2;
}
if (!WIFEXITED(status))
{
log_info("Decompression process returned abnormally");
return -3;
}
if (WEXITSTATUS(status) != 0)
{
log_info("Decompression process exited with %d", WEXITSTATUS(r));
return -4;
}
return 0;
}
开发者ID:abrt,项目名称:libreport,代码行数:54,代码来源:compress.c
示例11: handle_overwritten
/**
* Produce an IN_DELETE/IN_CREATE notifications pair for an overwritten file.
* Reopen a watch for the overwritten file.
*
* This function is used as a callback and is invoked from the dep-list
* routines.
*
* @param[in] udata A pointer to user data (#handle_context).
* @param[in] path File name of the overwritten file.
* @param[in] inode Inode number of the overwritten file.
**/
static void
handle_overwritten (void *udata, const char *path, ino_t inode)
{
assert (udata != NULL);
handle_context *ctx = (handle_context *) udata;
assert (ctx->wrk != NULL);
assert (ctx->w != NULL);
assert (ctx->be != NULL);
int i;
for (i = 0; i < ctx->wrk->sets.length; i++) {
watch *wi = ctx->wrk->sets.watches[i];
if (wi && (strcmp (wi->filename, path) == 0)
&& wi->parent == ctx->w) {
if (watch_reopen (wi) == -1) {
/* I dont know, what to do */
/* Not a very beautiful way to remove a single dependency */
dep_list *dl = dl_create (wi->filename, wi->inode);
worker_remove_many (ctx->wrk, ctx->w, dl, 0);
dl_shallow_free (dl);
} else {
uint32_t cookie = inode & 0x00000000FFFFFFFF;
int event_len = 0;
struct inotify_event *ev;
ev = create_inotify_event (ctx->w->fd, IN_DELETE, cookie,
path,
&event_len);
if (ev != NULL) {
bulk_write (ctx->be, ev, event_len);
free (ev);
} else {
perror_msg ("Failed to create an IN_DELETE event (*) for %s",
path);
}
ev = create_inotify_event (ctx->w->fd, IN_CREATE, cookie,
path,
&event_len);
if (ev != NULL) {
bulk_write (ctx->be, ev, event_len);
free (ev);
} else {
perror_msg ("Failed to create an IN_CREATE event (*) for %s",
path);
}
}
break;
}
}
}
开发者ID:karlpilkington,项目名称:libinotify-kqueue,代码行数:63,代码来源:worker-thread.c
示例12: handle_replaced
/**
* Produce an IN_MOVED_FROM/IN_MOVED_TO notifications pair for a replaced file.
* Also stops wathing on the replaced file.
*
* This function is used as a callback and is invoked from the dep-list
* routines.
*
* @param[in] udata A pointer to user data (#handle_context).
* @param[in] from_path File name of the source file.
* @param[in] from_inode Inode number of the source file.
* @param[in] to_path File name of the replaced file.
* @param[in] to_inode Inode number of the replaced file.
**/
static void
handle_replaced (void *udata,
const char *from_path,
ino_t from_inode,
const char *to_path,
ino_t to_inode)
{
assert (udata != NULL);
handle_context *ctx = (handle_context *) udata;
assert (ctx->wrk != NULL);
assert (ctx->w != NULL);
assert (ctx->be != NULL);
uint32_t cookie = from_inode & 0x00000000FFFFFFFF;
int event_len = 0;
struct inotify_event *ev;
ev = create_inotify_event (ctx->w->fd, IN_MOVED_FROM, cookie,
from_path,
&event_len);
if (ev != NULL) {
bulk_write (ctx->be, ev, event_len);
free (ev);
} else {
perror_msg ("Failed to create an IN_MOVED_FROM event (*) for %s",
from_path);
}
ev = create_inotify_event (ctx->w->fd, IN_MOVED_TO, cookie,
to_path,
&event_len);
if (ev != NULL) {
bulk_write (ctx->be, ev, event_len);
free (ev);
} else {
perror_msg ("Failed to create an IN_MOVED_TO event (*) for %s",
to_path);
}
int i;
for (i = 1; i < ctx->wrk->sets.length; i++) {
watch *iw = ctx->wrk->sets.watches[i];
if (iw && iw->parent == ctx->w && strcmp (to_path, iw->filename) == 0) {
dep_list *dl = dl_create (iw->filename, iw->inode);
worker_remove_many (ctx->wrk, ctx->w, dl, 0);
dl_shallow_free (dl);
break;
}
}
}
开发者ID:karlpilkington,项目名称:libinotify-kqueue,代码行数:64,代码来源:worker-thread.c
示例13: create_pidfile
static int create_pidfile(void)
{
/* Note:
* No O_EXCL: we would happily overwrite stale pidfile from previous boot.
* No O_TRUNC: we must first try to lock the file, and if lock fails,
* there is another live abrtd. O_TRUNCing the file in this case
* would be wrong - it'll erase the pid to empty string!
*/
int fd = open(VAR_RUN_PIDFILE, O_RDWR|O_CREAT, 0644);
if (fd >= 0)
{
if (lockf(fd, F_TLOCK, 0) < 0)
{
perror_msg("Can't lock file '%s'", VAR_RUN_PIDFILE);
/* should help with problems like rhbz#859724 */
char pid_str[sizeof(long)*3 + 4];
int r = full_read(fd, pid_str, sizeof(pid_str));
close(fd);
/* File can contain garbage. Be careful interpreting it as PID */
if (r > 0)
{
pid_str[r] = '\0';
errno = 0;
long locking_pid = strtol(pid_str, NULL, 10);
if (!errno && locking_pid > 0 && locking_pid <= INT_MAX)
{
char *cmdline = get_cmdline(locking_pid);
if (cmdline)
{
error_msg("Process %lu '%s' is holding the lock", locking_pid, cmdline);
free(cmdline);
}
}
}
return -1;
}
close_on_exec_on(fd);
/* write our pid to it */
char buf[sizeof(long)*3 + 2];
int len = sprintf(buf, "%lu\n", (long)getpid());
IGNORE_RESULT(write(fd, buf, len));
IGNORE_RESULT(ftruncate(fd, len));
/* we leak opened+locked fd intentionally */
return 0;
}
perror_msg("Can't open '%s'", VAR_RUN_PIDFILE);
return -1;
}
开发者ID:wlindauer,项目名称:abrt,代码行数:51,代码来源:abrtd.c
示例14: gz_close
int
gz_close(int gunzip_pid)
{
int status;
int ret;
if (gz_use_vfork) {
/* The gunzip process remains running in the background if we
* used the vfork()/exec() technique - so we have to kill it
* forcibly. There might be a better way to do this, but that
* affect a lot of other parts of opkg, and this works fine.
*/
if (kill(gunzip_pid, SIGTERM) == -1) {
perror_msg("gz_close(): unable to kill gunzip pid.");
return -1;
}
}
if (waitpid(gunzip_pid, &status, 0) == -1) {
perror_msg("waitpid");
return -1;
}
if (gz_use_vfork) {
/* Bail out here if we used the vfork()/exec() technique. */
return 0;
}
if (WIFSIGNALED(status)) {
error_msg("Unzip process killed by signal %d.\n",
WTERMSIG(status));
return -1;
}
if (!WIFEXITED(status)) {
/* shouldn't happen */
error_msg("Your system is broken: got status %d from waitpid.\n",
status);
return -1;
}
if ((ret = WEXITSTATUS(status))) {
error_msg("Unzip process failed with return code %d.\n",
ret);
return -1;
}
return 0;
}
开发者ID:0x000000FF,项目名称:opkg4edison,代码行数:50,代码来源:gz_open.c
示例15: update_attr
// Update attribute of given file.
static int update_attr(struct dirtree *root)
{
unsigned long fval = 0;
char *fpath = NULL;
int fd;
if (!dirtree_notdotdot(root)) return 0;
/*
* if file is a link and recursive is set or file is not regular+link+dir
* (like fifo or dev file) then escape the file.
*/
if ((S_ISLNK(root->st.st_mode) && chattr.recursive)
|| (!S_ISREG(root->st.st_mode) && !S_ISLNK(root->st.st_mode)
&& !S_ISDIR(root->st.st_mode)))
return 0;
fpath = dirtree_path(root, NULL);
if (-1 == (fd=open(fpath, O_RDONLY | O_NONBLOCK))) {
free(fpath);
return DIRTREE_ABORT;
}
// Get current attr of file.
if (ext2_getflag(fd, &(root->st), &fval) < 0) {
perror_msg("read flags of '%s'", fpath);
free(fpath);
xclose(fd);
return DIRTREE_ABORT;
}
if (chattr.set) { // for '=' operator.
if (ext2_setflag(fd, &(root->st), chattr.set) < 0)
perror_msg("setting flags '%s'", fpath);
} else { // for '-' / '+' operator.
fval &= ~(chattr.rm);
fval |= chattr.add;
if (!S_ISDIR(root->st.st_mode)) fval &= ~FS_DIRSYNC_FL;
if (ext2_setflag(fd, &(root->st), fval) < 0)
perror_msg("setting flags '%s'", fpath);
}
if (chattr.vflag) { // set file version
if (ioctl(fd, FS_IOC_SETVERSION, (void*)&chattr.version) < 0)
perror_msg("while setting version on '%s'", fpath);
}
free(fpath);
xclose(fd);
if (S_ISDIR(root->st.st_mode) && chattr.recursive) return DIRTREE_RECURSE;
return 0;
}
开发者ID:emaste,项目名称:toybox,代码行数:50,代码来源:lsattr.c
示例16: print_file_attr
static void print_file_attr(char *path)
{
unsigned long flag = 0, version = 0;
int fd;
struct stat sb;
if (!stat(path, &sb) && !S_ISREG(sb.st_mode) && !S_ISDIR(sb.st_mode)) {
errno = EOPNOTSUPP;
goto LABEL1;
}
if (-1 == (fd=open(path, O_RDONLY | O_NONBLOCK))) goto LABEL1;
if (toys.optflags & FLAG_v) {
if (ioctl(fd, FS_IOC_GETVERSION, (void*)&version) < 0) goto LABEL2;
xprintf("%5lu ", version);
}
if (ext2_getflag(fd, &sb, &flag) < 0) perror_msg("reading flags '%s'", path);
else {
struct ext2_attr *ptr = e2attrs;
if (toys.optflags & FLAG_l) {
int name_found = 0;
xprintf("%-50s ", path);
for (; ptr->name; ptr++) {
if (flag & ptr->flag) {
if (name_found) xprintf(", "); //for formatting.
xprintf("%s", ptr->name);
name_found = 1;
}
}
if (!name_found) xprintf("---");
xputc('\n');
} else {
int index = 0;
for (; ptr->name; ptr++)
toybuf[index++] = (flag & ptr->flag) ? ptr->opt : '-';
toybuf[index] = '\0';
xprintf("%s %s\n", toybuf, path);
}
}
xclose(fd);
return;
LABEL2: xclose(fd);
LABEL1: perror_msg("reading '%s'", path);
}
开发者ID:emaste,项目名称:toybox,代码行数:48,代码来源:lsattr.c
示例17: find_devname
static void
find_devname (char * devname, const char * num)
{
/*
* OSS 4.0 the audio device numbering may be different from the
* legacy /dev/dsp# numbering reported by /dev/sndstat. Try to find the
* device name (devnode) that matches the given device number.
*
* Prior versions of ossplay simply used the the /dev/dsp# number.
*/
int dev;
int mixer_fd;
oss_audioinfo ai;
const char * devmixer;
if ((devmixer = getenv("OSS_MIXERDEV")) == NULL)
devmixer = "/dev/mixer";
if (sscanf (num, "%d", &dev) != 1)
{
print_msg (ERRORM, "Invalid audio device number '%s'\n", num);
exit (E_SETUP_ERROR);
}
if ((mixer_fd = open (devmixer, O_RDWR, 0)) == -1)
{
perror_msg (devmixer);
print_msg (WARNM, "Warning: Defaulting to /dev/dsp%s\n", num);
snprintf (devname, OSS_DEVNODE_SIZE, "/dev/dsp%s", num);
return;
}
ai.dev = dev;
if (ioctl (mixer_fd, SNDCTL_AUDIOINFO, &ai) == -1)
{
perror_msg ("SNDCTL_AUDIOINFO");
print_msg (WARNM, "Warning: Defaulting to /dev/dsp%s\n", num);
snprintf (devname, OSS_DEVNODE_SIZE, "/dev/dsp%s", num);
close (mixer_fd);
return;
}
strncpy (devname, ai.devnode, OSS_DEVNODE_SIZE);
close (mixer_fd);
return;
}
开发者ID:Open-Sound-System,项目名称:Open-Sound-System,代码行数:48,代码来源:ossplay.c
示例18: do_loadfont
static void do_loadfont(int fd, char *inbuf, int unit, int fontsize)
{
char buf[16384];
int i;
memset(buf, 0, sizeof(buf));
if (unit < 1 || unit > 32)
error_msg_and_die("Bad character size %d", unit);
for (i = 0; i < fontsize; i++)
memcpy(buf + (32 * i), inbuf + (unit * i), unit);
#if defined( PIO_FONTX ) && !defined( __sparc__ )
{
struct consolefontdesc cfd;
cfd.charcount = fontsize;
cfd.charheight = unit;
cfd.chardata = buf;
if (ioctl(fd, PIO_FONTX, &cfd) == 0)
return; /* success */
perror_msg("PIO_FONTX ioctl error (trying PIO_FONT)");
}
#endif
if (ioctl(fd, PIO_FONT, buf))
perror_msg_and_die("PIO_FONT ioctl error");
}
开发者ID:jhbsz,项目名称:actiontec_opensource_mi424wr-rev-acd-56-0-10-14-4,代码行数:29,代码来源:loadfont.c
示例19: xgetcwd
char *
xgetcwd (char *cwd)
{
char *ret;
unsigned path_max;
path_max = (unsigned) PATH_MAX;
path_max += 2; /* The getcwd docs say to do this. */
if(cwd==0)
cwd = xmalloc (path_max);
while ((ret = getcwd (cwd, path_max)) == NULL && errno == ERANGE) {
path_max += PATH_INCR;
cwd = xrealloc (cwd, path_max);
}
if (ret == NULL) {
free (cwd);
perror_msg("getcwd()");
return NULL;
}
return cwd;
}
开发者ID:zipangotes,项目名称:DSL-G624T_GPL_code,代码行数:25,代码来源:xgetcwd.c
示例20: tarExtractSymLink
static int
tarExtractSymLink(TarInfo *header, int extractFlag, int tostdoutFlag)
{
if (extractFlag==FALSE || tostdoutFlag==TRUE)
return( TRUE);
#ifdef S_ISLNK
if (symlink(header->linkname, header->name) < 0) {
perror_msg("%s: Cannot create symlink to '%s'", header->name,
header->linkname);
return( FALSE);
}
/* Try to change ownership of the symlink.
* If libs doesn't support that, don't bother.
* Changing the pointed-to-file is the Wrong Thing(tm).
*/
#if (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)
lchown(header->name, header->uid, header->gid);
#endif
/* Do not change permissions or date on symlink,
* since it changes the pointed to file instead. duh. */
#else
error_msg("%s: Cannot create symlink to '%s': %s",
header->name, header->linkname,
"symlinks not supported");
#endif
return( TRUE);
}
开发者ID:BackupTheBerlios,项目名称:wl530g-svn,代码行数:29,代码来源:tar.c
注:本文中的perror_msg函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论