📄 uxmisc.c
字号:
/* * PuTTY miscellaneous Unix stuff */#include <stdio.h>#include <unistd.h>#include <sys/time.h>#include <sys/types.h>#include <pwd.h>#include "putty.h"unsigned long getticks(void){ struct timeval tv; gettimeofday(&tv, NULL); /* * This will wrap around approximately every 4000 seconds, i.e. * just over an hour, which is more than enough. */ return tv.tv_sec * 1000000 + tv.tv_usec;}Filename filename_from_str(const char *str){ Filename ret; strncpy(ret.path, str, sizeof(ret.path)); ret.path[sizeof(ret.path)-1] = '\0'; return ret;}const char *filename_to_str(const Filename *fn){ return fn->path;}int filename_equal(Filename f1, Filename f2){ return !strcmp(f1.path, f2.path);}int filename_is_null(Filename fn){ return !*fn.path;}#ifdef DEBUGstatic FILE *debug_fp = NULL;void dputs(char *buf){ if (!debug_fp) { debug_fp = fopen("debug.log", "w"); } write(1, buf, strlen(buf)); fputs(buf, debug_fp); fflush(debug_fp);}#endifchar *get_username(void){ struct passwd *p; uid_t uid = getuid(); char *user, *ret = NULL; /* * First, find who we think we are using getlogin. If this * agrees with our uid, we'll go along with it. This should * allow sharing of uids between several login names whilst * coping correctly with people who have su'ed. */ user = getlogin(); setpwent(); if (user) p = getpwnam(user); else p = NULL; if (p && p->pw_uid == uid) { /* * The result of getlogin() really does correspond to * our uid. Fine. */ ret = user; } else { /* * If that didn't work, for whatever reason, we'll do * the simpler version: look up our uid in the password * file and map it straight to a name. */ p = getpwuid(uid); if (!p) return NULL; ret = p->pw_name; } endpwent(); return dupstr(ret);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -