struct dirent *readdir(DIR *dp) {/*{{{*/ char *_tmp; size_t reclen; if (!dp || dp->finished) return NULL; if (dp->offset != 0) { if (FindNextFileW(dp->handle, &(dp->fileinfo)) == 0) { dp->finished = 1; return NULL; } } _tmp = php_win32_cp_conv_w_to_any(dp->fileinfo.cFileName, PHP_WIN32_CP_IGNORE_LEN, &reclen); if (!_tmp) { /* wide to utf8 failed, should never happen. */ return NULL; } memmove(dp->dent.d_name, _tmp, reclen + 1); free(_tmp); dp->dent.d_reclen = (unsigned short)reclen; dp->offset++; dp->dent.d_ino = 1; dp->dent.d_off = dp->offset; return &(dp->dent); }/*}}}*/
/* * Returns the current ps_buffer value into string. On some platforms * the string will not be null-terminated, so return the effective * length into *displen. * The return code indicates the error. */ int get_ps_title(int *displen, const char** string) { int rc = is_ps_title_available(); if (rc != PS_TITLE_SUCCESS) return rc; #ifdef PS_USE_WIN32 { wchar_t ps_buffer_w[MAX_PATH]; char *tmp; if (!(ps_buffer_cur_len = GetConsoleTitleW(ps_buffer_w, (DWORD)sizeof(ps_buffer_w)))) { return PS_TITLE_WINDOWS_ERROR; } tmp = php_win32_cp_conv_w_to_any(ps_buffer_w, PHP_WIN32_CP_IGNORE_LEN, &ps_buffer_cur_len); if (!tmp) { return PS_TITLE_WINDOWS_ERROR; } ps_buffer_cur_len = ps_buffer_cur_len > sizeof(ps_buffer)-1 ? sizeof(ps_buffer)-1 : ps_buffer_cur_len; memmove(ps_buffer, tmp, ps_buffer_size); ps_buffer[ps_buffer_cur_len] = '\0'; free(tmp); } #endif *displen = (int)ps_buffer_cur_len; *string = ps_buffer; return PS_TITLE_SUCCESS; }
PHP_WINUTIL_API char *php_win32_get_username(void) { wchar_t unamew[UNLEN + 1]; size_t uname_len; char *uname; DWORD unsize = UNLEN; GetUserNameW(unamew, &unsize); uname = php_win32_cp_conv_w_to_any(unamew, unsize - 1, &uname_len); if (!uname) { return NULL; } /* Ensure the length doesn't overflow. */ if (uname_len > UNLEN) { uname[uname_len] = '\0'; } return uname; }
int readdir_r(DIR *dp, struct dirent *entry, struct dirent **result) { char *_tmp; size_t reclen; if (!dp || dp->finished) { *result = NULL; return 0; } if (dp->offset != 0) { if (FindNextFileW(dp->handle, &(dp->fileinfo)) == 0) { dp->finished = 1; *result = NULL; return 0; } } _tmp = php_win32_cp_conv_w_to_any(dp->fileinfo.cFileName, PHP_WIN32_CP_IGNORE_LEN, &reclen); if (!_tmp) { /* wide to utf8 failed, should never happen. */ result = NULL; return 0; } if (dp->dent.d_name) free(dp->dent.d_name); dp->dent.d_name = _tmp; dp->dent.d_reclen = (unsigned short)reclen; dp->offset++; dp->dent.d_ino = 1; dp->dent.d_off = dp->offset; memcpy(entry, &dp->dent, sizeof(*entry)); *result = &dp->dent; return 0; }