void *malloc(size_t length) { static block *alloc_bottom = NULL; block *akt, *next; block *ltop = sbrk(0); if (alloc_bottom == NULL) alloc_bottom = ltop; length = (length + sizeof(size_t) + BUSY) & ~BUSY; akt = alloc_bottom; for (;;) { if (akt == ltop) { /* end of initialized memory */ next = (block *)&akt->data[length]; if (next < akt || brk(next) == -1) return NULL; break; } dbprintf(("follow [%x] = %x\n",akt, akt->length)); next = (block *)(&akt->data[akt->length & ~BUSY]); if (next == ltop || isbusy(akt)) { akt = next; /* next block */ } else if (isbusy(next)) { size_t size = akt->length; if (size >= length) /* try to split */ { if (size > length) /* split */ { ((block *)&akt->data[length])->length = size - length; } break; } akt = next; /* next block */ } else { /* merge 2 blocks */ akt->length += next->length; } } akt->length = length | BUSY; dbprintf(("set [%x] = %x\n",akt,akt->length)); return &akt->data[sizeof(size_t)]; }
/* getstatus: This function will return status of the hardware in prev_status structure.*/ int get_status(struct prev_status *status) { dev_dbg(prev_dev, "get_status E\n"); if (!status) { dev_err(prev_dev, "get_status:invalid parameter\n"); return -EINVAL; } status->hw_busy = isbusy(); dev_dbg(prev_dev, "get_status L\n"); return 0; }
int SendMessage(int* Data, int Length, Endo_Callback callback) { if ((Length + SpaceUsed()) <= MAXSIZE) { while (Length) { int Check = Enque(*Data); if (Check == -2) { break; } Data++; Length--; } if (Length != 0) { return -2; } else if (Length == 0) { if (!isbusy()) { ApiMakeEmpty(); callback(); return 0; } return 0; } } else { return -2; } return -2; }
int main(int argc, char **argv) { int ch, ret = 0, rflag = 0, argindex, tries; struct passwd *pstruct; struct stat statbuf; #ifndef att FILE *pwf; /* fille ptr for opened passwd file */ #endif char *usertype = NULL; int rc; cmdname = argv[0]; if( geteuid() != 0 ) { errmsg( M_PERM_DENIED ); exit( EX_NO_PERM ); } opterr = 0; /* no print errors from getopt */ usertype = getusertype(argv[0]); while( (ch = getopt(argc, argv, "r")) != EOF ) { switch(ch) { case 'r': rflag++; break; case '?': if (is_role(usertype)) errmsg( M_DRUSAGE ); else errmsg( M_DUSAGE ); exit( EX_SYNTAX ); } } if( optind != argc - 1 ) { if (is_role(usertype)) errmsg( M_DRUSAGE ); else errmsg( M_DUSAGE ); exit( EX_SYNTAX ); } logname = argv[optind]; #ifdef att pstruct = getpwnam(logname); #else /* * Do this with fgetpwent to make sure we are only looking on local * system (since passmgmt only works on local system). */ if ((pwf = fopen("/etc/passwd", "r")) == NULL) { errmsg( M_OOPS, "open", "/etc/passwd"); exit(EX_FAILURE); } while ((pstruct = fgetpwent(pwf)) != NULL) if (strcmp(pstruct->pw_name, logname) == 0) break; fclose(pwf); #endif if (pstruct == NULL) { errmsg( M_EXIST, logname ); exit( EX_NAME_NOT_EXIST ); } if( isbusy(logname) ) { errmsg( M_BUSY, logname, "remove" ); exit( EX_BUSY ); } /* that's it for validations - now do the work */ /* set up arguments to passmgmt in nargv array */ nargv[0] = PASSMGMT; nargv[1] = "-d"; /* delete */ argindex = 2; /* next argument */ /* finally - login name */ nargv[argindex++] = logname; /* set the last to null */ nargv[argindex++] = NULL; /* remove home directory */ if( rflag ) { /* Check Permissions */ if( stat( pstruct->pw_dir, &statbuf ) ) { errmsg(M_OOPS, "find status about home directory", strerror(errno)); exit( EX_HOMEDIR ); } if( check_perm( statbuf, pstruct->pw_uid, pstruct->pw_gid, S_IWOTH|S_IXOTH ) != 0 ) { errmsg( M_NO_PERM, logname, pstruct->pw_dir ); exit( EX_HOMEDIR ); } if( rm_files(pstruct->pw_dir, logname) != EX_SUCCESS ) exit( EX_HOMEDIR ); } /* now call passmgmt */ ret = PEX_FAILED; for( tries = 3; ret != PEX_SUCCESS && tries--; ) { switch( ret = call_passmgmt( nargv ) ) { case PEX_SUCCESS: ret = edit_group( logname, (char *)0, (int **)0, 1 ); if( ret != EX_SUCCESS ) errmsg( M_UPDATE, "deleted" ); break; case PEX_BUSY: break; case PEX_HOSED_FILES: errmsg( M_HOSED_FILES ); exit( EX_INCONSISTENT ); break; case PEX_SYNTAX: case PEX_BADARG: /* should NEVER occur that passmgmt usage is wrong */ if (is_role(usertype)) errmsg( M_DRUSAGE ); else errmsg( M_DUSAGE ); exit( EX_SYNTAX ); break; case PEX_BADUID: /* uid is used - shouldn't happen but print message anyway */ errmsg( M_UID_USED, pstruct->pw_uid ); exit( EX_ID_EXISTS ); break; case PEX_BADNAME: /* invalid loname */ errmsg( M_USED, logname); exit( EX_NAME_EXISTS ); break; default: errmsg( M_UPDATE, "deleted" ); exit( ret ); break; } } if( tries == 0 ) errmsg( M_UPDATE, "deleted" ); /* * Now, remove this user from all project entries */ rc = edit_project(logname, (char *)0, (projid_t **)0, 1); if (rc != EX_SUCCESS) { errmsg(M_UPDATE, "modified"); exit(rc); } exit( ret ); /*NOTREACHED*/ }